Linuxカーネルとは何ですか?
1300万行を超えるコードを持つLinuxカーネルは、世界で最大のオープンソースプロジェクトの1つですが、カーネルとは何であり、それは何に使用されていますか。?
だからカーネルとは何ですか?
カーネルは、コンピュータのハードウェアとやり取りするための、交換が簡単なソフトウェアの最低レベルです。 「ユーザーモード」で実行されているすべてのアプリケーションを物理的なハードウェアに接続し、サーバーと呼ばれるプロセスがプロセス間通信(IPC)を使用して相互に情報を取得できるようにします。.
異なる種類のカーネル
もちろん、カーネルを構築するにはさまざまな方法があり、最初から構築する場合はアーキテクチャ上の考慮事項があります。一般に、ほとんどのカーネルは、モノリシック、マイクロカーネル、ハイブリッドの3つのタイプのいずれかに分類されます。 Linuxはモノリシックカーネルですが、OS X(XNU)とWindows 7はハイブリッドカーネルを使用します。 3つのカテゴリーを簡単に見てみましょう。後で詳しく説明します。.
による画像 アップタウンポップコーン
マイクロカーネル
マイクロカーネルは、CPU、メモリ、およびIPCという、必要なものだけを管理するというアプローチを取ります。コンピュータ内の他のほとんどすべてのものはアクセサリと見なすことができ、ユーザモードで扱うことができます。マイクロカーネルは、オペレーティングシステムが同じ方法でハードウェアにアクセスしようとしている限り、ビデオカードやオペレーティングシステムを変更しても心配する必要がないため、移植性の利点があります。マイクロカーネルは、メモリとインストールスペースの両方のために、非常に小さいフットプリントを持っています、そしてスーパーバイザーモードとして高いパーミッションを持っていない特定のプロセスだけがユーザーモードで動くのでより安全になる傾向があります.
長所
- 移植性
- 設置面積が小さい
- 小さなメモリ使用量
- セキュリティ
短所
- ハードウェアはドライバーを通してより抽象化されている
- ドライバーがユーザーモードになっているため、ハードウェアの反応が遅くなることがある
- プロセスは情報を得るためにキューで待つ必要があります
- プロセスは待たずに他のプロセスにアクセスすることはできません。
モノリシックカーネル
モノリシックカーネルは、CPU、メモリ、およびIPCだけでなく、デバイスドライバ、ファイルシステム管理、およびシステムサーバー呼び出しなども含むため、マイクロカーネルとは反対です。モノリシックカーネルは、プログラムがメモリや実行中の他のプロセスから情報を取得する必要がある場合はアクセスするためのより直接的な行を持ち、物事を成し遂げるためにキューで待つ必要がないため、ハードウェアおよびマルチタスクへのアクセスに優れています。しかし、これは問題を引き起こす可能性があります。スーパーバイザーモードで動作するものが多いほど、システムが適切に動作しない場合にシステムをダウンさせる可能性があるためです。.
長所
- プログラムのためのハードウェアへのより直接的なアクセス
- プロセス間でやり取りするプロセスが簡単になります
- お使いのデバイスがサポートされている場合は、追加インストールなしで動作するはずです。
- プロセッサ時間のキューがないため、プロセスの反応が速くなります
短所
- 設置面積が大きい
- 大きなメモリ使用量
- すべてがスーパーバイザーモードで実行されるため、安全性が低くなります。
Flickrのschoschieを介した画像
ハイブリッドカーネル
ハイブリッドカーネルには、ユーザーモードで実行したいものとスーパーバイザーモードで実行したいものを選択して選択する機能があります。多くの場合、デバイスドライバやファイルシステムのI / Oなどはユーザーモードで実行され、IPCとサーバーの呼び出しはスーパーバイザーモードに保たれます。これは両方の長所を与えますが、ドライバーの責任はすべて彼ら次第であるため、多くの場合ハードウェア製造元のより多くの作業が必要になります。また、マイクロカーネルに固有の待ち時間の問題もいくつかある可能性があります。.
長所
- 開発者は、ユーザーモードで実行するものとスーパーバイザーモードで実行するものを選択して選択できます。
- モノリシックカーネルよりも小さい設置面積
- 他のモデルよりも柔軟
短所
- マイクロカーネルと同じプロセスの遅れがある
- デバイスドライバはユーザーによって管理される必要があります(通常)
Linuxカーネルファイルはどこにありますか?
Ubuntuのカーネルファイルは/ bootフォルダに格納されており、vmlinuzという名前です。-バージョン. vmlinuzという名前は、60年代にカーネルを単に「unix」と呼んでいたUnixの世界から来たもので、Linuxは90年代に最初に開発されたときにカーネルを「linux」と呼んでいました。.
仮想メモリがマルチタスク機能を容易にするために開発されたとき、カーネルが仮想メモリをサポートすることを示すために“ vm”がファイルの先頭に置かれました。しばらくの間、Linuxカーネルはvmlinuxと呼ばれていましたが、カーネルは利用可能なブートメモリに収まるには大きすぎるため、カーネルイメージは圧縮され、最後のxはzlib圧縮で圧縮されています。これと同じ圧縮方法は常に使用されるわけではなく、多くの場合LZMAまたはBZIP2に置き換えられます。一部のカーネルは単にzImageと呼ばれます。.
バージョン番号はA.B.C.Dという形式になります。ここで、A.Bはおそらく2.6、Cはあなたのバージョン、そしてDはあなたのパッチまたは修正を示します。.
/ bootフォルダには、initrd.img-version、system.map-version、およびconfig-versionという他の非常に重要なファイルもあります。 initrdファイルは、実際のカーネルファイルを抽出して実行する小さなRAMディスクとして使用されます。 system.mapファイルは、カーネルが完全にロードされる前にメモリ管理に使用され、configファイルは、コンパイル時にカーネルイメージにロードするオプションとモジュールをカーネルに指示します。.
Linuxカーネルアーキテクチャ
Linuxカーネルはモノリシックなので、他のタイプのカーネルよりも最大のフットプリントと最も複雑なものになります。これは、Linuxの初期の頃はかなり議論されていた設計上の機能であり、それでもモノリシックカーネルには本来備わっているものと同じ設計上の欠陥がいくつかあります。.
Linuxカーネル開発者がこれらの欠陥を回避するために行ったことの1つは、実行時にロードおよびアンロードできるカーネルモジュールを作成することでした。つまり、カーネルの機能をその場で追加または削除できます。これは、低レベルの仮想化のようにサーバープロセスを実行するモジュールを含めることによって、カーネルにハードウェア機能を追加することを超えることができますが、場合によってはコンピュータを再起動せずにカーネル全体を置き換えることもできます。.
再起動する必要なしにWindowsサービスパックにアップグレードできるかどうかを想像してみてください…
カーネルモジュール
Windowsに利用可能なすべてのドライバが既にインストールされていて、必要なドライバをオンにしなければならなかった場合はどうなりますか?それは本質的にカーネルモジュールがLinuxのためにすることです。カーネルモジュールは、ロード可能カーネルモジュール(LKM)とも呼ばれ、使用可能なメモリをすべて消費することなく、カーネルをすべてのハードウェアで機能させるために不可欠です。.
通常、モジュールは、デバイス、ファイルシステム、システムコールなどの機能のために基本カーネルに機能を追加します。 LKMのファイル拡張子は.koで、通常は/ lib / modulesディレクトリに格納されています。モジュール化されているため、menuconfigコマンドを使って起動時にモジュールをロードするかロードしないか、または/ boot / configファイルを編集することによってカーネルを簡単にカスタマイズできます。またはmodprobeを使ってモジュールをロードおよびアンロードできます。コマンド.
Ubuntuのようないくつかのディストリビューションでサードパーティとクローズドソースモジュールが利用可能で、モジュールのためのソースコードが利用可能でないのでデフォルトでインストールされないかもしれません。ソフトウェアの開発者(すなわち、とりわけnVidia、ATI)はソースコードを提供しないが、むしろ彼らはそれら自身のモジュールを構築しそして配布のために必要な.koファイルをコンパイルする。これらのモジュールはビールのように無料ですが、スピーチのように無料ではないため、メンテナが非フリーソフトウェアを提供することでカーネルを「汚染」していると感じるため、一部のディストリビューションには含まれません。.
カーネルは魔法ではありませんが、コンピュータが正しく動作するためには不可欠です。 LinuxカーネルはOS XやWindowsとは異なります。カーネルレベルのドライバが含まれており、多くのことが「そのまま」サポートされるからです。願わくばあなたはあなたのソフトウェアとハードウェアがどのように連携するのか、そしてあなたがあなたのコンピュータをブートするのに必要なファイルについてもう少し知っているでしょう.
Kernel.org
による画像 Inridtaylar