it-swarm.com.de

Wie viele Speicheradressen können wir mit einem 32-Bit-Prozessor und 1 GB RAM erhalten?

Wie viele Speicheradressen können wir mit einem 32-Bit-Prozessor und 1 GB RAM erhalten und wie viele mit einem 64-Bit-Prozessor?

Ich denke, dass es ungefähr so ​​ist:

1 GB RAM geteilt durch 32 Bit oder geteilt durch 4? die Anzahl der Speicheradressen zu bekommen?

Aber ich bin mir nicht sicher. Deshalb frage ich.

Ich weiß auf Wikipedia, dass 1 Speicheradresse 32 Bit breit oder 4 Oktette (1 Oktett = 8 Bit) ist, im Vergleich zu 64 Bit bei einem Prozessor, bei dem 1 Speicheradresse oder 1 Ganzzahl 64 Bit breit oder 8 Oktette ist. Aber ich weiß auch nicht, ob ich es richtig verstanden habe.

11
johan smohan

Kurze Antwort: Die Anzahl der verfügbaren Adressen ist gleich der kleineren von diesen:

  • Speichergröße in Bytes
  • Größte vorzeichenlose Ganzzahl, die im CPU-Maschinenwort gespeichert werden kann

Lange Antwort und Erklärung des oben Gesagten:

Der Speicher besteht aus Bytes (B). Jedes Byte besteht aus 8 Bits (b).

1 B = 8 b

1 GB RAM entspricht tatsächlich 1 GiB (Gibibyte, nicht Gigabyte). Der Unterschied ist:

1 GB  = 10^9 B = 1 000 000 000 B
1 GiB = 2^30 B = 1 073 741 824 B

Jedes Byte Speicher hat eine eigene Adresse, egal wie groß das CPU-Maschinenwort ist. Z.B. Intel 8086 CPU war 16-Bit und adressierte Speicher byteweise, ebenso moderne 32-Bit- und 64-Bit-CPUs. Das ist die Ursache für das erste Limit - Sie können nicht mehr Adressen als Speicherbytes haben.

Die Speicheradresse ist nur eine Anzahl von Bytes, die die CPU vom Anfang des Speichers überspringen muss, um zu dem zu gelangen, nach dem sie sucht.

  • Um auf das erste Byte zuzugreifen, müssen 0 Bytes übersprungen werden, daher ist die Adresse des ersten Bytes 0.
  • Um auf das zweite Byte zuzugreifen, muss 1 Byte übersprungen werden, daher lautet seine Adresse 1.
  • (und so weiter...)
  • Um auf das letzte Byte zuzugreifen, überspringt die CPU 1073741823 Byte, daher lautet ihre Adresse 1073741823.

Jetzt muss man wissen, was 32-Bit eigentlich bedeutet. Wie ich bereits erwähnt habe, hat es die Größe eines Maschinenworts.

Maschinenwort ist die Menge an Speicher, die die CPU zum Speichern von Zahlen verwendet (in RAM, Cache oder internen Registern). 32-Bit-CPU verwendet 32 ​​Bits (4 Bytes) zum Speichern von Zahlen. Speicheradressen sind ebenfalls Zahlen. Bei einer 32-Bit-CPU besteht die Speicheradresse aus 32 Bit.

Denken Sie jetzt darüber nach: Wenn Sie ein Bit haben, können Sie zwei Werte darauf speichern: 0 oder 1. Fügen Sie ein weiteres Bit hinzu und Sie haben vier Werte: 0, 1, 2, 3. Auf drei Bits können Sie acht Werte speichern : 0, 1, 2 ... 6, 7. Dies ist eigentlich ein Binärsystem und es funktioniert so:

Decimal Binary
0       0000
1       0001
2       0010
3       0011
4       0100
5       0101
6       0110
7       0111
8       1000
9       1001
10      1010
11      1011
12      1100
13      1101
14      1110
15      1111

Es funktioniert genau wie beim normalen Addieren, aber die maximale Ziffer ist 1, nicht 9. Dezimal 0 ist 0000, dann addieren Sie 1 und erhalten 0001, fügen Sie eine weitere hinzu und Sie haben 0010. Was hier passierte, ist, dass Sie einen dezimalen 09 haben und einen addieren: Sie ändern 9 auf 0 und erhöhen die nächste Ziffer.

Aus dem obigen Beispiel können Sie ersehen, dass es immer einen Maximalwert gibt, den Sie in einer Zahl mit einer konstanten Anzahl von Bits behalten können. Wenn alle Bits 1 sind und Sie versuchen, den Wert um 1 zu erhöhen, werden alle Bits zu 0 und brechen damit das Bit Nummer. Dies wird als Ganzzahlüberlauf bezeichnet und verursacht sowohl für Benutzer als auch für Entwickler viele unangenehme Probleme.

   11111111    = 255
+         1
-----------
  100000000    = 0   (9 bits here, so 1 is trimmed)
  • Für 1 Bit ist der größte Wert 1,
  • 2 Bits - 3,
  • 3 Bits - 7,
  • 4 Bits - 15

Die größtmögliche Anzahl ist immer 2 ^ N-1, wobei N die Anzahl der Bits ist. Wie ich bereits sagte, ist eine Speicheradresse eine Zahl und hat auch einen Maximalwert. Aus diesem Grund ist die Größe von Maschinen-Word auch eine Begrenzung für die Anzahl der verfügbaren Speicheradressen. Manchmal kann Ihre CPU einfach keine Zahlen verarbeiten, die groß genug sind, um mehr Speicher zu adressieren.

Auf 32 Bits können Sie also Zahlen von 0 bis 2 ^ 32-1 beibehalten, und das sind 4 294 967 295. Dies ist mehr als die größte Adresse in 1 GB RAM. In Ihrem speziellen Fall ist dies also die Größe von RAM der begrenzende Faktor sein.

Das RAM Limit für 32-Bit-CPUs beträgt theoretisch 4 GB (2 ^ 32) und für 64-Bit-CPUs sind es 16 EB (Exabyte, 1 EB = 2 ^ 30 GB). Mit anderen Worten, eine 64-Bit-CPU könnte das gesamte Internet ... 200-mal ansprechen;) (geschätzt von WolframAlpha ).

In realen Betriebssystemen können 32-Bit-CPUs jedoch etwa 3 GiB RAM adressieren. Dies liegt an der internen Architektur des Betriebssystems - einige Adressen sind für andere Zwecke reserviert. Mehr über diese sogenannte 3 GB-Barriere können Sie auf Wikipedia nachlesen . Sie können dieses Limit mit Physical Address Extension aufheben.


In Bezug auf die Speicheradressierung sollte ich einige Dinge erwähnen: virtueller Speicher , Segmentierung und Paging .

Virtueller Speicher

Wie @Daniel R Hicks in einer anderen Antwort ausführte, verwenden Betriebssysteme den virtuellen Speicher. Das bedeutet, dass Anwendungen nicht mit realen Speicheradressen arbeiten, sondern mit Adressen, die vom Betriebssystem bereitgestellt werden.

Mit dieser Technik kann das Betriebssystem einige Daten von RAM in eine sogenannte Auslagerungsdatei (Windows) oder einen Swap (* NIX) verschieben. Die Festplatte ist einige Größenordnungen langsamer als der Arbeitsspeicher, stellt jedoch kein ernstes Problem für Daten dar, auf die selten zugegriffen wird, und ermöglicht dem Betriebssystem, Anwendungen mit mehr RAM bereitzustellen, als Sie tatsächlich installiert haben.

Paging

Was wir bisher besprochen haben, nennt man flaches Adressierungsschema.

Paging ist ein alternatives Adressierungsschema, das es ermöglicht, mehr Speicher zu adressieren, als Sie normalerweise mit einem Computer-Word in einem flachen Modell könnten.

Stellen Sie sich ein Buch mit 4 Buchstaben vor. Angenommen, auf jeder Seite befinden sich 1024 Nummern. Um eine Nummer anzusprechen, müssen Sie zwei Dinge wissen:

  • Die Nummer der Seite, auf der das Word gedruckt wird.
  • Welches Wort auf dieser Seite suchen Sie?.

Genau so gehen moderne x86-CPUs mit Speicher um. Es ist in 4 KiB-Seiten (jeweils 1024 Maschinenwörter) unterteilt und diese Seiten haben Nummern. (Tatsächlich können Seiten auch 4 MiB groß oder 2 MiB groß sein mit PAE ). Wenn Sie eine Speicherzelle adressieren möchten, benötigen Sie die Seitennummer und die Adresse auf dieser Seite. Es ist zu beachten, dass auf jede Speicherzelle genau ein Zahlenpaar verweist, was bei der Segmentierung nicht der Fall ist.

Segmentierung

Nun, dieser ist dem Paging ziemlich ähnlich. Es wurde in Intel 8086 verwendet, um nur ein Beispiel zu nennen. Adressgruppen werden jetzt als Speichersegmente und nicht als Seiten bezeichnet. Der Unterschied besteht darin, dass sich Segmente überlappen können und sehr viel überlappen. Zum Beispiel waren auf 8086 die meisten Speicherzellen aus 4096 verschiedenen Segmenten verfügbar.


Ein Beispiel:

Nehmen wir an, wir haben 8 Bytes Speicher, die alle Nullen enthalten, mit Ausnahme des 4. Bytes, das 255 entspricht.

Illustration für das flache Speichermodell:

 _____
|  0  |
|  0  |
|  0  |
| 255 |
|  0  |
|  0  |
|  0  |
|  0  |
 -----

Abbildung für ausgelagerten Speicher mit 4-Byte-Seiten:

 PAGE0
 _____
|  0  |
|  0  |
|  0  |  PAGE1
| 255 |  _____
 -----  |  0  |
        |  0  |
        |  0  |
        |  0  |
         -----

Abbildung für segmentierten Speicher mit um 1 verschobenen 4-Byte-Segmenten:

 SEG 0
 _____   SEG 1
|  0  |  _____   SEG 2
|  0  | |  0  |  _____   SEG 3
|  0  | |  0  | |  0  |  _____   SEG 4
| 255 | | 255 | | 255 | | 255 |  _____   SEG 5
 -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 6
         -----  |  0  | |  0  | |  0  | |  0  |  _____   SEG 7
                 -----  |  0  | |  0  | |  0  | |  0  |  _____
                         -----  |  0  | |  0  | |  0  | |  0  |
                                 -----   -----   -----   -----

Wie Sie sehen, kann das 4. Byte auf vier Arten adressiert werden: (Adressierung von 0)

  • Segment 0, Versatz 3
  • Segment 1, Versatz 2
  • Segment 2, Versatz 1
  • Segment 3, Offset 0

Es ist immer die gleiche Speicherzelle.

In Real-Life-Implementierungen werden Segmente um mehr als 1 Byte verschoben (bei 8086 waren es 16 Byte).

Das Schlechte an der Segmentierung ist, dass sie kompliziert ist (aber ich denke, das wissen Sie bereits;). Gut ist, dass Sie einige clevere Techniken verwenden können, um modulare Programme zu erstellen.

Sie können beispielsweise ein Modul in ein Segment laden, dann so tun, als wäre das Segment kleiner als es wirklich ist (gerade klein genug, um das Modul zu halten), dann das erste Segment auswählen, das sich nicht mit dem pseudo-kleineren Segment überschneidet, und das nächste Modul laden , und so weiter. Grundsätzlich erhalten Sie auf diese Weise Seiten mit variabler Größe.

37
gronostaj

Beachten Sie außerdem, dass virtuelle Adressierung zusammen mit mehreren Adressräumen verwendet wird. Obwohl Sie nur über 1 GB RAM verfügen, kann ein Programm konzeptionell bis zu 4 GB virtuellen Speicher verwenden (obwohl die meisten Betriebssysteme dies auf weniger beschränken). Und Sie können konzeptionell eine (fast) unbegrenzte Anzahl solcher 4-GB-Adressräume haben.

Die RAM-Größe beschränkt nicht (so sehr) die maximale Größe eines Programms oder die Anzahl der Programme, die Sie ausführen können, sondern schränkt die Leistung ein. Wenn der reale Speicher "überlastet" wird und das System anfängt, "zu schlagen", während es "Seiten" des Speichers zwischen RAM und Festplatte hin und her wechselt, sinkt die Leistung.

3
Daniel R Hicks

Das 1 GByte von RAM würde 1024 · 1024 · 1024 Bytes oder 1.073.741.824 Bytes belegen.

Ein 32-Bit-Prozessor hat immer 4 * 1024 * 1024 * 1024 Bytes oder 4 294 967 296 Bytes Adressraum Das 1 GByte von RAM erscheint in diesem Raum. Auf Intel-Prozessoren müssen einige RAM an der Adresse 0 für die Interrupt-Vektoren angezeigt werden, daher beginnt RAM an der Adresse 0 und geht nach oben.

In diesem Adressraum werden andere Elemente angezeigt, z. B. das BIOS und Options-ROMs (in den oberen 384 KB innerhalb der ersten 1 MB), E/A-Geräte (wie der APIC) und der Video-RAM. Im Systemverwaltungsmodus "SMRAM" laufen auch einige seltsame Dinge ab, die ich noch nicht vollständig verstehe.

Beachten Sie, dass dies aus Sicht des Kernels ein physischer Adressraum ist. Die MMU kann dies alles auf beliebige Weise in einen Userspace-Prozess umlagern.

2
LawrenceC

Die akzeptierte Antwort gibt eine gute Erklärung. Aber ich denke nicht, dass es die Antwort ist. Es enthält nichts über Adressbus . Und seine Größe ist eigentlich der Hauptgrund für Speicherbeschränkungen. Beispielsweise ist 8080 ein 8-Bit-Prozessor (die Größe seines Datenbusses beträgt 8 Bit), er verfügt jedoch über einen 16-Bit-Adressbus. Es kann 2 ^ 16 = (2 ^ 6) * (2 ^ 10) = 64 * 1024 Bytes = 64 KB adressieren.

Weitere Informationen finden Sie hier (32-Bit) im Abschnitt "Technische Daten".

0
Dmitriy Dokshin

Ein 32-Bit-Prozessor kann höchstens 2 ^ 32 einzelne Speicherbytes (ungefähr 4 GB) adressieren, aber 1 GB Speicher würde 1 * 1024 * 1024 * 1024 adressierbare Speicherbytes ergeben (obwohl Sie wahrscheinlich immer noch einen virtuellen 2 ^ 32-Adressraum haben würden ). Eine 64-Bit-CPU könnte 2 ^ 64 einzelne Bytes adressieren, aber ich denke, die meisten Systeme verwenden nur 48 Bits für Speicheradressen, um die Obergrenze zu erreichen. adressierbare Bytes 2 ^ 48.

0
AcId