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 手続きのあたり確認