GNU/Linux >> Linux の 問題 >  >> Linux

Linux と UNIX カーネルの主な違い

UNIX は、ほとんどのオペレーティング システムの母体と見なされてきました。このファミリーの人気のあるメンバーには以下が含まれます:

  • AT&T が開発した System V Release 4 (SVR4)。
  • カリフォルニア大学の 4.4 BSD
  • IBM の AIX
  • Hewlett-Packard の HP-UX
  • Sun Microsystems の Solaris


Linux は、このファミリーの比較的新しいメンバーです。 Linux は、1991 年に Linus Torvalds によって IBM 互換のパーソナル コンピュータ用に最初に作成されました。 OS として、GNU Linux は過去 20 年間に大きな成功と人気を博しており、現在ほとんどの商用サーバーが GNU Linux を使用しています。人気に拍車をかけるように、最近ではエンド ユーザーも Linux を使い始めており、人気のあるラップトップおよび PC メーカーのほとんどがインストール済み OS として GNU Linux を提供しています。

Linux が OS なのかカーネルなのか、いまだに混乱している方のために説明すると、Linus が書いた本当の意味での Linux は、Unix 内部に関する本を参照して書かれたカーネルでした (Linux カーネルは、他の多くの Unix ライクなカーネルから優れた機能を取り入れていますが)。も) 一方、Linux カーネルの上にグラフィカル デスクトップ、テキスト エディター、コンパイラなどのユーティリティを含む市販のディストリビューションは、完全なオペレーティング システムです。

Linux Kernel はその機能のほとんどを Unix/Unix-Like カーネルから借用していますが、それでも 2 つのタイプのカーネルが大きく異なる点が数多くあります。この記事では、主にこれらの違いに焦点を当てます。リストはすべてを網羅しているわけではありませんが、主な違いが含まれています。

1.モノリシック vs マイクロカーネル アプローチ

モノリシック カーネルは、すべてのカーネル コードが単一のプロセスとして実行されるカーネルであり、マイクロ カーネル カーネルは、カーネルのコア (OS のさまざまな部分を制御する) が 1 つのプロセスで実行され、デバイス ドライバーなどの他のサービスは別のプロセスとして実行されるカーネルです。プロセス。 Linux はモノリシック アプローチに従いますが、マイクロ カーネル アプローチに従う Unix ライク カーネルにはいくつかの例外があります。

2.カーネルへの機能の追加/削除

従来の Unix/Unix ライクなシステムでは、追加される新しいモジュールの静的リンクが必要ですが、Linux は、デバイス ドライバーなどのカーネル コンポーネントを動的にロードおよびアンロードできる強力な機能をサポートしています。この機能は、ローダブル カーネル モジュール (LKM) として知られています。新しいコンポーネントは、LKM としてカーネルに追加/削除できます。これは、カーネル全体を再度コンパイルする必要がないことを意味します。また、コンポーネントが不要な場合は、簡単にアンロードできます。この機能により、Linux カーネルは非常に柔軟になります。

3.カーネル スレッディング

多くの Unix ライクなカーネルは、一連のカーネル スレッドとして編成されています。カーネル スレッドは、独立した実行フローと考えることができます。カーネル スレッドは、ユーザー プロセスまたは一部のカーネル コードを実行できます。基本的なアイデアは、スレッドが同じアドレス空間で動作するため、プロセス間のコンテキスト スイッチよりも安価なカーネル スレッド間のコンテキスト スイッチを実行することです。多くの Unix 系 OS はプロセス コンテキストの切り替えにカーネル スレッドを使用しますが、Linux は一部のカーネル コードを定期的に実行するためだけにカーネル スレッドを使用します。

4.マルチスレッド アプリケーションのサポート

Unix ライクなディストリビューションであろうと Linux ディストリビューションであろうと、ほとんどすべての最新の OS はマルチスレッドをサポートしています。マルチスレッド アプリケーションは、複数の実行フローを作成するアプリケーションです。これらの独立した実行フローはスレッドと呼ばれます。スレッドは軽量プロセスです。ほとんどの Unix 系システムでは、軽量プロセスはカーネル スレッドに基づいていますが、Linux では、これらの LWP は関数 clone() の呼び出しによって作成されます。 clone() を使用すると、新しく生成されたプロセスは物理メモリ、開いているファイル、アドレス空間などを共有できます。これらの新しく作成されたプロセスは共有環境で動作するため、別の名前「スレッド」が付けられます。したがって、Linux と Unix/Unix ライクでは、マルチスレッド環境が内部で処理される方法が異なることがわかります。

5.ストリーム

Streams I/O サブシステムは、ほとんどの Unix カーネルに含まれており、デバイス ドライバーやターミナル ドライバーなどを作成するための好ましいインターフェイスになっています。一方、Linux には Streams のようなものはありません。

6.プリエンプティブ カーネルと非プリエンプティブ カーネル

プリエンプティブ カーネルは、現在実行中のプロセスをプリエンプトできるカーネルです。これは、優先度の高いプロセスが実行可能になった場合に、現在実行中のプロセスを強制的に中断できることを意味します。一方、非プリエンプティブ カーネルは、優先度の高いプロセスの実行準備ができていても、実行中のプロセスを強制的に中断できないカーネルです。通常、Linux OS は非プリエンプティブですが、Solaris 2.x などの一部の Unix システムは完全にプリエンプティブです。通常、リアルタイム OS には完全にプリエンプティブなカーネルがあります。最近では、完全にプリエンプティブなカーネルを備えた Linux リアルタイム OS があります。

したがって、Linux は Unix の基本的な考え方から生まれましたが、それでも多くの点で Unix/Unix 系のカーネルとは異なっていることがわかります。これらの違いにもかかわらず、Linux は依然として Unix から多くを継承しており、依然として Unix カーネル ファミリーのメンバーと見なされています。


Linux
  1. Linux – LinuxはUnixですか?

  2. Linux –カーネル:名前空間のサポート?

  3. Linux –カーネルIP転送?

  1. Linux –あなたのUnixの主要な数は?

  2. Linux –異なるLinux / UNIXカーネルは交換可能ですか?

  3. Linux / UNIX OS サービス :autofs

  1. Linux は Unix ですか?

  2. Linux のカーネルがモノリシックであるのに、なぜ Linux は Unix に似ているのですか?

  3. 異なる Linux/Unix カーネルは互換性がありますか?