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.
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. –
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