在讀取io操作的情況下,爲ext3文件系統調用do_generic_file_read函數。如果inode的頁面緩存不包含需要讀取數據的頁面,則調用文件系統特定的讀頁面地址空間函數指針。在ext3文件系統的情況下,ext3_readpage()函數被調用,然後調用通用的do_mpage_readpage()函數。 do_mpage_readpage()函數創建一個bio,通過submit_bio()函數從設備獲取數據,然後控件返回到do_generic_file_read()函數。然而,在do_generic_file_read()中,執行的下一條指令是檢查bio提交的頁面是否是最新的。在這個流程中,內核在哪裏等待生物操作完成並更新頁面?在inode的緩存中找不到頁面時,do_generic_file_read()函數在哪裏睡眠?
1
A
回答
0
do_mpage_readpage函數創建生物結構以從磁盤塊獲取數據並將其提交給io。
do_mpage_readpage
..
mpage_bio_submit(READ, bio)
..
當生物被提交後,控制返回到do_generic_file_read()函數,然後lock_page_killable()函數被調用它等待頁面的UPTODATE位。
do_generic_file_read()
...
if (!PageUptodate(page)) {
error = lock_page_killable(page); <<<<<<<< it sleeps here
...
一旦IO從裝置完成,mpage_end_io()被調用作爲返回處理程序。(正如我們所填充生物> bi_end_io = mpage_end_io同時提交IO)。在讀取的情況下,這將標記生物作爲Uptodate發送到的頁面,並調用unlock_page()函數。這個函數喚醒正在等待頁面啓動的控件。
mpage_end_io
...
unlock_page(page); <<< this wakes up the waiting do_generic_file_read
...
相關問題
- 1. 我在哪裏可以在Web服務器上找到緩存的asp.net頁面?
- 2. 找不到睡眠功能
- 3. 備忘python函數的緩存在哪裏存在?
- 4. 睡眠()函數不工作
- 5. 緩存在哪裏保存?
- 6. 在哪裏可以找到WSS中的站點輸出緩存?
- 7. SDWebImage的緩存在哪裏?
- 8. DataContractSerializer的緩存在哪裏?
- 9. 睡眠()函數在C中不正確計時
- 10. 睡在睡眠中的NSTimer
- 11. 我的inode在哪裏被使用?
- 12. 我在哪裏可以找到在magento中查看html頁面?
- 13. iOS緩存在哪裏?
- 14. 如何在紅寶石中找到睡眠線程的時間?
- 15. ko.pureComputed - 清除緩存的睡眠值
- 16. 哪裏可以找到函數是否存在?
- 17. Magento 1.6在哪裏存儲CMS頁面?
- 18. WordPress在哪裏存儲HTML頁面?
- 19. IIS錯誤頁面存儲在哪裏?
- 20. C#在哪裏緩存大數據表
- 21. ObjectDataSource緩存數據在哪裏?
- 22. 睡眠函數錯誤在C
- 23. MVC查看查找緩存。緩存多久?它在哪裏緩存?
- 24. 找不到符號睡眠(INT)printen(INT)
- 25. 我在哪裏可以找到:1)緩存命中和2)SQL Server中的緩存查找統計信息
- 26. 刷新與inode相關聯的頁面緩存
- 27. Settings.settings在哪裏存儲?在app.config中找不到它?
- 28. 我在哪裏可以找到request_irq函數中的IRQ號碼?
- 29. 睡眠函數Visual Basic
- 30. 錯誤頁面在哪裏?