●システム・コール…OSに対するサービス要求
●スケジューリング…次に動作すべきスレッドの選択
●ディスパッチ…選択されたスレッドの再開処理
●コンテキスト情報(コンテキスト)…スレッドの処理中断時に保存が必要なCPUの状態のこと
●コンテキスト切替え(コンテキスト・チェンジ)…スレッドのディスパッチのためにそのスレッドのコンテキストを新たに読み込む処理のこと
●アプリケーション・プログラム(ユーザ・アプリケーション)…OSの上でタスクとして動作するプログラム
●ユーザ・スレッド…スレッドとして動作するアプリケーション・プログラム
●コア(カーネル)…アプリケーション・プログラムを除いたOSとしての機能の中核部分



スレッド実現に必要な観点を以下の示してみます。

並列に動作している…3つのスレッドを同時に動作させているとはいえ、実際にはCPUは1つしかないので、3つのプログラムがまったく同時に処理されているというわけではありません。CPUが動作を切替ながら、3つのプログラムを動かしています。しかし一見すると、まるでCPUが3つあって、それぞれのプログラムをそれぞれのCPUが独立して実行しているかのように見えます。このためこの3つのスレッドは「並列に動作していいる」などと表現します。

割込み処理の応用…割込み処理は、現在の処理内容を一時中断して別の処理を行うというものなので、現在の処理の中断と保存という機能を本質的に持っています。割込み処理をそのまま応用すれば、レジスタの値の保存などにより、スレッドのコンテキストの保存が行えます。

今まで触れてきた割込み処理は割込みにより中断された処理に戻るだけでしたが、この際に、レジスタの復旧を行っています。これは割込み前のレジスタ値を復旧するという処理ですが、これを応用して、スレッドのコンテキストとして保存されているレジスタ値を復旧するという処理を行えば、そのスレッドをディスパッチできます。

割込みハンドラからはスレッドのコンテキストの保存が行われ、さらに「スケジューリング」され、新しい動作可能になったスレッドのコンテキストを復旧することで新しいスレッドが「ディスパッチ」されて動作再開します。このようにOSは割込みハンドラの延長にある「処理ルーチン」であると考えることもできます。

OSの制御下…アプリケーションをOSの制御下におくことができず、アプリケーション・プログラムにバグがあった場合にシステム全体に影響を与えてしまいます。

処理を強制的に中断する機能をベースにする…スレッドの切替えはそのスレッドを中断させることであり、スレッドの動作に支配されない必要があります。たとえば、ライブラリが呼び出す方式では、あるスレッドにバグはあった場合に、そのライブラリが呼ばれなくなって挙動がおかしくなってしまうかもしれません。