Samikukus schrieb:
> Ich dachte immer die Daten (Variablen) kommen in den Hauptspeicher und
> die Maschinenbefehle kommen in den Prozessor,
Der Prozessor kann aber typischerweise nur sehr wenige Befehle
speichern. Jeden Befehl einzeln von der HDD laden wäre extrem langsam,
und daher... werden sie im Hauptspeicher zwischengespeichert (und evtl.
diverse Caches dazwischen), typischerweise in Form des gesamten
Programms. Genau wie die Variablen - der "Datenspeicher" von dem du
sprichst ist ebenfalls der Hauptspeicher... Tatsächlich könntest du
einfach in eine Variable ein paar Instruktionen speichern und den
Prozessor anweisen diese auszuführen. Da das aber genau das ist was
Viren machen sorgen diverse Mechanismen im OS und im Prozessor dafür
dass das nicht (so einfach) geht.
Wenn du das Betriebssystem anweist ein Programm zu starten, kopiert das
OS den Code des Programms in den RAM, kopiert die Initialwerte der
Variablen ebenfalls dahin, und weist den Prozessor an den Code im RAM
auszuführen. Im Endeffekt kommt alles von der HDD oder CD oder Floppy
oder... aber während der Ausführung wird es (normalerweise) im RAM
gehalten.
Bei Mikrocontrollern sieht es oft etwas anders aus, da viele einen
eigenen Speicher für das Programm haben (in Form von Flash), und jede
Instruktion einzeln direkt von da geladen wird (was aufgrund der hohen
Geschwindigkeit vom Flash und der relativ geringen des Prozessorkerns
möglich wird). Bei einigen (zB ARM) gehört der Flash aber zum
Hauptspeicher dazu, und man kann auch Code in den RAM speichern und wie
oben beschrieben direkt von dort ausführen, es existiert somit aus Sicht
des Prozessors kein Unterschied zwischen den beiden Speichern.