2012-10-17 12 views
6

Diese Fragen kamen mir in den Sinn, als ich die Prozessplanung studierte.Wie führt OS kompilierte Binärdateien aus?

Wie OS ausführen und die Ausführung von binären und kompilierten Dateien kontrollieren? Ich dachte, vielleicht kopiert OS einen Teil der Binärdatei an einen Speicherort, springt dorthin, kommt nach der Ausführung dieses Blocks zurück und führt den nächsten aus. Aber dann hätte es keine Kontrolle darüber (z. B. kann das Programm irgendwo springen und kommt nicht zurück).

In JVM Fall es durchaus Sinn macht, wird der VM jeden Befehl zu interpretieren. Aber im Fall der binären Dateien sind die Anweisungen echte CPU-ausführbare Anweisungen, daher glaube ich nicht, dass ein OS wie VM funktioniert.

+0

Sind Sie sich bewusst, wie eine CPU CPU Befehle ausführt? – sll

+0

Ja, ich habe letztes Jahr eine super einfache CPU entworfen (eine allgemeine Registrierung, Registrierung, um Anweisungen und PC und vielleicht 5 Anweisungen zu speichern) und ein etwas komplizierteres RISC-Design an der Universität, das jetzt Verilog verwendet. – Gediminas

Antwort

4

Es tut genau das. Das Betriebssystem, in einer bestimmten Reihenfolge erstellt

  • einen Eintrag in der Prozesstabelle
  • erstellt einen virtuellen Speicherraum für den Prozess
  • Lasten der Programmcode in den Prozessspeicher
  • Punkte der Prozessanweisung Zeiger auf das Prozesseintrittspunkt
  • erzeugt einen Eintrag im Scheduler und setzt den Prozess Thread zur Ausführung bereit.

Parallelität wird nicht dadurch behandelt, dass das Programm in Blöcke aufgeteilt wird. Das Umschalten zwischen den Aufgaben erfolgt über Interrupts: Bevor ein Prozess die CPU erhält, wird ein Timer eingerichtet. Wenn der Timer beendet ist, registriert die CPU einen Interrupt, schiebt den Befehlszeiger auf den Stack und springt zu dem vom Betriebssystem definierten Interrupt-Handler. Dieser Handler speichert den CPU-Zustand im Speicher, tauscht eine virtuelle Speichertabelle aus und stellt einen anderen Thread wieder her, der zur Ausführung bereit ist. Der gleiche Austausch tritt auf, wenn der Thread aus einem anderen Grund (Warten auf Benutzer/Festplatte/Netzwerk ...) oder Renditen pausieren muss.
http://en.wikipedia.org/wiki/Multitasking#Preemptive_multitasking.2Ftime-sharing

zu beachten, dass auf den Prozess verlassen wodurch man die CPU möglich ist, aber unzuverlässig (der Prozess möglicherweise nicht ergeben, verhindern, dass andere Prozesse vom Laufen)
http://en.wikipedia.org/wiki/Multitasking#Cooperative_multitasking.2Ftime-sharing

Sicherheit durch Schalten der CPU in den geschützten Modus gehandhabt wo der Anwendungscode keine Anweisungen ausführen kann (so ist das zufällige Springen meistens harmlos). Siehe the link provided by @SkPhilipp

Beachten Sie, dass moderne JVM nicht jede Anweisung interpretiert (das wäre langsam). Stattdessen kompiliert es in nativen Code und führt den Code aus oder interpretiert (im Falle der Just-in-Time-Kompilierung) zunächst die "Hotspots" (den Code, der häufig genug ausgeführt wird).