Lions’ Commentary on UNIX 読書会メモ#4

はじめに

Lions本読書会#4に参加してきました。

そのときのメモを残しておきます。

本に沿った内容は読書メモの方に反映していきます。このメモでは本の内容の範疇から越えた話題を中心記録しています。

今回は10, 11章を読みました。

メモ

@oracchaさんのツイートを参考にしています。

  • jsr r0, call; _clockでr0に_clockのアドレスが入るのはなぜ?
    • r0はスタックに積まれ、r0にはpcの値が入る。pcはjsr命令の次の命令アドレス(関数からのリターンアドレスとして使われる)
    • jsr命令の次の命令は_clock、ここのアドレスがr0に入る
    • 785, 799のjsr pc, *(r0)+ではr0を評価してそこへジャンプする
    • r0を評価すると_clockのアドレスが入っているので_clockへ飛ぶ
    • なんで*(r0)+? なんのためにインクリメントしている?
    • スタックに積まれたr0は805で取り除く
  • コアメモリのアクセス時間は1ms。Mini Computer systemsより
  • 509の4はiot命令
  • toutとcalloutの違い
    • 時間間隔の違い? calloutはクロック割り込み毎にチェック、toutは1秒毎にチェックしている
  • 3734でlksを再設定しているのはなぜ?
    • 次のクロック割り込みタイミングをセットしている?
    • KW11-L(clock controller, realtime clock)のhandbookを見ると7bit目はプログラム(OS)でリセットするとある
  • 3707のSCHMAGはたぶんschedule(scheduler) magic
    • 3815でp_cpuからSCHMAGを引くことで、p_cpuが245-255の間を周期するようにしている
    • 低くなったプロセス優先度(pri)を持つプロセス群の選択にランダム性を持たせている?
  • HZは60(147行目参照)だが、3797行目をみると50Hzでクロック割り込みする構成の場合1秒刻みではなくなってしまうのでは?
    • 128行目を見ると「調整可能な変数」とある。HZの値は自動生成するのでは。もしくは、自分で手編集してコンパイルするのでは
  • 3807のrunrun++はlbolt実行のため。ユーザープロセス選択見直しのためではない?

終わりに

今回は全然メモを取っていなかったので穴だらけです。他の参加者の方々のフォローを期待しています。

Lions本読書会#5は3/27(sun)に行われます。Unixのコードを読んでみたい方は参加してみてはいかがでしょうか。