Speicheradresse
Im Computer, a Speicheradresse ist ein Verweis auf eine bestimmte Erinnerung Ort, der auf verschiedenen Ebenen verwendet wird von Software und Hardware-. Speicheradressen sind Sequenzen fester Länge von Ziffern konventionell angezeigt und manipuliert als ohne Vorzeichen Ganzzahlen. Solche numerischen semantischen basiert sich auf Merkmale der CPU (wie die Anweisungszeiger und inkrementell Register ansprechen) auch nach Verwendung des Speichers wie eins Array unterstützt von verschiedenen Programmiersprachen.
Typen
Physische Adressen
A digitaler Computer's Haupterinnerung besteht aus vielen Speicherorte. Jeder Speicherort hat eine physikalische Adresse Welches ist ein Code. Die CPU (oder ein anderes Gerät) kann den Code verwenden, um auf den entsprechenden Speicherort zuzugreifen. Im Allgemeinen nur Systemsoftware, d.h. die BIOS, Betriebssysteme und einige spezialisiert Dienstprogramme (z.B., Speicherprüfer), adressieren Sie den physischen Speicher mit dem Maschinencode Operanden oder Prozessorregisterdie CPU anweisen, ein Hardware -Gerät zu lenken, das als die genannt wird Speichercontroller, um die zu verwenden Speicherbus oder System Bus, oder getrennt Kontrolle, die Anschrift und Datenbusse, um die Befehle des Programms auszuführen. Die Speichercontroller ' Bus besteht aus einer Reihe von parallel Linien, die jeweils durch a dargestellt werden Binärzahl (bisschen). Die Breite des Busses und damit die Anzahl der adressierbaren Speichereinheiten und die Anzahl der Bits in jeder Einheit variieren zwischen Computern.
Logische Adressen
A Computer Programm Verwendet Speicheradressen, um auszuführen Maschinenspracheund um zu speichern und abzurufen Daten. In frühen Computern entsprachen logische und physikalische Adressen, aber seit der Einführung von virtueller Speicher die meisten Anwendungsprogramme Sie haben keine Kenntnisse über physische Adressen. Vielmehr sprechen sie an logische Adressen, oder Virtuelle Adressenmit dem Computer des Computers Speicherverwaltungseinheit und Betriebssystem Speicherzuordnung; sehen unter.
Einheit der Adressauflösung
Die meisten modernen Computer sind Byteadressibel. Jede Adresse identifiziert eine einzelne Byte (Acht Bit) der Lagerung. Daten, die größer als ein einzelnes Byte sind, können in einer Folge von aufeinanderfolgenden Adressen gespeichert werden. Es gibt Wortadressibel Computer, bei denen die minimale adressierbare Speichereinheit genau der des Prozessors ist Wort. Zum Beispiel die Daten General Nova Minicomputer, und die Texas Instrumente TMS9900 und Nationaler Halbleiter imp-16 Mikrocomputer gebraucht 16 Bit Wörterund es gab viele 36-Bit Mainframe -Computer (z.B., PDP-10), die 18-Bit verwendeten Wort Adressierung, nicht Byteadressierungeinen Adressraum von 2 geben18 36-Bit-Wörter, ungefähr 1 Megabyte Speicher. Die Effizienz der Adressierung des Speichers hängt von der Bitgröße des Busses ab, der für Adressen verwendet wird. Je mehr Bits verwendet werden, desto mehr Adressen stehen dem Computer zur Verfügung. Zum Beispiel eine 8-Bit-Byte-adressive Maschine mit einem 20-Bit Adressbus (z.B. Intel 8086) kann 2 adressieren20 (1.048.576) Speicherorte oder eins MiB des Gedächtnisses, während ein 32-Bit-Bus (z. Intel 80386) Adressen 232 (4,294.967.296) Standorte oder 4 Gib Adressraum. Im Gegensatz dazu hat eine 36-Bit-Wortadressible-Maschine mit einem 18-Bit-Adressbus nur 2 adressiert18 (262.144) 36-Bit-Standorte (9.437.184 Bit), äquivalent zu 1.179.648 8-Bit-Bytes oder 11522 Kiboder 1,125 MIB - etwas mehr als der 8086.
Einige ältere Computer (Dezimalcomputer), war Dezimal Ziffer-adressbar. Zum Beispiel jede Adresse in der IBM 1620's Magnetkerngedächtnis identifizierte ein einzelnes sechs Bit Binärcodierte Dezimalzahl Ziffer, bestehend aus a Paritätsbit, Flagge und vier numerische Bits. Die 1620 verwendeten 5-stelligen Dezimaladressen, so war die höchstmögliche Adresse 99.999. In der Praxis unterstützte die CPU 20.000 Speicherorte, und bis zu zwei optionale externe Speichereinheiten konnten jeweils 20.000 Adressen für insgesamt 60.000 (00000–59999) hinzugefügt werden.
Wortgröße gegen Adressgröße
Wort Größe ist ein Merkmal von Rechnerarchitektur Bezeichnet die Anzahl der Bits, die eine CPU gleichzeitig verarbeiten kann. Moderne Prozessoren, einschließlich eingebettete Systeme, normalerweise eine Wortgröße von 8, 16, 24, 32 oder 64 Bit; Die meisten aktuellen allgemeinen Computer verwenden 32 oder 64 Bit. In der Vergangenheit wurden viele verschiedene Größen verwendet, darunter 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 und 60 Bit.
Sehr oft, wenn sie sich auf die beziehen Wortgröße Von einem modernen Computer beschreibt man auch die Größe des Adressraums auf diesem Computer. Zum Beispiel ein Computer, der gesagt wird "32-Bit"Ermöglicht normalerweise auch 32-Bit-Speicheradressen; ein byteadressiierter 32-Bit-Computer kann 2 adressieren32 = 4,294.967.296 Speicherbytes oder 4 Gibibyten (GIB). Auf diese Weise kann eine Speicheradresse in einem Wort effizient gespeichert werden.
Dies gilt jedoch nicht immer. Computer können Speicheradressen größer oder kleiner als ihre Wortgröße haben. Zum Beispiel viele 8 Bit Prozessoren wie die MOS -Technologie 6502, Unterstützte 16-Bit-Adressen- Wenn nicht, wären sie auf nur 256 beschränkt gewesen Bytes von Speicheradressierung. Der 16-Bit Intel 8088 und Intel 8086 unterstützte 20-Bit-Adressierung über Segmentierung, damit sie auf 1 MIB zugreifen können, anstatt 64 KIB -Speicher. Alle Intel Pentium Prozessoren seit dem Pentium Pro enthalten Erweiterungen der physischen Adresse (PAE), die die Zuordnung von 36-Bit-physischen Adressen an 32-Bit-virtuelle Adressen unterstützen. Viele frühe Prozessoren hielten 2 Adressen pro Wort , wie zum Beispiel 36-Bit Prozessoren.
Theoretisch moderne Byteadressibel 64-Bit Computer können 2 adressieren64 Bytes (16 Exbibytes), aber in der Praxis wird die Speichermenge durch die CPU begrenzt, die Speichercontroller, oder der gedruckte Leiterplatte Design (z. B. Anzahl der physischen Speicheranschlüsse oder Menge an gespeicherten Speicher).
Inhalt jedes Speicherorts
Jeder Speicherort in a Computerprotokollcomputer Hält eine binäre Zahl oder Dezimalzahl irgendeiner Art. Seine Interpretation als Daten einiger Datentyp oder als Anweisung und Verwendung werden durch die bestimmt Anweisungen die es abrufen und manipulieren.
Einige frühe Programmierer kombinierten Anweisungen und Daten in Wörtern, um Speicher zu sparen, wenn es teuer war: die Manchester Mark 1 Hatte Platz in seinen 40-Bit-Wörtern, um kleine Daten zu speichern-sein Prozessor ignorierte einen kleinen Abschnitt in der Mitte eines Wortes-und das wurde oft als zusätzliche Datenspeicherung ausgenutzt. Selbstreplizierung Programme wie Viren Behandle dich manchmal als Daten und manchmal als Anweisungen. Selbstmodifizierender Code ist allgemein veraltet Heutzutage erschwert dies, da es das Testen und Wartung bei der Einsparung einiger Bytes überproportional erschwert, und können aufgrund des Compiler- oder Prozessorannahmens über die Maschine auch falsche Ergebnisse liefern Zustand, wird aber manchmal immer noch absichtlich mit großer Sorgfalt eingesetzt.
Adressierungsraum in der Anwendungsprogrammierung
In modern Multitasking Umwelt, an Anwendung Prozess hat normalerweise in seinem Adressraum (oder Leerzeichen) Stücke des Speichers der folgenden Typen:
- Maschinensprache, einschließlich:
- Programm des Programms (historisch bekannt als Codesegment oder Textsegment);
- gemeinsame Bibliotheken.
- Daten, einschließlich:
- initialisierte Daten (Datensegment);
- nicht initialisiert (aber zugeteilt) Variablen;
- Laufzeitstack;
- Haufen;
- geteilte Erinnerung und Speicher zugeordnete Dateien.
Einige Teile des Adressraums können überhaupt nicht zugeordnet werden.
Einige Systeme haben eine "Spaltung" Gedächtnisarchitektur Wo Maschinencode, Konstanten und Daten an verschiedenen Orten liegen und möglicherweise unterschiedliche Adressgrößen haben. Zum Beispiel, Pic18 Mikrocontroller verfügen über einen 21-Bit-Programmzähler, um den Maschinencode und Konstanten im Flash-Speicher zu adressieren, und 12-Bit-Adressregister, um Daten in SRAM zu adressieren.
Behandlungsschemata
Ein Computerprogramm kann auf eine angegebene Adresse zugreifen ausdrücklich -In niedriger Programmierung wird dies normalerweise als als bezeichnet Absolute Adresseoder manchmal ein Spezifische Adresseund ist bekannt als als Zeiger Datentyp in höheren Sprachen. Ein Programm kann aber auch verwenden relative Adresse die einen Ort in Bezug auf woanders (die) spezifiziert (die Basisadresse). Es gibt viele mehr indirekt Adressierungsmodi.
Die Zuordnung logischer Adressen in physischen und virtuellen Speicher fügt auch mehrere Indirektionsebenen hinzu. siehe unten.
Speichermodelle
Viele Programmierer bevorzugen es, den Speicher so zu behandeln, dass es keine Unterscheidung zwischen Coderaum und Datenraum gibt (siehe Oben) sowie aus physischem und virtuellem Gedächtnis (siehe Oben) - Mit anderen Worten, numerisch identische Zeiger beziehen sich auf genau das gleiche Byte von RAM.
Viele frühe Computer unterstützten jedoch keine solche Modellmodell für Flachspeicher - im Speziellen, Harvard Architektur Maschinen erzwingen den Programmspeicher, um vollständig von der Datenspeicherung getrennt zu sein. Viele modern DSPs (so wie die Motorola 56000) haben drei separate Speicherbereiche - Programmspeicher, Koeffizientenspeicher und Datenspeicher. Einige häufig verwendete Anweisungen holen gleichzeitig aus allen drei Bereichen ab - weniger Lagerbereiche (auch wenn es die gleichen Gesamtbytes der Lagerung gäbe), würden diese Anweisungen langsamer laufen.
Speichermodelle in x86 Architektur
Frühe X86 -Computer verwenden die Segmentiertes Speichermodell Adressen basierend auf einer Kombination aus zwei Zahlen: a Speichersegment, und ein Offset Innerhalb dieses Segments.
Einige Segmente werden implizit als behandelt als Codesegmente, gewidmet für Anweisungen, Stapel Segmente, oder normal Daten Segmente. Obwohl die Verwendungen unterschiedlich sind, haben die Segmente nicht unterschiedlich memory protections dies widerspiegeln. In dem Modellmodell für Flachspeicher Alle Segmente (Segmentregister) sind im Allgemeinen auf Null gesetzt, und nur Offsets sind variabel.
Siehe auch
- Speicherzuweisung
- Speicherverwaltungseinheit (MMU)
- Speichermodell (Programmierung)
- Gedächtnisschutz
- Speichersegmentierung
- Offset (Informatik), auch bekannt als a Verschiebung
- Seitentabelle