「はじめてのOSコードリーディング」読書会は3回目から参加しましたが、それ以前に終わっていた第3章を勉強中です。

「3.3 実行プロセスの切り替え」まで読みましたが、この節ではswtch()の11行目について、「retu()を実行し、スケジューラプロセスに切り替えます」と書いてあるのは11行目まで実行したらswtch()を実行していたプロセスは停止=swtch()の処理も停止して別のスケジューラプロセスの実行に移るという意味のような印象を受けますが、それにしてはswtch()の次の行の処理の説明がすぐ書いてあるのが良く分かりません。スケジューラプロセスに切り替えてもswtch()関数内の処理がそのまま継続されている??

setpri()の中でrunrunをインクリメントしていますが(他にもrunrunをインクリメントしているところがあったような気はしますが)、溢れて0に戻ることはないのか気になります。

後、swtch()から返る先について詳しい説明がありますが今回はパスしました。ここではまると次回の勉強会までに第3章に一通り目を通せなくなりそうなので。

このようにあちこち良く分からないところはありますが少しずつ理解が進んできた感じもしています。

「はじめてのOSコードリーディング」読書会は3回目から参加しましたが、それ以前に終わっていた第2章を読んでみました。かなり分かるようになってきました。

・PPDAとデータ領域とスタック領域を足したサイズとPPDAの先頭アドレスは、proc構造体に情報を持つ。
・PPDAはuser構造体とカーネルスタックからなる。
・user構造体にAPR(=PAR+PDR)のデータを持っており、これをカーネルがセットすることでMMUによって仮想アドレス空間が切り替わる。
・PSWの上位2bitでAPRがカーネルモード用とユーザーモード用にハード的に切り替わる。
・カーネルがカーネルモード用APRの6番に実行プロセスのデータセグメント物理アドレスproc.p_addrを設定するので、カーネルはグローバル変数uで実行プロセスのuser構造体にアクセスできる。

なお、p.50の図2.9において、PPDAは0 mod 8Kの位置からUSIZEだけアドレスが小さい側にあるような気はしますが確信は持てていません。

「はじめてのOSコードリーディング」読書会 3回目 に参加しました。

こちらも既に2回開催されており、そこまでの分を読み直す時間もない中で参加しても無意味かもしれないと思っていましたが、結果的には参加して大正解でした。

たまたまわかりやすい箇所だったのかもしれませんが想定外に自力でも理解でき、分からない箇所は教えていただいたので理解が進みました。今まで色々あがいてきたのが少しは身についてきたのなら嬉しいことです。

2日連続の勉強会で頭が飽和状態ですが、せっかくやった内容を整理確認しておこうと思います。そして次回こそはちゃんと準備して参加したいと思います。

V6のコードリーディングは今までとっかかりがつかめずにいたので、この勉強会を大切にしたいと思っています。