1. 程式人生 > 其它 >【作業系統】【讀書筆記】區域性性和快速檔案系統

【作業系統】【讀書筆記】區域性性和快速檔案系統

老檔案系統的問題

  • 老檔案系統:簡單的superblock + inode區 + data區

  • 問題:效能不佳

    • 定位問題:老檔案系統將磁碟當作隨機存取記憶體,從而導致讀取一個檔案時可能會跨越很遠的磁碟距離(比如讀完檔案的inode後需要讀取data),花費大量時間尋道

    • 檔案系統會變得非常碎片化(因為沒有管理空閒空間)

      如下面的例子,訪問E檔案時,由於E2和E3不連續,故需要尋道

       

       

    • 原始塊太小(512B),導致資料傳輸低效

  • 解決思路

    • 如何儘量減少讀寫檔案時的磁頭移動?(如何儘量把檔案存在一個連續的地方?)

    • 如何管理空閒記憶體?

    • 原始塊多大比較好?(太小的話雖然碎片問題會減少,但是會造成大量定位開銷;太大的話會浪費)

    • 解決的關鍵:磁碟意識(不要把磁碟想象成隨機儲存介質!磁碟就是磁碟)

  • 下面介紹FFS系統(快速檔案系統)的改進思路

組織結構:柱面組

  • 柱面組:FFS將磁碟劃分為一些分組,稱為柱面組,通常在一個柱面上

    • 每個組中都有超級塊(出於可靠性考慮)、ib、db、inode區、data區

    • 點陣圖可以很方便地找到一大塊連續的記憶體空間,可以避免某些碎片問題

  • 如何分配檔案和目錄

    • 原理:相關的東西放一起(因為相關的東西通常會一起讀寫,故放在一起可以減少磁頭移動)

    • 目錄的放置:找到分配數量少的柱面組,放過去(跨組平衡目錄)

    • 檔案:inode和data放在一個組中,並且將同一目錄下的所有檔案放在同一個柱面組中

      • 原因:同一目錄下的檔案通常一起訪問,比如make的過程

    • 大檔案:例外!因為大檔案可能太大了放不下,同時大檔案放在一個柱面組裡可能會影響別的檔案的放置

      • 解決方法1:大檔案分成多個大塊,每個大塊放在不同的組中

        • 大塊的大小要足夠大,使得大部分時間仍然放在磁碟的資料傳輸上,而不是尋道上

      • FFS的做法:inode中的直接索引指向的直接塊和inode一起放在一個組中,間接塊和間接塊指向的所有塊放在單獨的組中

其他問題

  • 內部碎片問題:4KB的塊很大,如果檔案特別小則會造成很大的浪費

    • 解決方法:引入子塊,子塊只有512B,如果檔案很小,則為其分配子塊儲存;如果檔案大小超過4K,再將子塊複製到一個完整的4K中並且釋放子塊

    • 引入子塊的問題:拷貝操作效率低下

      • 解決方法:子塊設定在緩衝中,以4K塊的形式傳送到檔案系統進行儲存

  • 磁碟佈局問題:如果塊號按照順序排列,那麼讀取完一個塊以後,磁頭可能已經移到了下一個塊後面的位置,從而錯過下一個塊

    • 解決辦法:優化磁碟佈局,跳著排

       

       

  • 硬連結問題:不能指向目錄(防止引入迴圈)

    • FFS的解決:引入符號連結的概念,相當於為其他檔案創造“別名”