OS自作入門 18日目分〜20日目分

だんだんOSっぽくなってきた。

18日目分 dirコマンド

コンソールで入力された文字列をコマンドとして受け取って、コマンドに応じて対応する処理をする。

dirコマンドではファイルの情報を表示。メモリにロードしておいたディスクイメージ中のファイル情報を読み取って情報を表示。

19日目分 アプリケーション

ポイント:ファイル情報(32バイト)の意味、FATの読み方
ファイルの内容をアプリケーションとして実行する方法

  • FATの情報からファイルをメモリに読み込む
  • そのメモリをセグメントとしてGDTに登録する。
  • そのセグメントへfar-JMP命令で移動する。(→20日目分ではfar-CALL命令に)

20日目分 API

APIとはアプリケーションからOSの機能を呼び出して利用する仕組み。システムコールともいう。(と説明されている。個人的には、システムコールはユーザ空間からカーネルの機能を呼び出すもの、というイメージで、APIというともっと上位のライブラリ間のインターフェースというイメージがあるが。)

キーワード:far-CALL、RETF、
ポイント:

  • アプリケーションとOSのセグメントは異なるので、アプリケーションからAPI関数を呼ぶにはfar-CALL命令する必要がある。逆にOSからアプリケーションを実行するときもそうである。←それ以外の方法もある。(21日目分の最後では、アプリからのAPI呼び出しはINT命令、OSからアプリの呼び出しはRETF命令)
  • far-CALL命令でサブルーチンを呼び出した場合、呼び出された側は普通のRET命令でなくRETF命令でリターンしなければならない
  • OSのバージョンが変わるとAPI関数の番地も変わってしまう。このままではアプリもそれに応じて書き換えなければならなくなる。これを、書き換えなくても良いようにするにするには、いろいろ方法があるが、ひとつにOS側でAPIIDTに登録し、アプリ側からはINT命令でそのAPIを呼び出すようにする方法がある。