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

Linux

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

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

OS、カーネルは「ハードウェア」と「ソフトウェア」の仲介役なのですが、まずは「ハードウェア」・「ソフトウェア」について整理しておきたいと思います。

スポンサーリンク

ハードウェアとは

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

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

ハードウェア名役割イメージ
CPU計算処理を行う
以下の2つの計算モードを持つ
・ユーザーモード
(ソフトウェアの処理を行うモード)
・カーネルモード
(ハードウェアにアクセスするモード)
レジスタCPU が計算で利用する値を置く領域

電源を消すとデータが消える
メモリ
(主記憶装置/Primary Memory)
CPU が実行中のプログラムやその計算結果を一時的に置く領域
電源を切るとデータが消える
ストレージ
(補助記憶装置/Secondary Memory)
電源を切ってもデータが消えない領域
NICデータを他のコンピュータと送受信
昔は拡張カードの1つだったが、最近はマザーボードに最初から搭載
マウス
キーボード
データの入力を行う
ディスプレイデータの出力を行う

レジスタを含めた記憶装置の性能比較は以下のとおりです。

スポンサーリンク

ソフトウェアとは

コンピュータで利用する論理的な意味を持つデータのことです。
ハードウェアと違って、物理的に手で触れないものとも言えます。

ソフトウェアには以下の種類が存在します。

ソフトウェア名説明
プログラム処理を行うために作られたソフトウェア
プロセスメモリにロードされた実行中のプログラム
アプリケーションやりたいことを実現するプログラム
ミドルウェアアプリケーションがよく利用する OS の機能をまとめたプログラム
OSハードウェアを操作するためのプログラムの集合
システムソフトウェアとも言う
※厳密な定義は諸説あるのでざっくりそんなもんだと理解してください
スポンサーリンク

Linux OS とは

Linux はオープンソースの(ソースコードの公開された)OS です。
OS には、主に以下の2つ役割があります、
・「ハードウェアリソース(CPU やメモリ等)の管理」
・「ハードウェアの抽象化(ハードウェアの違いを OS が吸収)」

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

ハードウェアリソースとは、「CPU・メモリ・ストレージ等」のことです。
OS は「CPU・メモリ・ストレージ」を管理します。

ハードウェアの抽象化

ハードウェアの抽象化とは、ハードウェアの違いを OS が吸収することです。

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

プログラムは同じ write() 命令で、「A 社の SSD」でも、「B 社の SSD」でも、「C 社の USB メモリ」でも、OS がいい感じに変換してくれるので書き込みが可能です。

Linux OS の構成

Linux OS は以下の要素から構成されます。

  • カーネル(狭義の意味での Linux はこれを指します)
  • システムライブラリ
  • システムユーティリティ

カーネルとは

カーネルとは、CPU の動作モードがカーネルモードで動作するソフトウェアのことです。
カーネルは、プロセス(実行中のプログラム)がハードウェアリソース(CPU, Memory, マウス, キーボード, モニターなど)を操作するために利用するソフトウェアです。

CPUの動作モード

CPU の動作モードには次の2つがあります。

システムコール

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

例えば、プロセスハードウェアリソース(SSD, USB メモリ等)にデータを保存する場合、システムコールを呼び出します。

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

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

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

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

Man page of SYSCALLS

システムライブラリとは

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

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

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

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

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

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

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

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

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

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

カーネルの機能

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

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

上記の4つの機能については、【Linux 基礎入門2〜5】で紹介しているのでご覧ください。

参考資料

参考書籍

参考サイト

OS Exams Questions with Answers - Tutorialspoint
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...
1+

コメント