オペレーティングシステムはどうやってシステムを監視するのか?
「オペレーティングシステムは、システム全体を監視してます」と説明されることがありますが、その「監視」という言葉は比喩的な意味で使われています。
アプリケーションでエラーが発生した時(例えば、0で割り算をしてしまったり、アクセスが許可されていないメモリにアクセスしようとしたとき)、周辺装置との入出力が終わった時、システムのタイマーが一定時間経過した時、といったできごとがあると「割り込み」と呼ばれるハードウェア機構が働きます。割り込みが発生すると、その時点でのCPUの状態がメモリに保存され、割り込みの種類に応じた割り込み処理ルーチンと呼ばれる手続きが実行されます。つまり、ここでオペレーティングシステムに制御が渡されるわけです。割り込み処理ルーチンで必要な処理が実行されると、メモリに保存されていたCPUの状態が元に戻されます。(特に問題がなければ)アプリケーションは実行を再開し、続きの処理を進めることができます。
つまり、「常にシステムを監視している」という漠然とした理解ではなく、必要が生じたときには(割り込みによって)すぐにアプリケーションの実行が一時停止され、オペレーティングシステム内の適切な処理ルーチンが呼び出されるようになっている、と考えた方がいいでしょう。
参考文献:
「なるほどナットク! OSがわかる本」羽山 博 著 オーム社
ファンクションコール、ランタイムルーチン、ライブラリ、API等について
システム側で開発・準備されたものをユーザーや開発者側が利用できるモジュールが用意されています。それらは、微妙に定義が異なっていたり、意味が異なっていたりするので一度まとめておこうと思います。
(1) ファンクションコール
(2) ランタイムルーチン
(3) ライブラリ
(4) API
コメント