「システム」という言葉が世の中に出まわって久しいが、システムのむつかしさは置いておかれている。
先日、インテグレータのPMと称する人間が騒いでいたのが、「CPU100%だから大問題」。これが、白黒が簡単につく問題じゃないことを書いておきたい。普通の人にも参考になることでしょう。
コンピュータというものは、メモリーに入ったプログラムをクロックに応じて、取り出し、解釈し、実行し、書き戻す。このサイクルの繰り返しです。このように休みなく働いていたら100%使われているということです。
実際、私が週末遊んでいるPICのような超小型のOSすらないようなコンピュータは、常にプログラムが実行されている状態を作りだします。
じゃぁ、CPUがなにもしていない状態とはなにか?それは「なにもしない」という状態を作れる機種に限るのです。具体的にいえば、WAITという命令が実行可能な機種に限るのです。もちろん、巷のLinux、UNIX, Windowsなどが動作するマシンはその命令をもっています。これらのOSはやる仕事がないと判断すると、WAIT命令を出しコンピュータを眠りにつかせます。。。
この状態から目覚めるのは、割り込みが入ってきた時です。割り込みとは簡単にいうと、CPUに特定の状態が起きたことを知らせると、特定の状態に対処するプログラムを実行する機能のことです。例えば、一定の時間がたったらCPUに知らせるといったタイマー機能をいいます。この機能は相当に簡単なコンピュータも実装しています。
つまり、CPUが使われている状態とは命令が実行されている状態。使われていない状態とは命令が実行されていない状態です。
ここでプログラムのことを考えましょう。一般的なプログラムは自分のことしか考えません。キーボードからの入力を待っている時、キーボードをずっと監視すればいい、などと考えて作りがちです。こういうプログラムがあったら、CPUはWAITの状態に入りようがありません。(自分が直接書いたつもりがなくても、TCP/IPのListenでCPUを回す作りのJavaVMに出会ったこともあります。)
もうひとつ大事なことは、高級なOSはプログラムの実行優先順位を常に見直しているということです。多くのOSは先にあげたタイマー割り込みを自分にかけておき、一定時間ごとにプログラムの実行順位を見直します。この段階で、キーボードの入力を待っているプログラムの優先順位は下げられます。他に優先順位の高いプログラムがあれば、それを実行します。Windowsですら優先順位は32段階もっています。
まとめると、CPUが100%だからといって他のプログラムを実行する余裕がないかどうかは、もう少し調べなければわからないということです。もちろん問題なのかもしれないので、調査が必要であることはいうまでもありません。