中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux的I/O子系統知識點有哪些

發布時間:2022-01-10 16:58:40 來源:億速云 閱讀:122 作者:iii 欄目:云計算

這篇“Linux的I/O子系統知識點有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Linux的I/O子系統知識點有哪些”文章吧。

I/O write 

Linux的I/O子系統知識點有哪些

I/O read:

 read系統調用的處理分為用戶空間和內核空間處理兩部分。其中,用戶空間處理只是通過0x80中斷陷入內核,接著調用其中斷服務例程,即sys_read以進入內核處理流程。

對于read系統調用在內核的處理,如上圖所述,經過了VFS、具體文件系統,如ext2、頁高速緩沖存層、通用塊層、IO調度層、設備驅動層、和設備層。其中,VFS主要是用來屏蔽下層具體文件系統操作的差異,對上提供一個統一接口,正是因為有了這個層次,所以可以把設備抽象成文件。具體文件系統,則定義了自己的塊大小、操作集合等。引入cache層的目的,是為了提高IO效率。它緩存了磁盤上的部分數據,當請求到達時,如果在cache中存在該數據且是最新的,則直接將其傳遞給用戶程序,免除了對底層磁盤的操作。通用塊層的主要工作是,接收上層發出的磁盤請求,并最終發出IO請求(BIO)。IO調度層則試圖根據設置好的調度算法對通用塊層的bio請求合并和排序,回調驅動層提供的請求處理函數,以處理具體的IO請求。驅動層的驅動程序對應具體的物理設備,它從上層取出IO請求,并根據該IO請求中指定的信息,通過向具體塊設備的設備控制器發送命令的方式,來操縱設備傳輸數據。設備層都是具體的物理設備。

Linux的I/O子系統知識點有哪些

VFS層:

內核函數sys_read是read系統調用在該層的入口點。

它根據文件fd指定的索引,從當前進程描述符中取出相應的file對象,并調用vfs_read執行文件讀取操作。

vfs_read會調用與具體文件相關的read函數執行讀取操作,file->f_op.read。

然后,VFS將控制權交給了ext2文件系統。(ext2在此作為示例,進行解析)

Ext2文件系統層的處理

通過ext2_file_operations結構知道,上述函數最終會調用到do_sync_read函數,它是系統通用的讀取函數。所以說,do_sync_read才是ext2層的真實入口。

該層入口函數 do_sync_read 調用函數 generic_file_aio_read ,后者判斷本次讀請求的訪問方式,如果是直接 io (filp->f_flags 被設置了 O_DIRECT 標志,即不經過 cache)的方式,則調用 generic_file_direct_IO 函數;如果是 page cache 的方式,則調用 do_generic_file_read 函數。它會判斷該頁是否在頁高速緩存,如果是,直接將數據拷貝到用戶空間。如果不在,則調用page_cache_sync_readahead函數執行預讀(檢查是否可以預讀),它會調用mpage_readpages。如果仍然未能命中(可能不允許預讀或者其它原因),則直接跳轉readpage,執行mpage_readpage,從磁盤讀取數據。

在mpage_readpages(一次讀多個頁)中,它會將連續的磁盤塊放入同一個BIO,并延緩BIO的提交,直到出現不連續的塊,則直接提交BIO,再繼續處理,以構造另外的BIO。

文件的 page cache 結構

圖5顯示了一個文件的 page cache 結構。文件被分割為一個個以 page 大小為單元的數據塊,這些數據塊(頁)被組織成一個多叉樹(稱為 radix 樹)。樹中所有葉子節點為一個個頁幀結構(struct page),表示了用于緩存該文件的每一個頁。在葉子層最左端的第一個頁保存著該文件的前4096個字節(如果頁的大小為4096字節),接下來的頁保存著文件第二個4096個字節,依次類推。樹中的所有中間節點為組織節點,指示某一地址上的數據所在的頁。此樹的層次可以從0層到6層,所支持的文件大小從0字節到16 T 個字節。樹的根節點指針可以從和文件相關的 address_space 對象(該對象保存在和文件關聯的 inode 對象中)中取得。

Linux的I/O子系統知識點有哪些

mpage處理機制就是page cache層要處理的問題。

通用塊層

在緩存層處理末尾,執行mpage_submit_bio之后,會調用generic_make_request函數。這是通用塊層的入口函數。

它將bio傳送到IO調度層進行處理。

IO調度層

對bio進行合并、排序,以提高IO效率。然后,調用設備驅動層的回調函數,request_fn,轉到設備驅動層處理。

設備驅動層

request函數對請求隊列中每個bio進行分別處理,根據bio中的信息向磁盤控制器發送命令。處理完成后,調用完成函數end_bio以通知上層完成。

塊設備驅動

Linux的I/O子系統知識點有哪些

以上就是關于“Linux的I/O子系統知識點有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富宁县| 堆龙德庆县| 阳谷县| 肃宁县| 城口县| 玛纳斯县| 北海市| 中阳县| 长沙县| 科技| 敦煌市| 蚌埠市| 芜湖县| 肥东县| 阜南县| 五寨县| 兴安盟| 新平| 离岛区| 中西区| 水城县| 望城县| 凤阳县| 嘉鱼县| 宝鸡市| 沧州市| 东山县| 萍乡市| 石门县| 孝感市| 衡东县| 鄢陵县| 临洮县| 赤水市| 那曲县| 高淳县| 凯里市| 建阳市| 青州市| 甘德县| 客服|