高速緩沖
概念
高速緩沖區是記憶體中的一塊記憶體,在塊設備與內核其它程式之間起著一個橋梁作用,內核程式如果需要訪問塊設備中的資料,都需要經過高速緩沖區來間接的操作,
高速緩沖區結構
高速緩沖區被劃分為1k大小的緩沖塊,與磁盤塊大小一致,高速緩沖區主要包含兩部分內容,緩沖塊頭結構(buffer_head,bh)及其對應的緩沖塊,緩沖塊用于快取磁盤資料,并且具有一個緩沖塊頭結構;緩沖塊頭結構保存對應緩沖塊的元資料,高速緩沖采用hash表和包含所有緩沖塊的鏈表進行操作管理,
緩沖塊頭結構用于建立記憶體緩沖塊和磁盤被緩沖資料塊之間的映射關系,并記錄一些訪問狀態、管理屬性,緩沖塊頭結構具有指向緩沖塊的指標,并記錄有被緩沖磁盤塊的資訊,包括磁盤塊所屬設備號,磁盤塊號等,從而建立起映射關系,
- 高速緩沖區結構

- buffer_head資訊

緩沖塊管理
空閑緩沖塊
使用雙向鏈表串聯空閑緩沖塊頭結構,使用b_prev_free和b_next_free指標域,

已分配緩沖塊
為支持對緩沖區的高速訪問,使用hash表管理已分配緩沖塊,根據被緩沖磁盤塊所在設備號和邏輯塊號,分配的緩沖塊被哈希到哈希表中,哈希函式為:(設備號^邏輯塊號)Mod 307,使用拉鏈發處理hash沖突,具有相同哈希值的緩沖塊被組織為雙向鏈表,使用b_pre、b_next指標域

緩沖塊的訪問
當用戶程式讀檔案時會發生什么?
1)read函式讀檔案時,底層進一步呼叫bread函式讀設備的磁盤塊資料,
2)bread呼叫getblk函式獲取緩沖塊,若緩沖塊資料有效,則直接回傳緩沖塊頭指標;否則呼叫塊設備低層塊讀寫函式ll_rw_block()讀寫資料到緩沖塊中,并等待在該緩沖區上,
喚醒:設備完成讀寫后,會發出中斷,中斷處理程式會喚醒等待在緩沖塊上的行程
- 內核程式塊設備訪問操作

- 緩沖區管理函式之間的層次關系
- bread、breada、bread_page:用于讀磁盤塊,使用方式略有區別
- getblk:獲取緩沖塊,可能是之前便已分配的緩沖塊,存在有效資料;回傳的塊也可能是新分配的緩沖塊,需要進一步呼叫ll_rw_block函式讀寫磁盤塊資料,
- get_hash_table_find_buffer等:在hash表和雙向鏈表中查找、分配緩沖塊,
- brelse:釋放緩沖塊

總結
- 高速緩沖區用于解決CPU速度和磁盤讀寫速度不匹配的問題,可提高磁盤訪問效率
- 空閑緩沖區管理:高速緩沖區像記憶體和磁盤一樣,被劃分為固定的塊,使用緩沖塊頭結構(類似inode節點)記錄緩沖塊元資料,使用雙向鏈表管理空閑資料庫,
- 分配緩沖區管理:高速緩沖區使用hash表+雙向鏈表管理已分配的緩沖塊,
- 等待佇列:需要從磁盤加載磁盤塊資料到緩沖塊時,行程將睡眠在緩沖塊等待佇列上,
- 喚醒機制:磁盤設備完成讀資料后,向CPU發出中斷,中斷處理程式負責喚醒緩沖區等待佇列上的行程,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/452799.html
標籤:其他
上一篇:安裝clearos系統
下一篇:Rabbitmq安裝與部署
