Ch 18 軟碟片

軟碟片從 Apple II 開始推出來至今,約 20 個年頭了,雖已是漸露疲態,但是在小檔案交換的情形下,仍是最為方便的工具。Apple II 的時代,小木偶未能恭逢其時,不太了解其所使用的軟碟片。IBM PC 及其相容電腦所使用的軟碟片依直徑大小分為兩種,五又四分之一英吋及三又二分之一英吋。前者雖然有較大的面積,但是儲存資料反而比較小。五又四分之一英吋的軟碟片有 160、180、320、360、1200 KB 五種容量,而三又二分之一英吋的軟碟片有 720、1440KB 兩種容量,但是現在幾乎看不到五又四分之一英吋的軟碟片,而三又二分之一英吋的軟碟片最常用的是將它格式化 ( format ) 成 1440KB,也就是 1.44MB 容量大小。這一章堙A小木偶只談 1.44MB 的三又二分之一英吋的軟碟片,不過其他格式的軟碟也可依相同的原理推導出來。

軟碟片構造

不管那一種軟碟片,都是由一個塑膠圓盤為基底,其上塗上鐵的氧化物為磁性材料,這磁性物質可以藉由 N 或 S 極來儲存資料,外面再套上保護塑膠,就形成軟碟片。有些軟碟片有兩面塗上磁性物質,而有些只有一面塗上磁性物質,於是造成容量相差一倍,不過現在大概也買不到只有一面可用的軟碟片了。由於磁片上的每一面都只有一個磁頭來讀寫,所以許多軟體或書本也稱磁片的一面為磁頭 (head )。

在塗上磁性物質的那一面,我們可以把想像上面有許多許多的同心圓,稱之為磁軌 ( track 亦稱 cylinder )。每個磁軌又再分成數個區域,稱之為磁區 ( sector ),而我們所儲存的資料就存在這磁區堙A不管那一種磁片,每個磁區都可存放 512 個位元組。以 1.44MB 磁片來說,它有兩面,每一面有 80 個磁軌,每一磁軌有 18 個磁區,所以總共可以存放 2*80*18*512 = 1474560 個位元組。

用位元組為單位計算磁片容量,顯然會使得數字太大而不方便,所以我們另外定義了兩個單位 KB 與 MB,中文可譯為千位元組與百萬位元組,換算方式如下:

1KB = 1024 位元組
1MB = 1024KB = 1048576 位元組

因此這個三又二分之一英吋的軟碟片共有 1474560/1048576 = 1.44 MB。小木偶把 1984 年到現在最常見的四種磁片整理如下表:

3.5 英吋
1.44MB
5.25 英吋
1.2MB
5.25 英吋
360KB
5.25 英吋
320KB
容量(位元組)1474560 1228800368640 327680
磁頭數2 22 2
每面磁軌數80 8040 40
每磁軌之磁區數18 159 8
每磁區位元組數512 512512 512

一片磁片在實體上,分為面 ( 磁頭 )、磁軌、磁區。以 3.5 英吋 1.44MB 的磁片來說,共有兩面,第 0 面與第 1 面 ( 或者您說第 0 磁頭與第 1 磁頭也行 ),而每面又分成 80 個磁軌,其編號由第 0 磁軌到第 79 磁軌,每一磁軌再分成 18 個磁區,其編號由第 1 磁區到第 18 磁區。( 此處很奇怪,一般電腦上的編號幾乎都由零開始,只有物理磁區的編號由一開始。)

邏輯磁區

以上所說的磁頭、磁軌、磁區都是物理實體上的定義,但是在 DOS 的服務程式堶n讀取或寫入一些資料時,卻不是依照磁頭、磁軌、磁區的方式指定特定磁區,而是以某一種編排方式指定磁區。以 1.44MB 磁片為例,在 DOS 的眼堙A把第 0 面、第 0 軌、第 1 磁區看成是第 0 號磁區,第 0 面、第 0 軌、第 2 磁區看成是第 1 號磁區,第 0 面、第 0 軌、第 3 磁區看成是第 2 號磁區,第 0 面、第 0 軌、第 4 磁區看成是第 3 號磁區……第 0 面、第 0 軌、第 18 磁區看成是第 17 號磁區。接下來卻不是第 0 面、第 1 軌、第 1 磁區為第 18 磁區,而是第 1 面、第 0 軌、第 1 磁區看成是第 18 號磁區,為何這樣呢?主要原因是考慮磁頭在不同磁軌間移動速率較慢,而軟碟機上下各有一個磁頭不須移動磁頭,所以先把同一軌的磁區用完再移動到下一磁軌可大幅提高效率。接下來第 1 面、第 0 軌、第 2 磁區看成是第 19 號磁區,第 1 面、第 0 軌、第 3 磁區看成是第 20 號磁區……第 1 面、第 0 軌、第 18 磁區看成是第 35 號磁區。接下來便是第 0 面、第 1 軌、第 1 磁區看成是第 36 號磁區,如此一直到第 1 面、第 79 軌、第 18 磁區看成是第 2879 號磁區,像這些白色的磁區編號是連續性的,由 0 號開始到 2879 號,稱之為『邏輯磁區』。在 DOS 服務程式中要讀取或寫入都是以邏輯磁區的方式指定特定磁區,而 DOS 會自動幫我們算出在第幾面、第幾軌、第幾磁區。有關邏輯磁區的編排方式,如下圖:

3.5英吋磁片之邏輯磁區分配圖

BOOT 磁區 (啟動磁區)

這個磁區是軟碟片上的第零個邏輯磁區,在這個磁區堨]含了許多這個軟碟的資訊以及一小段啟動程式。在這個磁區一開始是一個跳躍指令,跳到啟動程式之處執行,而在跳躍指令之後的 8 個位元組是格式化這片軟碟的廠商名稱,接下來就是被稱為 BPB 的一塊區域,小木偶把重要的資料整理成下表:

位址範圍 大小
(位元組)
所代表意義
00-023 跳躍指令
03-0A8 廠商軟體名
0B-0C2 每一磁區的位元組數
0D1 每一磁叢所佔磁區數
0E-0F2 FAT 前磁區數,即 BOOT 所佔磁區數
101 FAT 個數
11-122 根目錄容量
13-142 邏輯磁區總數,若為零則存於 20-23
151 軟碟片種類
16-172 每個 FAT 所佔磁區數
18-192 每一磁軌之磁區數
1A-1B2 磁頭數
1C-1F4 隱藏磁區數
20-234 超過 32MB 硬碟的邏輯磁區總數

讓小木偶用 DENUG 載入一片剛格式化,完全沒有存放檔案的 1.44MB 磁片觀察看看:


C:\WINDOWS>DEBUG [Enter]
-L 100 0 0 1 [Enter]
-D 100 L20 [Enter]
1B83:0100  EB 34 90 2A 3C 68 58 73-49 48 43 00 02 01 01 00   .4.*<hXsIHC.....
1B83:0110  02 E0 00 40 0B F0 09 00-12 00 02 00 00 00 00 00   ...@............

DEBUG 的 L 指令可用來載入邏輯磁區,100 表示載入位址,第一個零表示 A: 磁碟機,第二個零表示要載入的邏輯磁區編號,最後一個數表示由要載入的邏輯磁區數。

小木偶用紅色標出來的分別代表每一磁區的位元組數、邏輯磁區總數、每一磁軌的磁區數、磁頭數,邏輯磁區總數乘以每一磁區的位元組數得到的就是這張磁片的容量。您可以想像第 0BH 位元組到 23H 位元組所提供的資料表示了這個磁片的重要參數,這些資料稱之為 BPB (BIOS parameter block)。當 DOS 要將磁頭、磁軌、磁區轉換成邏輯磁區編號或是程式設計師撰寫程式時,都得利用這一區的參數。

磁叢

雖然 DOS 可以每次只讀寫一個磁區的資料,但是當 DOS 要寫入一個新建的檔案時,是以磁叢 (cluster) 的方式寫入,也就是 DOS 為新檔案配置磁片空間,是用磁叢為單位。一個磁叢是由數個連續的邏輯磁區組成,其大小是隨著磁碟容量以及 DOS 版本不同而變。

為什麼要有磁叢呢?而不直接用邏輯磁區就好了,這樣不是簡單又方便嗎?原因是因為如果要寫入一個很大的檔案,假如用磁區為配置方式,那磁區數就要很大,並且可能散布在零散的空間,假如用磁叢來配置單位的話,則磁叢數目可能會減少 (在 3.5 英吋軟碟上為一半),所以散亂的程度將減少,又由於磁叢是連續的磁區,所以讀取時能加快速度。(註一)

DOS 既然是以磁叢為配置檔案的單位,所以您的檔案不管大小如何,必定要佔據『整數』個磁叢的空間。以 1.44MB 軟碟片為例,每個磁叢是一個磁區 ( 可由 BPB 得知 ),假如您的檔案只有一個位元組,那也要 512 個位元組。底下是一張剛格式化的 1.44MB 磁片,先看看剩餘空間是 1457664 個位元組。

C:\>dir a: [Enter]

 Volume in drive A has no label
 Directory of A:\

File not found
                        1,457,664 bytes free

C:\>copy con a:t123.txt [Enter]
A^Z →按住 Ctrl 鍵不放,再按 Z 鍵
        1 file(s) copied

C:\>dir a: [Enter]

 Volume in drive A has no label
 Directory of A:\

T123     TXT             1  08-24-02   3:05 T123.TXT
         1 file(s)              1 bytes
         0 dir(s)       1,457,152 bytes free

當我新建一個檔案,T123.TXT,時,它就用去了 512 個位元組 ( 1457664-1457152=512 ),雖然它只有一個位元組。

FAT ( 檔案配置表 )

在啟動磁區之後,緊接著的是記載著某個檔案佔有那幾個磁叢的一塊區域,稱之為檔案配置表 ( FAT,File Allocation Table ),想當然耳,這個 FAT 是很重要的,如果記載不正確,檔案就無法順利存取,所以 DOS 特別將 FAT 設為兩個,並隨時檢查這兩 FAT 是否相同。

FAT 中分成很多欄位,依磁片容量不同每個欄位大小也不同,1.44MB 磁片的每個欄位是 12 位元,也就是 1.5 個位元組,這每個欄位都代表著一個磁叢編號,像這樣每個磁叢在檔案配置表中所佔的編號是 12 個位元的,這種檔案系統稱為 FAT12。12 個位元只能表示 0∼4095 的數值。換句話說,磁叢編號只能從 0 開始到 4095,但實際上扣除幾個特別的編號不用之外,例如損壞的磁區、結束磁區等等,也只能表示 4085 個磁叢編號,要是容量大的硬碟,所含磁叢數多,就無法只用 12 個位元表示。( 註二 )

第零個欄位與第一個欄位共 3 個位元組為系統使用。的第零個欄位是表示這張磁片的種類,如下表:

FF0 1.44MB 3.5英吋
FF8 硬碟
FF9 1.2M 5.25英吋或 720K 3.5英吋
FFD 360K 5.25英吋
FFE 160K 5.25英吋
FFF 320K 5.25英吋

FAT 的第一個欄位保留未使用,一般都是 FFFH。從 FAT 的第二個欄位 (也就是第三個位元組) 開始,其 FAT 欄位的內容就表示檔案所佔用的磁叢編號。此處應注意,1.44MB 磁片,有兩個 FAT,而每個 FAT 佔用 9 個磁區,加上 FAT 前還有一個啟動磁區以及目錄所佔用的 14 個磁區 (稍後說明),所以實際上磁片上是從第 33 個磁區才開始存放資料。換句話說,FAT 的第二個欄位是代表第 33 個磁叢,第三個欄位是代表第 34 個磁叢,第四個欄位是代表第 35 個磁叢……。

而 FAT 欄位堜狾s放的內容可以分成下面幾種情形:

000 表示此欄所對應的磁叢並未使用
FF7 表示此欄所對應的磁叢已損壞,不可使用
FF8-FFF 表示此欄所對應的磁叢為檔案的最後一個磁叢
其他值 表示下一個磁叢標號所對應的 FAT 欄位

底下以幾個例子來說明 FAT 內容與檔案存放磁區的關係。先看看剛格式化而後只建立一個 T123.TXT 的那一張磁片:

C:\WINDOWS>dir a: [Enter]

 Volume in drive A has no label
 Directory of A:\

T123     TXT             1  08-24-02   3:05 T123.TXT
         1 file(s)              1 bytes
         0 dir(s)       1,457,152 bytes free

C:\WINDOWS>debug [Enter]
-l 100 0 1 1 [Enter]
-d 100 L30 [Enter]
1C6C:0100  F0 FF FF FF 0F 00 00 00-00 00 00 00 00 00 00 00   ................
1C6C:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1C6C:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

前幾個位元組是 F0 FF FF FF 0F,當 DOS 解讀這些數字時,要注意兩件事,一是每個欄位的位元組數,以 1.44MB 磁片來說是 1.5 位元組;二是大位數要在高位址。以剛剛那張磁片為例,我們應該把它解讀成像下面這樣:

解讀 FAT 的例子一

圖中上方粉紅色的 byte: 後面接的數字是位元組編號 (位址),最下方的粉紅色的 FAT: 後接的數字表示 FAT 欄位,這兩者都從零開始。

第零個 FAT 的欄位是第零個位元組 (FAT 的兩個較低位址,如上圖左邊的白線所指的兩個數) 以及第一個位元組的低位址 (FAT 的較高位址,如上圖左邊的灰線所指的那一個數),FF0。第一個 FAT 欄位的小位數是第一個位元組的高位址 (藍色線所指),大位數是第二個位元組 (天藍色所指),所以第二個欄位是 FFF。第二個 FAT 欄位是 FFF,是右邊的白色線所指。

FAT的第零、第一個欄位是系統所使用,第二個欄位是 T123.TXT 這個檔案所佔據,而這個檔案只佔一個磁叢,所以這個欄位就是 FFF。將它載入看看吧,照剛剛的講法,T123.TXT 這個檔案應該存放在第 33 個磁區的地方,換成十六進位是 21H。

-l 200 0 21 1 [Enter]
-d 200 L20 [Enter]
1C6C:0200  41 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   A...............
1C6C:0210  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

-q [Enter]

果然就是 T123.TXT 檔的內容。先離開 DEBUG,我們再拷貝一個較大的檔案看看:

C:\WINDOWS>copy content.gif a: [Enter]
        1 file(s) copied

C:\WINDOWS>dir a: [Enter]

 Volume in drive A has no label
 Directory of A:\

T123     TXT             1  08-24-02   3:05 T123.TXT
CONTENT  GIF         1,059  05-05-99  22:22 CONTENT.GIF
         2 file(s)          1,060 bytes
         0 dir(s)       1,455,616 bytes free

C:\WINDOWS>debug [Enter]
-l 100 0 1 1 [Enter]
-d 100 L30 [Enter]
1C6C:0100  F0 FF FF FF 4F 00 05 F0-FF 00 00 00 00 00 00 00   ....O...........
1C6C:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1C6C:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

CONTENT.GIF 檔有 1059 個位元組,因此應該佔有 3 個磁叢,將這些 FAT 欄位解讀如下:

解讀 FAT 的例子二

前兩個黃色的 FAT 欄位值為系統所使用,第二個 FAT 欄位是 T123.TXT 所使用。

CONTENT.GIF 共佔據三個磁叢,應該使用第三、四、五這三個 FAT 欄位。第一個佔據的磁叢是第 34 個磁叢 (見前面),也就是 FAT 的第三個欄位,而這個欄位內容應該指向下一個磁叢編號所對應的 FAT 欄位,也就是第四個欄位,所以第三個欄位內容為 004H。同樣的 CONTENT.GIF 的所佔據的第二個磁叢是第 35 磁叢,下一個磁叢是 36 磁叢 (對應的 FAT 欄位是 005H),所以第 35 磁叢對應的 FAT 欄位 (也就是第四欄位) 之內容為 005H。而第 36 磁叢已經是最後一個磁叢了,所以其內容就是 FFFH。

假如你耐心看完以上說明,並且能瞭解,那小木偶想,您應該能瞭解 FAT 其實是一個檔案串接表,每一個 FAT 欄位都指向下一個 FAT 欄位,而這『下一個』FAT 欄位其實是對應的磁叢編號。現在只剩下一個問題了,檔案的起始 FAT 編號存於何處?答案在檔案描述區塊。

根目錄與檔案描述區塊 ( FDB )

根目錄是緊接著 FAT 後面的一塊區域,在啟動磁區的第 11∼12H 位址堸O載著根目錄容量,這個容量指的是根目錄內最多可以放多少個檔案的資料。以 3.5 英吋 1.44MB 磁片來說,最多可以記載00E0H個檔案的資料,也就是說假如超過這個範圍,即使磁片還有空間,也無法再存入資料,除非是存在子目錄內。

那根目錄佔多少個磁區呢?以 1.44MB 3.5 英吋磁片為例,它的根目錄佔有 0E0H 個 FDB,而每個 FDB 有 32 個位元組,因此根目錄所佔的磁區為 32*0E0H/512=14 個磁區。

根目錄的內容是由許多筆資料組成,每一筆資料都記載著根目錄內的檔案名稱、建檔日期、檔案大小……還有該檔案由第幾個磁叢開始的組成,這每一筆資料都是由 32 個位元組構成,它描述了檔案基本資料稱之為檔案描述區塊 ( FDB,file description block ),下表說明這 32 個位元組所代表的意義:

00∼0AH: 這 11 個位元組存放檔名,前面 8 個位元組存放主檔名,後面三個位元組存放副檔名。而主檔名的第零個位元組具有特殊意義,平常是存放檔名的第零個字,但如果檔案遭刪除,則此位置會變成 E5H,而其他資料不變 (包含 FDB 的其他資料如建檔時間、檔案大小……),說明如下:
00H: 未使用的 FDB。當使用者建立新檔案時,DOS 會由第零個 FDB 開始尋找,只要是第零個字是 00 或 E5H 的就會為 DOS 所使用,這樣的好處是使得被使用的 FDB 永遠會在根目錄前面。而 DOS 尋找檔案時也是由前面開始搜尋,當 DOS 看到 FDB 的第零個字為 00 時就知道以後都是未使用的 FDB 不需再搜尋,以節省時間。
05H: 表示這個檔案的第零個自是真的以 0E5H 為開始。
2EH: 表示這個 FDB 是目錄,若只有第零字為『.』,表示為自身目錄,此時 FAT 指位器指向自身磁叢。如前兩字均為『.』表示為父目錄,FAT 指位器指向父目錄的磁叢。
E5H: 表示被刪除的檔案。檔案遭刪除後,DOS 只在 FDB 的第零字以 E5H 標示,同時將前述 FAT 的鏈結變為零,其餘都沒有更動,所以使得反刪除軟體得以實現。
0BH: 檔案屬性,其數值意義如下:
01H: 唯讀檔,若以寫入模式開啟此檔或刪除此檔都會發生錯誤。
02H: 隱藏檔,用 DOS 的 DIR 指令是看不見的,必須加上『/A』參數。
04H: 系統檔,是 DOS 系統使用的檔案,如 MSDOS.SYS、IO.SYS。
08H: 磁碟卷名 ( 或磁碟標籤 ),就是用 DIR 指令看到的『volume label』或 Win 9x/Me 系統中『我的電腦』看到的磁碟機下面的名字。
10H: 目錄名。
20H: 保存檔,只要檔案被建立,此位元就會設為一。此屬性為備份程式,例如 MSBACKUP.EXE,所用,備份程式檢查此屬性為一,表示尚未備份。
事實上這些數值其實是這個位元組的 8 個位元代表開或關的結果,因此檔案可以是系統檔,也可以同時是隱藏檔跟唯讀檔,這樣的話,這個位元組就變成 0000 0111B,也就是 7 了。
0C∼11H: 保留未使用,均為 00H。
12∼13H: DOS 6.x 及其以前的版本保留未使用,均為 00H。但 Win 95 以後,存放上次存取日期,其格式請參考 18∼19H。
14∼15H: FAT12/FAT16 中,此二位元組保留,未使用。但是在 FAT32 系統中,這個字組是磁叢指位器的較高字組,亦即檔案起始磁叢的較高字組,必須與 1A∼1BH 配合使用。
16∼17H: 這兩個位元組代表時間。對檔案而言,是指建立時間或最後修改的時間;對子目錄而言,是指建立的時間。這兩個位元組應連起來看,如下圖:
FDB 時間欄位說明
其中時、分、秒分別佔 5、6、5 個位元,時的部份最多可以顯示 25=32,可顯示 24 小時;分最多有 26=64,也可顯示 60 分;但是秒只有 25=32,無法顯示 60 秒,故在此採用折衷的方法,這 5 個位元所表示的二進位數必須乘以 2,才是真正建檔『秒』數。
18∼19H: 這兩個位元組代表日期。對檔案而言,是指建立日期或最後修改的日期;對子目錄而言,是指建立的日期。這兩個位元組應連起來看,如下圖:
FDB 日期欄位說明
其中年份佔 7 個位元,其表示的二進位數還要加上 1980 才是建檔時的公元年份,27=128,所以可以表示公元 1980 到公元 2108 年,相信到 2108 年,不會有人還再用 DOS。其餘的月和日和前述時間的算法相同,都是以二進位數表示。
1A∼1BH: 磁叢指位器,這一欄存放著檔案的第零個磁叢編號所對應的 FAT 欄位。對 FAT32 而言,這是磁叢編號的低字組,其高字組在 14∼15H 處。
1C∼1FH: 檔案大小,以位元組為單位。若此欄為 FFFFFFFFH 表示檔案大小約為 4G 個位元組,此檔案可說非常大,但在 DOS FAT16 系統下還有其他限制。

小木偶以剛剛的磁片為例說明,1.44MB 3.5英吋的磁片最前面是一個啟動磁區,接著是兩個 FAT,而每個 FAT 佔了 9 個磁區,再接下來才是根目錄,所以根目錄應該由第 13H 個磁區開始:

-l 300 0 13 1 [Enter]
-d 300 [Enter]
1C6C:0300  54 31 32 33 20 20 20 20-54 58 54 20 00 AD C5 13   T123    TXT ....
1C6C:0310  1D 2D 1D 2D 00 00 B9 18-18 2D 02 00 01 00 00 00   .-.-.....-......
1C6C:0320  43 4F 4E 54 45 4E 54 20-47 49 46 20 00 63 E3 13   CONTENT GIF .c..
1C6C:0330  1D 2D 1D 2D 00 00 C0 B2-A5 26 03 00 23 04 00 00   .-.-.....&..#...
1C6C:0340  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1C6C:0350  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1C6C:0360  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
1C6C:0370  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-

以 T123.TXT 來看,由第零到第 0AH 個位元組是檔名,其中主檔名不滿 8 個字,以空白填滿。第 0BH 個位元組是檔案屬性,20H 查表可得是普通檔案。接下來,白色的時間部份, 18 B9 換成二進位是 0001 1000 1011 1001 ,依時間欄位說明,建檔的『時』是 00011B,換成十進位是 3,即凌晨 3 點,分是 000101B,換成十進位是 5,即 5 分,秒是 11001B,換成十進位是 25,再乘以 2 得 50 秒,所以建檔時間是 3 點 5 分 50 秒。

而紅色部份是 FAT 指位器,其值為 0002 表示這個檔案由 FAT 的第二個欄位開始,於是 DOS 就到 FAT 的第二個欄位去找發現是 FFF 於是 DOS 就知道這個檔案只佔一個磁叢,就是 002 所表示的磁叢,即第 33 個磁叢。再以 CONTENT.GIF 檔為例,它的 FAT 指位器是 003,於是 DOS 到 FAT 的第三欄去找發現該欄的值是 004,所以 DOS 又到第四欄找,第四欄的值是 005,又到第五欄去看,第五欄是 FFF,表示第五欄是最後一個磁叢,而該檔佔有第 003、004、005 三個磁叢。(參考前圖)

結語

這一章內容也相當得多,尤其是 FAT 的結構更是複雜,待下一章小木偶打算介紹個程式,讀取 FAT 並且把整張磁片所使用的空間用區塊的方式『畫』在螢幕上。


註一:DOS 分配檔案時是有空間就使用,所以假如您在一張新磁片中依序由別處拷貝 A、B、C 三個檔案,而後來您刪去了 B 檔案,於是 B 檔案原先佔據的地方變成可以再被利用。當您再拷貝一個大檔案 D,這時 DOS 看到原先 B 檔所佔據的空間可被利用,所以 D 檔案的前半段便在 B 檔案原先的空間,後半段便在 C 檔案之後的空間,於是造成散亂。當檔案不斷的刪除、建立,這種情形會越來越嚴重,如果一個檔案分散在各處,那讀取時磁頭得移動到各處,讀取時會變得很慢,所以有許多廠商就發展出重組磁碟的程式。

註二:硬碟容量比軟碟容量大得多,所以磁叢數目變得很多,12 位元無法容納得下所有編號,這時就得用 16 位元長的欄位來表示磁叢編號,稱為 FAT16,每個 FAT 欄位佔用 16 位元,最多可以由 0∼65535 共 65536 個磁叢,但是扣除一些保留的部份,只能用 65525 個磁叢編號。要是超過這個數值,就得用 32 位元表示磁叢編號了,就稱為 FAT32。

FAT12、FAT16、FAT32 的比較:


回到首頁到第十七章到第十九章