linux對塊裝置的請求處理

2021-08-23 13:18:11 字數 582 閱讀 6240

linux對塊裝置請求的處理是一種層次體系結構,可以分為5層:

1.vfs:這層對所有檔案系統的一種封裝

這個操作分為2步:

a.首先確定包含檔案的檔案系統的block size,然後計算請求的資料報含多少file block。

b.呼叫跟檔案系統有關的函式來訪問檔案的inode,確定請求的資料在磁碟上的邏輯塊位址,事實上

磁碟被看成由乙個乙個的block組成,所以kernel需要確定請求資料的起始塊號

這層跟下層的區別在於這層看不到sector結構,只看到block結構

3.generic block layer:

這層有個核心的資料結構bio,它代表一次i/o操作,讀取連續的磁碟扇區,如果請求的資料不是連續的,那麼

需要傳送多個bio結構,也就是多次i/o操作。這層將block轉到對應的sector。

4.i/o scheduler layer:

這層負責將i/o操作進行排序,採用某種演算法來高效地處理操作,下面的部落格i/o scheduler將進行詳細闡述

5.block device driver:

這層實現真正的資料傳輸,通過傳送命令給磁碟控制器

USB裝置 URB請求塊

1 urb 結構體 usb 請求塊 usb request block,urb 是usb 裝置驅動中用來描述與usb 裝置通訊所用的基本載體和核心資料結構,非常類似於網路裝置驅動中的sk buff 結構體。structurb 2 urb 處理流程 usb 裝置中的每個端點都處理乙個urb 佇列,在佇...

linux的塊裝置層

ll rw block 是塊裝置驅動層,向上提供按block讀寫塊裝置到某個記憶體位址的 是以page為目標單位 方法 bread 是塊裝置緩衝層,磁碟上的block用頁快取 先從這個快取裡找,找不到再呼叫ll rw block 讀進來 各個檔案系統,要向vfs層提供read inode 這樣的介面...

Linux塊裝置驅動

塊裝置提供塊裝置提供裝置的訪問,裝置的訪問,可以隨機的以固定大小的塊傳輸資料,例如我們最為常見的磁碟裝置,當然塊裝置和字元裝置有較大差別,塊裝置有自己的驅動介面。簡單來說,核心決定乙個塊是固定的4096 位元組,當然該值可以隨著依賴檔案系統的變化而改變。塊裝置驅動採用register blkdev向...