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

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

黄舟
發布: 2016-12-23 14:08:03
原創
1445 人瀏覽過

3、 使用者空間指令透過ioctl呼叫table_load函數,該函數根據使用者空間傳來的參數建構指定mapped device的映射表和所對應的target device。函數先建構對應的dm_table、dm_target結構,再呼叫dm-table.c中的dm_table_add_target函數根據使用者傳入的參數初始化這些結構,並且根據參數所指定的target類型,呼叫對應的target類型的建構函數ctr在記憶體中建構target device對應的結構,然後再根據所建立的dm_target結構更新dm_table中維護的B樹。上述過程完畢後,再將建立好的dm_table加入mapped device的全域hash表對應的hash_cell結構中。

4、 最後透過ioctl呼叫do_resume函數建立mapped device與映射表之間的綁定關係,事實上該過程就是透過dm_swap_table函數將目前dm_table結構指標值賦予mapped_device對應的map域中,然後再修改mapped_device表示當前狀態的域。

透過上述的4個主要步驟,device mapper在核心中就建立一個可以提供給使用者使用的mapped device邏輯塊裝置。

IO流

Device mapper本質功能就是根據映射關係和target driver描述的IO處理規則,將IO請求從邏輯設備mapped device轉發對應的target device上。 Device mapper處理所有從核心中區塊一級IO子系統的generic_make_request和submit_bio接口,定向到mapped device的所有區塊讀寫IO請求。 IO請求在device mapper的裝置樹中透過請求轉送從上到下地進行處理。當一個bio請求在設備樹中的mapped deivce向下層轉送時,一個或多個bio的克隆被建立並傳送給下層target device。然後相同的過程在設備樹的每一個層次上重複,只要設備樹夠大理論上這種轉送過程可以無限進行下去。在裝置樹上某個層次中,target driver結束某個bio請求後,將表示結束該bio請求的事件上報給它上層的mapped device,該過程在各個層次上進行直到該事件最終上傳到根mapped device的為止,然後device mapper結束根mapped device上原始bio請求,結束整個IO請求過程。

Bio在device mapper的設備樹進行逐層的轉發時,最終轉發到一個或多個葉子target節點終止。因為一個bio請求不可以跨多個target device(亦即物理空間段), 因此在每一個層次上,device mapper根據用戶預先告知的mapped device 的target映射信息克隆一個或者多個bio,將bio進行拆分後轉發到對應的target device上。這些克隆的bio先交給mapped device上對應的target driver上進行處理,根據target driver中定義的IO處理規則進行IO請求的過濾等處理,然後再提交給target device完成。上述過程在dm.c檔案中的dm_request函數中完成。 Target driver可以對這些bio做如下處理:

1、 將這些bio在本驅動內部排隊等待以後進行處理;

2、 將bio重新定向到一個或多個target device上或每個target device上的不同扇區;

3、 向device mapper回傳error 狀態。

IO請求就按照上文中描述的過程在圖2中所示的設備樹中逐層進行處理,直到IO請求結束。

小結

Device mapper在核心中向外提供了一個從邏輯設備到實體設備的映射架構,只要用戶在用戶空間制定好映射策略,按照自己的需要編寫處理具體IO請求的target driver插件,就可以很方便的實作一個類似LVM的邏輯磁碟區管理器。 Device mapper以ioctl的方式向外提供接口,使用者透過使用者空間的device mapper庫,向device mapper的字元設備發送ioctl指令,完成向內的通訊。它也透過ioctl提供嚮往的事件通知機制,讓target driver將IO相關的某些事件傳送到使用者空間。

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


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