概要
こちらの入門監視まとめに続き、初めてのサービスの公開にあたってLinuxの基礎知識を学び、APIサーバに障害が起きた時にサーバ内で何が起こっているのか、どう対処すればいいのかを判断できるようにするために、この記事ではコンピュータシステムのハードウェア構成の概要とプログラムの構成単位、Linuxの主な機能とその仕組みの概要についてまとめました。別の記事で各Linuxの機能であるプロセスやメモリ管理の仕組みの詳細についてまとめます。
コンピュータシステムの概要
コンピュータシステムのハードウェア構成

コンピュータは主に下のような手順を繰り返すことで様々な処理を行います。
- 入力デバイス、ネットワークアダプタを介してコンピュータにある処理の実行を依頼する
- CPUはメモリから命令を読み出して実行し、結果をメモリ上のデータ保存領域に書き込む
- CPUはメモリ上に書き込んだ処理結果をハードディスクやSSDなどのストレージに保存したり、ネットワークを通して外部のシステムに送信したり出力デバイスを通して人に通知したりする
上の1~3のような手順を繰り返してユーザーにとって意味のある1つの処理にまとめたものをプログラムといいます。プログラムの種類として大きく分けて、OS、ミドルウェア、アプリケーションがあります
プログラムの構成単位
OSは各種プログラムをプロセスという単位で実行する。各プログラムは1つ又は複数のプロセスから構成されます。
OS(Linux)の機能
上で説明したOSの機能として以下のようなものがあります
プロセス管理
プロセススケジューラ
メモリ管理
ファイルシステムの実現
デバイス操作
例:デバイスの操作

LinuxのOSの一つの機能としてデバイス操作のためにデバイスドライバという共通のインターフェースを提供しています。
こうすることで開発者がここのデバイスの仕様について一つ一つ理解することなく共通のインターフェースを操作することで様々なデバイスを扱えるような仕組みを実現しています。
さらに、複数のプロセスが同時にデバイスを操作することで予期せぬ動作をするのを防ぐために、デバイスドライバを介して制御しています。
上図のように、ユーザーモードとカーネルモードという二つのモードによってより低レイヤーの処理を保護する仕組みになっています。カーネルモードを動作させるためにはユーザーモードからシステムコールを介して呼ぶ仕組みになっています。
デバイス操作以外にも、プロセス管理、プロセススケジューラ、メモリ管理などもこのようにユーザーモードとカーネルモードとの共同によって実現されています(カーネルモードで動作するOSの核となる処理をまとめたプログラムをカーネルと言います)
まとめ
コンピュータというハードウェがどのようにして外部から処理命令を受付けてそれを内部で実行するかの大まかな内容についてまとめ、プログラムの構成単位、そしてそのプログラムによって実現するLinuxの主な機能の紹介とそのうちの一つであるデバイスの操作の仕組みの概要についてまとめました。この概念の理解を元に、Linuxのメイン機能のプロセス管理やメモリ管理についての詳細を次の記事以降でみていきたいと思います。