首頁 > php教程 > PHP开发 > 主體

Linux系統核心中的Device Mapper機制 (1)(2)

黄舟
發布: 2016-12-23 14:06:54
原創
1479 人瀏覽過

我們進一步看一下上述三個物件在程式碼中的具體實現,dm.c 檔案定義的mapped_device 結構用於表示mapped device,它主要包括該mapped device 相關的鎖,註冊的請求佇列和一些記憶體池以及指向它所對應映射表的指標等域。 Mapped device 對應的映射表是由 dm_table.c 檔案中定義的 dm_table 結構表示的,該結構中包含一個 dm_target結構數組,dm_target 結構具體描述了 mapped_device 到它某個 target device 的映射關係。而在 dm_table 結構中將這些 dm_target 依照 B 樹的方式組織起來方便 IO 請求映射時的查找操作。 Dm_target 結構會具體記錄該結構對應 target device 所對應的 mapped device 邏輯區域的開始位址和範圍,同時也包含指向特定 target device 相關操作的 target_type 結構的指標。 Target_type 結構主要包含了 target device 對應的 target driver 插件的名字、定義的建構和刪除該類型target device的方法、該類別target device對應的IO請求重新映射和結束IO的方法等。而表示具體的target device的域是dm_target中的private域,該指標指向mapped device所對應的具體target device對應的結構。表示target device的具體結構由於不同的target 類型而不同,例如最簡單的線性映射target類型對應target device的結構是dm-linear.c檔案中定義的linear_c結構。其定義如下:

struct linear_c {

 struct dm_dev *dev;

 sector_t start;

};
登入後複製

該target device的定義相當簡單,就只包含了表示對應實體裝置的dm_dev結構指標和在該實體裝置中以磁區為單位的偏移位址start。上述幾個資料結構關係如圖3所示:

Linux系統核心中的Device Mapper機制 (1)(2)

圖3 device mapper中幾個重要資料結構的關係

核心中建立過程

在下面我們結合具體的程式碼簡要介紹下在內核中建立mapped device的過程:

1、 根據核心提供給用戶空間的ioctl 介面傳來的參數,用dm-ioctl.c檔案中的dev_create函數建立對應的mapped device結構。這個過程很簡單,主要是向內核申請必要的記憶體資源,包括mapped device和為進行IO操作預申請的記憶體池,透過核心提供的blk_queue_make_request函數註冊該mapped device對應的請求佇列dm_request。並將該mapped device作為磁碟區塊裝置註冊到核心中。

2、 呼叫dm_hash_insert將建立好的mapped device插入到device mapper中的一個全域hash表中,該表中保存了核心中目前建立的所有mapped device。

 以上就是Linux系統核心中的Device Mapper機制 (1)(2)的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!