Während die Antwort ziemlich komplex ist und das Verständnis der Grundlagen elektrischer Systeme und Schaltkreise (KVL, KCL), Binärzahlen und boolescher Logik erfordert, können wir den Prozess auf einer hohen Ebene beschreiben: Code (dargestellt durch einfache Textwörter) wird kompiliert , zusammengebaut und schließlich in eine Kombination von Nullen und Einsen übersetzt, die niedrige bzw. hohe Spannungen darstellen.
Wenn Spannungen an Materialien und Schaltkreise angelegt werden, können diese Spannungen ihre physikalischen Eigenschaften ändern, z. B. das Schließen eines Stromkreises, der eine Glühbirne mit Strom versorgt (wodurch diese aufleuchtet) oder einen Gleichstrommotor mit Strom versorgt, der möglicherweise eine CD / öffnet DVD / Bluray / (?) Laufwerk.
Stellen Sie sich nun eine hypothetische 1-Bit-CPU vor, die in der Lage ist, einen Stromkreis zu schließen und Strom an einen Summer zu liefern, wodurch ein Geräusch erzeugt wird. Diese 1-Bit-CPU verfügt über einen einzelnen Eingang, der zwei Werte haben kann: 0 und 1.
Diese einfache CPU hat eine sehr einfache Assemblersprache: ON
und OFF
, und wir haben eine ausgefallene Programmiersprache, die einige schönere Abstraktionen bietet: cpu.turnOn
, cpu.turnOff
.
Ich schreibe mein Programm, cpu.turnOn;
kompiliere es, baue es zusammen und es kann ausgeführt werden. Wenn ich das Programm auf meiner CPU ausführe, schaltet sich der Summer ein.
In der realen Welt bestehen Computer aus komplexeren Systemen. Anstelle einer einzelnen 1-Bit-CPU haben wir eine 64-Bit-CPU mit komplexen Befehlssätzen und einer Vielzahl von Geräten.
Damit ein komplexes System interagieren kann, bestehen diese Systeme aus Abstraktionsebenen.
Die unterste Schicht besteht aus Spannungen, Schaltkreisen und Silizium oder dem, was Sie als die eigentliche "physische Hardware" betrachten könnten. Neben der Hardware befindet sich normalerweise ein "Mikrocontroller" oder eine spezialisierte Verarbeitungseinheit, die für die Interaktion mit den Besonderheiten einer Hardware ausgelegt ist. Stellen Sie sich ein optisches Laufwerk vor, dessen Mikrocontroller den Laufwerksschacht auswerfen, den Motor starten, den Laser ausrichten und Daten von der Disc streamen kann.
Die Software, die der Mikrocontroller ausführt, wird als Firmware bezeichnet. Es ist ein spezialisiertes Betriebssystem, das Hardwarefunktionen steuert und möglicherweise auch eine API enthält. In dem imaginären 1-Bit-CPU-Beispiel wäre das Programm Firmware und das cpu.turnOn, cpu.turnOff
wäre die API.
Da ein Computer aus vielen Hardwarekomponenten (Grafik, Speicher, Kommunikation, E / A) besteht, bestehen Computer aus vielen spezialisierten Firmwares. Damit mit dieser Hardware etwas Nützliches erreicht werden kann, ist eine weitere Abstraktionsebene erforderlich, z. B. um universell mit Tastaturen umzugehen oder um Mäusen, Touchpads und Trackballs zu ermöglichen, sich trotz unterschiedlicher Interaktionen gleich zu verhalten. Hier kommt das Betriebssystem ins Spiel. Das Betriebssystem bietet eine API zum Verwalten von Gruppen verwandter Geräte sowie Hooks für Hardwareanbieter, um die Übersetzung zwischen den Betriebssystembefehlen und den Befehlen, die der Mikrocontroller versteht, bereitzustellen. In Windows Land ist dies eindriver.
Die nächste Abstraktionsebene über Betriebssystemen und Treibern sind Anwendungen, mit denen Benutzer echte Arbeit leisten (oder Fortnite spielen). Diese Programme sind in einer Vielzahl von Sprachen, SDKs und Toolkits geschrieben und sind der Grund, warum StackOverflow existiert. Diese Sprachen werden zu ausführbarem Code kompiliert, den das Betriebssystem lädt, verwaltet und vom Computer ausführt.
Alles zusammen mit dem shutdown
Befehl: Der Befehlsinterpreter verwendet eine API auf Betriebssystemebene, die die Systemleistung verwaltet. Diese API sendet eine Benachrichtigung an den Rest des Betriebssystems, um beispielsweise das ordnungsgemäße Leeren von Speicherpuffern, das Speichern des Anwendungsstatus, das Beenden von Kommunikationskanälen und das Ausschalten einer Vielzahl von Hardwaresystemen (oder eher den Modus mit geringem Stromverbrauch) zu erledigen. Es verwendet auch einen Leistungstreiber (ACPI?), Um eine Schnittstelle zum Energieverwaltungssubsystem des Computers herzustellen. Dieses Subsystem wird angewiesen, herunterzufahren, was wiederum ein Signal an die Stromversorgung des Computers sendet, um den Stromkreis zu unterbrechen und die meisten Komponenten nicht mehr mit Strom zu versorgen.