來個FAT表嘗嘗。
FAT表
從前面的文章里,可以推算FAT表的地址是0x1B4000。
- 它是一個表就會有表項,從這個地址開始,每32位是一個表項,所以下圖中有12個表項
- 除了前兩個表項,一個表項對應一個簇的使用情況
- 0號和1號表項是一些文件系統(tǒng)相關信息,并不對應任何簇,所以就可以解釋為什么有效簇號要從2開始,就是因為0、1表項被用作它用了,2號表項才開始對應簇
- 表項(除0、1)里的值正常情況下有3種,分別是文件的中間簇、文件的結尾簇、空閑簇。是的,不存在開頭簇,因為和中間簇是一樣的,下文體會。
FAT表機制
下面通過完全讀取一個文件來理解FAT表的原理。根據(jù)前面的文章,我們可以找到文件內容的第一個簇。
這時有兩種情況
- 文件內容大小不足一個簇,那么這個簇,即是第一個簇,又是最后一個簇,這個簇對應的FAT表項值就是
FF FF FF 0F - 文件內容大小占用若干個簇,那么這個簇僅僅是第一個簇,后面的內容在哪些簇還不知道
這種情況下,FAT表的機制就要起作用了。
舉例
假設把一個大文件按簇大小切成N塊,分別存儲到簇號為Cn(n=1,2...N)的簇中,則其內容和FAT表如下
| 文件內容塊編號 | 1 | 2 | ... | N-1 | N |
|---|---|---|---|---|---|
| 存儲簇號 | C1 | C2 | ... | CN-1 | CN |
| FAT表內容 | C2 | C3 | ... | CN | FF FF FF 0F |
因此,讀取一個文件的過程可以是這樣的
- 簇號為起始簇
- 找到簇,讀出內容
- 查看當前簇的FAT表項的值
如果不是文件的結尾簇,就令簇號為表項值,走到過程2
如果是文件的結尾簇,文件讀取完畢
