web-dev-qa-db-ja.com

カーネルアーキテクチャとOSアーキテクチャ

カーネルアーキテクチャとOSアーキテクチャの違いは何ですか?バイナリをコンパイルするアーキテクチャを理解しようとするときに、これらのどれが関連していますか?

私が読んだことから、一部のディストリビューションでは32ビットOSを使用しているにもかかわらず、64ビットカーネルをインストールすることが可能です。

uname -iは何を印刷しますか、カーネルアーキテクチャまたはOSアーキテクチャですか? dpkg --print-architectureArchはどうですか?

2
just.kidding

カーネルアーキテクチャは、カーネルの「優先」アーキテクチャです。これは、uname -mArch(同等)によって提供されるアーキテクチャです。たとえば、64ビットのx86互換CPUで実行されている64ビットカーネルでは、x86_64になります。

一部のプラットフォームでは、カーネルは複数のアーキテクチャのバイナリを実行できます。たとえば、64ビットのx86カーネルは32ビットのバイナリを実行することもできます(2つのABI、「古い」i386/i686ABIとx32)。このようなバイナリを実行するときに32ビットモードで実行するようにCPUに指示し、32ビットシステムコールとそのネイティブ64ビットシステムコール間の変換を提供することで、これをサポートします。ユーザーランドエミュレーションviaQEMUを追加すると、カーネルはQEMUでサポートされている任意のアーキテクチャーのバイナリーを実行することもできます。たとえば、armhf64ビットIntelCPUの場合。バイナリ自体に加えて、必要な翻訳レイヤーが何であれ、バイナリと同じアーキテクチャの適切なライブラリも必要になります。これは、マルチアーチが役立つものであり、マルチアーチの前は、/lib32//lib64分業です。 (そして、2つまたは3つのABIを扱うことが多いと思う場合は、MIPSシステムを見てください...)

このコンテキストでは、「オペレーティングシステムアーキテクチャ」は多くのことを意味する可能性があります。システムのインストール時に使用されるアーキテクチャ、またはシステム内の大多数のバイナリによって使用されるアーキテクチャなどです。Debian派生物では、次のアーキテクチャです。 dpkg --print-architectureで指定されたインストール済みのdpkgパッケージ。

バイナリを構築する場合、適切なライブラリもあると仮定すると、ターゲットにするのが最も簡単なアーキテクチャは、コンパイラのデフォルトのターゲットアーキテクチャです。通常、これは、意味が何であれ、オペレーティングシステムアーキテクチャになります。ここでは、カーネルアーキテクチャは特に重要ではありません。 Debian派生物では、クロスコンパイルをカバーするようにマルチアーチを拡張することは、サポートされているDebianアーキテクチャのバイナリを任意のDebianシステムで簡単に構築できることを意味します。ただし、これはかなり具体的なユースケースであり、クロスコンパイルの制約についてある程度の知識が必要です。したがって、デフォルトのアーキテクチャに固執します...

uname -iは、何かを出力するときに、カーネルアーキテクチャのバリアントを出力します。 name -p -iは不明です それについて詳しく説明します。

3
Stephen Kitt