- コメント -

MINIXのmain関数。コメントから判断するとShutdownに関するコードも含んでいる。 どうやら、MINIXはこのファイルから始まるようだ。

- 25行〜26行 -

プロトタイプ宣言。FORWARDはstaticとして定義されている。

- 31行〜164行 -

main関数。ここがOS実行の根源部分である。
PUBLICは何も定義されていない。
これの意味は今のところ不明。
int mainではなくvoid mainとしているのは、int mainにしたところで、返り値に意味が無いからか?
そして、boot_image構造体はブートに関するプロセスの情報が入っていると考えられる。
その他いろいろと変数の定義があるが、今のところよくわからない。
変数の宣言の後に、intr_init関数で割り込みコントローラを初期化している。
割り込みコントローラとは、PCの周辺機器からの割り込み処理(キーボードを押したなど)を一度集め
た上で、それを各装置に設定されている優先度に基づいて、適切な順序でCPUに信号を伝える役割を果たす。
要は、I/O関連の処理を行う場所の初期化を行っていると思ってよい。
関数の内容は今のところさっぱりわからないので飛ばす。
次の2つのfor文は、プロセステーブルが空にするように、初期化している。
後半のfor文は、システムプロセスのためのprivilege structureを初期化しているようだ。
つまり、タスクとシステムプロセスの初期化を行っているということだろうか?
次は、コメントから察するにブートあたりをプロセスとしてエントリーしているようだ。
そのため、for文ではブートのプロセスを作成していることがわかる。
ただ、個々の内容はよくわからない。
その後、レジスタの設定やサーバーの設定も同時に行っているようだが、詳細は不明。
ブート完了後、MINIXは起動できる状態となる。
proc_addrはよくわからない。
ここで、プロセスを実行しているということだろうか。
ただループ的なものが無く、そのままannounce関数を経て、shutdown関数となってしまい、
OS起動と同時に終了するという意味不明な状態。
これはどういうことなのだろうか。
ちなみにannouceは、起動時にMINIXのバージョンなどを表示してくれるようだ。
shutdownはその名のとおりシャットダウン処理を行う関数である。

- 169行〜180行 -

kprintfは多分画面に文字列を表示するprintfと似たような関数。
また、OS_RELEASEはMINIXのメジャーバージョンを示している。
それに対して、OS_VERSIONはMINIXのマイナーバージョンを示している。
そして、もしCPUのCHIPがINTELである場合は、8259Aの割り込みコントローラを持っているとされ、
プロテクトモードとリアルモードどちらを使用しているかを示す情報も出力する。
プロテクトモードである場合は、32bitのコードを動かすことが出来て、64KBのメモリ制限を超えて、
4GBまでの全メモリアドレスまでアクセスすることが出来る。
このあたりの話は、
http://d.hatena.ne.jp/outland_karasu/20070522/1179828082
を参考にするとよいだろう。

- 185行〜213行 -

最初の関数の書き方で見慣れない書き方に焦ったのは私だけではないはず。
それもそうで、これは古いC言語における書き方であるからである。
古い形式の場合は、引数を書く時、

void func( int arg )
{
    // いろいろな処理。
}

と書くところを、

void func( arg )
int arg;
{
  // いろいろな処理。
}

と書く。
http://x768.com/?%E5%8F%A4%E3%81%84C%E8%A8%80%E8%AA%9E
さてprepare_shutdown関数の内容に戻るが、これはsend_sig関数を用いて、それぞれのプロセスに対して、
停止を示す信号を送っているだけである。

- 217行〜249行 -

main.cの最後はshutdownを行う関数。
内容はきちんと追えないが、clockなどの停止を行っているようだ。
さて、main.cをざっと見てきたが、最初読み始めたときはさっぱりだったが、こうしてわからないながらも、
ホームページにわかる部分だけでも書いていくと、だんだんとどのような事をしているかが、おぼろげながらわ
かってきた。

inserted by FC2 system