みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

仕組みについて・・

OSとCPUの仕組みについて、聞かせてくだい。

○windows は、どのようなコードでCPUに命令を出しているのか?
 また、そのコードは見ることが可能なのか?

自分の疎かな理解として、各CPUには、独自のアセンブラ言語を持っていて、OSは、その独自のアセンブラ言語を使って命令を出している。
そのコードは見ることができない。
しかし、Linux などは見ることが出来る。



○Java は、OSに対して命令を出している。
 
 J2SDKは、インストール時か、いつかは、わかりませんが、OSの命令を jvm が理解していて、コンパイル時にそのOSが使える命令に従ってクラスファイルが出来ている。
このコードも見ることは出来ない。



以上、2点なのですが、間違い、補足などをお願いします。
とても、勘違いな事を書いているかも知れませんが・・。

投稿日時 - 2004-10-05 04:02:43

QNo.1029138

すぐに回答ほしいです

質問者が選んだベストアンサー

先ず定義から。

アセンブラは、アセンブリコードを翻訳して機械語に変換するソフトのことです。

本題。
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コードが実行できるようになります。

投稿日時 - 2004-10-05 09:40:16

補足

早い回答ありがとうございます。

自分の理解が乏しく、よければもう少し聞かせてください。

>VMがそれぞれのプラットフォームに適合する機械語に変換することで

と言う事は、例えば、windows 上で話しますと、「windowsで適合する機械語を jvm は知っている。」
と言う事ですね・・?
だから、アセンブルみたいな表現を表すために、 
javap -c のコマンドがあるのですね・・?

投稿日時 - 2004-10-06 02:56:13

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

あなたの言っているコードの参照できる・できないは、無料でソースコードを参照できるかどうかであって仕組みとは関係ありません。
実行中のコードの参照は、開発ツール(デバッガ)があれば確認可能です。

OSの動作に関しては#2の方が回答しています。
ただし、Windowsもプログラム毎に仮想マシン(VM)が存在し、VMM(仮想マシンマネージャ)が仮想マシンたちの監視しています。
Windowsが異なるVersionやCPUや機種で動作している理由です。

投稿日時 - 2004-10-05 11:16:50

ANo.1

こんにちは、honiyonてせす。

(1)
 WindowsはCPUの分かる言語(1と0の機械語)で命令を出しています。
 Windowsのソースコードは非公開で、Linuxのソースコードは公開されています。
 しかし、ソースコードは「アルゴリズム」ですから、直接命令している機械語が見られるか、といえば少しニュアンスが違うかも知れません。
 見ることが出来るのは、その機械語の生成アルゴリズムになると思います。

(2)Javaは機種依存しない事を特徴としており、コンパイル時に生成されるデータ(プログラム)は中間コードと呼ばれるものに相当します。これは人の目で理解出来るものでなければ、実行できるものでもありません。
 実行時にJAVAエンジンがその中間コードを理解し、実行を行います。


 言葉が適切か分からないので自信なしにしておきます(^^;

投稿日時 - 2004-10-05 09:29:57

あなたにオススメの質問