web-dev-qa-db-ja.com

Linuxでオペレーティングシステムとカーネルが別々に扱われるのはなぜですか?

Ubuntuを含むLinuxオペレーティングシステムに関しては、人々はカーネルオペレーティングシステムという用語を区別する傾向があります。これはWindowsおよびOS Xファミリに正しいですが、なぜLinuxコミュニティでこれほど普及しているのですか? OS自体を更新せずに、OSカーネルを更新する方法はありますか?またはその逆?もしそうなら、それはどのように便利ですか?

9
The Dreams Wind

GNU/Linuxシステム全体は、モジュール方式を使用して構築されています。ほとんどの場合、他のモジュールに触れることなく単一のモジュールをアップグレードできます(replace)。問題のモジュールは、ブートローダー、カーネル、シェル、コマンド、デスクトップ環境、GUIアプリケーションなどです。

もちろん、依存関係を正しく管理できれば、それは事実です。 Ubuntuに関連する一連のディストリビューションでは、依存関係を自動的に解決するために APT が使用されます。

次のコマンドを使用して、別のカーネルバージョンをインストールできます。

Sudo apt install linux-image-<version>

APTが許可している限り、リブートして選択したバージョンのカーネルを使用できるようにする必要があります。汎用、低遅延などです。または、カーネルバージョンを自分でビルドします。 Real-Time Linux を使用し、現在のシステムで使用します。

12
Melebius

ご存知のように、カーネルはOSの重要な部分であるため、GNU/Linuxディストリビューションでは、OSの他の部分に触れることなくカーネルを簡単に更新できます。ただし、OSの一部を更新するだけです。

オペレーティングシステムは、カーネルスペースとユーザースペースの2つの部分で構成されています。

そのため、新しいバージョンのみが現在のユーザー空間と互換性がある場合、ユーザー空間に触れることなくカーネル空間を更新できます。

また、ユーザースペースツールの更新については、もう1つです。

実行すると:

Sudo apt-get upgrade

カーネルに利用可能なアップデートがあった場合、以下が得られます:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

そのため、ユーザースペースを更新するだけで、

Sudo apt-get dist-upgrade

カーネルを含むすべてを更新しています。

カーネルのみを新しいバージョンにアップグレードするには、次のようなものを使用します。

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

より新しいカーネルのリストを見つけて、新しいパッケージとしてインストールします。次に例を示します。

Sudo apt install linux-image-4.10.0-14-generic
5
Ravexina

最も単純な答えは、Ubuntuとは関係ありません。 GNU/Linuxの構築方法に関連しています。システム開発者として見ようとすると、それぞれが鋭い境界線(ABI)で区切られた2つの世界が表示されます。

低レベルの開発者が働くカーネルの世界は、それ自体がシステムです。通常のアプリケーションで通常見つけるものがすべて揃っています。唯一の違いは、ユーザーがマシンを使用している実際の人ではなく、ユーザー空間の世界であることです。カーネルの「アプリケーション」は、マシンを使用しているサーバー、つまりシェルのゴーストである仲介者です。

今、ユーザー空間は、日常のユーザーと開発者が遊んでいる通常の世界です。厳格なAPI、ルール、ファイルがあり、最も重要なことは、実行中のマシンの抽象的で子供っぽいイメージです。ユーザーにはこの部分のみが表示され、これはディストリビューションサイズの99%に相当するため、オペレーティングシステムと誤って命名するのは簡単です。適切な命名法は、カーネル(Linux、HURD、BSDなど)を使用して何らかのエンティティ(Canonical、Fedoraなど)によって作成され、一連のツール(通常はGNUによって提供される)を使用して構築されるソフトウェア配布と呼びます)。

あなたの質問に答えるために、GNU/Linux(WindowsやOSXと同じように、私を信じてください)で、バージョンだけでなく、アーキテクチャ全体(LinuxカーネルとHURDカーネル)を変更できます。 ABIには触れず、ユーザーの世界に一度も変更を加えないでください...昔、本物の人間がソースからカーネルを構築しなければならなかったとき、くだらないUSB Webカメラを取得するために、このようないくつかの変更を行うことができました動作するようになりました...さて、モジュラーカーネルを使用すると、モジュールをインストールするだけで、新しい機能でABI(場合によっては)拡張された新しいカーネルの世界が得られます...

繰り返しますが、ユーザー空間についても同じです。たとえば、Ubuntuリポジトリから新しいアプリケーションを99%の時間でインストールする場合、最大の懸念は、実際のカーネルではなく、他のユーザースペースコンポーネントの互換性です。カーネルバージョンが(ABIを介して)ユーザー空間にインストールできるものの範囲を決定する場合がありますが、目標(少なくとも開発者にとって)はこれをなくすことです...

別のことを考えると、あなたはあなた自身の、特別な、ユニークなGNU/Linuxディストリビューションを構築することができます(そしてそれはかなり簡単です)。カーネル、いくつかの簡単なスクリプト、いくつかのアプリを入手すれば、設定は完了です。簡単です(ネットワーク機器については、OpenWRT GNU/Linuxディストリビューションをご覧ください。ディストリビューション全体が16Mb程度に収まります)。

3
rftghost

最初に、いくつかの明確化。GNU/ Linuxシステムがどのように生まれたのか理解できないと思うからです。これがあなたにとって新しいものではない場合、私と一緒に耐えてください:

「カーネル」は実行される別のプログラムではありませんが、基本機能を提供するOSの一部です。プログラムを起動する場合(たとえば、コマンドラインで「ls」と入力する場合)、バイナリをロードする必要がありますディスクから(それを見つけるためのファイルシステム操作と、それを読み取るためのファイル処理を含む)、「プロセス環境」が作成されます:メモリが割り当てられ、プロセス番号が発行されるなど。 (FS、ファイルからの読み取りなど)はシステムライブラリによって処理されますが、後者はカーネル関数です。ある意味では、カーネルは「OS」であり、他のすべては単にその周りの装飾です。

「Linux」は、実際には(のみ!)カーネルであり、OSの他の部分はありません。 Linus Torvaldsは、Andrew TanenbaumsのMINIXテンプレートOSカーネルを取得して完成させ、本格的で実際に実行可能なカーネルになるように書き始めました。今日まで、このカーネルを開発するLinus(および他の多くの貢献者/貢献者)がいます。このカーネルはまだUNIXに非常に似ていますが、UNIXカーネルではありません。

「GNU」は、多くの一般的なUNIXコマンドを「改善」するためのイニシアチブとして始まりました。それらが成功したかどうかについては説明しませんが、彼らは間違いなく多くのソフトウェアを書いており、ある時点でユーティリティプログラムのコレクションを持っていました。彼らは独自のOSカーネル(HURD)の開発を始めました。これは主にUNIXに基づいていましたが、明らかに異なっていました。しかし、今日に至るまで、HURDは開発の初期段階にあり、ほとんど機能しないソリューションです。 「GNU」ところで。 「GNU(is)Not UNIX」の略です-UNIXの後継者を作成する目的で、UNIXのいくつかの(認識または実際の)制限を克服しようとしました(繰り返しますが、成功した場合は議論に入りません。そうではありません-それが「良い」か「悪い」かは気にしませんが、間違いなく違います!)。

そのため、カーネルのないツールセットとツールセットのないカーネルでは、これら2つを組み合わせるのは自然な開発でした。GNU/ Linuxが作成されました。

それでも、動作する(および実行可能な)OSを使用するには、カーネルとツールセットだけでなく、パッケージ管理システム、インストール手順、テンプレート構成、必要な....

数人の異なる人々(またはそのグループ)がこの結論に至り、GNU/Linuxの組み合わせを使用して、上記で述べたことを正確に追加することにより、好みのGNU/Linuxシステムを作成しました。 、インストール手順など。これらの異なるグループ(それぞれの努力の結果)は、異なる分布です。現在、3つの異なるパッケージマネージャーがあります(Debianおよび* ubuntuなどの派生システム、RedHatのrpm、Fedora、CentOSなどの派生システム、ArchLinuxのpacmanに適しています)が、これらはすべて(本質的に)ソフトウェアのパッケージを管理するだけです同じ:DebianシステムまたはRHELシステムで「ls」や「df」などを発行したときに呼び出されるものは、異なるパッケージに由来しますが、本質的には「ls」-(」のGNUバージョンですdf "-)プログラム、異なるパッケージ化。

したがって、「原理的に」、カーネルを単独で更新することができます。これは、上で述べたすべてのソフトウェアのさまざまなバージョンからディストリビューションを作成した人々が行ったようにです。

しかし、これは本当に大きなことですが、カーネルといくつかの追加ソフトウェアだけでなく、システム構成ツール(一部のディストリビューションが使用するものと使用しないシステムd)、ネットワークNetworkManagerなどの管理ツール。これはGNOMEライブラリなどのいくつかのバージョンに依存します。「配布」はかなり複雑なものであり、カーネルを更新しようとすると、多くの更新を行う可能性があります。他の多くの相互依存性のため。

それでも、「原則として」上記のように、すべてのソースをダウンロードしてコンパイルし、バージョンの組み合わせの作業セットを見つけ、パッケージングシステムを配置する(または既存のもののいずれかを使用することによって、独自のディストリビューションを作成することもできます) )-配布可能、インストール可能、構成可能なシステムができるまで。これは、Ubuntuのようなディストリビューションの作成者が行うことであり、奇跡ではありません。多くの複雑な作業なので、実際にはほとんどのユーザーはそれを避け、すぐに使用できるものを使用します。

これがあなたの質問に答えることを願っています。

3
bakunin

カーネルは重要な部分であるため、それらは分離されていると思います。回帰を伴うカーネル、または単に更新の失敗は、かなりの損害を与える可能性があります。更新頻度を減らすことをお勧めします。または、心配なバグを報告する人がいないことを確認するためにしばらく待ってからです。

また、一部の上級ユーザーまたは専門ユーザーは、カーネルを再コンパイルして、ニーズに合わせて動作を変更します。このような場合、アップグレードするたびに工場バージョンに自動的に置き換えられることは望ましくありません。

1
Francesco Dondi