コンピュータシステムの概要

コンピュータシステムが動作するとき、ハードウェア上ではおおよそ次のような手順が繰り返される。
①入力デバイス、あるいは、ネットワークアダプタを介してコンピュータに何らかの処理を依頼する。
②メモリ上に存在する命令を読みだしてCPUにおいて実行して、結果をメモリ上のデータを保持する領域に書き込む。
③メモリ上のデータをハードディスクやSSDなどのストレージデバイス(データを格納できるデバイス)に書き込むまたはネットワークを介して別のコンピュータに転送するまたは出力を介して人に見せる。
④①に戻る。


このような手順を繰り返して、ユーザにとって意味のある1つの処理にまとめたものをプログラムと呼ぶ。プログラムには大きく分けて次のような機能がある。

・アプリケーション:パソコンのオフィススイートや、スマートフォンタブレットにおけるアプリなど、ユーザに直接役立つもの。
ミドルウェア:多くのアプリケーションに共通した処理を括り出して、アプリケーションの実行を助ける。例えばWebサーバ、データベースシステムなど。
・OS:ハードウェアを直接操作して、アプリケーションやミドルウェアの実行に必須な機能を提供する。例えば、LinuxMac OS

プロセス

通常、OSは各種プログラムをプロセスという単位で実行する。各プログラムは、1つないし複数のプロセスから構成される。Linuxを含む多くのOSは、複数のプロセスを同時に実行できる。LInuxの重要な役割の1つに外部デバイスの操作がある。

LinuxのようなOSがない場合、様々なプロセスが独自にデバイスを操作するコードを書く必要がある。
f:id:wanwan_bowbow_ilovecat:20180731232452j:plain
Linuxでは、デバイスを操作する処理をデバイスドライバというプログラムにまとめて、プロセスからデバイスには、このデバイスを介してアクセスするようにしている。
f:id:wanwan_bowbow_ilovecat:20180731232500j:plain
あるプロセスが、バグによって、あるいはプログラマの悪意によって「デバイスにはデバイスドライバを介してアクセスする」というルールを破った場合、複数プロセスが同時にデバイス操作をするという状況が発生する。Linuxは、これを避けるためにハードウェアの助けを借りてプロセスからデバイスに直接アクセスできないようにしている。


具体的には、CPUにはカーネルモードとユーザモードという2つのモードがあって、カーネルモードで動作している時のみ、デバイスにアクセスできるようにしている。デバイスドライバカーネルモードで動作して、プロセスはユーザモードで動作する。プロセス管理システム、プロセススケジューラ、メモリ管理システムもカーネルモードで動作する。


このようなカーネルモードで動作する、OSの中核となる処理をまとめたプログラムをカーネルと呼ぶ。プロセスは、デバイスドライバを含めたカーネルが提供する機能を使いたい場合は、全てシステムコールと呼ばれる特殊な処理を介してカーネルに依頼をする。