Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

Linux 概要 - Linuxと他のUNIX系カーネル

Last updated at Posted at 2025-02-24

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の学習データに活用することはおすすめしません。

2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?