Linux Operating System has primarily three components
Kernel − Kernel is the core part of Linux.
System Library − System libraries are special functions or programs using which application programs or system utilities accesses Kernel's features.
System Utility − System Utility programs are responsible to do specialized, individual level tasks.
https://www.tutorialspoint.com/operating_system/os_linux.htm
Linux カーネルの機能 | |||
---|---|---|---|
ハードウェア/ソフトウェアとは
初めに、ハードウェア/ソフトウェアについて確認しておきます。
主要なハードウェアは以下のとおりです。
ハードウェア名 | 役割 | イメージ |
---|---|---|
CPU | 計算処理を行うデバイス | |
レジスタ (CPU の中にある) | CPU の計算で利用する値を置く領域 電源を消すとデータが消える | |
キャッシュメモリ (CPU の中にある) | CPU とメモリ間のバッファ ・CPU の計算結果をキャッシュ ・電源を消すとデータが消える | |
メモリ (主記憶装置/Primary Memory) | CPU で実行中のプログラム (プロセス) や、その計算結果を一時的に置くデバイス ・CPU からアクセス可能な記憶領域 ・電源を切るとデータが消える | |
ストレージ (補助記憶装置/Secondary Memory) | メモリにある計算結果をファイルとして保存するデバイス ・CPU からアクセス不可能な記憶領域 (メモリにロードする必要あり) ・電源を切ってもデータが消えない | |
NIC (Network Interface Card) | データを他のコンピュータと送受信するデバイス 昔は拡張カードの1つだったが、最近はマザーボードに最初から搭載 | |
マウス キーボード | データの入力を行うデバイス | |
ディスプレイ | データの出力を行うデバイス |
記憶装置の特徴
各記憶装置の特徴の比較は以下のとおりです。
CPU の動作モード
CPU の動作モードには「カーネルモード」と「ユーザーモード」があります。
カーネルモード | ユーザーモード | |
---|---|---|
動作するソフトウェア (プロセス) | カーネル | カーネル以外 |
ハードウェアへのアクセス制限 | なし | あり |
プロセスの同時実行 | 可能 | 不可能 (割り込みで切り替え) |
主なソフトウェアの一覧は以下とおりです。
ソフトウェア名 | 説明 |
---|---|
プログラム | 処理を行うために作られたソフトウェア |
プロセス | メモリにロードされた実行中のプログラム 実行中のプログラムの単位 子プロセスは新しく仮想メモリを確保 |
スレッド | プロセスの CPU コアを利用する単位 子スレッドは親スレッドの仮想メモリを共有 |
アプリケーション | やりたいことを実現するプログラム |
モジュール | 特定の機能を持つ小さなプログラム モジュールを組み合わせてアプリケーションやライブラリを作る |
ライブラリ | 再利用可能な形でまとめたプログラム ライブラリ単体では動かない |
パッケージ | プログラムの実行に必要なものをまとめたもので、主に以下が含む ・実行ファイル ・ライブラリ ・モジュール ・設定ファイル ・リソース (画像・音楽ファイルなど) パッケージとライブラリの関係については、卵が先か鶏が先かのような話 パッケージ A に含まれるライブラリには、パッケージ B が含まれていたりする。 |
ミドルウェア | アプリケーションがよく利用する OS の機能をまとめたプログラム |
カーネル | ハードウェアを操作するためのソフトウェア |
システムライブラリ | アプリケーションがカーネルを呼び出すためのライブラリ |
システムユーティリティ | コンピュータの「分析・管理・保守」を行うソフトウェア |
OS | カーネル・システムライブラリ・システムユーティリティをまとめたもの |
https://e-words.jp/w/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8.html
カーネルとは
ユーザーモードで動作するソフトウェア (プロセス) がカーネルを呼び出す場合、システムコールを利用します。(※ユーザーモードで動作するプロセスは、ハードウェアリソースにアクセス出来ません)
プロセスから呼び出されるシステムコールの一覧は strace <実行プログラム> で確認可能です。
execve("/usr/bin/echo", ["echo", "hello"], 0x7fff614927f8 /* 42 vars */) = 0 brk(NULL) = 0xe9f000 ・・・・
システムコールの一覧はこちらをご覧ください。
カーネルの役割
カーネルは、以下の役割を持ちます。
プログラムは、ハードウェアの違いを気にする必要がありません。
例えば、プログラムは次の3つの違いを気にせずに、同じシステムコールの write() で書き込み可能です。
- 「A 社の SSD」
- 「B 社の SSD」
- 「C 社の USB メモリ」
カーネルの代表的な機能
カーネルの代表的な機能を8つ紹介します。
カーネルの機能 | 対象のハードウェア | 説明 |
---|---|---|
プロセス管理 | CPU | プロセスに CPU を割り当てる |
メモリ管理 | メインメモリ | プロセスにメモリを割り当てる |
ストレージ管理 ファイルシステム ソフトウェア RAID | ストレージ | プロセスからストレージにデータを読み書き |
I/O デバイス管理 | 全てのデバイス | デバイスへの入出力 |
IPC | NIC | プロセス間の通信 (NIC 経由でネットワーク通信を実現) |
システムライブラリとは
システムライブラリの具体例は glibc ライブラリです。
アプリケーションは、以下の2つの方法でカーネル機能を呼び出せます。
システムコールを直接呼び出すのではなく、システムライブラリを経由する理由は以下の2つです。
- 複雑なシステムコールより、簡単なシステムライブラリを使いたい
- システムライブラリは、システムコールの呼び出しをある程度最適化している
- システムコールの回数を減らす工夫がしてあり、誰が使ってもある程度速い
システムユーティリティとは
具体的には以下のようなソフトウェアを指します。
UNIX におけるシステムユーティリティの一覧は以下の wiki にまとめられています。
関連情報
Linux カーネルの機能 | |||
---|---|---|---|