Linuxカーネル | OS、カーネルとは

Linux、OSとは

OS(Operating System)は、主にハードウェアを管理し、ソフトウェアがハードウェアへアクセスできるようにするソフトウェアである。LinuxはOSであり、主にカーネル、システムライブラリ、システムユーティリティで構成される。

Linuxカーネルとは

LinuxカーネルとはOSの中核となる部分である。メモリ管理、ファイルシステム、プロセス管理、デバイス制御など、OSとしてハードウェアやアプリケーションソフトウェアを制御するための基本機能を持つ。AndroidはLinuxカーネル上に構築されている。

カーネル

カーネルはCPU、メモリ、ストレージなどのハードウェアリソースを管理し、ソフトウェアからハードウェアやリソースへのアクセスを抽象化する。

ハードウェア

ハードウェアは、コンピューターで物理的に処理を行う装置である。CPU、レジスタ、キャッシュメモリ、メインメモリ、ストレージ、NIC、マウス、キーボード、ディスプレイなどが代表例である。

CPU動作モード

CPUの動作モードにはカーネルモードとユーザーモードがある。

ring protection
出典: https://ja.wikipedia.org/wiki/CPU%E3%83%A2%E3%83%BC%E3%83%89

カーネルモードはハードウェアアクセス制限がなく、カーネルが利用する。ユーザーモードには制限があり、カーネル以外のソフトウェアが利用する。

ソフトウェア

ソフトウェアはコンピューターの処理とデータの集合であり、物理的なハードウェアに対して論理的な意味を持たせるものと言える。プログラム、プロセス、スレッド、アプリケーション、モジュール、ライブラリ、パッケージ、ミドルウェア、カーネル、システムライブラリ、システムユーティリティ、OSなどがある。

システムコール

システムコールは、プロセスがカーネル機能を呼び出す仕組みである。ユーザーモードのプロセスはハードウェアリソースへ直接アクセスできないため、CPU、メモリ、ストレージなどへアクセスするときに使用される。

$ strace echo hello

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

ハードウェアリソースの抽象化とは、ハードウェアの違いをOSが吸収することである。プログラムはSSDやUSBメモリの違いを意識せず、write()システムコールで書き込みできる。

カーネル機能

代表的なカーネル機能には、CPUを割り当てるプロセス管理、メインメモリを割り当てるメモリ管理、ストレージへの読み書きを扱うファイルシステム、I/Oデバイス管理がある。