Linuxと他のUNIX系カーネル
Linuxの特徴
Linuxの大きな魅力の一つは、商用ソフトウェアではなく、オープンソースであることです。
Linuxのソースコードは、GNU一般公衆利用許諾契約書(GNU General Public License, GPL) に基づいて公開されており、誰でも自由に閲覧・改良できます。
実際に、LinuxカーネルのソースコードはGitHubで公開されており、C言語(一部Rust)で記述されています。
GNUとは?
GNU(グヌー)は、自由ソフトウェアのオペレーティングシステム(OS)プロジェクトであり、Unix互換のシステムを目指しています。GNUは「GNU's Not Unix」の略称です。GNUとOSSの違い
GNUはOSS(オープンソースソフトウェア)を開発するプロジェクト名であり、OSSはソースコードが公開されているソフトウェアそのものを指します。GPLとは?
GPL(General Public License)は、自由ソフトウェアの開発・配布に用いられるライセンスの一つです。コピーレフト(Copyleft)とも呼ばれ、オープンソースソフトウェア(OSS)において最も代表的なライセンスの一つです。Linuxと他の代表的な商用UNIXカーネルの比較
モノリシックカーネル
モノリシックカーネル(Monolithic Kernel)は、OSのカーネルアーキテクチャの一種で、基本的なシステム機能をすべてカーネル内で実装します。
- すべての機能がカーネル空間で動作
- プロセス管理、メモリ管理、ファイルシステム管理、デバイスドライバなどの機能がカーネルに統合されています。
- カーネル空間とユーザー空間の違い
- アプリケーション(ユーザー空間)がカーネル機能を利用するには、システムコールを通じてアクセスする必要があります。
- メリットとデメリット
- メリット:カーネル空間で直接処理を行うため、動作が高速
- デメリット:コードが肥大化しやすく、複雑化する傾向がある
動的モジュールのサポート
従来のUNIXカーネルは、静的にコンパイル・リンクされることが一般的でしたが、近代的なカーネルでは、一部の機能を動的に組み込んだり削除したりできます。
Linuxはこの仕組みを特に強化しており、デバイスドライバなどのカーネルモジュールを必要に応じて自動的にロード・アンロードできます。
カーネルスレッド
カーネルスレッドは、独立してスケジューリングされるカーネル内の実行単位です。
- プロセス内で動作するが、システム全体で管理される
- スケジューラによって制御される
- マルチプロセッサ環境では、異なるスレッドを異なるプロセッサに割り当て、並列実行が可能
Linuxでは、カーネルスレッドは一部のカーネル機能を定期的に実行する目的でのみ使用され、一般的なプロセス管理とは異なる概念になっています。
マルチスレッドアプリケーションのサポート
ほとんどの近代的なOSは、マルチスレッドアプリケーションをサポートしています。
- 商用UNIX系OSでは、カーネルスレッドベース のLWP(LightWeight Process)が採用されることが多い。
- 一方、LinuxのLWPは、基本的な実行コンテキストとみなされ、clone() システムコールを用いて作成される。
マルチスレッドアプリケーションとは?
1つのプロセス内で複数のスレッドを並行実行するアプリケーションのこと。スレッドはプロセス内の最小の実行単位であり、リソースを共有しながら動作します。Linuxカーネルのプリエンプション(割り込み処理)
Linuxカーネル 2.6 以降では、「Preemptible Kernel」オプションを有効にすることで、カーネルモード実行中でもスケジューリングが可能 になりました。
これにより、リアルタイム処理や低遅延のアプリケーションにも適した環境を提供できます。
プリエンプトとは?
実行中のプログラム(タスク)を強制的に中断し、別のタスクを実行すること。マルチプロセッサ(SMP)対応
Linuxカーネル 2.6 以降は、SMP(対称型マルチプロセッシング) をサポートしており、複数のCPUを効率的に活用できます。
さらに、NUMA(Non-Uniform Memory Access) のような異なるメモリ構造にも対応しています。
SMPとは?
複数のプロセッサ(CPU)が対称的に動作し、同じメモリ空間を共有しながら並列処理を行うアーキテクチャ。NUMAとは?
マルチプロセッサ環境で、各プロセッサが専用のメモリを持ちつつ、他のプロセッサのメモリにもアクセスできるアーキテクチャ。ただし、遠いメモリへのアクセスは遅くなる。免責事項
本記事は、筆者の理解に基づいて執筆したものです。正確性には十分配慮していますが、内容の誤りや最新の情報と異なる可能性があります。
本記事の内容を参考にしたことによるいかなる損害についても、筆者は責任を負いかねますのでご了承ください。
正確な情報や書籍に書かれている根拠等はサポートしませんので、ご自身で公式ドキュメントをお調べください。
よって、この内容をAIの学習データに活用することはおすすめしません。