2012-10-10 1 views
20

Wenn ein Programm kompiliert wird, wird es in Maschinencode umgewandelt, der von der Maschine "verstanden" werden kann. Wie interagiert dieser Maschinencode mit dem Betriebssystem, um Eingaben von der Tastatur zu erhalten? Mir scheint, dass der Maschinencode auf einer niedrigeren Ebene als das Betriebssystem ausgeführt werden sollte und daher kann ich nicht verstehen, wie das Betriebssystem als Vermittler zwischen der kompilierten Anwendung und der Hardware fungieren kann.Wie interagiert ein kompiliertes Programm mit dem Betriebssystem?

PS: Ich habe gerade angefangen C++ Programmierung und ich versuche, wie cin und cout Arbeit

+1

Die kompilierte Anwendung ruft einfach Funktionsaufrufe an DLLs (das Betriebssystem, wie kernel32.dll in Windows) auf, die Funktionen von anderem Maschinencode enthalten. Dieser andere Maschinencode ist speziell für die Arbeit mit der Hardware geschrieben, so dass Sie nicht müssen. –

+1

Etwas tangential und nicht wirklich eine Antwort auf Ihre Frage, aber vielleicht, wenn Sie an Grenzen zwischen der Sprache und dem Betriebssystem interessiert sind, wird dies Ihnen ein wenig Ehrfurcht/Angst/Abscheu bei einigen der vielen Schritte in dem Prozess geben wundere dich über ...: -/http://Stackoverflow.com/a/2444508/211160 – HostileFork

Antwort

23

Dies ist eine sehr gute Frage (besser als Sie wissen), und es gibt viel zu lernen . VIEL.

Ich werde versuchen, es kurz zu halten. Das Betriebssystem fungiert als Abstraktionsebene zwischen Software und Hardware:

Software 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
Operating System 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
    Hardware 

Das Betriebssystem kommuniziert mit der Hardware durch Programme Treiber (weit verbreiteter Begriff) genannt, und das Betriebssystem kommuniziert mit Software über Verfahren System genannt Anrufe (nicht so weit verbreitete Bezeichnung).

Im Wesentlichen, wenn Sie einen Systemanruf tätigen, verlassen Sie Ihr Programm und geben den Code des Betriebssystems ein. Systemaufrufe sind die einzige Möglichkeit, mit der Programmierer mit Ressourcen kommunizieren können.


Jetzt würde ich aufhören, aber sie sagte auch:

Mir scheint es, dass der Code Maschine auf einem niedrigeren Niveau laufen sollte das Betriebssystem als und deshalb kann ich‘ Ich verstehe, wie das OS als Vermittler zwischen der kompilierten Anwendung und der Hardware fungieren kann.

Dies ist schwierig, aber einfach, wenn Sie einige Grundlagen verstehen.

Erstens ist der gesamte Code nur Maschinencode, der auf der CPU läuft. Kein Code ist höher oder niedriger als anderer Code (mit Ausnahme einiger Befehle, die nur in einem privilegierten Kernel-Modus ausgeführt werden können). Die Frage ist also, wie kann das OS möglicherweise die Kontrolle behalten, obwohl es die Kontrolle über die CPU an den Benutzer abgibt? Wenn der Code auf einer CPU läuft, gibt es ein Konzept namens Interrupt. Dies ist ein Signal, das an die CPU gesendet wird, das bewirkt, dass der gerade laufende Code anhält und mit einem anderen Codecode, einem so genannten Interrupt-Handler, abgeschaltet wird.

Beispiele für Interrupts sind die Tastatur, die Maus und vor allem die Uhr.

Der Takt-Interrupt wird regelmäßig ausgelöst, weil der Takt-Interrupt-Handler des Betriebssystems ausgeführt wird. In diesem Clock-Interrupt-Handler befindet sich der Code des Betriebssystems, der überprüft, welcher Code gerade ausgeführt wird und bestimmt, welcher Code als nächstes ausgeführt werden muss. Dies kann entweder mehr Betriebssystemcode oder mehr Benutzercode sein.

Da die Uhr ist immer tickt, und weil das Betriebssystem immer erhält diese periodische Chance auf der CPU ausgeführt werden, ist es in der Lage, alles innerhalb des Computers orchestrieren, obwohl es läuft den gleichen Satz mit der CPU-Befehle wie jedes normale Programm.

+1

Great Job erklärt es auf sehr einfache Weise. –

+2

Die CPU kann auch in mehreren Modi (Kernel und Benutzer) ausgeführt werden, wobei der Betriebssystemcode im höher privilegierten Kernelmodus ausgeführt wird. – OrangeDog

+0

Danke .. das war eine sehr gute Antwort. Nur um klar zu sein, wäre es richtig zu sagen, dass ein Systemaufruf wie ein Interrupt ist, der die Ausführung des Anwendungscodes stoppt und die Schalter ausgeschaltet sind (d. H. Die Ausführung des OS-Codes startet)? – mahela007

5

Das Betriebssystem zu verstehen system calls bereitstellt, die Programme aufrufen können den Zugriff auf niedriger Ebene Dienstleistungen zu erhalten.

Beachten Sie, dass Systemaufrufe sich von der Funktion system() unterscheiden, die Sie wahrscheinlich zum Ausführen externer Programme verwendet haben.

Systemaufrufe werden verwendet, um Dinge wie Zugriff auf Dateien zu tun, kommunizieren über das Netzwerk, fordern Heap-Speicher usw.