iT邦幫忙

DAY 3
4

檔案系統的設計與效能系列 第 3

檔案系統的設計與效能 - 檔案系統的構成

  • 分享至 

  • xImage
  •  

我們目前已經知道的是,檔案是以block的型式儲存在媒體中的。以硬碟為例,硬碟是隨機存取的,所以一個檔案所包含的眾多blocks也會是隨意的存放在磁碟上。這裡就衍伸出設計檔案系統最基本的問題了,檔案如何追蹤錯落在磁碟中的block? 我們從這個問題出發,來看看幾種建構計檔案系統的基本方法。
我們目前已經知道的是,檔案是以block的型式儲存在媒體中的。以硬碟為例,硬碟是隨機存取的,所以一個檔案所包含的眾多blocks也會是隨意的存放在磁碟上。這裡就衍伸出設計檔案系統最基本的問題了,檔案如何追蹤錯落在磁碟中的block? 我們從這個問題出發,來看看幾種建構計檔案系統的基本方法。

如何讓作業系統能夠持續的追蹤磁碟中的block,不管檔案如何的被存取或更動,都不致破壞檔案,是檔案系統最基本的工作。如何維護這些blocks,確保他們跟檔案的隸屬關係? 最簡單的方式就是連續存放(Continuous Allocation)嘍。每當檔案建立時,就依序的存放blocks,直到檔案結束。這樣的概念很簡單,但是幾乎不可行。因為如果有想個檔案的 blocks緊鄰在一起,前面的檔案想要需要新增block時就沒有空間可以"連續"存放了。就算採用預留空間的做法,也會因此產生很多無法再利用的片段 (fragment),如此是很沒有效率的。

要解決Continuous Allocation所帶來的困境,我們可以用鏈結(Linked List Allocation)的方法來解決,就是每一個block都帶有一個指標,指向這個檔案所屬的下一個block。這樣就可以動態的串聯 block,而不需連續的空間,也沒有fragmentation的問題了。但是由於Link是存在於block間,所以如果某一個block的指標毀損了,後面剩下的部分就在也找不到了。為了改善Linked List的這個問題,我們可以在實作上將所有檔案的linked list做成一個表格,而表格中的內容就是記載著檔案的下一個block在哪裡,並且將這整個表格存在記憶體中以加快查詢速度。這就是使用在DOS作業系統中FAT(File Allocation Table)的概念了。

相較於DOS與早期的Windows作業系統使用FAT(FAT 16/32),UNIX/Linux採用的是i-node(Index Node)的概念。i-node的作用是用來記錄檔案的所有屬性,包括檔案大小、使用者與群組的ID、存取的模式、修改的時間等等,以及最重要的 block的位址。i-node的大小與數量在format時就決定了,如果檔案佔用的block較多,一個i-node無法記錄完,可以在引用另一個 i-node來記錄,不夠的話再引用,以此類推。這樣層層的關係建立起來,會長得像是一個tree的結構,進一步的細節等我們在討論Ext2/3 file-system時在一併說明。


上一篇
檔案系統的設計與效能 - 為甚麼要有檔案系統
下一篇
檔案系統的設計與效能 - 磁碟系統的運作
系列文
檔案系統的設計與效能32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言