雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
1: 2005-07-21 (木) 15:48:00 ソース バックアップ No.1 を復元して編集 2: 2005-07-21 (木) 19:05:26 ソース バックアップ No.2 を復元して編集
Line 116: Line 116:
|IPL|予約領域|FAT領域|ルートディレクトリ領域|データ領域| |IPL|予約領域|FAT領域|ルートディレクトリ領域|データ領域|
 +
 +この各領域はおのおのどのくらいあるのでしょう?
 +
 +本来は、IPL以外は可変できるような構想だったようです。逆に言えば、IPL以外の領域は、先のBPBの値から計算しなければいけないものということになります。
 +
 +ただ、こと「WindowsやDOSで作ったFAT12のFD」に関しては、事実上決め打ちと考えていいようです。念のため、計算法をご照会。
 +
 +-IPL
 +--これはセクター0と決め打ちされています。大きさも1セクタ(512バイト)です。
 +
 +-予約領域
 +--おそらくなにか特別な用途に使うために用意されたものでしょう。ファイルとしては絶対にアクセスできない領域になるようです。算出は、「FATがどこから格納されているか」の数字で求めます。IPLはセクター1。で、この数字を例えば10にすると、FAT領域はセクター11からとなります。そうすると必然的に、セクター2〜セクター10が予約領域となり、通常は使うことができない特殊な領域となります。
 +--上記の例では「1」ですね。つまり、FAT領域はセクター1の次から(セクター1から)ということになり、事実上予約領域は0となります。
 +
 +-FAT領域
 +--ファイルの情報(データではない)が格納されます。ここは、「FATの長さ(1つ分の長さをセクタ数で)」の値から解ります。9です。つまり、上記のスタート地点(セクター2)から9個分のセクターを使うということになります。なので、「セクター1〜セクター9」ということになります。
 +--さらに、「FATがいくつあるか」という情報も参照します。2ですね。もう一個は予備用らしいですが、ちゃんと領域を喰います。二つ目の予備FATも同じく9個なので、「セクター10〜セクター18」となります。
 +--結果、FAT領域は、「セクター1〜セクター18」となります。
 +
 +
 +-ルートディレクトリ領域
 +--文字通り、ルートディレクトリにあるファイルの情報を格納するところです。
 +--FAT12では、ルートディレクトリにはBPBで決められています。「ルートディレクトリの長さ」の値です。00e0h、十進数に直すと224です。つまり、ルートディレクトリには、0〜224番までの225個しかファイルを置くことができません。逆に言えば、この領域はあらかじめ225個分のファイルのデータを格納できなくてはいけません。ファイル一個に使用するデータは32バイトです。つまり 32*225=7200バイト。7200バイトは何セクタで格納できるでしょう?。 7200÷512=14.0625。つまり、14セクターあれば全部格納できます。(端数がなぜ切り捨てになるのかちょっと解りません。調査中・・・)
 +-上記の例で、FAT領域は「セクター1〜セクター18」なので、ルートディレクトリ領域は「セクター19〜セクター32」となります。
 +
 +-データ領域
 +--実際にファイルの内容がバラバラに分解されて書き込まれる領域です。スタート位置は上記から必然的に、「セクター33から」となります。
 +--では、いくつまであるのでしょう。「このドライブ(FDの場合はディスク、HDDの場合はパーティション)の総サイズ(セクタ数で)」という所に総数が書かれています。「2880」ですね。なので、データ領域は、「セクター34〜セクター2879」ということになります。
 +--※セクターは0から始まりますので、2880個だと、最後の番号は2879になります。
 +
 +
 +つまり、こうなります。
 +
 +|IPL|予約領域|FAT領域|ルートディレクトリ領域|データ領域|
 +|0|--|1〜18|19〜32|33〜2879|
 +
 +
 +こう考えると、例えばカーネル(OS本体)やブートローダーを起動時に読み込ませるにはこういう手順になります。
 +
 ++カーネルやブートローダの大きさをとりあえず決める(例えば64KBまでとします。)
 ++64KBとはすなわち、1024*64=65536バイト。512で割れば、65536÷512=128。すなわち128個のセクターが必要となります。
 ++データ領域はセクター33からですから、「セクター33〜セクター161」までにカーネルやブートローダーを書き込みます。
 ++FAT領域とルートディレクトリ領域に、「「セクター33〜セクター161」はxxx.xxxというファイルで使われている」という情報を書き込みます。
 ++IPLのBPB以降の位置に、「「セクター33〜セクター161」をメモリのある領域に読み込み、実行しろ」という命令を書き込みます。
 +
 +こういう流れになるはずです。
 +
 +
 +*論理セクタと物理セクタ [#gcd8fb39]
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
IPLはかならずセクター0なのでいいのですが、FAT領域は何番から何番なのでしょう。 IPLはかならずセクター0なのでいいのですが、FAT領域は何番から何番なのでしょう。