C 言語は、移植性を実現するために UNIX を作成するために使用されました。異なるコンパイラを使用してコンパイルされた同じ C 言語プログラムは、異なるマシン命令を生成します。Windows OS が Intel プロセッサと AMD プロセッサの両方で実行できるのはなぜですか?
6 に答える
AMD プロセッサと Intel プロセッサ(*) には共通の命令セットが多数あるため、コンパイラまたはアセンブラは、両方で「同じ」動作をするバイナリ コードを記述できます。
ただし、1 つのメーカーの異なるプロセッサ ファミリでも、通常は「拡張機能」などと呼ばれる独自の命令セットがあります。x87 コプロセッサを無視して、これがマーケティング ポイントであることを最初に覚えたのは、すべてが突然「MMX(TM) テクノロジで」進んだときでした。任意のプロセッサで実行されると予想されるバイナリ コードは、拡張機能を回避するか、使用する前に CPU の種類を検出する必要があります。
Intel の Itanium 64 ビット アーキテクチャは、AMD の x86-64 アーキテクチャとは完全に異なっていたため、しばらくの間、AMD の 64 ビット製品は互換性がありませんでした (そして、Itanium は x86 とは異なり、x86-64 は 64 ビット命令を追加して命令セットを拡張しました)。Intel が最初にまばたきをして x86-64 を採用しましたが、まだいくつかの違いがあります。
Windows では、ほぼすべてのコードに共通の x86 または x86-64 命令セットを使用している可能性があります。さまざまなドライバーとコーデックが複数のバージョンで出荷され、CPU が調査された後に正しいバージョンが選択されても、私は驚かないでしょう。
(*) 実際、Intel は ARM を含むさまざまな種類のプロセッサを製造または製造しています (Intel の ARM プロセッサは XScale と呼ばれていましたが、そのビジネスは売却されたと思います)。また、AMD は他のプロセッサも製造しています。しかし、どの Intel/AMD プロセッサを意味するかはわかっています :-)
ご想像のとおり、メインストリームのIntelプロセッサとAMDプロセッサには同じ命令セットがあります。
たとえば、WindowsはARMまたはPowerPCチップでは動作しません。これは、基になる命令セットにいくらか依存しているためです。
ただし、ほとんどのWindowsはC ++で記述されており(私が知る限り)、他のアーキテクチャに移植できるはずです。Windows NTは、PowerPCやその他のアーキテクチャでも動作しました。
AMDはIntelと互換性があります。そうでなければ、市場で足場を固めることはできなかったでしょう。
それらは事実上クローン互換です。
ライアン
AMD と Intel は同じ命令セットを使用します。
Windows を AMD プロセッサまたは Intel プロセッサにインストールすると、マシン上でコードが "コンパイル" されません。
大学時代、この問題について多くの人が混乱していたことを覚えています。彼らは、「セットアップ」とは、マシン上でコードをコンパイルしていることを意味すると信じています。そうではありません。フリー レルム外のすべてではないにしてもほとんどの Windows アプリケーションは、バイナリで提供されます。
移植性に関しては、必ずしも 100% 正しいとは限りません。C は移植性が高いですが、多くの場合、特定の OS またはシステム用に記述したコードは、そのボックスでのみコンパイル/実行できます。たとえば、特定の Unix マシンではファイルとディレクトリの処理が異なるため、100% 移植性がない場合があります。