Lions' 本読み (43)

朝練メモです。

start に戻ってから

315p にて_そこには最後の 3 命令があり、ユーザーモードアドレス 0 の命令をユーザーモードで実行する_という記述があるあたりを確認。
以下ですね。

0670    mov     $170000,-(sp)
0671    clr     -(sp)
0672    rtt

rtt は 10 章の図 10.1、あるいは 262p の記述によれば PC、PS という順でスタックから取り出した値を設定してリターン (?) する、とのことなので

  • 170000 (1111000000000000) が PS に設定
  • ゼロが PC に設定

ということになるので、テキスト記述の通りですね。

381p の aretu と u.u_ssav に関する調査について確認

どこまで行けるか不明ですが次に。332p にある

2284 行で u.u_rsav に格納された値が 2281 行で u.u_ssav に格納された値と同じならば、それらはどのようにして違いがでてくるのか

Lions' Commentary on UNIX より引用
という件です。これは確かに xswap 掘らないと駄目ですね。とは言えざくっと 14 章まで読んでいるという意味では 2231 から 2236 なコメントもなんとなく理解できる。
ちなみに_リターンしない_なコメントが入ってて u.u_ssav を savu してるのは

  • expand 手続き
  • xalloc 手続き

な模様。newproc でも u.u_ssav を savu して云々してますがここはちょっとスルーで。
上記手続きではいずれも u.u_ssav を savu した後に xswap しています。ちょい時間が無いので 381p なナニをさくっと掘ってみると

u.u_ssav に設定したあと (2284)、
expand は xswap を呼び出し (2285)、
xswap は swap を呼び出し (4380)、
swap は sleep を呼び出し (5215)、
sleep は swtch を呼び出し (2084)、
swtch が u.u_rsav を再設定する (2189)。

Lions' Commentary on UNIX より引用
あ、成程。なので u.u_rsav は使いモノにならない、のでスワップアウトされた印が付いてるプロセスについては u.u_ssav から戻りを取り出せ、ということなのか。
若干微妙ですが今朝はこれでタイムアップ。

残りの課題

以下です。

  • newproc 手続き確認
  • exec 手続き確認
  • readi 手続き確認
  • xswap 手続きのあたり確認