本記事は全5回に渡る Linux カーネルの解説のうち第1回「OS、カーネル」に関する記事です。
その他の Linux カーネルの解説については以下の記事をご確認ください。
- 【Linux カーネル: OS 基礎入門1】OS、カーネルとは ←イマココ
- 【Linux カーネル: OS 基礎入門2】プロセス管理・CPU 割り当て
- 【Linux カーネル: OS 基礎入門3】メモリ管理
- 【Linux カーネル: OS 基礎入門4】ファイルシステム
- 【Linux カーネル: OS 基礎入門5】メモリ管理
Linux OS とは
Linux はオープンソースの(ソースコードの公開された)OS です。
OS には、主に以下の2つ役割があります、
・「ハードウェアリソース(CPU やメモリ等)の管理」
・「ハードウェアの抽象化(ハードウェアの違いを OS が吸収)」
ハードウェアリソース(CPU やメモリ等)の管理
- どのプロセス(動作中のプログラム)がどれぐらいリソースを使うか決める
- リソースを利用する他プロセスが既にいる場合、プロセスを待たせる
- 次にリソースを使うプロセスの順番を決める
ハードウェアの抽象化(ハードウェアの違いを OS が吸収)
- 仕様の異なるハードウェアでも、ソフトウェアは同じ命令で操作可能
- A 社の SSD でも、B 社の SSD でも、C 社の USB メモリでも、OS に write() 命令を渡すと書き込みしてくれる
Linux OS の構成
Linux OS は以下の要素から構成されます。
- カーネル(狭義の意味での Linux はこれを指します)
- システムライブラリ
- システムユーティリティ
カーネルとは
カーネルとは、CPU の動作モードがカーネルモードで動作するソフトウェアのことです。
カーネルは、プロセス(動作中のプログラム)がハードウェアリソース(CPU, Memory, マウス, キーボード, モニターなど)を操作するために利用します。

CPUの動作モード
CPU の動作モードには次の2つがあります。
- カーネルモード
- 全てのリソースにアクセス可能なモード
- カーネルソフトウェアはこのモードで動作
- 単一のプロセス(動作中のプログラム)で実行
- つまり、他のプロセスが実行中の場合は、割り込んで処理
- ユーザーモード
- 処理に制限があるモード
- カーネルソフトウェア以外のソフトウェアはこのモードで動作
- 複数のプロセスを同時実行可能
システムコール
システムコールは、プロセスがカーネル機能を呼び出す処理のことです。
例えば、プロセスがハードウェアリソース(SSD, USB メモリ等)にデータを保存するには、システムコールを呼び出します。これはユーザーモードのプロセスでは、ハードリソースにアクセス出来ないからです。
プロセスから呼び出されるシステムコールの一覧は strace <実行プログラム> で確認可能です。
execve("/usr/bin/echo", ["echo", "hello"], 0x7fff614927f8 /* 42 vars */) = 0 brk(NULL) = 0xe9f000 ・・・・
システムコールの一覧は以下の記事で確認可能です。
システムライブラリとは
システムライブラリは、アプリケーションソフトウェアがカーネル機能を呼び出すために利用するライブラリです。(つまりライブラリの中身はシステムコールが含まれます)
システムライブラリの具体例は glibc ライブラリです。
アプリケーションソフトウェアは、以下の2つの方法でカーネル機能を呼び出せます。
- アプリケーション-->システムライブラリ(glibc)-->システムコール-->カーネル
- アプリケーション-->システムコール-->カーネル

システムコールを直接呼び出すのではなく、システムライブラリを経由する理由は以下の2つです。
- 複雑なシステムコールより、簡単なシステムライブラリを使いたい
- システムライブラリは、システムコールの呼び出しをある程度最適化している
- システムコールの回数を減らす工夫がしてあり、誰が使ってもある程度速い
システムユーティリティとは
システムユーティリティとは、コンピュータシステムの「分析・管理・保守」等を行うソフトウェアのことです。
具体的には以下のようなソフトウェアを指します。
- cat コマンド(ファイルの表示)
- cp コマンド(ファイルのコピー)
- date コマンド(日付を表示)
UNIX におけるシステムユーティリティの一覧は以下の wiki にまとめられています。
カーネルの機能
ここでは、カーネルの代表的な機能を4つ紹介します。
カーネルの機能 | 対応する主なハードウェア | 説明 |
---|---|---|
プロセス管理 | CPU | プロセスに CPU を割り当てる |
メモリ管理 | メインメモリ | プロセスにメモリを割り当てる |
ファイルシステム | ストレージ | ストレージのデータの読み書き |
デバイス管理 | 全てのデバイス | デバイスの入出力 |
上記の4つの機能については、【Linux 基礎入門2〜5】で紹介しているのでご覧ください。
コメント