版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、緩沖區(qū)的作用形成所有塊設(shè)備數(shù)據(jù)的統(tǒng)一集散地,操作系統(tǒng)的設(shè)計(jì)更方便、更靈活對(duì)塊設(shè)備的文件操作運(yùn)行效率更高:使進(jìn)程內(nèi)存空間與塊設(shè)備交換數(shù)據(jù)的速度更快緩沖區(qū)數(shù)據(jù)共享不同進(jìn)程間共享緩沖區(qū)中的數(shù)據(jù)。同一進(jìn)程在不同時(shí)間多次共享緩沖區(qū)中的同一個(gè)數(shù)據(jù)。兩種模式的組合緩沖區(qū)設(shè)計(jì)要想通過緩沖區(qū)的設(shè)計(jì)提高操作系統(tǒng)讀寫文件的整體效率,就應(yīng)該盡可能多地共享緩沖區(qū)中的數(shù)據(jù)盡可能多地共享緩沖區(qū)中的數(shù)據(jù)。最有效、最直接的方法就是讓緩沖區(qū)中的數(shù)據(jù)在緩沖區(qū)讓緩沖區(qū)中的數(shù)據(jù)在緩沖區(qū)中停留的時(shí)間盡可能長。中停留的時(shí)間盡可能長??梢哉f,緩沖區(qū)的所有的代碼都是圍繞著如何保證數(shù)據(jù)如何保證數(shù)據(jù)交互的正確性交互的正確性、如何讓數(shù)據(jù)在緩沖區(qū)中停
2、留的時(shí)間盡如何讓數(shù)據(jù)在緩沖區(qū)中停留的時(shí)間盡可能長可能長來設(shè)計(jì)的。緩沖區(qū)的總體結(jié)構(gòu)緩沖區(qū)、buffer_head、request的格局圖進(jìn)程緩沖區(qū)塊設(shè)備Buffer_headrequest緩沖區(qū)的總體結(jié)構(gòu)其中Buffer_head:負(fù)責(zé)進(jìn)程與緩沖區(qū)中的緩沖塊的數(shù)據(jù)交互。在確保數(shù)據(jù)交互正確的前提下,讓數(shù)據(jù)在緩沖區(qū)中停留的時(shí)間盡可能長。Request:負(fù)責(zé)緩沖區(qū)中的數(shù)據(jù)與塊設(shè)備之間的數(shù)據(jù)交互。在保證數(shù)據(jù)交互正確的前提下,盡可能及時(shí)地將進(jìn)程修改過的緩沖區(qū)中的數(shù)據(jù)同步到塊設(shè)備上。Buffer_head的數(shù)據(jù)結(jié)構(gòu)/include/linux/fs.hStruct buffer_head Char * b_
3、data;Unsigned long b_blocknr;Unsigned short b_dev;Unsigned char b_uptodate;Unsigned char b_dirt;Unsigned char b_count;Unsigned char b_lock;Struct task_struct * b_wait;Struct buffer_head * b_prev;Struct buffer_head * b_next;Struct buffer_head * b_prev_free;Struct buffer_head * b_next_free;Buffer_head
4、的設(shè)計(jì)進(jìn)程與緩沖塊數(shù)據(jù)交換的正確性內(nèi)核通過buffer_head結(jié)構(gòu)中的b_dev和b_blocknr兩個(gè)字段,把緩沖塊和硬盤數(shù)據(jù)塊的關(guān)系綁定。這樣就保證了硬盤塊與緩沖塊關(guān)系的唯一性,進(jìn)程、緩沖塊的數(shù)據(jù)交互與進(jìn)程、硬盤數(shù)據(jù)塊的數(shù)據(jù)交互等價(jià),確保不會(huì)出現(xiàn)混亂。讓數(shù)據(jù)在緩沖區(qū)中停留的時(shí)間盡可能長內(nèi)核中沒有任何機(jī)制、也沒有任何代碼能夠?qū)⒁呀?jīng)建立了綁定關(guān)系的緩沖塊、硬盤數(shù)據(jù)塊,刻意地、主動(dòng)地解除綁定關(guān)系。只有在迫不得已的情況下,才被新建立的綁定關(guān)系強(qiáng)行替換。Buffer_head的設(shè)計(jì)B_uptodate和b_dirt是為了解決緩沖塊和數(shù)據(jù)塊的數(shù)據(jù)正確性問題而存在的。B_uptodate:針對(duì)進(jìn)程方向
5、只要緩沖塊的b_uptodate字段被設(shè)置為1,就是告訴內(nèi)核,緩沖塊中的數(shù)據(jù)已經(jīng)是數(shù)據(jù)塊中最新的,可以放心的支持進(jìn)程共享緩沖塊的數(shù)據(jù)。反之如果b_uptodate為0,就是提醒內(nèi)核緩沖塊并沒有用綁定的數(shù)據(jù)塊中的數(shù)據(jù)更新,不支持進(jìn)程共享該數(shù)據(jù)塊。Buffer_head的設(shè)計(jì)B_uptodate和b_dirt是為了解決緩沖塊和數(shù)據(jù)塊的數(shù)據(jù)正確性問題而存在的。B_dirt:針對(duì)硬盤方向只要緩沖塊的b_dirt字段被設(shè)置為1,就是告訴內(nèi)核,這個(gè)緩沖塊中的數(shù)據(jù)已經(jīng)被進(jìn)程方向的數(shù)據(jù)改寫了,最終需要同步到硬盤上。反之如果b_dirt為0,則不需要同步。Buffer_head的設(shè)計(jì)B_count:標(biāo)示每個(gè)緩沖
6、塊有多少進(jìn)程在共享。B_lock:=1時(shí),說明緩沖塊正在與硬盤進(jìn)行數(shù)據(jù)交互,此時(shí)內(nèi)核應(yīng)該攔截進(jìn)程對(duì)該緩沖塊的操作。交互結(jié)束后,再把該字段設(shè)置為0,以此解除對(duì)進(jìn)程方面的攔截。* b_wait:記錄因等待緩沖塊的解鎖而被掛起的進(jìn)程。request的數(shù)據(jù)結(jié)構(gòu)/kernel/blk_drv/blk.hStruct request Int dev;Int cmd;Int error;Unsigned long sector;Unsigned long nr_sector;Char * buffer;Struct task_struct * waiting;Struct buffer_head * bh;
7、Struct request * next;request的設(shè)計(jì)Request的設(shè)計(jì)思路和緩沖區(qū)正好相反,它的目的是盡可能快的讓緩沖塊和硬盤交換數(shù)據(jù)。緩沖塊與硬盤塊數(shù)據(jù)交換的正確性Request結(jié)構(gòu)中也有類似b_dev和b_blocknr的字段,是設(shè)備號(hào)dev和硬盤塊的首扇區(qū)號(hào)sector。讓數(shù)據(jù)在緩沖塊和硬盤塊中盡快交互無論是讀盤還是寫盤的中斷服務(wù)程序,在執(zhí)行完一次緩沖塊和數(shù)據(jù)塊的交互后,都調(diào)用end_request()和do_hd_request(),形成處理請(qǐng)求項(xiàng)的循環(huán)機(jī)制。如果當(dāng)前即隊(duì)列中還有請(qǐng)求項(xiàng)對(duì)應(yīng)的緩沖塊需要交互,就繼續(xù)下達(dá)交互命令,直到把請(qǐng)求項(xiàng)中所有的任務(wù)都執(zhí)行完才返回。request的設(shè)計(jì)Cmd:確定緩沖塊與硬盤之間是讀交互還是寫交互。* bh和* buffer:確定與硬盤進(jìn)行交互的是哪個(gè)緩沖塊。Sector和nr_sector:實(shí)現(xiàn)數(shù)據(jù)塊與扇區(qū)的映射規(guī)則。Error:記錄出錯(cuò)的次數(shù)。復(fù)用dev:因?yàn)榫彌_塊與硬盤數(shù)據(jù)塊一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度沙場(chǎng)資源整合與承包經(jīng)營全面合作協(xié)議9篇
- 2025年全球及中國Icynene 噴涂泡沫安裝服務(wù)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球放射性標(biāo)記化合物的定制合成行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球氮?dú)怆娂訜崞餍袠I(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國設(shè)備智能運(yùn)維平臺(tái)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國預(yù)膠化速溶淀粉行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 二零二五年度電梯安裝與智能化系統(tǒng)集成勞務(wù)分包協(xié)議3篇
- 二零二五版ROHS標(biāo)準(zhǔn)實(shí)施指導(dǎo)與保證協(xié)議3篇
- 2022-2027年中國高速公路養(yǎng)護(hù)行業(yè)市場(chǎng)深度分析及投資規(guī)劃建議報(bào)告
- 2025年度旅行社紅色旅游線路承包協(xié)議3篇
- 小學(xué)二年級(jí)100以內(nèi)進(jìn)退位加減法800道題
- 2025年1月普通高等學(xué)校招生全國統(tǒng)一考試適應(yīng)性測(cè)試(八省聯(lián)考)語文試題
- 《立式輥磨機(jī)用陶瓷金屬復(fù)合磨輥輥套及磨盤襯板》編制說明
- 保險(xiǎn)公司2025年工作總結(jié)與2025年工作計(jì)劃
- 育肥牛購銷合同范例
- 暨南大學(xué)珠海校區(qū)財(cái)務(wù)辦招考財(cái)務(wù)工作人員管理單位遴選500模擬題附帶答案詳解
- DB51-T 2944-2022 四川省社會(huì)組織建設(shè)治理規(guī)范
- 2024北京初三(上)期末英語匯編:材料作文
- 市委組織部副部長任職表態(tài)發(fā)言
- HXD1D客運(yùn)電力機(jī)車轉(zhuǎn)向架培訓(xùn)教材
- 超星爾雅學(xué)習(xí)通【西方文論原典導(dǎo)讀(吉林大學(xué))】章節(jié)測(cè)試附答案
評(píng)論
0/150
提交評(píng)論