iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 30
1
自我挑戰組

作業系統概論系列 第 30

DAY 30 Implementing File System(檔案執行系統) (下)

昨天介紹了把block分配給檔案的各種方法,今天會把此章節做一個完美的結束!
現在就來介紹空出來的空間會做怎樣的管理吧!

Free-Space Management

  • 如果需要使用block的話,就要找到空出來的,可是一個個探尋是否可以使用的話實在很沒有效率,因此利用此方法使得快速找到可用的block。
  • Bit vector = n block。設置一組bit[i],如果bit[i]=0的話,也就是說這個block目前無人使用。但若是bit[i]=1的話,代表這個block已經被分配給其他的檔案使用了。
  • 計算block數量也有一組公式可以使用:(number of bits per word) * (number of 0-value words) + (offset of first 1 bit)。
  • 使用bit vector方法雖然快速,可是會以需要大量空間的問題,所以也是需要看檔案本身的空間是否能容納得下。
  • 可以簡單的得到連續的檔案。使用linked list的方法,只是無法簡單的得到連續性的空間使用,卻也不會造成空間的浪費。
  • 可以做前面談過的Grouping跟Counting的管理。
  • 因為硬碟空間是給所有的程式使用,所以需要進行「protect」,避免遭受惡意攻擊或不當使用。
  1. Bit map:
    ==>必須要在硬碟中。
    ==>儲存在記憶體中跟硬碟中的話,會造成一份資料有不同的內容,進而導致錯誤結果影響程式進行。
  • 如果要解決Bit map的問題的話,可以設置bit[i]=1在硬碟中,再分配block[i]且加入固定順序,依序操作讓bit[i]=1也儲存在記憶體中,便能解決問題。

Directory Implementation

  • 這一章節我們在前面已有說明過,在此就不再多說,進行下一段~

現在改來說說如何有效率的執行吧!!

Efficiency and Performance

  • 影響效率的原因有哪些:
  1. 硬碟分配演算法跟目錄演算法皆有影響。
  2. 什麼樣的data種類進入並留在檔案目錄中也會造成影響。
  • 如何增加效能:
  1. disk cache:將常用的block分區分入主要記憶體中。
  2. free-behind and read-ahead:前者把不用的block給清除,讓出空間給其他使用,但前提是資源要足夠。
    後者為能預先知道下一個要的data是哪些,並提前提高優先權,使得要使用時可以快速得到,但雖有預先知道的困難性,可已是目前的趨勢之一。
  3. 把部分的記憶體分段當作virtual disk或RAM disk使用。

Page Cache

  • 把快取的page放在virtual memory中使用,而非disk block,避免有page fault的產生。
  • Memory-mapped I/O使用page cache將資料放入記憶體中。
  • 一般I/O(Routine I/O)則透過檔案系統使用buffer(disk) cache。
  • 以下為非使用統一buffer cache的示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181114/20112086P0RMMB6adi.png
    ==>圖中的page cache是一定在記憶體中,可buffer cache卻可以在buffer或記憶體中,所以造成了兩種路徑,效率也就跟著不好,才創造了Unified Buffer Cache的方法,以下接著介紹。
  • 以下為統一使用buffer cache的示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181114/20112086ZAmQpfs7qK.png
    ==>圖中發現少了page cache的節點,因此可以加快效率。

現在我們來到了最後一小節,關於檔案恢復的問題,一起來看看吧!!

Recovery

  • 檔案在開啟或執行的時候多少會造成損壞,因此就要進行「recovery」的動作。
  • 一開始先找到損壞檔案的位置在哪,接著進行一致性的檢查,倘若目錄結構中的data跟硬碟上的data已所不同,便進行修補的動作。接著再使用system program將data從硬碟中備份到另一個儲存裝置中,有需要時就可以從備份裡還原data來恢復丟失的文件或硬碟資料。

檔案系統執行章節就介紹到此為止,而今天也是我參加鐵人賽的最後一天,在這三十天中靠著自己的力量學習有關作業系統的大小觀念,其中當然有遇到挫折且有過放棄的念頭,但好險我有一群很好的朋友一起加油、一起努力,才支撐著我完成這項比賽,也謝謝各位點閱我的文章讓我真的很有成就感,覺得說原來我也有能力幫助到想了解作業系統的各位,而這項比賽也會是我在大學生活中的難忘回憶。


上一篇
DAY 29 Implementing File System(檔案執行系統) (中)
系列文
作業系統概論30

尚未有邦友留言

立即登入留言