Frage zu Prozessor
-
Hallo,
Trennung von Daten und Programm.
Versteht man darunter z.B. folgendes.
Programm z.B. C ++ Quellcode.
Daten sind z.B. Inhalt der Variablen ?
-
Damit kann Verschiedenes gemeint sein. Deine Begriffe ohne Kontext sind wohl zu allgemein formuliert.
Oftmals ist der Unterschied von Harvard zu von-Neumann-Architektur gemeint.
Manchmal auch das einteilen von Daten und Code in verschiedene Segmente.
Wenn man Programm als "Business Logic" verstehen könnte, dann auch das derzeit moderne Mehrschichtenmodell.
Detailinformationen zu den von mir geposteten Begriffen finden sich bei Wikipedia.
MfG SideWinder
-
bei von Neumann gibt es keine Trennung von Daten und Programmcode.
Was heißt das genau ? Code ist z.b. Assemblercode .und daten ?
-
blurry333 schrieb:
bei von Neumann gibt es keine Trennung von Daten und Programmcode.
Was heißt das genau ? Code ist z.b. Assemblercode .und daten ?
Ich weiß, das ist der große Unterschied zur Harvard-Architektur.
Grob gesagt:
Code = Ausführbare Befehle
Daten = VariablenMfG SideWinder
-
Ich zitiere mal :
Zudem sorgt die physikalische Trennung von Daten und Programm dafür, dass bei Softwarefehlern kein Programmcode überschrieben werden kann.
-
soll wohl heißen dass nur Daten beschreibbar sind, der Code allerdings nur
lesbar ?
-
In C++ gibt es doch const und mutual. Const Variablen und Strings können doch vom C++ Kompiler in einen geschützen Bereich gelegt werden. zB einen Rom. Ist etwas mutual, heißt das es sei const, könnte jedoch ev irgendwann doch mal verändert werden und sollte in einen beschreibbaren Bereich abgelegt werden.
Dann müsste doch der Kompiler neben dem Prg ein extra "Ding" rauswerfen das man dann in den Rom schreibt? Und wo passiert das wirklich, das die const Variablen in einem extra Bereich abgelegt werden? Jetzt sagen alle Embedded Systeme, aber ist es nicht billiger einen großen Flash Speicher zu kaufen anstatt wegen diesem Fliegenschiss von const Anteilen einen extra Rom einzubauen?
-
Wenn ich eine Datei von der Festplatte aufrufe, wird diese doch immer
in den Hauptspeicher gemappt ?
-
blurry333 schrieb:
soll wohl heißen dass nur Daten beschreibbar sind, der Code allerdings nur
lesbar ?Wichtig ist auch die strikte Trennung. Ein Prozessor hat einen Instruction Pointer, der auf den nächsten Befehl, der ausgeführt werden soll, zeigt. Ohne Trennung hindert einem nichts daran diesen Pointer einfach irgendwo in den Datenbereich zeigen zu lassen. Da im Datenbereich von außen eingelesene Daten liegen können, ist das natürlich heikel, da man so Schadcode einschmuggeln kann.
Beim PC (Der eigentlich eine Von-Neumann Architektur ist) gibt es seit gar nicht so langer Zeit eine ähnliche Trennung. Es liegt zwar alles im gleichen Speicher, allerdings kann man Bereiche mit dem nx-bit als nicht ausführbar markieren. Setzt man den Instruction Pointer auf einen Bereich mit gesetzten nx-bit gibt es einen Fehler und das Betriebsystem beendet in der Regel das Programm.
-
aaaaaa schrieb:
Ist etwas mutual, heißt das es sei const, könnte jedoch ev irgendwann doch mal verändert werden und sollte in einen beschreibbaren Bereich abgelegt werden.
wenn man 'const' weglässt, isses automatisch veränderbar. in c++ gibt's noch ein 'mutable'-keyword, das ist dazu da, teile eines const-objekts dann doch noch beschreibbar zu machen.
aaaaaa schrieb:
Dann müsste doch der Kompiler neben dem Prg ein extra "Ding" rauswerfen das man dann in den Rom schreibt?
das macht er auch, ein image, das den maschinencode enthält, sowie konstante daten, mit denen irgendwelche variablen initialisiert werden, usw.
aaaaaa schrieb:
Und wo passiert das wirklich, das die const Variablen in einem extra Bereich abgelegt werden?
das macht eigentlich jeder vernünftige compiler/linker.
aaaaaa schrieb:
Jetzt sagen alle Embedded Systeme, aber ist es nicht billiger einen großen Flash Speicher zu kaufen anstatt wegen diesem Fliegenschiss von const Anteilen einen extra Rom einzubauen?
^^separate ROMs werden selten verwendet. eher nimmt man einen controller-typ mit mehr flash-speicher, wenn man viel statisches zeug hat (z.b. für 'ne extra firmware, die ein spezieller chip braucht und die er beim start geladen bekommt). ist einfach auch 'ne kostenfrage und jeder zusätzliche chip macht das design komplexer und grösser. ausnahme ist vielleicht irgendwelcher bootloader-code im eigenen ROM, der nicht überschrieben werden darf.
blurry333 schrieb:
Wenn ich eine Datei von der Festplatte aufrufe, wird diese doch immer
in den Hauptspeicher gemapptteilweise, wenn das executable sehr gross ist, kann zur laufzeit der code dynamisch nachgeladen werden (grosse OS'se wie windoof z.b. machen das automatisch, ohne dass sich der programmierer darum kümmern musss).
