MD中的bitmap(3) Bitmap初始化

2021-05-01 19:37:10 字數 1482 閱讀 7331

bitmap_create

完成bitmap

的初始化,該函式在磁陣啟動時或者使用者設定

bitmap

檔案時被呼叫,主要完成

bitmap

從磁碟到記憶體的載入:

1.前面說過,

bitmap

檔案在磁碟上可能有兩個位置,分別以檔案指標或者與超級塊之間的偏移來指定。

2.讀入超級塊,注意

bitmap

是以小尾格式存在磁碟上的。在讀入過程中,判斷

bitmap

是否過期(超級塊的

event和md

的event

是否相同),並根據判斷設定

bitmap

過期狀態。

3.計算出

bitmap

在磁碟上的點陣圖大小(以頁為單位),並根據這個大小申請

bp陣列。

4.如果

bitmap

未過期而且磁陣完好,可以從

md當前的同步位置開始讀入

bitmap

,而之前的由於已經同步完成,在

bitmap

中加以忽略。

5.呼叫

bitmap_init_from_disk

從磁碟中讀入

bitmap

,該函式完成如下功能:

a)申請

filemap

空間,大小和

bitmap

磁碟資料相同,用於儲存從磁碟中讀取的資訊

b)申請

filemap_attr

空間,每4個

bit對應

bitmap

磁碟檔案的一頁

c)bitmap

磁碟檔案的每

bit,對應磁陣中的一段資料塊,對於

bitmap

每一位,執行下面操作:

i.找到該

bit對應磁碟檔案所在頁,以及頁中的偏移量

ii.如果該

bit是新的頁,則讀入該頁;如果

bitmap

過期,則設定該頁的所有位(如果是第一頁,當然要跳過超級塊),並回寫到磁碟上

iii.

如果該bit為1

,則設定其對應的

bitmap

記憶體結構,具體是設定其

need

位,表明磁陣對應資料段需要同步。設定所在頁有需要清除

bit的標誌(

bitmap_page_clean

),這個標誌我們後面講到

d)讀入完成後,清除

bitmap

的過期標誌

e)如果

bitmap

有位被設定,說明此時有同步的需要,則設定需要同步標誌,喚醒守護程序

6. 根據

bitmap

資訊設定守護程序的喚醒間隔時間。寫入

bitmap

的超級塊。因為可能是此時

bitmap

記錄的事件等需要更新。

MD中的bitmap 開篇

從csdn上得到很多資料,貢獻不多,很慚愧。由於工作關係,近期學習一些linux 軟體raid相關的 網上找到一些相關的介紹內容,對於bitmap機制介紹得較少,正好看到這塊,在共享精神感召下,咱不揣淺薄,也把自己的一些學習情況記錄下來,希望大家多多指正。在raid1 raid5 等存在資料冗餘的磁...

MD中的bitmap(4) Bitmap的設定

bitmap 在磁陣處理寫訪問請求時,呼叫 bitmap startwrite 設定bitmap 記憶體的資訊,包括記憶體中的 bitmap 結構,以及記憶體中 bitmap 磁碟檔案的對映 filemap 在磁陣實際將寫請求實際提交給子裝置前,呼叫 bitmap unplug 將bitmap 資訊...

Redis中bitmap的妙用

在redis中我們經常用到set,get等命令,細心的你有沒有發現,還有幾個相似的命令叫setbit,getbit,它們是用來幹嘛的?就是通過乙個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。我們知道8個bit可以組成乙個byte,所以bitmap本身會極大的節省儲存空間。r...