1


0

CプログラムのCPUおよびOSへの依存関係

Windowsでコンパイルされた単純なCプログラムについて考えてみましょう。

  1. Intel CPUマシンでプログラムをコンパイルし、AMDで実行できます CPU 1(同じオペレーティングシステム)。 CPUの命令セットが同じということですか?

  2. 異なるOSを搭載したマシンで同じプログラムが実行されないのはなぜですか? 同じCPUですか?

3 Answer


3


一般に、IntelとAMDのプロセッサ製品ラインは、実装する命令セットに大きな重複があります(例: 時々、一方が新しいものを発明し、他方が追いつくまでギャップがある)-それが両方のアーキテクチャでプログラムを実行できる理由です。 同じことが他のCPUアーキテクチャで実行できない理由です。スターター用の同じ命令セットはありませんが、異なる点がたくさんあります。

オペレーティングシステムにも違いがあります。 たとえば、Windowsでプログラムをコンパイルすると、通常、.exeファイルが取得されます。 That .exe has a format that only Windows understands and is very different たとえば、Linuxで使用される形式から。

また、OSが提供するサポートは完全に異なります。Windowsには、たとえば OpenBSD。 より抽象的なレベルでも、互換性はありません。 E.g. Windowsは、C:\、D:\などのドライブ文字を使用してドライブをマークしますが、 Linuxでは、異なるパーティションをマウントする1つの大きなファイルシステムです。 / mediaなどの下。

WineやCygwinなど、あるプラットフォームのプログラムを別のプラットフォームで実行しようとするさまざまな試みがあります。 Wineを使用すると、Windowsが提供するものをエミュレートしようとするため、Linux上でWindows実行可能ファイルを直接実行できます(ただし、すべてが機能するわけではありません)。 Cygwinは別の製品です-LinuxでGNUプログラムと同様に動作するWindowsプログラムを実行できますが、特別にコンパイルする必要があります-それはただ2つの世界であるというヒントを与えるだけです。

Javaと.NET(LinuxでMonoをサポート)がこれら2つを統合しようとする理由です。 Javaアプリケーションを作成する場合、Linux上で多かれ少なかれ同じコードを使用して実行できるはずです。一部は同じではないかもしれませんが、大部分は同じです。


0


それらは同じであるか、少なくともあなたのプログラムは共通のサブセットのみを使用しています。

2番目の質問には、いくつかの一般的な理由があります。

  1. OSごとに異なる形式の実行可能ファイルが必要です

  2. 通常、異なるOSはプログラムに対して異なる機能を持ちます。 使用する

  3. 異なるOSは、提供するものを呼び出す異なる方法を使用します


0


1)Intel CPUおよびAMD CPUは、この方法で意図的に製造されています。 たとえば、ARM CPU上でSPARC CPU用にコンパイルされたプログラムを実行することはできません。

{空} 2)理論的には可能です。 Linuxには、Windowsをエミュレートするhttp://en.wikipedia.org/wiki/Wine_%28software%29[Wine]というものがあります。 多くのWindowsプログラムは、Wineの下でLinux上で完全に実行されます。