こんにちは!はづきです
文系から一部上場IT企業に就職し、エンジニアをやっています
「Linux学習でみかける”カーネル”って何のことだろう。。」
今回は「Linuxカーネルとは」といった疑問を解決するためにLinuxカーネルについて解説します
カーネルはOSというソフトウェアを構成するプログラムの1つです。プロセス管理やハードウェアのリソース管理など、OSの中核を担っています
『そもそもLinuxって何??OSって何??』という人もわかるように基礎知識から解説しますので安心してください
※この記事は初心者向けに平易に解説しています。正確な理解をしたい人は専門書・専門家をあたっていただければと思います。また、この記事の情報におけるCPの動作結果については自己責任でお願いします。
※本サイトにはプロモーション・広告が含まれています(はづきのブログより)
前提知識:LinuxとはOSの1種
Linuxカーネルの前に、前提知識としてLinuxとは何かを解説します
LinuxはOSの種類の1つです
OSはハードウェアとソフトウェアの仲介をするソフトウェアで、アプリケーションからハードウェアの使用要求を受けたときに適切なハードウェアに接続します
例えば、ゲームアプリが記憶装置を使いたい場合はOSに依頼をして、OSがハードディスクなどの記憶装置(ハードウェア)と連携します
LinuxはOSの中でも歴史が長く、安価で動作が軽量なことからサーバ用のコンピュータに導入されることが多いです。また、WindowsやMacOSと異なりコマンドで操作するCUI操作が基本になります
Linuxカーネルとは
"Linux"は、広義では"LinuxOS"、狭義では"Linuxカーネル"を指します
ここでは、狭義でのLinuxカーネルについて解説していきます
カーネルはOSを構成するプログラムの1つ
カーネルは、OSというソフトウェアを構成するプログラムの1つです
OSの構成は具体的に以下のようなプログラムによって成り立っています。カーネルはその中の1つという位置づけですね
- ブートローダ
- デーモン
- デスクトップマネージャ
- アプリケーション
- シェル
- カーネル
カーネルは、LinuxやWindowsなどのOSの種類を決定するOSの核(Kernel)となる部分になります。OSとして機能するための重要な役割を担っています
カーネルの役割
カーネルの主な役割として、プロセス管理とメモリ管理/デバイス管理について解説します
プロセス管理とは、プログラムの実行単位を1プロセスとして扱い、プログラムの実行などに必要なメモリの割り当てを行うことを指します
例えば、Linuxにmkdirコマンドを入力して実行すると、「ディレクトリを作成する」というプロセスが生成されます。そして、この処理に必要なメモリ領域を確保することで、他の処理によってディレクトリ作成の処理が阻害されることがないようにします
メモリ管理/デバイス管理は、OSのアプリケーションとハードウェアの仲介という機能を実行するための役割です
OSがアプリケーションから画面表示やデータの保存等の依頼を受けると、ディスプレイやハードディスクなどの適切なハードウェアを割り当てます
以上がカーネルの代表的な役割です
カーネルとシェルの関係
Linux学習の中でカーネルと同じくらい見かける言葉として「シェル」があります
シェルもカーネルと同様にOSを構成するプログラムの1つです。ここから先はカーネルと比較をしながらシェルについて解説していきます
シェルがコマンドを受け取りカーネルが実行する
シェルは、カーネルのインターフェースとなるソフトウェアで、ユーザとカーネルの橋渡しをしています
そのため、ユーザは直接カーネルを操作することはできません
以下の例で、シェルとカーネルの役割についてみてみましょう
- ユーザからターミナル(※1)を通してコマンドを受け取る
- コマンド名に該当する処理の実行ファイルを探す
- 実行ファイルをもとに処理を実行する
- 実行結果をユーザに返す
このうち1、2、4はシェルが、3はカーネルが担当しています。カーネルは基本的にはユーザが入力したコマンドの実行処理のみを担当しており、その他の処理はシェルが行います
※ターミナルとは、ユーザがコマンドを入力する黒い画面のことです
シェルとカーネルを分ける理由
シェルとカーネルで処理を分けている理由には以下があります
- ユーザがカーネルを直接操作できないことで、カーネルの破損を防ぐ
- 処理ごとにプログラムを分けることでエラーや高負荷によるクラッシュの影響範囲を低減する
- シェルの種類の切り替えが可能になり、目的ごとに柔軟な操作ができる
カーネルはOSの中でも核となる重要なプログラムです。ここに人の手が加わらないようにシェルを挟む、というのがシェルとカーネルを分ける主な目的だと思われます
また、シェルは種類が複数ありそれぞれ機能が異なります。近年はbashが主流ですが、いまでも用途に応じて使い分けられています
Linuxカーネルのバージョンの確認方法
Linuxカーネルの確認するためのコマンドとして、「uname」コマンドがあります
以下で、実際の実行例を確認してみましょう
hazukiblog@hazukiBlog:~$ uname -v
#1 SMP Fri Jan 27 02:56:13 UTC 2023
hazukiblog@hazukiBlog:~$ uname -s
Linux
hazukiblog@hazukiBlog:~$
「-v」はカーネルのバージョンを確認するためのオプションです
ここで表示されているのは「#1 SMP」のカーネルが「Fri Jan 27 02:56:13 UTC 2023」にコンパイルされたということを指しています
SMPは和名で「対象型マルチプロセッシング」と呼び、1台のコンピュータに複数のCPUがあるときに処理を等しく分担させる処理方式を指します。UTC(Coordinated Universal Time)は「協定世界時」という世界で使われる標準時です。これはGMT(グリニッジ標準時)と同じ時間を指しています
「-s」はカーネルの名前を表示するコマンドです
ここでは、「Linux」と出力されています。これが「カーネルとしてのLinux」を狭義のLinuxと呼ぶ理由です(広義ではLinuxOS全体を指してLinuxと呼びます)。
まとめ
この記事ではLinuxカーネルについて解説しました
- カーネルはOSを構成するプログラムの1つ
- ユーザから直接操作はできないため、シェルを介して操作する
- カーネルは処理の実行やハードウェア/メモリ管理等を担当する
カーネルについてざっくりイメージできているとLinux学習がはかどると思います
今回の解説でLinuxの理解が進めば幸いです
おしまい
コメント