Wie kommuniziert Software / Code tatsächlich mit Hardware?

74

Meine Frage ist:

Wenn ich unter Windows / Linux auf die Schaltfläche "Herunterfahren" drücke, wird der Computer heruntergefahren . Wie hat der Befehl "Herunterfahren" den Computer tatsächlich physisch heruntergefahren?

Um meinen Standpunkt klar zu machen:

Wenn wir einen Ball treten, besteht ein physischer Kontakt zwischen dem Ball und unserem Bein, damit sich der Ball bewegen kann. Wie wird also die physische Verbindung zwischen Software und Hardware hergestellt? Wie bringt Klartext von Codes den Computer dazu, das zu tun, was er tut?

AbyJames
quelle
5
Seltsamerweise basieren sowohl die physikalische Hardwareschnittstelle als auch die Kugelinteraktion in Ihrem Beispiel auf elektromagnetischen Kräften.
Pavel Radzivilovsky
1
Wie Pavel bereits erwähnt hat, besteht die gesamte Materie aus größtenteils leerem Raum!
Alan
Glauben Sie ihnen nicht - alles basiert auf Rauch.
Hot Licks
3
Ich habe alle Antworten durchgesehen und keine davon ist gut genug. Wie genau erzeugt das Betriebssystem beispielsweise eine 5-Volt-Ladung? Das ist die Frage. Ich denke, wir alle wissen, dass es 1s und 0s und Stromkreise und Elektrizität sind.
frostymarvelous
1
Dies ist eine sehr interessante Frage, auch wenn ich alle Antworten nach unten gescrollt habe, kann ich immer noch keine zufriedenstellende Antwort finden. Die meisten Antworten konzentrieren sich auf die Funktionsweise des Computers, aber die Frage ist, wie der einfache Code, der sich nicht in der physischen Welt befindet (wie MOV AX, 0x01), die CPU tatsächlich physisch berührt, damit einige Signale (Elektronen) an den Speicher gesendet werden können, um den Speicher zu ändern Status der spezifischen Adresse. Grundsätzlich stellt sich die Frage: Wie berührt der nicht-physikalische Weltcode die Elektronen der physikalischen Welt?
Alexey

Antworten:

51

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: ONund 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.turnOffwä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 shutdownBefehl: 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.

Alan
quelle
13

Wenn Sie der Meinung sind, dass Software im Vergleich zu Hardware eine andere Kreatur ist, würde Sie keine Erklärung zufriedenstellen. Stellen Sie sich Software wie eine Folge elektrischer Ladungen vor. Der gesamte Code, den Sie schreiben, wird als Folge elektrischer Ladungen entweder im RAM oder auf der Festplatte gespeichert. Sie schreiben also NICHT Text, sondern die Abfolge der elektrischen Ladungen. Ihre Grafikkarte zeichnet das Material auf Englisch auf den Monitor, damit Sie besser verstehen, was Sie eingeben. In gewisser Weise ist alles, was Sie am Computer tun, physisch.

Praveen Kumar Thalluri
quelle
5

Nun, das Herunterfahren ist nicht physisch, alle Schaltkreise im Computer sind nicht vollständig ausgeschaltet, bis Sie den Netzstecker ziehen.

Die Software verwendet die APM- Schnittstelle (Advanced Power Management) im BIOS, um die Stromkreise im Computer zu steuern.

Wenn der Computer ausgeschaltet ist, kann er weiterhin eingeschaltet werden, ohne physisch einen Schalter zu ziehen, z. B. durch ein Wake-on-LAN- Signal von einer Netzwerkkarte im Computer.

Guffa
quelle
1
Die Machtfrage war nur ein Beispiel. Ich denke, das OP wollte wissen, wie etwas so Abstraktes wie "Text" verwendet werden kann, um etwas Physisches wie Strom zu steuern oder das CD-Fach auszuwerfen ...
Alan
2
Ja, das ist genau das, was ich wissen möchte. Was Alan erwähnt hat
AbyJames
5

Software wird in der Hardware als magnetische Domänen auf der Festplatte oder Diskette oder als niedrige und hohe Spannung in Computerchips gespeichert. Wenn Sie auf einer Tastatur tippen, wird jedes Zeichen in eine elektrische Reihe von Nullen und Einsen umgewandelt, die dann als niedrige und hohe Spannungen in den als RAM bezeichneten Computerchips gespeichert werden. Die niedrigen und hohen Spannungen im RAM werden dann zum späteren Zurücklesen durch die Plattenköpfe in Spannungen in die magnetischen Domänen auf der Festplatte oder Diskette umgewandelt oder als niedrige und hohe Spannungen in nichtflüchtigen Computerchips zum späteren Zurücklesen gespeichert . Die niedrigen und hohen Spannungen repräsentieren die elektrischen Nullen und Einsen, die von den Tastaturzeichen erzeugt wurden.

Jim Rossi
quelle
3

Das Bein, das einen Ball tritt, ist ein gutes Beispiel. In einer Maschine ist es ziemlich ähnlich. Die CPU ist mit allen anderen Teilen des Systems verbunden, aber im Gegensatz zum Nervensystem, bei dem es sich um eine physische Verkabelung handelt, bei der alle Nerven gleichzeitig verbunden sind, besteht für die CPU keine dauerhafte Verbindung zum Rest des Systems. Es wird bei Bedarf mit dem gewünschten Teil verbunden - ähnlich wie beim Telefonieren - alle Telefone haben Verbindungen, aber nur wenige sind gleichzeitig verbunden.

Die CPU funktioniert durch Ausführen von Anweisungen - dem Softwareprogramm. Es gibt Anweisungscodes, die die CPU anweisen, einen Teil des Systems zu wählen. Jeder Teil hat eine Nummer und die CPU hat eine Anweisung zum Wählen einer Nummer. Sobald die CPU diese Nummer wählt, sendet sie eine Nachricht an diesen Teil - die Nachricht besteht einfach aus Daten - von einem Bit bis zu einem Block beliebiger Größe. Die Hardware an diesem Ort reagiert dann auf die codierte Nachricht.

Auf diese Weise kann die CPU jede Hardware mit demselben Mechanismus steuern. Das einzige, was sich für jedes Gerät ändert, ist die Nummer, die die CPU wählen muss, und die Daten, die die CPU an das Gerät sendet - Details, die in die Software eingegeben werden, auf der die CPU ausgeführt wird.

Um das Gerät auszuschalten, wählt die CPU die Nummer für das Energieverwaltungsgerät und sendet ihm Anweisungen, um in einen geeigneten Energiezustand zu wechseln. Die Hardware reagiert und das Netzteil sendet keine Primärstromversorgung mehr an das Motherboard.

Wenn Sie Softare schreiben, müssen Sie nicht alle diese Details selbst kennen. Sie sind normalerweise als gebrauchsfertiger Code vorverpackt, daher muss Ihre Software nur "Herunterfahren" sagen, und die vorgefertigten Codes dafür (normalerweise im BIOS) werden ausgeführt, um das Herunterfahren durchzuführen, wie oben beschrieben.

mdma
quelle
1

Es gibt mehrere Schnittstellen zwischen PC-Programmen und der realen Welt außerhalb.

Einige stellen eine Verbindung zur CPU her. Beispiele hierfür sind Ports und Hardware-Interrupts (IRQ). Diese ermöglichen das Senden kleiner Datenmengen (auf Host-Programmanforderung) und das Aufrufen von Funktionen (Interrupt-Handler) basierend auf Hardware-Triggern (diskrete Leitung von niedrig nach hoch).

Es gibt schnellere Schnittstellen für die Übertragung großer Datenmengen, die die CPU umgehen. Dies wird als DMA (Direct Memory Access) bezeichnet. Diese werden verwendet, um Daten auf Festplatte, Netzwerk, Anzeigeadapter usw. zu übertragen.

Für Port IO (Opcodes IN und OUT) ist die Software der Initiator. Bei IRQ spricht die Hardware zuerst, um eine Softwareantwort auszulösen.

Nur diese Gerätetreiber dürfen dies tun. Wenn Sie versuchen, dies über die Anwendung zu tun, wird es vom Betriebssystem sofort zerstört. Anwendungen stellen über APIs, die von Gerätetreibern bereitgestellt werden, eine Verbindung zu dieser Welt her. Viele der APIs sind standardisiert, sodass Sie das eigentliche Gerät ersetzen können, ohne anders interagieren zu müssen (in Ihrem Beispiel Drucker, Festplatte, Tastatur, Maus, CRROM, ATX-Netzteilschalter).

Pavel Radzivilovsky
quelle
1

Vergleichen wir die physischen und die Softwarelösungen.

Wenn Sie die Taste drücken, senden Sie tatsächlich ein 5-Volt-Signal an das Netzteil. Diese 5 Volt werden niemals ausgeschaltet (selbst wenn Sie glauben, dass Ihr Computer ausgeschaltet ist). Sie benötigen diese 5 Volt, wenn Sie die Taste drücken, um den Computer einzuschalten. An diesem Punkt werden weitere 5 Volt an das Netzteil gesendet, um es anzuweisen, das Gerät wieder einzuschalten.

Tatsächlich wird Ihr physischer Tastendruck in ein elektronisches Signal umgewandelt, damit das Netzteil etwas tut.

Wenn Sie an Dinge in diesen Begriffen denken, stellen Sie plötzlich fest, dass der Computer sein elektronisches Signal nicht in einen physischen Knopfdruck umwandeln muss, um die Stromversorgung auszuschalten - das haben sie hinzugefügt, um den Menschen zu helfen (dh wenn Sie dort gedacht haben) war ein winziger Motor, der einen geheimen internen "Aus" -Knopf drückte - er existiert nicht).

Die Software muss also lediglich ein elektronisches Signal anweisen, das die Stromversorgung dazu veranlasst, in den 5-Volt-Standby-Modus zu wechseln.

Fenton
quelle
1

Ich hatte die gleiche Frage, die mein Gehirn seit 2011 verspottete, als ich mich entschied, Software Engineer zu werden. Als das Leben weiterging und mein Wunsch in Erfüllung ging, begann ich an verschiedenen Computertechnologien und Domänen zu arbeiten und beantwortete meine eigenen Fragen.

Erstens würde ich die Software als den Satz automatisierter Anweisungen für die Hardware definieren. Anweisung bedeutet in diesem Zusammenhang nur die beiden Zustände GoOn / GoOff oder 1/0 oder High / Low oder True / False oder Charge / NoCharge oder PowerUp / PowerDown.

Die Funktionsweise moderner Computer kann als Befehlskettenreaktion der Hardware bezeichnet werden.

Warum und wie? Unten erklärt,

Stellen Sie sich vor! Sie halten zwei an die Glühbirne angeschlossene Drähte und befestigen sie an der Batterie + ve und -ve. Sie wissen, was jetzt passiert. Tantadaan!, Licht leuchtet auf.

Hier Hardware: Drähte, Glühbirne und der Halter. Software / Anleitung / Aktion: Sie schließen beide Kabel an die Batterie an. Aufladen: Batterieleistung. Ergebnis: Licht leuchtet auf.

In ähnlicher Weise lösen Sie beim ersten Einschalten des Computers die erste Anweisung / Aktion (GoOn) aus, indem Sie die Taste drücken oder den Netzschalter einschalten.

Wie ich bereits sagte, steuern die Anweisungen (Ihre Software / Ihr Textcode wurde in 1/0 Anweisungen konvertiert) die Kettenreaktionen in der Hardware, die dazu führen, dass Ihr Computer wie in den Anweisungen definiert funktioniert (Treiber / Betriebssystem / Software).

Wenn Sie mehr darüber erfahren möchten, hinterlassen Sie bitte einen Kommentar.

Kushan Gowda
quelle
0

Tatsächlich führt Ihr einfacher Code-Text nicht dazu, dass der Computer direkt heruntergefahren wird. Es ruft eine Prozedur des zugrunde liegenden Betriebssystems auf. Das Betriebssystem ruft wiederum das ACPI / APM auf Ihrer Hauptplatine auf. Dadurch wird der Computer heruntergefahren.

Wie die kleinen Einsen und Nullen mit den Schaltkreisen Ihrer Hardware interagieren, ist ein ziemlich komplexes Thema, über das Sie mindestens ein Buch lesen können, um es vollständig zu verstehen ...

Chiccodoro
quelle
0

Wenn Sie suchen, wie ein Gerät im Allgemeinen dazu gebracht wird, seine Aktion auszuführen, wird das Gerät mit Firmware geliefert, die im ROM / CHIP der Steuerplatine gespeichert ist. Die Steuerplatine dient zur Steuerung des Geräts über elektrische Signale.

Über der Firmware befinden sich Treiber / Dienstanbieter. Die Anwendung verwendet diese Dienstanbieter / Treiber, um zu kommunizieren oder das Gerät anzuweisen, eine Aktion auszuführen.

Klicken Sie hier , um mehr darüber zu erfahren, wie Firmwares mit den elektronischen Geräten kommunizieren, um ihre Operationen durchzuführen.

Akaanthan Ccoder
quelle
0

Ich habe jetzt die gleiche Frage für Ruhe überlegt und festgestellt, dass es tatsächlich eine Verbindung von der Software- (Fantasy-) Welt zur Hardware- (realen) Welt gibt.

Stellen Sie sich etwas so Einfaches wie Schaltkreise und Schalter vor und dann etwas Abstrakteres wie einen Addierer oder eine ALU. Mit der Zeit baut die Abstraktion auf sich selbst auf und wird im nächsten Rom komplex. Dann kommt der Mikrocode, die Opcodes, die Maschinensprache, dann endlich die Assemblierung und C. Danach kamen BIOS, Betriebssystem, Treiber und GUI und halten und siehe da kam Ihre geliebte Schaltfläche "Herunterfahren".

AceofSpades
quelle
0

Es ist ganz einfach: Die Codes / Software, die wir schreiben, sind elektrische Signale, die durch Nullen (AUS) und Einsen (EIN) auf der tatsächlichen CPU dargestellt werden. Denken Sie von diesem Punkt an an Ströme und Motoren.

leone queezy
quelle
0

Ein wichtiges wichtiges Merkmal hierbei ist eine Verstärkung. Die in einem Computer verwendeten elektrischen Signale sind winzig und fließen immer, wenn sie von der Uhr ausgelöst werden. Wenn sie von den Logikgattern gesteuert und verstärkt werden, können sie irgendwann an angeschlossene physische Geräte gesendet werden der Computer, auf dem sie eine tatsächliche körperliche Aktivität auslösen können. Transistoren sind die genialen Komponenten, die zur Implementierung von Logikgattern und zur Verstärkung von Signalen verwendet werden. Sie stehen im Zentrum der Software-Hardware-Schnittstelle.

Logikgatter (Low-Level-Schaltung) und die CPU (höhere Abstraktion von Logikgattern) sind die Schlüsselantwort auf Ihre Frage. Sie sind im Grunde die Brücke zwischen Software und Hardware.

Dies ist meine super vereinfachte Erklärung. Eine CPU hat einen Taktzyklus, der normalerweise durch natürlich vorkommende vibrierende Elemente wie Quarzkristalle ausgelöst wird. Während jedes Zyklus ruft es einen Befehl aus dem Speicher (der Softwareseite) ab, und seine ALU (Arithmetic Logic Unit) führt einige Schaltungen aus und basiert auf den Softwareanweisungen und gibt einige Daten aus, die möglicherweise an einen anderen Speicherort zurückgeschrieben werden können.

Auf der Hardwareseite ist auf jeder Hardware Firmware installiert. Die Firmware besteht aus einer Reihe von logischen Anweisungen, die normalerweise mit einer reinen Schaltung (wieder Logikgatter) verdrahtet sind. Basierend auf dem Eingang kann eine bestimmte Kombination von elektrischen Signalen ausgegeben werden, die dies können wird verstärkt und verwendet , um ein tatsächliches physisches Ereignis zB Auswurfplatte zum auslösen der Schalter auf einem Licht, usw.

Simon Ndunda
quelle