- ベストアンサー
仕組みについて・・
OSとCPUの仕組みについて、聞かせてくだい。 ○windows は、どのようなコードでCPUに命令を出しているのか? また、そのコードは見ることが可能なのか? 自分の疎かな理解として、各CPUには、独自のアセンブラ言語を持っていて、OSは、その独自のアセンブラ言語を使って命令を出している。 そのコードは見ることができない。 しかし、Linux などは見ることが出来る。 ○Java は、OSに対して命令を出している。 J2SDKは、インストール時か、いつかは、わかりませんが、OSの命令を jvm が理解していて、コンパイル時にそのOSが使える命令に従ってクラスファイルが出来ている。 このコードも見ることは出来ない。 以上、2点なのですが、間違い、補足などをお願いします。 とても、勘違いな事を書いているかも知れませんが・・。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
先ず定義から。 アセンブラは、アセンブリコードを翻訳して機械語に変換するソフトのことです。 本題。 CPUは、機械語しか理解できません。 WindowsがC言語で記述されていると仮定した場合、次の作業を行います。 Cコード ↓ コンパイル ↓ アセンブリコード ↓ アセンブル ↓ 機械語 ↓ CPU で無事機械語に翻訳でき、Windowsが動作します。 したがって、質問にある独自のアセンブラ言語・・・は、非常におしい!、残念。 実際は機械語に翻訳されたコードをCPUが読み込んで動作している訳です。 変換後の機械語は、見ることができますが、Windowsの場合は権限が必要です。 権限が無ければ見ることができません。 次にJavaです。 Javaコード ↓ コンパイル ↓ 実行コード ここで一旦終了です。 ここからVMが登場します。 実行コード ↓ VMが読み込んで変換 ↓ 機械語 ↓ CPU でJavaコードが実行します。 ここで重要なのが、質問にもあるCPUの独自アセンブラです。 実際には、機械語のことです。 CPUは、メーカや型式により独自の機械語しか理解できません。 携帯電話やPCや組み込みマイコン等は、それぞれ異なったCPUを使っています。 このため、それぞれに個別の機械語を持っており、別のCPUの機械語は実行できません。 そこでVMの登場です。 VMは、各CPUやプラットフォーム単位で個別に作成します。 そして、VMがそれぞれのプラットフォームに適合する機械語に変換することで、どの様なCPUまたはプラットフォームを使用しても、VMさえあれば、同じJavaコードが実行できるようになります。
その他の回答 (2)
- n-before
- ベストアンサー率50% (3/6)
あなたの言っているコードの参照できる・できないは、無料でソースコードを参照できるかどうかであって仕組みとは関係ありません。 実行中のコードの参照は、開発ツール(デバッガ)があれば確認可能です。 OSの動作に関しては#2の方が回答しています。 ただし、Windowsもプログラム毎に仮想マシン(VM)が存在し、VMM(仮想マシンマネージャ)が仮想マシンたちの監視しています。 Windowsが異なるVersionやCPUや機種で動作している理由です。
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonてせす。 (1) WindowsはCPUの分かる言語(1と0の機械語)で命令を出しています。 Windowsのソースコードは非公開で、Linuxのソースコードは公開されています。 しかし、ソースコードは「アルゴリズム」ですから、直接命令している機械語が見られるか、といえば少しニュアンスが違うかも知れません。 見ることが出来るのは、その機械語の生成アルゴリズムになると思います。 (2)Javaは機種依存しない事を特徴としており、コンパイル時に生成されるデータ(プログラム)は中間コードと呼ばれるものに相当します。これは人の目で理解出来るものでなければ、実行できるものでもありません。 実行時にJAVAエンジンがその中間コードを理解し、実行を行います。 言葉が適切か分からないので自信なしにしておきます(^^;
補足
早い回答ありがとうございます。 自分の理解が乏しく、よければもう少し聞かせてください。 >VMがそれぞれのプラットフォームに適合する機械語に変換することで と言う事は、例えば、windows 上で話しますと、「windowsで適合する機械語を jvm は知っている。」 と言う事ですね・・? だから、アセンブルみたいな表現を表すために、 javap -c のコマンドがあるのですね・・?