Linux-塊設備-數據結構

對於各種塊設備,內核使用了一張塊設備表blk_dev[]來進行管理。每種塊設備都在塊設備表中佔據一項。

塊設備表中每個塊設備項的數據結構爲:

    // 塊設備處理結構。

 struct blk_dev_struct {

         void (*request_fn)(void);                     // 請求處理函數指針。

         struct request * current_request;             // 當前處理的請求結構。

  }


    // 下面是請求隊列中項的結構。其中如果字段dev = -1,則表示隊列中該項沒有被使用。

    // 字段cmd可取常量 READ0)或 WRITE1)(定義在include/linux/fs.h中)。

    // 其中,內核並沒有用到waiting指針,起而代之地內核使用了緩衝塊的等待隊列。因爲

    // 等待一個緩衝塊與等待請求項完成是對等的。

 struct request {

         intdev;                      /* -1 if no request */ // 發請求的設備號。

         intcmd;                      /* READ or WRITE */ // READWRITE命令。

         int errors;                    //操作時產生的錯誤次數。

        unsigned long sector;          // 起始扇區。(1=2扇區)

         unsigned long nr_sectors;       // /寫扇區數。

         char * buffer;                 // 數據緩衝區。

         struct task_struct * waiting;  // 任務等待請求完成操作的地方(隊列)。

         struct buffer_head * bh;       // 緩衝區頭指針(include/linux/fs.h,68)

         struct request * next;         // 指向下一請求項。

  };



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章