Linux0.12-檔案系統-高速緩衝區的管理

來源:互聯網
上載者:User

1.高速緩衝區

位置:核心代碼和主記憶體之間

作用:解決I/O操作與CPU處理之間的速度不匹配

大小:被劃分成與磁碟資料區塊大小相等的緩衝塊

管理方式:hash表(裝置號^邏輯塊號) + 雙向鏈表(所有的buffer_head)

2.高速緩衝的劃分:

3.管理方式:注意,並不是一個散列隊列組成雙向鏈表,而是所有的緩衝塊,順序是最近最少使用(LRU)

4.bread() ----- 從裝置上讀取資料區塊

(1)擷取緩衝區getblk()

(2)判斷緩衝區資料是否有效,

若有效,則返回緩衝區指標。(有效:資料已從裝置讀入到緩衝區,因為程式是非同步執行的)

(3)向塊裝置驅動程式申請,同時讓進程進入睡眠ll_rw_block()(詳見驅動裝置)

(4)睡眠中,直到塊裝置驅動程式把指定的資料放入高速緩衝區後

(5)判斷緩衝區資料是否有效

若有效,則返回緩衝區指標

若無效,則釋放緩衝區,返回null 指標

5.getblk() ----- 擷取空閑緩衝塊

(1)搜尋hash表,判斷指標裝置號和邏輯塊號的緩衝區是 否存在(見管理方式)

若存在:go to step 12(已經得到了所需要的緩衝塊)

(2)搜尋空閑隊列

若未找到空閑塊,go to step 1

(3)等待空閑塊解鎖

(4)若空閑塊又被佔用,go to step 1

(5)若該塊已被修改過,則

將資料寫入裝置

進入睡眠等待資料寫完

(6)若塊又被佔用,go to step 1

(7)若該塊被加入高速緩衝區,go to step 1(被別的裝置搶先佔用)

(8)(走到這裡說明已經可以佔有這個緩衝塊了)修改緩衝塊標誌

(9)從hash表和雙向表中移出

(10)佔用該塊,修改塊號和裝置號

(11)根據(10)重新插入hash表,插入雙向表的末尾(LRU)

(12)返回緩衝塊頭指標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.