今回も,CPU での実行の中心的な役割を示す,実時間管理について説明する.
このパルス信号は,水晶発信機により正確に刻まれている.パルスの 1周期 を 1クロック(one clock) という.CPU が実行する機械語は, 1 クロックの整数倍で処理される. よって,プログラムも 1 クロックの整数倍となる.クロック数を数えることにより 実際の実行時間を計ることができる.
実時間管理は,実際の時間に従って処理を一定時間,休眠させたり 起動したりする.そのためには,休眠させる時間に応じたプロセスの 「待ち行列」を作る必要がある.
実時間管理での,プロセスの状態遷移は以下のようになる.
休眠状態となるプロセスも複数になる可能性があるので,「待ち行列」が必要 となる.その順番は,単に古く起動されたプロセスではなく,起こす(wakeup) 時間による順番である方が都合がよい.このリストを 差分リスト(differed list) という.
レディリストと同様に,「休眠状態」にあるプロセスも通常は,複数あり, 再起動(wakeup) させられる順番も,時間によって異なる. そのため,実時間管理では再起動させられる時間により,順序付けられた プロセスのリストである.差分リストを用意する.例えば,以下のようになる.
このキューは,以下のようになる.
差分リストでは,key 欄は,再起動される時間(あと何秒で起動されるか)を 示している.例えば,上の例では,あと 3 秒で プロセスID 57 のプロセスが 起動され,さらに,5 秒(つまり,現在から 8 秒後)にプロセスID 56 の プロセスが起動されることを示している.最後に,さらに,9 秒後に, プロセスID 58 のプロセスが起動される.
プロセス管理の章で,プロセスを時分割で コンテキストスイッチ(context switch)を行うため 「見ため上」同時に処理することができることを説明した。実時間管理では, この時分割処理を担当する.実際には, clkint.s のアセンブリ言語 が一定時間毎に呼び出される(Pentium の場合).最後で call _resched が 実行されていることがわかるだろう.