OS / Linux / Select 调用流程
Linux下select調(diào)用的過程:
1、用戶層應(yīng)用程序調(diào)用 select(),底層調(diào)用 poll() 。
2、核心層調(diào)用 sys_select() ------> do_select() 。
最終調(diào)用文件描述符 fd 對應(yīng)的 struct file 類型變量的 struct file_operations *f_op 的 poll 函數(shù)。
poll 指向的函數(shù)返回當(dāng)前可否讀寫的信息。
1)如果當(dāng)前可讀寫,返回讀寫信息。
2)如果當(dāng)前不可讀寫,則阻塞進(jìn)程,并等待驅(qū)動程序喚醒,重新調(diào)用 poll 函數(shù),或超時返回。
3、驅(qū)動需要實現(xiàn) poll 函數(shù)。
當(dāng)驅(qū)動發(fā)現(xiàn)有數(shù)據(jù)可以讀寫時,通知核心層,核心層重新調(diào)用 poll 指向的函數(shù)查詢信息。
poll_wait( filp, &wait_q, wait)? // 此處將當(dāng)前進(jìn)程加入到等待隊列中,但并不阻塞
在中斷中使用 wake_up_interruptible(&wait_q) 喚醒等待隊列。
?
轉(zhuǎn)載于:https://blog.csdn.net/weixiuc/article/details/3173486
?
(SAW:Game Over!)
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的OS / Linux / Select 调用流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OS / Linux / Inode 详
- 下一篇: OS / Linux / 系统阻塞在系统