Step9ではスレッドに優先順位を付けた優先度スケジューリングの実装を行った。
優先度スケジューリング部分はそんなに複雑じゃないのでわかりやすかった。
今回の動作ログ。
MachineName:os myaccount$ sudo cu -l /dev/cu.PL2303-00001004 Password: Connected. kzload (kozos boot loader) started. kzload> load ~+lsx kozos Sending kozos, 36 blocks: Give your local XMODEM receive command now. Bytes Sent: 4736 BPS:522 Transfer complete XMODEM receive succeeded. kzload> run starting from entry point: ffffc020 kozos boot succeed! test09_1 started. test09_1 sleep in. test09_2 started. test09_2 sleep in. test09_3 started. test09_3 wakeup in (test09_1). test09_1 sleep out. test09_1 chpri in. test09_3 wakeup out. test09_3 wakeup in (test09_2). test09_2 sleep out. test09_2 chpri in. test09_1 chpri out. test09_1 wait in. test09_3 wakeup out. test09_3 wait in. test09_2 chpri out. test09_2 wait in. test09_1 wait out. test09_1 trap in. test09_1 DOWN. test09_1 EXIT. test09_3 wait out. test09_3 exit in. test09_3 EXIT. test09_2 wait out. test09_2 exit. test09_2 EXIT. ~. Disconnected.
今回、readyque
がPRIORITY_NUM
個の配列になっていたので、前回、配列のインデックスからのアドレス計算での乗算でリンクエラーが出たのが気になっていたけど、今回は問題なくリンクできた。なぜだろう?後で調べてみよう。
追記:著者の方からコメントで教えていただいて、上のreadyque
の配列のアドレス計算でリンクエラーにならなかった理由がわかった。
readyque
のサイズが8バイトと2の累乗になっているから問題にならなかったんですね。