torutkのブログ

ソフトウェア・エンジニアのブログ

OSの仕組みを知ろう〜Solaris編

Solarisインターナル―カーネル構造のすべて を読み始めました。まずはクロック割り込み(デフォルト100Hz)について。クロック割り込みは、スケジューラの基礎となる大事な機能です。マルチスレッド(マルチプロセスでも)において、各スレッドはどんな順番でスイッチされて、毎回どれくらいの時間CPUを使えるのか、優先度をつけるとスケジュールがどう変わるのか、といったことを知るには、この本が日本語では一番詳しいです。しかし、難しい。

スレッドのスケジューリング設定情報

$ dispadmin -c TS -g
# Time Sharing Dispatcher Configuration
RES=1000
# ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait PRIORITY LEVEL
200 0 50 0 50 # 0
200 0 50 0 50 # 1
: : : : : : :
40 48 58 0 59 # 58
20 49 59 32000 59 # 59
TS:TimeShare クラスに属する優先度におけるCPU使用時間、再スケジューリング時の優先度などを確認できるコマンド。優先度(LEVEL)0のスレッドはCPU持ち時間(ts_quantum)200msで、持ち時間を使い切ったら優先度0で再スケジューリングされる(ts_tqexp)。I/O待ち等でCPU持ち時間内でCPUを放したら優先度50で再スケジューリングされる(ts_slpret)。プリエンプトされた場合は優先度50で再スケジューリングされる(ts_lwait)。

割り込みの優先度

クロック割り込みより高い優先度がシリアル/パラレル通信に割り当てられています。ネットワークやディスクはクロック割り込みより低い優先度です。これは、シリアル/パラレル通信が即座に処理実行しないといけないからと思われます。シリアル・パラレル通信は、即応しないと取りこぼしてしまうからでしょうか。