搜尋
首頁php教程PHP开发Linux系統核心中的Device Mapper機制 (1)(2)

我們進一步看一下上述三個物件在程式碼中的具體實現,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中文網(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)