Was passiert mit der Hardware, wenn man Programmiert?

Ginpanse  12.08.2023, 15:39

was ist bitte eine Programmiere Haltung?

Mrshadow12 
Beitragsersteller
 12.08.2023, 15:54

Schaltung*.

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Meiner Meinung nach ist die Antwort oben etwas schwierig zu verstehen, und die darunter recht kurz. Hier also mal eine Zusammenfassung:

Wie @ZaoDaDong korrekt festgestellt hat, passiert mit der Hardware insofern nichts, dass sie sich nicht verändert. Alle Transistoren bleiben genau da, wo sie sind.

Was passiert, wenn du programmierst, ist in etwa Folgendes (Hardware kommt gen Ende, aber das davor ist wichtig für das Verständnis):

1. Du schreibst Programmcode.

Diesen schreibst du in einer der unzähligen Programmiersprachen, die es gibt. Welche du wählst, ist allein dir überlassen, und am Ende geht es für alle gleich weiter. der programmcode sind für dich etwas verständlichere Anweisungen, was der Computer am Ende tun soll.

2. Der Code wird kompiliert.

Die Programmiersprache sieht zwar so aus, als könnte ein Computer sie verstehen, tut er aber nicht. Deshalb übersetzt ein sogenannter Compiler deinen Code in etwas, das wir als Assembly kennen (einige Programmiersprachen wie Java gehen hier einen Umweg über maschinenunabhängigen Bytecode, wenn du da mehr wissenn willst, frag' nochmal nach). Sprich: der Compiler macht aus deinen if-Statements, while-loops und switch-Cases sehr viele Assembly-Anweisungen für das System, auf welchem du kompilierst (x86-64 Assembly für moderne 64-bit Intel-Prozessoren, ARM für MACs, ...). Diese landen dann im RAM, also im temporären Arbeitsspeicher.

3. Die Assembly-Anweisungen werden von der Hardware ausgeführt.

HIer ist etwas mehr zu erklären, zum Thema Architektur:

Ein Computer funktioniert (stark vereinfacht) so, dass eine kleine (physische) Steuereinheit ("Control" genannt) sogenannte Steuerleitungen ("control lines") an- oder ausschaltet (0 oder 1). Diese Steuerleitungen wiederum beeinflussen, was die einzelnen Hardware-Komponenten tun (welche Register ausgelesen werden, welche Leitungen von Multiplexern/Demultiplexern durchgelassen werden, welche Berechnungen die ALU ausführt uvm...)

Damit Control weiß, welche Leitungen es wie zu setzen hat, muss es einen permanenten Input von Nullen und Einsen erhalten. Es wird immer die benötigte Menge an Stellen eingelesen, und in dieser Reihenfolge werden die Steuerleitungen dann auf 0 oder 1 gesetzt, also physisch Strom an oder aus.

Assembly-Anweisungen sind bereits sehr dicht an reiner Maschinensprache dran, der letzte Übersetzungsschritt passiert dann in der CPU (also im Chip) selbst, über eine dort fest abgespeicherte "instruction table" (Instruktionstabelle), welche aus jeder Assembly-Anweisung den finalen Maschinencode macht, welcher von Control verstanden und ausgeführt wird.

TL;DR der ganzen Sache: Dein Code (den du verstehst) wird mehrfach in andere Formen übersetzt (die deutlich weniger Menschen verstehen... ich zähle mich leider dazu), welche schlussendlich bei 0 und 1 ankommen, was der Computer dann physisch umsetzen kann.

Die Frage mit dem Abspeichern wurde bereits korrekt beantwortet, trotzdem auch hierzu nochmal kurze Zusammenfassung:

Der Arbeitsspeicher (RAM) eines Computers ist nicht permanent. Schaltest du ihn aus, geht dessen Inhalt verloren. Arbeitsspeicher --> Arbeitsplatz kann man sich gut merken: Der Computer legt dort seine ganzen Werkzeuge und was er sonst so braucht ab, aber wenn die Arbeit getan ist, räumt er dort wieder auf.

Die Festplatte dagegen (PS - physical storage) ist ein permanent state drive, also ein dauerhafter Speicher, der seinen Zustand nach dem Ausschalten des Computers beibehält. wenn ein Programm auf der Festplatte gepeichert wurde, wird es beim Start zunächst wieder in den Arbeitsspeicher geladen, und dann geht's von dort wie oben beschrieben weiter.

Sollte ich jetzt mehr Fragen aufgeworfen als beantwortet haben - feel free nochmal zu fragen :D

Woher ich das weiß:Studium / Ausbildung

Mrshadow12 
Beitragsersteller
 14.08.2023, 20:35

Vielen Dank für deine ausführliche hilfreiche Antwort

0

Während man den Programmtext schreibt, die Geschriebene kommen in den RAM. Wenn das Computer dann ausgeschaltet wird, dann wird der Text verloren.

Wenn man den Text speichert, das Program wird an die Festplatte oder andere Datenträger geschrieben. Das ist permanent; wenn das Computer ausgeschaltet wird, dann bleibt das Text. So es ist häufiges Speichern empfehlenswert.

Wenn man das Programm kompiliert, dann beginnt das Computer eine (oder mehrere) neue Datei(en) speichern. Das kann auch lang sein, wenn es über ein großes Programm geht. Wenn man währenddessen das Computer ausgeschaltet wird, dann wird das Programm nicht ganz kompiliert. Wenn man das Programm interpretiert, dann kommt die Information nur in den RAM, und wird sie gleich gelaufen.

Wenn man das Programm läuft, dann wird es geschehen, was in das Programm geschrieben ist:

  • Es benutzt Datenbasen, dann werden Daten an eine Festplatte gespeichert
  • Es schreibt etwas aus oder zeichnet: Signale werden an Grafikkarte kalkuliert und an Bildschirm gesendet, was die Signale schreibt und zeichnet
  • Es spielt Musik ab: Signale werden an Soundkarte kalkuliert und an ein Abspieler gesendet, was die Signale abspielt
  • Und so weiter.

Ist zwar auf Englisch, aber eine wie ich finde wundervolle Videoreihe um zu verstehen was ein Computer macht wenn er deinen Programmcode ausführt.

https://youtube.com/playlist?list=PLowKtXNTBypFbtuVMUVXNR0z1mu7dp7eH

Das Beispiel nimmt einen 65c02 Prozessor welcher natürlich deutlich weniger leistungsfähig und komplex ist als ein moderner Intel oder AMD Prozessor. Aber die grundlegende Funktion ist nicht anders.

Was passiert mit dir wenn dir jemand sagt, dass du einkaufen gehen sollst?

Im Endeffekt ist ein Programm nichts anderes als eine Liste von Anweisungen welche die Hardware ausführen soll. Während dem Programmieren passiert gar nichts. Wenn die Hardware das Programm ausführt macht sie genau das was du eben geschrieben hast.