I-6-7. プログラムとOSの動作モード

プログラムが動作するプロセス空間という概念を説明し、その目的や特徴、それぞれの空間でできることとできないことを示す。さらにシステムコールによる動作モードの遷移について解説する。

【学習の要点】

* マルチタスク機能であれば、複数のプロセスがタイムスライスとして定められた時間で切り替わりながら、処理を行っている。そのため、処理が完全に終了していないプロセスに関しては、何度も再開されることになる。

* プロセス毎に割り当てられたアドレス空間のことを、プロセス空間とよぶ。他のプロセスからは一切参照されることがないため、データの破壊などは発生しない。

* Linuxカーネルはスーパーバイザモードで動作し、一般のアプリケーションはユーザモードで動作している。アプリケーションプログラムによりシステムコールが呼び出された場合、CPUの動作モードはスーパーバイザモードへ遷移する。

図I-6-7. OSの動作モードとシステムコールによる遷移

【解説】

1) プログラムの動作

Linuxカーネルはマルチタスク機能を提供している。そのため、同時に複数のプロセスを実行することが可能である。

* プログラムとプロセスの関係

プログラムが実行されている状態とは、プロセスが実行されている状態である。ただし、1プログラムにつきプロセスは1つだけとは限らない。1つのプログラムを起動させることで、複数のプロセスが起動するものもある。

* 複数のプロセスを同時に起動させるということ

マルチタスク機能が提供されているため、同時に複数のプロセスの実行が可能ではあるが、実際にある一時点で動作しているプロセスの数は、システムに搭載されているCPU数以上には決してならない。実際はマルチタスク機能が、複数のプロセスを細かく切り替えながら動作させ、いかにも同時動作しているような環境を作り出しているだけである。

* 複数のプロセスを切り替えながら動作させるということ

プリエンプティブ・マルチタスクであれば、タイムスライスとして定められた時間でプロセスの切り替えが行われる。ほかにも割り込みの発生などでもプロセスの切り替えが発生する。

* 切り替えられたプロセスを再開するには

処理が完全に終了していないプロセスは、マルチタスクの機能により何度でも再開されることになる。このため、正常にプロセスを再開させるために個々のプロセスは固有のコンテキストを保存している。コンテキストとは、そのプロセスが動作するためのプロセス空間、そのプロセスが動作するときのレジスタ値などである。

* プロセス空間とは

プロセス毎に割り当てられる独立した論理アドレス空間のことをプロセス空間と呼ぶ。個々のプロセスからアクセス可能なメモリ空間とは、このプロセス空間のことであり、他のプロセスからは一切参照することはできない。プロセス間ではデータの授受は行えないが、他のプロセスからデータを破壊されることもない。

2) 動作モードの遷移

LinuxカーネルはCPUの持っているスーパーバイザモードで動作している。また、一般のアプリケーションプログラムはユーザモードで動作している。このようにCPUはいくつかの特権モードを持ち、そのモード毎に用意された命令を実行している。また、一般のアプリケーションプログラムにより呼び出されるシステムコールは、ソフトウェア割り込みを発生させてCPUの動作モードをスーパーバイザモードへ変更することが可能である。

* スーパーバイザモード

全ての命令の実行が可能で、かつ全てのメモリ空間にアクセスすることが可能なモード。特権モードと呼ばれることもある。

* ユーザモード

スーパーバイザモードの付帯機能と考えられるモード。一部の命令については実行できなかったり、メモリ空間の一部にはアクセスできなかったりする。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。