いや、まぁ、
* 短いソースって良いなぁ
と思いました。
午前中は昨日の復習から。real mode/protected mode/64bit mode へ。 segment の初期化で、また、LDT/GDTを読んで。
初期化を読むのは退屈なので、次は、wait system call。おそらく一番簡単だろうと言うことで。そしたら、
* process table をfor文で、先頭からなめて子供を探す
え〜 そんなのあり? と思ったら、process table は64 entriesしかないらしい。でも、
* そのfor文を、そこいら中にばらまく
ってのは、どうなのかぁ。
そして、なぜか、
* ptable をlock/unlock しまくる
しかも、lock release 時にも、
* lock xchg
するのだが、そこには、
* INTEL64では、普通の代入で良い
とかいう謎のコメントが。返り値チェックしないのに lock xchg してどうするの? まぁ、もしかするとわざとかも。lock時は、もちろん、CASしているわけですけどね。
system callや割り込みで trap に来て、そこから普通にreturnで戻って、iretq するわけですが、kernel の中で、
* swtch
とかで、context を切り替えてしまう。iretq してるプロセスがたくさんあって、それをschedulerが切り替えている感じですか。
読まなかったけど、最初のinit processのところで割り込みスタックを作るようなことをしているんでしょうね。なので、
* fork 書く方が spawn より楽だ
とは思いました。
V6のソース読むよりは、x.v6の方が良いかなとは思いましたが、ちょっと玩具な感じはしかたないかな。コメントもあまりなくて、マジックナンバーも多くて。
でも、Linux の方が爆発してるので、OSの授業で x.v6 使うのも悪くはないかな。boot プロセス面白かったようなので。
No comments:
Post a Comment