第1章コンピュータシステムの概要
コンピュータシステムが動作するとき、ハードウェアでは以下の手順が繰り返される
①入力デバイス・あるいはネットワークアダプタを介してコンピュータに何らかの処理を依頼
②メモリ上に存在する命令を読み出してCPUに置いて実行して、結果をメモリ上のデータを保持する領域に書き込む
③メモリ帖のデータをハードディスク(HDD)やSSDなどのストレージデバイスに書き込むまたはネットワークを介して別のコンピュータに転送するまたは出力デバイスを介して人間に見せる
④①に戻る
上記の手順を繰り返して、ユーザにとって意味のある一つの処理にまとめたものをプログラムと呼ぶ。
プログラムの種類は以下の通り
アプリケーション:ユーザに直接役立つ。(パソコンのオフィススイートやスマートフォンやタブレットなどのアプリなど)
ミドルウェア:多くのアプリケーションに共通した処理を括り出して、アプリケーションの実行を助ける。(Webサーバ、DBサーバなど)
OS:ハードウェアを直接操作して、アプリケーションやミドルウェアの実行に必要な機能を提供する。(Linuxなど)
OSはプロセス単位で実行し、複数のプロセスを同時に実行可能
Linuxの重要な役割:外部デバイスの操作
仮にOSが無い場合のデバイス操作
アプリケーション開発者がデバイス操作の仕様に詳しい必要がある
開発コストの高さ
複数プロセスが同時にデバイスを操作すると予期せぬ動作を引き起こす
Linuxではデバイスドライバにデバイス操作処理をまとめて、プロセスからデバイスにはデバイスドライバを介してアクセスするようにしている
あるプロセスが、バグあるいは悪意によって「デバイスにはデバイスドライバを介してアクセスする」というルールを破った場合、複数プロセスが同時にデバイスを操作するという状況がこれでもまだ発生する。
Linuxはこれを避けるために、プロセスからは直接デバイスにアクセスできないようにしている。
CPUにはカーネルモードとユーザモードがあり、カーネルモードで動作しているときのみデバイスにアクセスできるようにしている。
デバイスドライバはカーネルモードで動作し、プロセスはユーザモードで動作する
その他通常のプロセスから実行されると困る処理(全てカーネルモードで動作)
プロセス管理システム
プロセススケジューラ
メモリ管理システム
etc...
カーネルモードで動作する、OSの核となる処理をまとめたプログラム群をカーネルを呼ぶ。
プロセスは、デバイスドライバ含めたカーネルが提供する機能を利用したい場合、システムコールという処理を介してカーネルに依頼する。