2016-11-26 93 views
0

我想將一些非常大的程序變量卸載到內存中,然後卸載到磁盤文件中。確定FAT16驅動器中根目錄的起始扇區

我已經閱讀了INT 13H,CHS,MBR和文件分配表上的幾十頁,並且我學到了幾乎所有我需要知道的內容, 除了我似乎無法找到工作方式計算根目錄的起始扇區。

根據這一頁,http://nerdclub-uk.blogspot.co.uk/2012/11/understanding-fat-tables.html,確定它 是相加那麼簡單的扇區偏移包含引導記錄,保留扇區數,以及 部門在FAT的每個副本的數量。

檢查我的引導扇區後,我插入了所有這些值,這就是我最終的結果。

1 + 1 +(2 * 256),其等於514

所以,我的根目錄應在扇區開始偏移量514每缸扇區的最大數量是63。

514/63 = 8r10

所以,我的根目錄應該在缸8部門10

然而,在該部門只是個零和它周圍的所有部門。

顯然我做的事情非常錯誤,但經過一天的谷歌搜索,我準備放棄。

+0

好了,所以幾個小時後,我現在已經解決了這個問題。我認爲這些圓柱體組成了頭,這就是我讀過的所有網頁描述它的方式,但在傾倒和分析整個磁盤映像後,我能夠確定,實際上(在我的情況下)16個磁頭組成一個圓筒。這是令人困惑和倒退,但無論如何。例如,磁頭1的偏移量是分區中的63個扇區,而磁道1的偏移量是分區中的1008個扇區。我讓他們逆轉。 –

回答

1

較新的驅動器使用LBA(邏輯塊尋址),所以CHS不再發揮作用了。您應該從計算中訪問扇區514(LBA扇區513,因爲LBA的第一個扇區爲0)。那個領域有什麼?對於CHS尋址,每個圓柱體在盤片的每一側上包括許多磁頭(磁道),並且每個磁頭(磁道)在磁盤周圍有許多可訪問的扇區。

https://en.wikipedia.org/wiki/Cylinder-head-sector 具有式翻譯(C,H,S)元組到LBA扇區值:

CHS元組可以被映射到使用以下 式LBA地址:

A = (C⋅ñ + H)⋅ñ扇區 +(S - 1),其中,A是LBA地址, ñ是頭在盤上的數,N 扇區是每個軌道最多的 扇區數,(c,h,s)是CHS地址。

和LBA到CHS地址變換 https://en.wikipedia.org/wiki/Logical_block_addressing#CHS_conversion

LBA地址可被映射到CHS元組具有以下式 ( 「MOD」 是模運算,即餘數,並且 「÷」是整數 除法,即其中任何小數部分 被丟棄的除法的商):

C = LBA÷(HeadsPerCylinder(HPC)×SectorsPerTrack(SPT))

H =(LBA÷SPT)模HPC

S =(LBA模SPT)+ 1

+0

嗯,謝謝你的回答(儘管它很晚)。這個問題涉及DOS。我正在編寫我自己的FAT16文件加載器,以將文件從舊的40MB硬盤加載到內存緩衝區中。所以我所使用的硬件遠遠早於LBA。無論如何,我可能在問這個問題幾個星期後完成了文件加載器。我會給你答案,因爲你困擾着回答。 –

相關問題