塊設備管理

塊設備指設備將數據按可定址的塊為單位進行輸入/輸出,一次I/O操作固定大小的數據塊,通過緩衝區來讀寫塊設備,允許隨機訪問。這種方式適用於傳送大量的信息,常見的塊設備有磁碟、光碟驅動器等。

Linux用一個名為blkdevs的數組來描述系統中登記的塊設備,數組blkdevs使用設備的主設備號作為索引,其類型是device_struct結構,其中包括指向已登記的設備驅動程式名的指針和指向block_device_operations結構的指針,block_device_operations中包含指向有關操作的函式指針。
與設備不同的是,塊設備分為SCSI類和IDE類。每類設備都向Linux核心登記並向核心提供檔案操作。核心中設定了一個blk_dev結構數組,該數組存放blk_dev_struct結構的元素,該結構由三部分組成,其主體是指向操作的請求佇列request_queue和一個函式指針 queue,當這個指針不為0時,就調用這個函式來找到具體設備的請求佇列;為0時,使用該結構中的另一個指針 data,來提供輔助性信息,幫助該函式找到制定設備的請求佇列,每個請求數據結構都代表一個來自緩衝區的請求。當緩衝區要和一個登記過的塊設備交換數據,其會在blk_dev_strut 中添加一個數據結構,如圖所示。
塊設備驅動程式結構示意圖塊設備驅動程式結構示意圖
塊設備驅動程式和字元驅動程式的主要區別是:在對字元設備發出讀、寫請求時,實際的硬體I/O 一般緊接著就發生了,塊設備則不然,其利用一塊系統記憶體作為緩衝區,當用戶進程對設備請求能滿足用戶的要求時,就返回請求的數據;如果不能滿足就調用請求函式來進行實際的I/O操作。塊設備主要是針對磁碟等慢速設備的,以免耗費過多的CPU時間來等待。

相關詞條

熱門詞條

聯絡我們