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


9

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


3
シンプル:自由。自分が必要だと思うものを自分で作成する自由。カーネル?シェル?デスクトップ。頑張れ。
Rinzwind 2017年

6
彼らはそのためです別々の?ウィンドウマネージャーがXサーバーとは別個に扱われるのと同じ理由(それらが別個であるため)、シェルがターミナルエミュレーターとは別個に扱われるのと同じ理由(それらも別個であるため)。さて、なぜ彼らがそのように設計されたのかと尋ねると...
user253751

Ubuntuは、Windows 10カーネルの上でも実行されるようになりました。これは、それが本当の分離であることを示しています。もちろん、Windowsには少し複雑なXサーバーが付属していませんが、パーツが欠落している場合はそれが予想されます。
MSalters 2017年

@MSalters Windowsのウィンドウマネージャーは少しトリッキーです。しかし、誰かが実際にWindowsでXを実行したい場合、それを処理する方法はたくさんあります。部外者にとって最も簡単なのは、おそらく既存のウィンドウマネージャーの上にあるサーバー「エミュレーター」でしょうが、どれほどうまくマッピングできるかはわかりません(前回、X内部を見てきたので、あまり期待していませんでした)。私は息を止めません-多くの人がWindowsでXを実行することに興味を持っているかのようには聞こえません。
Luaan

回答:


12

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

もちろん、依存関係を正しく管理できる限り、そうです。Ubuntu関連の一連のディストリビューションでは、APTを使用して依存関係を自動的に解決します。

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

sudo apt install linux-image-<version>

APTで許可されている限り、再起動して、選択したバージョンのカーネル(汎用、低遅延など)を使用できるはずです。または、カーネルバージョン(Real-Time Linuxなど)を自分で構築し、現在のシステムで使用することもできます。 。


どうもありがとうございましたが、一貫性がありますか?たとえば、Ubuntu 14.04 LTSにはカーネルバージョン3.19.0があり、カーネルを更新する場合、14.04 LTSではなくなりますよね?後でシステム全体を更新しようとした場合、または組み込みの更新メカニズム(Software Updater)で新しいバージョンが表示された場合、更新されたカーネルバージョンが認識されますか?既に更新されたモジュールに影響を与えずに、モジュールを個別にチェックして必要な変更のみをもたらすことはできますか?
The Dreams Wind

1
各Ubuntuバージョンがサポートするカーネルバージョンの長いリストについては、packages.ubuntu.com / search?keywords = linux-imageを参照してください。Ubuntuのバージョンはカーネルのバージョンとは異なるものによって決定されますが、どれがどれであるかは私にはよくわかりません…もし興味があれば、別の質問を始めることができます。
Melebius

1
@AleksandrMedvedevずっと後で見つけた!Ubuntuのバージョンは/etc/issuebase-filesパッケージで提供されるファイルに記載されています。すでに書いたように、カーネルのバージョンとは無関係です。
Melebius

5

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

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

つまり、新しいバージョンだけが現在のユーザースペースと互換性がある場合は、ユーザースペースに触れずにカーネルスペースを更新できます。

そして、ユーザー空間ツールの更新については、それはまた別のことです。

実行すると:

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

これは間違いなく真実ではありません。
mook765

私を訂正;)だから私は何か新しいことを学ぶ:)
Ravexina '

3
sudo apt upgrade新しいバージョンが利用可能であれば、カーネルもアップグレードします。sudo apt full-upgradepackeges assも削除しasudo apt upgradeます。
Soren A

現在、新しいカーネルへのアップグレードはある種のインストールであり、upgradeサブコマンドを使用している間は、新しいパッケージをインストールせず、パッケージも削除しないため、を使用しています dist-upgrade。少なくともapt-getこのように動作します;)そのため、混乱を防ぐためにコマンドを更新しました。
Ravexina

1
私はapt-コマンドの経験が豊富ですが、短い調査の結果、あなたの答えは今は正しいと思われ、別のことaptapt-get処理しています。hiroom2.com/ 2016/05/20 / ubuntu-16-04-debian-8-aptを参照してください-command /…。ですから、私たち2人にはある程度の知識が必要です
mook765

3

まず、いくつかの明確化が必要です。なぜなら、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など)。これらすべてが(本質的に)ソフトウェアのパッケージを管理するだけです。同じ: "ls"や "df"などを発行したときに呼び出されるもの、

したがって、「原則として」、上で話したすべてのソフトウェアのさまざまなバージョンからディストリビューションを作成した人々のように、カーネルだけを更新できます。

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

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

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


GNUは、多くの一般的なUNIXコマンドを「改善する」ためのイニシアチブとしてスタートしませんでした。GNUは、UNIXが限定的に独占的であることに対応するためのフリーソフトウェアを目的とした、最初からのオペレーティングシステムでした。あなたは彼らのウェブサイトからもっと読むことができます。Linuxが作成された時点では、GNUにはまだ機能するカーネルがなかったため、彼らはすべてのソフトウェアをLinuxに移植することにしました。
Ian Emnace

3

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

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

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

あなたの質問に答えるために、GNU / Linux(WindowsとOSXのように、私を信頼してください)では、バージョンだけでなくアーキテクチャ全体(Linuxカーネル、HURDカーネル)を変更できます。 ABIには触れず、ユーザーの世界で1つの変更を加えることはありません...かつて、本当の人間がソースからカーネルを構築しなければならなかったとき、あなたはこれらのようないくつかの変更を経て、くだらないUSBウェブカメラを手に入れることができました動作するようになりました...モジュール式カーネルでは、モジュールをインストールするだけで、ABI(時々)が新機能で拡張された、まったく新しいカーネルの世界が得られます...

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

熟考するもう一つのことは、あなたはあなた自身の、特別な、唯一無二のGNU / Linuxディストリビューションを構築することができます(そしてそれはかなり簡単です)。カーネル、いくつかの簡単なスクリプト、いくつかのアプリを入手すれば、準備は完了です。とても簡単です(OpenWRT GNU / Linuxディストリビューションを見てください。ネットワークギアについては、ディストリビューション全体が16Mb程度に収まっています)。


「シャープな境界線(ABI)。」私はあなたがAPIを意味すると思います。ABIは、より適切な用語がないため、ハードウェアインターフェイスへのコードです。一方、APIはインターフェースをコード化するコードです。
サム

1

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.