Segmentierung im Real-Modus
-
Wenn man in den PM schaltet, gibt es auf dem Speicher verteilt mehrere Sektoren je maximal 64KB-Größe.
Wie ist das im RM? Gibt es da bloß ein Segment, das so groß wie der RAM und maximal 1MB gesamt ist?
-
Hi,
im Realmode gibt es auch einen segmentierten Speicher. Die physikalische Adresse ist Segmentregister*16 + Offset.
mfg Martin
-
Hi,
und wieso kann man dann im RM bloß 1MB vom Hauptspeicher addressieren? Liegt es daran, weil im RM nur 20 Adressleistungen aktiv sind, selbst wenn es mehrere gibt?
-
Ja.
-
@oser sagte in Segmentierung im Real-Modus:
Hi,
und wieso kann man dann im RM bloß 1MB vom Hauptspeicher addressieren? Liegt es daran, weil im RM nur 20 Adressleistungen aktiv sind, selbst wenn es mehrere gibt?
Ein 16 Bitwert mit 16 multipliziert ergibt einen 20 Bitwert. Und das ist genau die Anzahl der Adressleitungen der 8086-CPU.
VG
-
Die höchstmögliche Adresse ist
FFFF:FFFF
, das ist 1MB + 65519. Not macht erfinderisch: https://de.wikipedia.org/wiki/A20-Gate
-
@mgaeckler Wenn der PC im RM geschalten ist, stehen also 20 Adressleitungen zur Verfügung. Nun können 2²⁰ (also 1048576) verschiedene Adressen angesprochen werden. Aber warum 1048576 Byte und nicht 1048576 Bit?
-
Weil man die geniale Idee hatte, dass der Adressbus eine sinnvolle Menge Daten auf einmal ansprechen sollte, weil man außerordentlich selten einzelne Bits braucht, aber sehr oft eben diese größeren Pakete. Zumal man dann auch mit weniger Leitungen im Adressbus wesentlich mehr Daten ansprechen kann, die dann auch wesentlich schneller zurück kommen (weil halt mehr auf einmal), für die relativ geringen Kosten, dass man mehr Leitungen für den Rückweg braucht.
Diese sinnvolle Menge hat man 'Byte' genannt, was als kleinste adressierbare Datenmenge eines Computers definiert ist. Mit den außerordentlich populären Mikrochips von Intel, bei denen dieses Byte relativ willkürlich auf 8 Bit gesetzt wurde (ok, es ist nicht ganz willkürlich, weil viele Gründe für 8 sprechen, aber es gab genügend Mikrochips, bei denen man sich für andere werte entschieden hat), hat sich dann auch die de-fakto Definition von 1 Byte = 8 Bit durchgesetzt.
-
Naja.. Ich meine, 20 Adressleitungen entsprechen ja einem 20Bit-Adressbus. Wenn man die maximal ansprechbaren Adressen berechnet (also 2²⁰), müsste ja rein rechnerisch 1048576 Bit rauskommen und nicht 1048576 Byte.
-
20 Adressleitungen entsprechen 2,5 Byte. Dann müssten rein rechnerisch 5,66 Bytes adressierbar sein.
Irgendetwas stimmt an deiner Logik nicht.
-
Ein Speicher besteht ja aus einer Matrix. Eine Adresse ist so aufgebaut, dass sie angibt, auf welcher Zeile und auf welcher Spalte der Matrix sich die Speicherstelle befindet. So wie ich es verstanden habe, ist eine Speicherstelle/Speicherzelle aber ein Bit groß und nicht ein Byte, oder? Aber eine Speicherzeile ist ein Byte lang.
https://link.springer.com/chapter/10.1007%2F978-3-8348-9084-9_4
-
Dann lötet man 8 Stück auf ein Platinchen und liest sie parallel aus - und schwups hat man ein Byte.
-
Intern auf niedrigster Ebene führt irgendwann von jedem gespeicherten Bit irgendwo ein Stromkabel nach draußen, ja. Gerne auch mit der besagten Matrixbauweise, damit man nicht unfassbar viele Leitungen legen muss. Davon ist der Adressbus aber noch ganz weit weg. Der sagt ja nur dem Speicherkontroller, welche Speicherzelle er haben will. Und was unter einer Speicherzelle zu verstehen ist, kommt halt auf die Bauweise des Speichers an. Da kann man wie gesagt so ziemlich alles wählen. Eine 8-Bit Speicherzelle hat sich als ein recht brauchbarer Kompromiss erwiesen (zumindest in den 1970er Jahren) zwischen der Feinauflösbarkeit von Speicherzellen; der Anzahl nötiger Hin- und Rückleitungen; dem Datendurchsatz; und dem damit maximal adressierbaren Speicher ("640K ought to be enough for anybody").
-
@seppj Achso. Also heißt es, dass man nicht eindeutig sagen kann, ob eine einzelne Zelle in der Matrix nun 1 Bit oder 8 Bit lang ist, weil es in den Bauweisen variiert?
Und der in meinem Link abgebildete Speicher scheint ja 1Bit-Speicherzellen zu haben.
-
@oser sagte in Segmentierung im Real-Modus:
@seppj Achso. Also heißt es, dass man nicht eindeutig sagen kann, ob eine einzelne Zelle in der Matrix nun 1 Bit oder 8 Bit lang ist, weil es in den Bauweisen variiert?
Ja, das kann man so sagen, aber ich habe nicht den Eindruck, dass du es richtig verstanden hast. Denk besser noch weiter darüber nach. Es ist wirklich, wirklich offensichtlich, aber ich weiß nicht, wie ich es noch einfacher erklären soll. Ich bin nicht so gut in ELI5.
-
@seppj Und warum hast du den Eindruck?
-
@oser sagte in Segmentierung im Real-Modus:
@seppj Und warum hast du den Eindruck?
Auch wenn die Antwort auf deine Frage technisch gesehen 'Ja' war, so macht die Frage dennoch keinen Sinn für jemanden, der das Thema verstanden hat.
-
Nun der Datenbus ist beim 8086 8.Bit breit. Die Adressdekodierung hat daher auch immer 8 Bit aus dem Speicher gelesen und weil, wie Sepp schon schrieb, diese Anzahl an Bits für viele Probleme sinnvoll ist, adressiert eine Adresse am Adressbus immer genau 8 Bits, die immer eine eindeutige Adresse haben. Bei den nachfolgenden Generation von CPUs wurde dieses Schema beibehalten, auch dann, wenn der Datenbus breiter (16. 32 oder 64 bit) wurde.
VG