コンピュータのidle命令について

コンピュータ

idle命令の由来ついて

 コンピュータの機械語にidle命令というものが存在するのをご存知であろうか。
 この命令はOS以外、あるいは類似する制御プログラム以外では使ってはならない命令の一つであり、私は少なくとも二つのことを思い出す。

 そのうちのひとつは、昭和40年代の前半、東京オリンピックの前後の頃のことである。その当時、大型機のOSの開発に従事していたある日、上司からアイドリングについて見直すようにとの指示が出た。
 OSは、当時はまだその用語はなかったのでモニタという用語を使っていたが、複数の処理待ちの対象(専門用語ではタスクとかプロセスという)を待ち行列として管理し、スケジューリングして次に実行すべきものを選択するが、次に処理するものがなくなる場合がある。
 一つは、処理すべきジョブが存在しないケースである。ここで、ジョブとは、企業の情報システムなどで、人間がコンピュータに与える仕事の単位のことをいう。より細かな処理の組み合わせとして記述される。コンピュータにおける個々の処理を業務にとって意味のある単位にまとめたものということもできる(Webサイト『IT用語辞典』)。
 もう一つは、処理中のものが入出力を行いその完了待ちになって一時的に処理を継続できないケースである。

 こういう場合には、OSはアイドリングする。まず、あらかじめ作成され、組み込まれているアイドリング用のタスクまたはプロセスを選択して実行する。アイドリング用タスクまたはプロセスは、実行の優先順位が最も低く、実質的な処理対象がなくなった場合にスケジュールされ実行される。他の処理対象が実行できる状態になると、その実行は中断される。
 次にアイドリングタスクが実行するプログラムについて説明する。上司の指示が出る時点までは、無条件ブランチ命令を繰り返すだけのエンドレスのシンプルなプログラムであった。この問題点は、無条件ブランチ命令の繰り返し実行のために、同じメモリが連続してアクセスされ熱をもつことである。
 当時は磁気コアメモリが使われていた。特定の磁気コアメモリへのアクセスが集中すると、そこが熱を持って正常動作が出来なくなる(『ウィキペディア』磁気コアメモリ)。熱対策は現在においてもコンピュータにおける最大の問題の一つである。その改善策として、上司からの指示があったのである。そして、数ステップの命令群をループさせるプログラムに改善したことがある。

 もう一つは、IBMが昭和39年(1964年)にシステム/360という革新的なコンピュータを発表し、それから数年後に、前記の改善策を実施後のことであるが、システム/360の命令セットの解説マニュアルを見たときである。命令セットの中にIdle命令があったのである。その命令を見たときに、詳細はまだ見ていなかったが、さすがと感心した記憶がある。この命令を実行すると、CPUをアイドリング状態に遷移させ、外部割込みが発生するのを待つのである。メモリへのアクセスもしない。入出力の終了割込みなどの割込み要因が検出されると、そのアイドリング状態を脱出し、割込みを発生させるのである。

 『Oxford Advanced Learner’s Dictionary』によれば、単語「idle」は、「not working hard」とあるが、コンピュータの中では立派に働いているのである。それ以降のコンピュータでは、この命令が実装されるようになった。
 因みに、OSという用語を普及させたのも、このシステム/360である。そのOSは、総称であるがOS/360と名付けられたのである。

(奥谷 出)


Comments are closed.