Wie werden "spezifische" Daten gefunden und aus einer Halbleiterspeicherquelle entnommen?

In einem Halbleiterspeicherchip wird jedes Bit binärer Daten in einer winzigen Schaltung gespeichert, die als Speicherzelle bezeichnet wird und aus einem bis mehreren Transistoren besteht. Flüchtiger Typ.

Angenommen, eine Anwendung speichert ihre Daten in einem bestimmten Segment im RAM des Computers.

Woher würde die CPU wissen, welche Daten extrahiert werden sollen, und wie würde sie die anderen Daten sortieren, um zu ihnen zu gelangen? Wenn alles auf seiner Kernebene 0 oder 1 ist, ist es schwer zu unterscheiden, welchen Zweck der 'x'-Speicher hat.

Antworten (3)

Typischerweise wird ein Speicher durch mehrere Adresseingänge sowie ein Lese-/Schreibsteuersignal und einige Eingänge gesteuert, die steuern, wann die Lese- oder Schreiboperation erfolgen soll.

Bei n Adresseingängen können 2 n Stellen im Speicher unterschieden werden. Dies sind die "spezifischen" Speicherorte, auf die der Computer zugreifen kann. Normalerweise enthält jede Stelle mehr als ein Bit. Es könnte ein Byte (8 Bit oder Speicherzellen) oder ein Multi-Byte-Wort sein, das 16, 32 oder 64 Bit breit sein könnte .

Wenn Sie ein Megabyte Speicher mit Single-Byte-Zugriff haben, benötigen Sie 20 Adressbits (einzelne Eingangssignale), um ihn zu steuern. Für ein Gigabyte Speicher benötigt man 30 Adressbits.

Woher würde die CPU wissen, welche Daten extrahiert werden sollen, und wie würde sie die anderen Daten sortieren, um sie zu erreichen?

Im Allgemeinen ist es Sache des Programmierers (bei Verwendung von Assemblersprache) oder des Compilers (bei Verwendung einer höheren Sprache), zu verfolgen, welche Daten an welcher Adresse gespeichert werden.

Wenn Sie beispielsweise ein C-Programm mit einer globalen Variablen schreiben x, entscheidet der Compiler, an welchem ​​Ort es gespeichert wird, und kümmert sich um die Generierung von Anweisungen, die auf diesen Ort zugreifen, wann immer Ihr Programm verwendet werden muss x.

Wenn Sie eine lokale Variable yinnerhalb einer Funktion erstellen, verfolgt der Compiler diese Variable relativ zu dem Wert, der in einem speziellen Register namens Stapelzeiger (SP) gespeichert ist. Bei jedem Aufruf der Funktion kann SP einen anderen Wert enthalten. Wird aber ybei jedem Aufruf neu erstellt und am selben Offset von SP gespeichert (der vom Compiler verfolgt und vom Programmierer im Allgemeinen nicht gesehen wird).

Eine dritte Möglichkeit ist die Heap- Zuordnung. Das bedeutet, dass der Speicherplatz von einem "Haufen" verfügbaren Speichers zugewiesen wird. In einigen Sprachen (z. B. Java) erledigt der Compiler möglicherweise den größten Teil der Arbeit beim Verfolgen des Heap-Speichers. In C ist der Programmierer dafür verantwortlich, den Heap-Speicher im Auge zu behalten. Dies geschieht mit Zeigervariablen , die im Grunde die Adresse codieren, auf die das Programm zugreifen soll, um diese bestimmten Daten zu erhalten.

Die CPU (ursprünglich von Menschen entworfen) folgt einfach den Programmanweisungen (von Menschen geschrieben) und geht zu einer bestimmten Adresse in ihrem Speicher und ruft die Binärdaten ab und macht dann etwas damit (abhängig von der Programmanweisung).

Im Gegensatz zu Menschen haben Computer kein Problem mit vielen Einsen und Nullen. Sie „denken“ oder „wissen“ (noch) nichts.

F: Woher weiß es, in welcher Adresse nach den Daten gesucht werden soll? A: Es speichert die Adresse an einem anderen Speicherort... F: Woher kennt es diese Adresse? A: Es ist auch im Speicher gespeichert. Q: ??? A: Irgendwo am Anfang sagt die tatsächliche Verdrahtung des Prozessors, in welcher Adresse nach den ersten Anweisungen gesucht werden muss.
@ChrisStratton Die Adresse kann von einer Programmanweisung stammen, wie in "Dieses Register mit dem Inhalt dieser Adresse laden", oder sie kann indiziert werden, wie in "Verschieben Sie die Daten in diesem Register auf eine Basisadresse plus den Inhalt des Indexregisters". usw. Wenn die CPU zum ersten Mal startet, geht sie zu einer bestimmten Adresse, wo sie erwartet, ihre erste Anweisung zu finden. Dies ist in das CPU-Design „fest verdrahtet“ (vorprogrammierte Logik). Wie es diese Anweisungen und die darauf folgenden Binärdaten (Adresse, Zahl, Buchstabe, Index usw.) interpretiert, ist ebenfalls fest verdrahtet.

Sie haben Recht, es ist außerordentlich schwierig, weil in allgemeinen Computern die Speicherorte keine Bedeutung haben. Die Reihe von Bytes usw. an einem Ort kann Teil eines Bildes sein, zu einer E-Mail-Adresse, zu einem Rezept für Tacos. Alles steht im Kontext. SO muss sich das Programm merken, wo es bestimmte Dinge abgelegt hat und welches Format verwendet wurde. Wenn irgendetwas auch nur das kleinste bisschen abweicht, besteht eine gute Chance, dass es nicht abgeschlossen wird.

Tatsächlich gibt es bei bestimmten Computern keinen wirklichen Unterschied in der Speicherung zwischen Code und Daten.

Bei einem Mikroprozessor gibt es nur eine Sache, die sicher ist, und zwar erwartet der Prozessor beim Start, dass an einer reservierten Adresse ein Codewort vorhanden sein wird, das eine Anweisung ist. Alles andere baut darauf auf. Deshalb nennt man den Vorgang des Anfahrens auch Boot Strapping – wörtlich bedeutet es, sich an den Stiefelriemen festzuhalten und sich vom Boden abzuheben.