2

FAT12 ファイルシステム用の 2 段階ブートローダーを作成しています。ブートローダーのステージ 1 は、FAT12 ファイルシステムにあるフロッピー ディスクからステージ 2 をロードします。現在、(FAT テーブルから取得した) クラスタ番号を、トラック、ヘッド、およびセクタ番号を含む形式に変換する際に問題が発生しています。ブートローダーを作成するためのチュートリアルhttp://www.brokenthorn.com/Resources/OSDev6.htmlに従っていました。

ここでの私の混乱は、チュートリアルでは、FAT から取得したクラスター番号が最初に LBA (リニア ブロック アドレス) 形式に変換され、次にセクターをメモリに読み込む前に CHS (シリンダー ヘッド セクター) 形式に変換されることです。

クラスター番号を直接 CHS 形式に変換できないのはなぜですか?? FAT テーブルはクラスタ番号を線形に格納しませんか?? ここで何が欠けているのか正確に知りたいですか??

チュートリアルで使用されているブートローダーのソース コードへのリンクは、リンクのページの最後にありますhttp://www.brokenthorn.com/Resources/OSDev6.html

4

2 に答える 2

3

クラスター番号は線形ですが、前述のように、データ領域に相対的であり、クラスター 2 がデータ領域の最初のクラスターです。ただし、ディスクからの読み取りはディスク セクタ単位で行われ、各 FAT クラスタには複数のセクタが含まれる場合があります。これが LBA への変換の目的です。クラスタ番号からセクタ番号に変換するためです (つまり、必要なクラスター数 - クラスター 2 がデータ領域の最初のクラスターであることを考慮し、クラスターあたりのディスク セクター数を掛けてから、データ領域の前に使用中のディスク セクター数を加算して、絶対値を算出します。データが保存されているディスクセクター。

ただし、古い BIOS int 0x13 関数は、絶対セクターに関してディスクから読み取りませんでした。特定のシリンダーの特定のヘッドによって特定のセクターを読み取ります ( http://en.wikipedia.org/wiki/Cylinder-ヘッドセクター)。したがって、これらの関数を使用する場合は、読み取りたい絶対セクターに対応するシリンダー/ヘッド/セクターを特定する追加の手順を実行する必要があります。別の方法として、可能な場合は、絶対セクタ (LBA) アドレスを直接取得する拡張 read int 0x13 関数を使用します。

于 2013-02-09T16:29:52.890 に答える
1

LBACHSディスク上のすべての物理セクターを一意に識別するために使用されます。

クラスター番号OTOHは、パーティション内でのみ意味があり、パーティションの先頭(そのデータ領域)を基準にしており、パーティション内の複数のセクターのブロックを一意に識別できます。

したがって、それらの機能は似ていますが、2つのものの間にはかなりの違いがあります。

また、ハードウェア(またはBIOS)は、クラスターについて何も知らないはずです。したがって、ストレージデバイス上のデータにアクセスするには、クラスター番号をにLBAs(場合によってはに)変換する必要があります。CHS

于 2013-02-09T07:05:49.907 に答える