DOSの「中のお仕事」
いよいよDOSがディスクの中に、どのようにファイルを格納しているのかという話に進みます。ここからが書いてみたかったことなんですが、ここまでの道のりは長かったですね。
そういえばAppleDOSは、ソースコードが公開されていたようです。細かい動作を思い出せないこともあるので、そこはエミュレータを動かしたり、ソースを追えば、今でも調べられますね。いやぁすごい話だ。
Apple IIのDOSソースコードが30年以上の時を経て公開される
APPLEIIDOSソースコード
ディスクは円板上の中心からの距離ごとにトラックがあり、それぞれのトラックは角度ごとにセクタに分けられます。トラックを移動するにはヘッドを物理的に移動させる必要があります。内側のトラックになるほど円周は短くなるのですが、フロッピーディスクではトラック位置によらずセクタ数は変わりません。トラックごとに角速度は変えるようなことはしていないので、1つのセクタを読み書きする速度も同じになりますしね。そのためだけではありませんが、大事なデータは密度に余裕のある外周に置かれることが多いようです。
さてAppleDOSでのトラックの使い方はマニュアルに明示されています。
トラックは最外周の$0から最内周の$22までの35あります。各トラックはDOS3.2.1までは13セクタ、DOS3.3以降は16セクタに分割されています。各セクタには256バイトのデータが格納されます。真ん中のトラック$11は管理領域として予約されており、最外周の$0から$2にはDOSコードを格納するため予約されています。残りのトラックにファイルが格納されるのですが、なるべく管理領域からの移動が減るように最初はトラック$12から最内周に向けて使い、最内周まで使ってしまったら、今度はトラック$10から再外周に向けて使われます。ちなみにセクタは番号の大きいほうから小さくなる向きに使われるようです。
トラック$11の管理領域ですが、セクタ$0にはVTOC(Volume Table Of Contents)と呼ばれる情報が入っています。ここには、このフロッピーにはいくつのトラック、セクタがあるのかとか、DOSのバージョンはいくつか、初期化の際に指定されたボリューム番号などとともに、どのセクタがファイルなどで使われているのか空いているのかという情報が入っています。
そしてVTOCに書かれているファイル情報が集められているディレクトリ領域には、ファイルごとの管理情報が書いてある場所とファイル名と属性、そして次のディレクトリの場所が入っています。
ここからファイルごとの管理情報を読みに行くと、そこにはファイルの先頭から順に、どのトラック/セクタにデータがあるのかのリストがあり、これがひとつのセクタに収まらない場合には、次の管理情報のある場所が入っています。
これらの情報を順に調べることで、DOSはファイルの好きな位置を読み書きできるようにしているのです(なお、さらにBASICプログラムやバイナリファイルは、ファイルデータの最初に、読み込む場所であるとかバイナリとしての長さが入ります)。
※図を書かないとちょっとわかりにくいですね、スイマセン。
これらの情報を読み書きするためにはDOSコードの中にRWTS(ReadWriteTrackSector)というサブルーチンがあって、DOSコマンドでは実現できない機能が必要な時に使います。これで細工をすると、どのファイルにも含まれない隠しデータをディスクに埋め込んだりもできます(これはセクタごとにアクセスしない限りコピーされない)。
このトラック/セクタが、どのように決められているのか、データは実際にはどのように0/1が書き込まれているかも、すべてがソフトで書かれているApple][の場合は、自分で制御することもできます。そのあたりは、次の機会に追っていきます。
ヘッダ写真はDISK][のコントロール基板(電源基板は側面に別にあります)。
この記事が気に入ったらサポートをしてみませんか?