【Linux カーネル: OS 入門1】OS、カーネルとは

本記事は以下の書籍を参考にしています。

また、本記事は Linux カーネルの解説のうち第1回「OS、カーネル」に関する記事です。

その他の Linux カーネルの解説については以下の記事をご確認ください。

スポンサーリンク

Linux, OS とは

OS (Operating System) とは、主に以下の2つの役割を持つソフトウェアです。
・ハードウェアを管理
・ソフトウェアがハードウェアにアクセス

Linux とは、OS です。
Linux は主に以下の3つから構成されます。
・カーネル(狭義の意味での Linux はこれを指します)
・システムライブラリ
・システムユーティリティ

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

カーネルとは

カーネルとは、CPU動作モードがカーネルモード (後述します) で動作するソフトウェアのことです。
カーネルは、以下の機能を持ちます。
ハードウェア・リソース (CPU、メモリ、ストレージ等) の管理
ソフトウェアからハードウェア・リソースへのアクセスを抽象化

プロセス、カーネルはソフトウェア
CPU・Memory・Devices (ストレージ等) はハードウェア

まずは、ハードウェア、ソフトウェアについて説明を行います。

ハードウェアとは

ハードウェアとは、コンピュータで物理的な処理を行うデバイス (機械) のことです。

主なハードウェアの一覧は以下のとおりです。

ハードウェア名役割イメージ
CPU計算処理を行うデバイス
レジスタ
(CPU の中にある)
CPU の計算で利用する値を置く領域
電源を消すとデータが消える
キャッシュメモリ
(CPU の中にある)
CPU とメモリ間のバッファ
・CPU の計算結果をキャッシュ
・電源を消すとデータが消える
メモリ
(主記憶装置/Primary Memory)
CPU で実行中のプログラム (プロセス) や、その計算結果を一時的に置くデバイス
・CPU からアクセス可能な記憶領域
電源を切るとデータが消える
ストレージ
(補助記憶装置/Secondary Memory)
メモリにある計算結果をファイルとして保存するデバイス
CPU からアクセス不可能な記憶領域
 - CPU がファイルにアクセスするには、一度メモリに読み込む必要がある
電源を切ってもデータが消えない
NICデータを他のコンピュータと送受信するデバイス
昔は拡張カードの1つだったが、最近はマザーボードに最初から搭載
マウス
キーボード
データの入力を行うデバイス
ディスプレイデータの出力を行うデバイス
引用:https://medium.com/software-design/why-software-developers-should-care-about-cpu-caches-8da04355bb8a
CPU の動作モード

CPU の動作モードには「カーネルモード」と「ユーザーモード」があります。

https://ja.wikipedia.org/wiki/CPU%E3%83%A2%E3%83%BC%E3%83%89

各モードの違いは以下のとおりです。

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

システムコール

システムコールは、プロセスカーネル機能を呼び出す処理のことです。

システムコールは、プロセスハードウェア・リソース(CPU・メモリストレージ等)にアクセスする際に利用します。

これは、ユーザーモードプロセスでは、ハードウェア・リソースにアクセス出来ないからです。

プロセスから呼び出されるシステムコールの一覧は strace <実行プログラム> で確認可能です。

strace echo hello
execve("/usr/bin/echo", ["echo", "hello"], 0x7fff614927f8 /* 42 vars */) = 0
brk(NULL)                               = 0xe9f000
・・・・

システムコールの一覧は以下の記事で確認可能です。

Man page of SYSCALLS

ハードウェアリソースの抽象化

カーネルの機能の1つである「ハードウェア・リソースの抽象化」とは、ハードウェアの違いを OS が吸収することです。

プログラムハードウェアの違いを気にする必要がありません。

プログラムは以下の3つの違いを気にせずに同じシステムコールwrite() で書き込み可能です。

  • 「A 社の SSD」
  • 「B 社の SSD」
  • 「C 社の USB メモリ

ハードウェアリソースの管理

カーネルの機能の1つである「ハードウェア・リソースの管理」とは、主に以下の3つのことです。
プロセスが利用するハードウェア・リソースの量を決定
プロセスが利用するハードウェア・リソースの順番を決定
・他のプロセスハードウェア・リソースを利用している場合、プロセスを待たせる

カーネルの機能

カーネルの代表的な機能を4つ紹介します。

カーネルの機能対象のハードウェア説明
プロセス管理CPUプロセスに CPU を割り当てる
メモリ管理メインメモリプロセスメモリを割り当てる
ストレージ管理
ファイルシステム
ストレージプロセスからストレージにデータを読み書き
I/O デバイス管理全てのデバイスデバイスへの入出力

各カーネルの機能については、以下の記事で説明しています。

スポンサーリンク

システムライブラリとは

システムライブラリは、アプリケーションカーネル機能を呼び出すために利用するライブラリです。(つまりライブラリの中身はシステムコールが含まれます)

システムライブラリの具体例は glibc ライブラリです。

アプリケーションは、以下の2つの方法でカーネル機能を呼び出せます。

システムコールを直接呼び出すのではなく、システムライブラリを経由する理由は以下の2つです。

スポンサーリンク

システムユーティリティとは

システムユーティリティとは、コンピュータシステムの「分析・管理・保守」等を行うソフトウェアのことです。

具体的には以下のようなソフトウェアを指します。

  • cat コマンド(ファイルの表示)
  • cp コマンド(ファイルのコピー)
  • date コマンド(日付を表示)

UNIX におけるシステムユーティリティの一覧は以下の wiki にまとめられています。

UNIXユーティリティの一覧 - Wikipedia

Linux カーネルの関連記事

「OS・カーネル」の説明については以上となります。

カーネルの各機能の詳細については、以下の続きの記事をご覧ください。


参考サイト

OS Exams Questions with Answers
OS Exams Questions with Answers, These selected questions and answers are prepared from Operating Systems Exam point of view and will also help in quick revisi...