2012-10-17 8 views
6

私はプロセスのスケジューリングを勉強していたときに、この質問が私の頭に浮かんだ。OSはどのようにコンパイルされたバイナリファイルを実行しますか?

OSはバイナリファイルとコンパイル済みファイルの実行をどのように実行し、制御しますか?おそらく、OSがバイナリの一部をあるメモリ位置にコピーし、そこにジャンプし、そのブロックを実行した後に戻り、次のブロックを実行すると思った。しかし、それはそれを制御することはできません(例えば、プログラムはどこでもジャンプすることができ、戻ってくることはありません)。

JVMの場合、VMは各命令を解釈しているのが理にかなっています。しかしバイナリファイルの場合、命令は実際のCPU実行可能命令なので、OSはVMのように動作するとは思わない。

+0

CPUがCPU命令をどのように実行するのか知っていますか? – sll

+0

はい、私は昨年、Verilogを使用して大学でもう少し複雑なRISCデザインをやって、超シンプルなCPU(1つの汎用レジストリ、命令とPCを格納するためのレジストリと5つの命令)を設計しました。 – Gediminas

答えて

4

これはまさにそれです。いくつかのために、オペレーティング・システム、

  • は、プロセスメモリ
  • ポイント処理命令の処理のために
  • ロードしたプログラムコードを仮想メモリ空​​間を作成するプロセス・テーブルにエントリを作成しますプロセスエントリポイントへのポインタ
  • は、スケジューラにエントリを作成し、実行の準備ができているプロセススレッドを設定します。

ブロックに分割されたプログラムでは、並行処理は処理されません。タスク間の切り替えは、割り込みによって行われます。プロセスにCPUが与えられる前に、タイマーが設定されます。タイマーが終了すると、CPUは割り込みを登録し、命令ポインタをスタックにプッシュし、オペレーティングシステムによって定義された割り込みハンドラにジャンプします。このハンドラは、CPUの状態をメモリに格納し、仮想メモリテーブルをスワップし、実行の準備ができている他のスレッドを復元します。同じスワップは、スレッドが(ユーザー/ディスク/ネットワークを待っている)他の何らかの理由で一時停止する必要がある場合や、利回りが発生した場合に発生します。 CPUが可能であるが、信頼できないもたらすプロセスに依存する
http://en.wikipedia.org/wiki/Multitasking#Cooperative_multitasking.2Ftime-sharing

セキュリティが保護モードにCPUを切り替えることによって処理される(処理が実行され、他のプロセスを防止する、得られない可能性がある)こと
http://en.wikipedia.org/wiki/Multitasking#Preemptive_multitasking.2Ftime-sharing

注アプリケーションコードはいくつかの命令を実行できません(無作為にジャンプすることはほとんど無害です)。 the link provided by @SkPhilipp

現代のJVMは、(遅い)各命令を解釈しないことに注意してください。代わりに、ネイティブコードにコンパイルしてコードを実行するか、(ジャストインタイムコンパイルの場合は)最初に解釈しますが、「ホットスポット」(十分頻繁に実行されるコード)をコンパイルします。

関連する問題