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

Linux

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

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

Linux OS とは

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

ハードウェアリソース(CPU やメモリ等)の管理

  • どのプロセス(動作中のプログラム)がどれぐらいリソースを使うか決める
  • リソースを利用する他プロセスが既にいる場合、プロセスを待たせる
  • 次にリソースを使うプロセスの順番を決める

ハードウェアの抽象化(ハードウェアの違いを OS が吸収)

  • 仕様の異なるハードウェアでも、ソフトウェアは同じ命令で操作可能
    • A 社の SSD でも、B 社の SSD でも、C 社の USB メモリでも、OS に write() 命令を渡すと書き込みしてくれる

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つの方法でカーネル機能を呼び出せます。

  • アプリケーション-->システムライブラリ(glibc)-->システムコール-->カーネル
  • アプリケーション-->システムコール-->カーネル

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

  • 複雑なシステムコールより、簡単なシステムライブラリを使いたい
  • システムライブラリは、システムコールの呼び出しをある程度最適化している
    • システムコールの回数を減らす工夫がしてあり、誰が使ってもある程度速い

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

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

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

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

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

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

カーネルの機能

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

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

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

0

コメント