一、塊裝置的操作的處理體繫結構
1.VFS(虛擬檔案系統)
VFS位於塊裝置的處理體繫結構的上層,提供一個通用的檔案模型。VFS和塊裝置的關係見Linux2.6裝置管理
系統調用的服務常式調用一個合適的VFS函數,將檔案描述符和檔案內的位移量傳遞給它。
2.磁碟快取
VFS函數確定所請求的資料是否已經存在磁碟快取中,若存在,就沒有必須訪問磁碟上的資料了。
3.映射層(塊裝置檔案系統)
(1)把檔案拆分成大小相同的塊,每一個塊都有一個邏輯號
(2)訪問檔案的磁碟節點,根據每一塊的邏輯塊號,確定這塊資料的在磁碟上的位置
4.通用塊層
(1)核心利用通用塊層啟動I/O操作來傳送所請求的資料。
每個I/O操作只針對一組連續的塊,由一個bio結構描述
由於所請求的資料不一定在相鄰的塊中,所以可能啟動多次I/O操作
(2)gendisk是一個由通用塊層處理的邏輯塊裝置。
通常一個gendisk對應一個硬體塊裝置,如硬碟、磁碟片、光碟片。
gendisk也可以是一個虛擬設備,建立在幾個磁碟分割之上
不管理gendisk是什麼,藉助於通用塊層提供的服務,可以以同樣的方式工作在所有的gendisk上。
(3)向通用塊層提交一個I/O請求的通用操作
分配一個新的bio描述符,並初始化
擷取與gendisk相關的塊裝置驅動程式的請求隊列q
將bio插入q隊列
5.I/O發送器層
(1)當核心組件要讀寫一些磁碟資料時,建立一個塊裝置請求。請求中描述所請求的扇區和操作類型
(2)通過I/O調度策略(見(4)),把物理介質上相鄰的資料請求聚在一起,減少不必須的尋道時間,提高效率
當請求傳送一個新的資料區塊時,核心檢查能否通過稍微擴充前一個處於等待狀態的請求而滿足要求
(3)每個塊裝置驅動程式都維持著自己的請求隊列,對每個隊列上單獨執行I/O調度,可以提高磁碟的效能。
(4)I/O調度策略
預期演算法:是期限演算法的演變,期限演算法中讀的優先順序較高,而預期演算法寫的優先順序更高
期限演算法:電梯策略可能會對某個請求忽略很長一段時間,期限演算法保證這些請求得到滿足
完全公平隊列演算法CFQ:確保在觸發I/O請求的所有進程中公平分配磁碟的I/O頻寬,通常把同一進程的請求放插入同一隊列
Noop演算法:沒有排序隊列,簡單的FIFO後LIFO
電梯演算法:優先處理與上一個所處理的請求最近的要求
6.塊裝置驅動程式
驅動程式向磁碟控制卡發送適當的命令,進行實際的資料轉送。
一個驅動程式可能處理幾個塊裝置
每個塊裝置驅動程式都維持著自己的請求隊列
7.硬體裝置
二、資料管理的基本單位
1.扇區
扇區是硬體裝置傳送資料的基本單位。
扇區大小是512KB
2.塊
塊是VFS檔案系統、映射層傳送和儲存資料的基本單位。檔案和磁碟都被看作拆分成幾個塊。
塊的大小必須是2的冪,不超過一個頁框,是扇區大小的整數倍
塊的大小不是唯一的,比如:512、1024、2048、4096
同一個磁碟上的幾個分區可能使用不同大小的塊
3.段
段是塊裝置驅動程式傳輸資料的單位
一個段是一個記憶體頁或記憶體頁的一部分,它包含磁碟上相鄰的扇區
4.頁
硬體快取作用於磁碟資料上的頁,每頁正好裝在一個頁框中
5.扇區、塊、段、頁
| 扇區 |
512B |
硬體傳送資料的基本單位 |
| 塊 |
大小是2的冪 不超過一個頁框 是扇區的整數倍 |
VFS、檔案系統、映射層的傳送和儲存資料的基本單位 |
| 段 |
幾個相鄰的扇區 |
驅動程式處理資料的基本單位 |