OS
OSとは
コンピューターシステムにおいてハードウェアとアプリケーションの橋渡しを行う。
- ハードウェアを抽象化してアプリケーションのインターフェースを提供する
たとえば、外部記憶装置にファイルを書き込む場合、その外部記憶装置はSATA接続のハードディスクかもしれませんし、NVMe接続のSSDかもしれませんし、はたまたUSBメモリかもしれません。しかも、各ディスクのファイルシステムは全部違うかもしれません。そんな状況でもアプリケーションは書き込み先のファイルをfopenしてwriteするだけで、書き込み先のデバイスが一体何なのかを気にせず書き込むことができます。これが「ハードウエアを抽象化して、アプリケーションにインターフェイスを提供する」ということなのです
- 計算資源を複数のアプリケーションに分配する
また、CPUは一般的に1コアで1つのアプリケーションしか動作させることができません。それでも、私たちはCPUのコア数より多くのアプリケーションを起動し、まるで同時に動いているかのように感じることができます。これは、OSがCPUの時間を細かい単位に分割し、各アプリケーションを切り替えつつ実 行するよう調整しているからなのです。これが「計算資源を複数のアプリケーションに分配する」という機能の例です。
OSの基本構造
カーネルはコンピューターの基本的な操作を行う機能を格納したライブラリ群のようなもので、コマンドやライブラリはこのカーネルの中にあるライブラリ(システムコール)を呼び出す。 例としてlsコマンドはC言語で書かれているが、その中でgetdentsというシステムコールを呼びファイルのリストを取得している。 つまりプロセスはOS内のコマンドやライブラリを呼び出し、そのコマンドやライブラリはカーネル内のシステムコールを呼び出している。 ここからはオペレーティングシステムのコンセプトを理解する。 以下のように追記すると、OSの基本構造についての詳細な情報が得られます。
-
コマンドやライブラリ:
- ユーザ空間: アプリケーションやユーザープログラムが動作する領域。
- シェル: ユーザーがコマンドを入力して実行するインターフェース。
- システムコールインターフェース: ユーザープログラムがカーネル機能を呼び出すためのAPI。
- ライブラリ: 共通機能を提供するコードの集まり。プログラムが効率よく開発・実行できるように支援する。
- アプリケーションプログラム: ユーザーが利用するためのソフトウェア(例: ブラウザ、エディターなど)。
- ユーザ空間: アプリケーションやユーザープログラムが動作する領域。
-
カーネル:
- プロセスマネージャー: プロセスの作成、スケジューリング、終了を管理する。
- プロセス: プログラムの実行単位で、独立したアドレス空間を持つ。
- スレッド: プロセス内の実行単位で、プロセス内のリソースを共有する。
- メモリマネージャー: プロセスが使用するメモリの割り当てと解放を管理する。
- ファイルシステム: ディスク上のファイルの読み書き、作成、削除を管理する。
- デバイスドライバー: ハードウェアデバイスとの通信を管理する。
- システムコールインターフェース: ユーザープログラムからカーネル機能への呼び出しを提供するAPI。
- セキュリティマネージャー: アクセス権限の管理やユーザー認証を行う。
- プロセスマネージャー: プロセスの作成、スケジューリング、終了を管理する。
-
デーモンやサービス:
- デーモン: バックグラウンドで動作するプロセスで、システムのサービスやメンテナンスを行う。
- サービス: 特定の機能を提供するプログラムで、ネットワークサービス(例: Webサーバ、データベースサーバ)などが含まれる。
-
ネットワークスタック:
- プロトコルスタック: ネットワーク通信を行うためのプロトコルを実装する。
- ネットワークドライバー: ネットワークインターフェースカード(NIC)との通信を管理する。
-
ユーザーインターフェース: