淺嘗輒止71-后備設(shè)備

后備設(shè)備

中文的叫法可能大家不太一樣,英文是backing device,我們可以按字面理解為備用設(shè)備,更準(zhǔn)確地說是備用存儲(chǔ)設(shè)備。“備”是為什么而準(zhǔn)備的,主要是斷電,也就是說,切斷電源后,依舊能存儲(chǔ),因此它們都是非易失性存儲(chǔ)設(shè)備。
對(duì)于后備設(shè)備,有一套管理信息,即bdi(backing device information),主要代碼在kernel/mm/backing-dev.c,關(guān)于文件系統(tǒng)我們先關(guān)注一個(gè)問題,即我們一般調(diào)用write時(shí),只是寫到了內(nèi)存里,真正寫到磁盤里是誰干的?這件事就與bdi的相關(guān)代碼有關(guān)。

寫回函數(shù)

寫回,即寫回去?!盎亍痹趺蠢斫饽??有來才有回,“來”是什么?

write的過程中,操作系統(tǒng)首先要分配一些內(nèi)存,這些內(nèi)存與要寫入的磁盤區(qū)域?qū)?yīng),即這些內(nèi)存就代表了磁盤,對(duì)應(yīng)磁盤區(qū)域的內(nèi)容會(huì)讀取到內(nèi)存中,這個(gè)讀就是“來”。

當(dāng)我們寫入內(nèi)存后,內(nèi)存的內(nèi)容就與磁盤上不一樣了。那就得找個(gè)機(jī)會(huì),把內(nèi)存中被改變的部分寫到磁盤里,這就是“回”。

所謂“回”,就是從內(nèi)存視角來看的,數(shù)據(jù)從磁盤到內(nèi)存就是“來”,從內(nèi)存到磁盤就是“回”了。

揭曉答案

在掛載時(shí),系統(tǒng)中就會(huì)維護(hù)一個(gè)對(duì)應(yīng)這個(gè)塊設(shè)備的bdi,它的初始化會(huì)調(diào)用到bdi_wb_init,它里面有這么一句

INIT_DELAYED_WORK(&wb->dwork, bdi_writeback_workfn);

意思是,初始化一個(gè)工作隊(duì)列,可以簡單理解為建立一個(gè)進(jìn)程或線程,它執(zhí)行的是bdi_writeback_workfn這個(gè)函數(shù),這就是我說的寫回函數(shù)了。這個(gè)函數(shù)結(jié)尾處有這么一段

    if (!list_empty(&bdi->work_list))
        mod_delayed_work(bdi_wq, &wb->dwork, 0);
    else if (wb_has_dirty_io(wb) && dirty_writeback_interval)
        bdi_wakeup_thread_delayed(bdi);

作用就是,隔一段固定時(shí)間后,再次調(diào)用這個(gè)函數(shù)。
這個(gè)函數(shù)前部分就是真正寫回磁盤的動(dòng)作,也就是說,系統(tǒng)通過bdi,實(shí)現(xiàn)了定時(shí)寫回磁盤的事務(wù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,626評(píng)論 1 32
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,292評(píng)論 0 5
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,284評(píng)論 2 89
  • 硬盤物理結(jié)構(gòu) 硬盤內(nèi)部主要部件為磁盤盤片、傳動(dòng)手臂、讀寫磁頭和主軸馬達(dá)。實(shí)際數(shù)據(jù)都是寫在盤片上,讀寫主要是通過傳動(dòng)...
    灘主閱讀 3,861評(píng)論 0 5
  • 打卡日期:2018年/8月/11日 打卡累計(jì)天數(shù):1/30 #宣言:父母的高度是孩子的起點(diǎn)# 孩子第一個(gè)30天目標(biāo)...
    夜空中最亮的星晶瑩閱讀 1,001評(píng)論 0 1

友情鏈接更多精彩內(nèi)容