我們在前面已經完成了主引導扇區程式的編寫。通過主引導記錄,我們已經實現了裝入分割槽引導扇區執行的操作。和主引導扇區一樣,分割槽引導扇區也只有區區
512 個位元組,根本不可能放得下所有的**來將以作業系統核心裝入記憶體,完成重定位工作並設定核心的執行環境。
應次,分割槽引導扇區也只能做一件事,那就是把真正的作業系統裝載程式(
rmosldr
)從檔案系統讀入記憶體並執行。由於
rmosldr
是以檔案的形式存在於檔案系統上的。因此,它的大小將不會受到限制。另外因為我們必須將作業系統裝載程式從檔案系統上讀入記憶體,我們必須首先了解檔案系統的格式。這裡,我使用了最簡單的檔案系統——
fat16
檔案系統。
乙個fat16
檔案系統的整體結構如下圖所示。
在圖上我們可以看到,
fat16
檔案系統的第一部分是分割槽引導記錄。這就是我們放置分割槽引導程式的地方,也就是分割槽的第乙個扇區。在這個扇區裡,
fat16
檔案系統放置了一些資料結構(
bios
引數塊)來描述整個分割槽大大小以及磁碟結構等等。這個資料結構可以用下面的
c++ 結構表示。
在這裡面,
有幾個域現在已經基本沒什麼用了,比如每磁軌扇區數等等。下表描述了一些重要的域
bytespersector
每扇區位元組數,一般為
512
sectorpercluster:
每簇扇區數。
fat16
檔案系統分配空間的時候是以簇為單位分配的,每簇一般可以有
1-64
個扇區。
reservedsectors:
保留扇區數,也就是檔案分配表之前的扇區數。一般為
1 ,即引導扇區後緊接著檔案分貝表。
numberoffats:
檔案分配表個數。一般為
2 ,也就是乙個檔案分配表加乙個備份。
numberofrootdirentries:
根目錄項數。
fat16
檔案系統上根目錄區的大小是固定的,所以乙個
fat16
檔案系統可以容納的根目錄項數也是有限的。
totalsectors:
總扇區數
sectorspe***t:
檔案分配表大小,以扇區為單位。
totalsectors32:
總扇區數,假如,
totalsectors 為0
,那麼總扇區數放在這裡。
fstype:
為字串
fat16
通過上述的引數,我們就可以算出檔案系統上的幾個重要部分如
fat ,根目錄區,資料區等的位置了。 比如
: fat
區位置= 引導扇區位址
+reservedsectors
根目錄區位置
= fat
區位置+
numberoffats
×sectorspe***t
資料區位置
= 根目錄區位置+
(numberofrootdirentries
×32+(bytespersector - 1)) / bytespersector
(未完待續)
FAT16檔案系統
fat16檔案系統 yoyoone 1.基本知識 扇區 每個磁軌被分為若干個弧段,這些弧段就是扇區。通常情況下,每個扇區512個位元組。簇 fat將磁碟空間按一定數目的扇區為單位進行劃分,這樣的單位稱為簇。簇的大小一般為2的n次方。2.fat16表的組織形式 使用fat檔案系統必須具有幾個部分 保留...
fat16 檔案系統的結構
fat檔案系統在windows比較常見,相對於ext系統而言,也比較簡單。是學習檔案系統的切入點。首先先了解下fat16檔案系統的基本結構依次為 dbr扇區 fat表1 fat表2 根目錄和資料區。dbr扇區 dbr 是作業系統可以直接訪問的第乙個扇區,包括乙個引導程式和乙個稱為 bpb的本分割槽引...
FAT16檔案系統解析(C 版本)
今天fat檔案系統總算告乙個段落了,已經可以非常完美的讀取包含fat16檔案系統的磁碟了。由於是採用c 編寫,直接借鑑的 很少,並且考慮到mf不支援二進位制序列化,所以對資料結構的解析,是乙個乙個位元組進行的,所以很耗費時間。下面就是程式執行後的結果 可以識別物理磁碟及物理磁碟的分割槽 下圖是用檔案...