Linuxがさまざまなハードウェアプラットフォームにうまく対応できるのはなぜですか?


22

Linuxがデスクトップ、ラップトップ、サーバー、組み込みデバイス、携帯電話など、さまざまな種類のマシンでうまく動作するのはなぜですか?これは主にシステムが開いているためか、システムの一部を変更して異なる環境で動作するようにできますか?または、このOSがこのような幅広いプラットフォームで動作しやすくするLinuxカーネルやシステムの他のプロパティがありますか?


7
あなたはすでに答えの一部を持っていると思います-オープン性は、人々または企業のさまざまなグループが彼らのニーズにそれを適応させることを容易にします。カーネルは特にモノリシックであると批判されていたため、初期設計がスケーラビリティに関して意図的に最適化されているかどうかはわかりません。他のオペレーティングシステムよりも多くの人がLinuxのコアに取り組んでいると思いますが、おそらくこれにより、コアメンテナーはコードを明確なインターフェイスを持つ部分に分割することに注意を払わざるを得なくなったのでしょうか。一方、BSDの一部のバリアントには、明確な目標として移植性があります。
RedGrittyBrick

@Red:マイクロカーネルではなくモノリシックカーネルであると批判されました-それはデザインとは何の関係もありません。ユーザースペースで実行されるカーネルの量とカーネルスペースで実行される量に関係します。Windows NTのカーネル(たとえば)は非常にモジュール化されていますが、ほとんどのサービス(つまりファイルシステム)はユーザーモードではなくカーネルモードで実行されるため、技術的にはモノリシックです。
ビリーONeal

@Billy:Windows NTは技術的にはハイブリッドカーネルです。マイクロソフトは、引き続きメッセージパッシングを使用してサブシステムを維持し、必要に応じてユーザー空間にピースを移動する機能を保持していると思います。彼らはVistaのグラフィックシステムでこれを行い
Zan Lynx

2
@Zan:「ハイブリッドカーネル」としての地位に異議があるという印象を受けました。したがって、私は「モノリシック」と言いました。NTは確かに、ライブラリに似た部分に分割されていても、多くのモノリシック機能を備えています。
ビリーONeal

@Billy:いくつかのオプションを変更して再構築するだけでカーネルをマイクロカーネルに変えることができる場合、最も頻繁に使用されるバイナリビルドがすべてをカーネルアドレス空間に配置していても、モノリシック以外の何かであるように思えます。
ザンリンクス

回答:


31

オープン性は確かにその一部ですが、重要な要因は、Linus Torvaldが、大規模から小規模まで、すべての作業がメインラインLinuxカーネル内で適切に行われているという主張を続けていることだと思います。ある時点で彼が線を引いて「大丈夫、その派手なスーパーコンピューターのハードウェアにはフォークが必要だ」と言うことに決めたなら、ハイエンドとスモールシステムを完全に分離したバリアントが開発されたかもしれません。現状では、代わりに人々はそれをすべて一緒に比較的うまくプレイするというより難しい仕事をしました。

そして、物事の一方が他方を損なうことを可能にするクラッジは、一般的に許可されていません-再び、人々をより難しいがより正しい方法で問題を解決することを強制します。クラッジが必要なものがあれば、歴史的な脚注になります。

数年前にインタビュー

Q:Linuxは汎用性の高いシステムです。PC、巨大サーバー、モバイル、その他10台程度のデバイスを提供します。あなたの特権的な立場から、Linuxが最高の可能性を発揮するのはどのセクターですか?

A:Linuxの真の力は、まさに1つのニッチではないことだと思います。誰もが一緒に遊ぶことができ、さまざまな人々やさまざまな企業は、彼らにとって何が重要であるかについてまったく異なる動機と信念を持っています。だから私は特定のセクターに興味さえありません。


18
そして、小さなシステムと巨大なシステム定義は常に変化し続けるので、良いクラッジは回避されています。マルチコアスマートフォンは、数年前に行われたすべてのスーパーコンピューターの仕事から恩恵を受けることができます。
ザンリンクス

4

Linuxは、次の理由により、さまざまな種類のハードウェアに対応します。

  • それは非常に設定可能です
  • ソースは自由に利用でき、Cコンパイラが利用可能なCPU向けに構築できます。
  • 組み込みデバイスおよび携帯電話のプロセッサは、初期のLinux開発が行われた元の386マシンと比較して少なくとも同じレベル以上のパワーを持ち、パワーを獲得し続けています
  • ネットワーク、何らかの形式のディスクまたはディスクのようなデバイス、およびシリアルポートのみで問題なく動作します。

さて、ターゲットプラットフォーム用の最小限のブートストラップコードとCランタイムを記述する必要があります。ああ、仮想メモリをサポートする必要があります。しかし、そうでなければ本当です:)
ビリーONeal

1
@Billy nommuシステムへのポートがあります:uClinux、uClinux / ARM、およびMontaVista Linux。
東武

@Tobu:うーん。それがどのようにできるかわかりません。複数プロセスの「Unix Philosophy」全体では、次のようなことforkが可能であるという仮定がありfork、非仮​​想メモリシステムでは合理的に効率的に実行することはできません。指定されたポートはおそらくLinuxカーネルの一部を使用し、一部のLinuxソフトウェアを実行できますが、ほとんどの場合、これらのポートによって公開されるAPIは通常のLinuxカーネルとは異なります。(例:メモリマッピング-これには明らかに仮想メモリが必要です)
ビリーONeal

linuxjournal.com/article/7814:uCLinuxはfork()をサポートしていませんが、vfork()と呼ばれるブロッキングバリアント、uCLinuxの下のアプリケーションはvforkまたはスレッドを使用するように書き換える必要があると言います。
ローレンス

4

Linux Kernelは、それがそうであるため、うまくスケーリングします。コアカーネルは比較的小さく、必要な処理を行います。デバイスドライバーはオプションであり、小規模なシステムではカーネルから除外できます。最小限のカーネル要件を超えて、ほとんどの機能はオプション機能として実装されています。

ほとんどのカーネルの隣にインストールされている設定ファイルを見てください。オンになっているすべての機能と、サポートされているドライバーが一覧表示されます。

ドライバーは、カーネルに組み込まれているか、ロード可能なモジュールとしてサポートされています。これにより、実行中のハードウェアに合わせてカーネルを動的に構成できます。これは、多くのディストリビューションで使用されているアプローチです。

コンパイルツールを使用する以外に、新しいハードウェア用にカーネルを変更するのは比較的簡単です。新しいプロセッサの場合、既存の機能への変更として、関連するコードのみを実装する必要があります。新しいデバイスには、関連するフックを備えた新しいドライバーのみが必要です。同様に、新しいファイルシステムは比較的些細な変更です。

コードベースは、外部フォークなしでこの柔軟性を維持するために適切に維持されています。条件付きコンパイルは、可能な限り最小限に抑えられた非常に柔軟なカーネルを駆動します。


1

この回答を裏付ける詳細な技術的専門知識はありませんが、私の経験では、Linuxは私が頻繁に使用する他のオペレーティングシステム(主にWindows)と比較して十分に拡張できることが示唆されています。したがって、おそらく疑問は、WindowsがLinuxほどうまく拡張できない理由です。

質問をそのように言い直すことがあなたにとってまだ有用であれば、主にエンドユーザーが新しいシステムを購入するときにオペレーティングシステムのコピーをより多く販売するため、市場の力がマイクロソフトに最新かつ最も能力のあるハードウェアに合わせた機能を追加するよう動機付けることをお勧めします。そのため、どの時点でも、Windowsの最新リリースは、性能の低い古いハードウェアではパフォーマンスが低下することがわかりました。

それがあなたの質問を単純化しすぎているのなら許してください。


あなたはOSについて話しているようですが、男はカーネルについて話しているようです。確かに、Windowsカーネルが肥大化しているかどうかが確実にわかっている場合を除きます。
-tshepang

@Tshepang:公平を期すために、質問は「Linuxカーネルお​​よび/またはシステム」について尋ねています。Windows 7とWindows Phone 7はカーネルを共有していますか?私が読んだ少しは、彼らのカーネルはUbuntu ServerとAndroidのカーネルよりも共通のコードが少ないかもしれないことを示唆しています。
-RedGrittyBrick

感謝しますが、質問は本当にLinuxについてであり、他のOSについてではありませんでした。多くの人がそこにあります。en.wikipedia.org/wiki/List_of_operating_systemsは
ジャスティン・エティエ

NTカーネルは実際には非常に効率的ですが、それを取り巻く膨大な数のレイヤーによって、
LawrenceC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.