大学院では、コンパイラ、オペレーティング システム、コンピュータ アーキテクチャのコースを受講しました。しかし、これらの概念を単純だが実際の例 (あまり理論的ではない) で見たいと思います。HelloWorld は、単純な例に適しています。
この小さなプログラムのライフ サイクルが興味深いだけでなく、JVM、OS、およびアーキテクチャがどのように機能するかを知ることは、より優れたプログラマーになるのに役立ちます。
要するに、私の質問は次のとおりです。手順を正しく完全に説明していますか?
具体的には、次の点についてあなたの助けが必要です。
- 間違っている部分を指摘してください
- 私は多くの貴重なポイントを見逃していると確信しているので、ライフサイクルで意味のあるポイントを追加してください.
私が知りたいのは、HelloWorld がどのように各レイヤーを通過し、そこから戻ってくるかです。このプログラムはIntel CPU とUbuntuで実行されると仮定し ます。
1つの回答が最終的に受け入れられるまで、良い回答を組み合わせてこの投稿を更新し続けます.
以下は、誰もが知っている HelloWorld プログラムです。
以下のようなバイトコードにコンパイルされます。
バイトコードは読み取れませんがjavap -classpath . -c HelloWorld
、次のようなニーモニックを確認するために使用できます。
次に、JVM でロード、リンク、および初期化されます。
スレッドが 1 つしかないため、次の JVM ランタイム データ領域の左側のスレッドであると仮定します。
JVM スレッドはユーザーレベルのスレッドであるため、カーネルにマップされます。Ubuntu では、次のような 1 対 1 のマッピングです。
JVM は x86 命令を作成しますか? (アップデート)
この特定のプログラムに対するオペレーティング システムの役割は何ですか?
建築の次は何ですか?
命令フェッチ、デコード、実行、メモリアクセス、ライトバックの5ステップMIPS。
参考文献:
これは非常に難しい質問かもしれません。特定の API の使用方法の質問とは異なり、これにはほとんどすべてを理解する必要があります。