FE EXAM

カーネル(OSの中核)

OSの中核として、ハードウェア資源を管理する基本機能を担う部分。

DIAGRAM
アプリカーネルハードウェア
アプリケーション(ユーザーが使うソフト)ブラウザ表計算メールゲーム資源の要求カーネル(OSの中核)プロセス管理CPUの割当てメモリ管理主記憶の割当てI/O管理入出力・デバイス制御ファイル管理データの保存制御・割当てハードウェア(物理的な装置)CPUメモリディスク入出力装置
解説

📌
カーネルとは

アプリカーネル(中核)ハードウェア

カーネルとは、OS(オペレーティングシステム=コンピュータ全体を管理する基本ソフト)の中核となる部分のことです。アプリケーション(=ユーザーが使うソフト)とハードウェア(=CPUやメモリなどの物理的な装置)の間に位置し、ハードウェア資源を管理します。

身近な例で考えると、会社の総務部に似ています。社員(アプリ)が「会議室を使いたい」「備品が欲しい」とお願いすると、総務部(カーネル)が建物や備品(ハードウェア)をうまく割り振ってくれます。社員が直接設備をいじり合うと混乱するので、間に立つ存在が欠かせません。

上の図解のように、カーネルは必ずアプリとハードウェアの真ん中に位置します。アプリはカーネルを通してしかハードウェアを使えないため、複数のアプリが同時に動いても資源の取り合いが起きないように調整できるのです。

📌
主要機能

プロセスメモリI/Oファイルカーネルが担う4つの管理資源ごとに専門の管理機能がある

カーネルは、ハードウェア資源の種類ごとに専門の管理機能を持っています。代表的なものは次の4つです。
プロセス管理:どのアプリにいつCPU(=計算を行う頭脳)を割り当てるかを決める
メモリ管理:主記憶(=作業中のデータを置く場所)をアプリに割り当て、足りなくならないよう調整する
I/O管理:キーボードやプリンタなどの入出力装置を制御し、データのやり取りを仲介する
ファイル管理:ディスク上のデータをファイルという単位で読み書きできるようにする

これらはすべて「限られた資源を、複数のアプリで公平に・効率よく分け合う」ための機能です。資源は無限ではないので、誰かが独占しないように調整する役目をカーネルが一手に引き受けています。

📌
モノリシック/マイクロカーネル

カーネルの作り方には大きく2つの方式があります。主要機能をどこに置くかで分かれます。

項目モノリシックカーネルマイクロカーネル
構成主要機能を1つの大きなカーネルにまとめる最小限の機能だけカーネルに残し他はユーザ空間に分離
速度機能間の連携が速いやり取りが増えオーバーヘッドが出やすい
安定性・柔軟性一部の不具合が全体に波及しやすい障害を分離でき安定・柔軟
代表例Linux など研究用OSや一部の組込みOS

モノリシックカーネルは、プロセス管理・メモリ管理・I/O管理などの主要機能を1つの大きなかたまりとしてカーネル内に詰め込む方式です。機能同士が直接やり取りできるため動作が速い一方、規模が大きくなり、一部の不具合が全体に影響しやすい面があります。

一方マイクロカーネルは、本当に必要な最小限の機能だけをカーネルに残し、それ以外はユーザ空間(=一般のアプリと同じ領域)に分離する方式です。各機能が独立しているため安定性・柔軟性が高い反面、機能間のやり取りが増えてオーバーヘッド(=余分な処理の手間)が生じやすくなります。たとえるなら、何でも社内で抱える会社(モノリシック)と、専門業務を外部に切り出す会社(マイクロ)の違いに似ています。

📌
ユーザモードとカーネルモード

ユーザモードアプリが動く領域 ── ハードに直接触れない特権の壁(保護境界)カーネルモードカーネルだけが動く領域 ── ハードを自由に操作

CPUは「ユーザモード」と「カーネルモード」の2種類の動作モードを持っています。
ユーザモード:アプリが動く領域。ハードウェアへの直接アクセスは禁止されている
カーネルモード:カーネルだけが入れる領域。CPU・メモリ・入出力装置を自由に操作できる

なぜ2つに分けるのか。もしアプリが直接ハードウェアを操作できてしまうと、悪意あるアプリや不具合のあるアプリが他のアプリのメモリを書き換えたり、システム全体をクラッシュさせたりする恐れがあります。「壁」を設けて、ハードウェア操作は必ずカーネルを経由させることで、システム全体を安全に守るのです。

アプリがディスクを読みたいときは「カーネルにお願い(システムコール)」を出し、カーネルモードに切り替わったカーネルが代わりに操作します。身近な例では、店員(カーネル)だけが厨房に入れて、お客(アプリ)はカウンター越しにオーダーするレストランのようなイメージです。

📌
カーネルがなぜ必要か

カーネルなし(直接アクセス)アプリAアプリBハードウェア→ 競合・クラッシュカーネルあり(仲介)アプリAアプリBカーネルハードウェア

カーネルが必要な理由は「資源の競合を防ぎ、システム全体を安定させるため」です。コンピュータには同時にたくさんのアプリが動いていますが、CPUもメモリも入出力装置も1つしかありません

カーネルがなければどうなるか。
・複数のアプリが同じメモリ領域に同時に書き込んでデータを上書きしてしまう
・あるアプリがCPUを独占して、他のアプリが一切動けなくなる
・入出力装置へのアクセスが衝突して、システムがクラッシュする

カーネルが間に入ることで、「どのアプリにいつ・どれだけの資源を渡すか」を一元管理できます。上の図の左側(カーネルなし)のように各アプリが直接ハードにアクセスすると混乱しますが、右側(カーネルあり)のように仲介役が交通整理することで公平で安定した動作が実現するのです。

✏️
練習問題

Q1. カーネルの役割として最も適切なものはどれか。

Q2. カーネルの主要機能に含まれないものはどれか。

Q3. モノリシックカーネルの説明として正しいものはどれか。

関連コンテンツ