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

OS (Operating System)OS (Operating System) とは、主に以下の2つの役割を持つソフトウェアです。
・ハードウェアの管理
プロセス (実行中のソフトウェア) からハードウェアにアクセスする方法を提供
Linux とはLinux とは、OS の一種で、次の3つから構成されます。
カーネル (狭義の意味での Linux はこれを指します)
・システムライブラリ
・システムユーティリティ
プロセスは実行中のソフトウェア、カーネルもソフトウェアの1つ

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つだったが、最近はマザーボードに最初から搭載
マウス
キーボード
データの入力を行うデバイス
ディスプレイデータの出力を行うデバイス
引用: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

ソフトウェアとは

ソフトウェアとは、コンピュータの処理やデータのまとまりのことです。
ソフトウェアは、「ハードウェアの物理事象」に、「論理的な意味を持たせたもの」です。
※例:「電圧 (物理事象)」が「低い場合は0、高い場合は1を表す(論理的な意味)」

主なソフトウェアの一覧は以下とおりです。

ソフトウェア名説明
プログラム処理を行うために作られたソフトウェア
プロセスメモリにロードされた実行中のプログラム
実行中のプログラムの単位
プロセスは新しく仮想メモリを確保
スレッドプロセス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 の動作モードがカーネルモードで動作するソフトウェアのことです。

ユーザーモードで動作するソフトウェア (プロセス) がカーネルを呼び出す場合、システムコールを利用します。(※ユーザーモードで動作するプロセスは、ハードウェアリソースにアクセス出来ません)

システムコール

システムコールとは、プロセスがハードウェアリソース (CPU/メモリ/ストレージ等) にアクセスするために、カーネルを呼び出す処理です。

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

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

システムコールの一覧はこちらをご覧ください。

カーネルの役割

カーネルは、以下の役割を持ちます。

  • ハードウェア・リソース (CPUメモリストレージ等) の管理
  • ソフトウェアからハードウェア・リソースへのアクセスを抽象化
プロセスは実行中のソフトウェア、カーネルもソフトウェアの1つ

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

ハードウェア・リソースの抽象化とは、ハードウェアの違いを吸収するカーネルの機能です。

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

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

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

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

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

カーネルの代表的な機能

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

カーネルの機能対象のハードウェア説明
プロセス管理CPUプロセスCPU を割り当てる
メモリ管理メインメモリプロセスメモリを割り当てる
ストレージ管理
ファイルシステム
ソフトウェア RAID
ストレージプロセスからストレージにデータを読み書き
I/O デバイス管理全てのデバイスデバイスへの入出力
IPCNICプロセス間の通信 (NIC 経由でネットワーク通信を実現)
スポンサーリンク

システムライブラリとは

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

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

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

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

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

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

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

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

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

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

関連情報

Linux カーネルの機能

参考サイト

OS Exams Questions with Answers
OS Exams Questions with Answers - This tutorial covers concepts like overview of Operating System, Types, Services, Properties, Process Scheduling, CPU Scheduli...