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

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

Dec 23, 2016 pm 02:06 PM

我們進一步看一下上述三個物件在程式碼中的具體實現,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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode上一步下一步快捷鍵 vscode上一步下一步快捷鍵 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

See all articles