Archiv verlassen und diese Seite im Standarddesign anzeigen : wie funktioniert Speicher Adressierung im Real Mode?
König der coder
19.06.2010, 23:33
- hat einAMD Athlon XP 20 oder 32 Leitungen für die Adressierung?
- kann man die Anzahl der Offset Bits ändern?
- stimmt das, daß mehrere Segment:Offset Kombinationnen für eine physikalische RAM-Adresse existieren? und wenn Ja, Wie ist das möglich?
- gibt es eine Adresstabelle für den RAM, wo liegt diese?
- hat einAMD Athlon XP 20 oder 32 Leitungen für die Adressierung?
Eher 32. Aber keine Ahnung worauf du mit dieser Frage hinauswillst.
- kann man die Anzahl der Offset Bits ändern?
Was meinst du mit Offset-Bits? Wenn du dich auf die Addressierung mittels eines Segment-Offset-Paares beziehst, dann beträgt die Anzahl der Bits im Real Mode und im 16-Bit Protected Mode 16, und im 32-Bit-Protected Mode 32. Wenn du einen 64-Bit Prozessor hast, sind es im Long Mode 64. Der Modus (der vom Betriebssystem festgelegt wird) gibt also an, wie viele Bits das sind.
- stimmt das, daß mehrere Segment:Offset Kombinationnen für eine physikalische RAM-Adresse existieren? und wenn Ja, Wie ist das möglich?
Die phyische Adresse wird mittels Segment * 16 + Offset berechnet. Du kannst dann zum Beispiel Segment = 1 und Offset = 0 setzen, und bekommst die Adresse 16 * 1 + 0 = 16. Wenn du Segment = 0 und Offset = 16 setzt, bekommst du ebenfalls die Adresse 0 * 1 + 16.
- gibt es eine Adresstabelle für den RAM, wo liegt diese?
Wenn du damit die Belegung des Speichers meinst: Das Betriebssystem ist die Instanz, die dir den verfügbaren Speicher zuweist. Läuft kein Betriebssystem, so gibt dir das BIOS mittels der Funktion INT 15h, AX=E820h (http://www.uruk.org/orig-grub/mem64mb.html) eine Belegung des Speichers. (Wobei der RAM, den das BIOS belegt (IVT, BDA, und EBDA), sowie natürlich dein Code davon nicht erfasst werden.)
König der coder
20.06.2010, 12:17
Eher 32. Aber keine Ahnung worauf du mit dieser Frage hinauswillst.
hab das http://de.wikibooks.org/wiki/Assembler_(80x86_Prozessor)-Programmierung (http://de.wikibooks.org/wiki/Assembler_%2880x86_Prozessor%29-Programmierung) gelesen und so verstanden, dass die x86(wobei mit x86 wohl der befehlssatz gemeint ist) prozessoren mit dem bios starten und der aktiviert den Real Mode mit 20 adressleitungen zum ram. hab ich das falsch verstanden?
Was meinst du mit Offset-Bits? Wenn du dich auf die Addressierung mittels eines Segment-Offset-Paares beziehst,Ja dann beträgt die Anzahl der Bits im Real Mode und im 16-Bit Protected Mode 16, und im 32-Bit-Protected Mode 32.heisst dass, das man den Protected Mode auch im 16Bit Mode starten kann? ...der register Wenn du einen 64-Bit Prozessor hast, sind es im Long Mode 64. Der Modus (der vom Betriebssystem festgelegt wird) gibt also an, wie viele Bits das sind.
sind dan mehr Register aktiviert?oder können dan 2 bzw 4 16 bit anweisungen gleichzeitig berechnet werden?
Die phyische Adresse wird mittels Segment * 16 + Offset berechnet. Du kannst dann zum Beispiel Segment = 1 und Offset = 0 setzen, und bekommst die Adresse 16 * 1 + 0 = 16. Wenn du Segment = 0 und Offset = 16 setzt, bekommst du ebenfalls die Adresse 0 * 1 + 16. hatte diese 20 leitungen zum RAM im kopf und dachte dass ein register doch gestückelt wird und überlegt mit nur einem register zu adressieren 10+6. Und kan dos nur 1MB RAM nutzen?
Wenn du damit die Belegung des Speichers meinst: Das Betriebssystem ist die Instanz, die dir den verfügbaren Speicher zuweist. Läuft kein Betriebssystem, so gibt dir das BIOS mittels der Funktion INT 15h, AX=E820h (http://www.uruk.org/orig-grub/mem64mb.html) eine Belegung des Speichers. (Wobei der RAM, den das BIOS belegt (IVT, BDA, und EBDA), sowie natürlich dein Code davon nicht erfasst werden.)
auf register a ligt die adresse und dan kommt ein befehl der sagt rechenergebniss aus register b soll in den RAM an eine ganz bestimmte stelle, dann nimmt der Prozessor register a(das nimmt er immer, weil das physikalisch festgelegt ist, für die adresse) und register b (für die daten die kopiert er dann)und schickt sie dan zum RAM bus das ist wieder ein prozessor der weiss zuerst kommt anweisung lesen/überschreiben dann a signal für die adresse und dan b welche daten und der rambus/controller hat eine tabelle oder hat eine auf dem ram und vergleicht adresse a mit der physikalischen addresse des rams wenn er die Adresse in die Pysikalische umgerechet hat fängt er an ab zu zählen bis er die Speicherzelle hat wo 'b' eingetragen wird. so kann ich mir das bisher erklären, und das kann doch wohl nicht sein oder?
hab das http://de.wikibooks.org/wiki/Assembler_(80x86_Prozessor)-Programmierung (http://de.wikibooks.org/wiki/Assembler_%2880x86_Prozessor%29-Programmierung) gelesen und so verstanden, dass die x86(wobei mit x86 wohl der befehlssatz gemeint ist) prozessoren mit dem bios starten und der aktiviert den Real Mode mit 20 adressleitungen zum ram. hab ich das falsch verstanden?
Es ist ein wenig komplizierter. Aber es ist richtig, dass der Prozessor sich zunächst im Real Mode befindet. Für den 8086er stimmt es, dass es nur 20 Adressleitungen gibt. Bei den Nachfolgern waren es mehr.
Im Real Mode werden Adressen über Segment * 16 + Offset gebildet, wobei sowohl Segment als auch Offset 16 Bit Werte sind. Maximalwerte sind also 0xffff, was bedeutet, das die höchste darstellbare Adresse 0xffff * 16 + 0xffff = 0x10ffef ist. Das ist eine 21-Bit-Zahl, das heißt 11 der 32 Adressleitungen eines modernen Prozessors bleiben auf 0. Zusätzlich gibt es noch das A20 Gate, das auch die 21ste Adressleitung auf 0 setzt, damit sich die CPU wie ein 8086er verhält. Damit sind es also auch 20 Adressleitungen, die effektiv genutzt werden, aber es gibt halt noch mehr, die allerdings den Wert 0 führen.
Ja heisst dass, das man den Protected Mode auch im 16Bit Mode starten kann? sind dan mehr Register aktiviert?oder können dan 2 bzw 4 16 bit anweisungen gleichzeitig berechnet werden?
Ja, es gibt einen 16-Bit-Protected Mode. Dadurch bekommst du aber keine zusätzlichen Register und die Größe der Register ändert sich auch nicht. Nur die Speicheradressierung und der Speicherschutz verändert sich (was auch schon eine ganze Menge ist)
Und kan dos nur 1MB RAM nutzen?
Nein, es geht auch mehr, wenn man entsprechende Erweiterungen hat. Zum Beispiel DPMI, das es erlaubt, unter DOS Programme im 32-Bit Protected Mode laufen zu lassen. Dann steht dir der komplette RAM zur Verfügung.
auf register a ligt die adresse und dan kommt ein befehl der sagt rechenergebniss aus register b soll in den RAM an eine ganz bestimmte stelle, dann nimmt der Prozessor register a(das nimmt er immer, weil das physikalisch festgelegt ist, für die adresse) und register b (für die daten die kopiert er dann)und schickt sie dan zum RAM bus das ist wieder ein prozessor der weiss zuerst kommt anweisung lesen/überschreiben dann a signal für die adresse und dan b welche daten und der rambus/controller hat eine tabelle oder hat eine auf dem ram und vergleicht adresse a mit der physikalischen addresse des rams wenn er die Adresse in die Pysikalische umgerechet hat fängt er an ab zu zählen bis er die Speicherzelle hat wo 'b' eingetragen wird. so kann ich mir das bisher erklären, und das kann doch wohl nicht sein oder?
Das ist ja grauenvoll geschrieben. Das Umrechnen von Segment:Offset-Adressen übernimmt die CPU. Der Speicher oder Speichercontroller muss da nichts mehr berechnen, zählen oder in Tabellen nachschauen. Du kannst dir ja mal http://de.wikipedia.org/wiki/Dynamic_Random_Access_Memory durchlesen, wenn dich das interessiert.
König der coder
20.06.2010, 13:42
...Das ist ja grauenvoll geschrieben :cool:
finds mitlerweile ziemlich schwierig eine passende lektüre zu finden. das meißte worauf ich stoße handelt von 'win-linux-asm-int'-Verbindungen. würd mich aber freuen wenn ihr noch ein paar links habt.
ich werde meine suche um die wörter hier erweitern: IVT, BDA, EBDA
Die stehen übrigens für Interrupt Vector Table, BIOS Data Area und Extended BIOS Data Area.
Was hast du eigentlich vor?
AGGROStar1991
20.06.2010, 14:10
http://www.lowlevel.eu/wiki/Hauptseite
http://wiki.osdev.org/Main_Page
Auf den beiden Seiten wirst du zu BIOS, Real Mode, Protected Mode usw mehr finden als dir lieb is, einfach mal stöbern, auch wenn die seiten vllt nicht dein Ziel behandeln ;)
mfg
P.S. Jidder ich denk ich weiss das, was denkst du woher das vllt im Satz oben kommt^^
- hat einAMD Athlon XP 20 oder 32 Leitungen für die Adressierung?
- kann man die Anzahl der Offset Bits ändern?
- stimmt das, daß mehrere Segment:Offset Kombinationnen für eine physikalische RAM-Adresse existieren? und wenn Ja, Wie ist das möglich?
- gibt es eine Adresstabelle für den RAM, wo liegt diese?
1. 34 bzw. 36 Bits, das ergibt 16GB bzw. 64GB real addressierbaren Speicher, je nach Prozessorgeneration. Auch abhängig vom Prozessor können dies mehr oder weniger sein, zum Teil gibt es nicht mal reine Addressleitungen, da diese, z.B. beim Geode mit dem Datenbus gemultiplext ist. Einige embedded-Varianten haben z.B. nur 24 Addressleitungen, sprich, bei 16MB ist Schluß.
2. Nein.
3. Ja. 0000:7C00, 07C0:0000 , 0700:0C00, 0610:1B00 beschreiben alle die gleiche physikalische Adresse, nämlich 07C00. Umrechnungformel ist (gilt nur für den Real-Mode):
PhyA = Seg*16 + Ofs.
4. Jein, bzw. beantwortet sich die Frage auf verschiedenen Ebenen. Aus der Sicht des Anwendungsprogrammierers beantwortet sich die Frage zu Nein.
Im Real-Mode stimmt das auch. Im Protected-Mode (ab 286 aufwärts) referenziert ein Segment jedoch nicht mehr direkt Speicher, sondern verweist auf einen Selektor, in dem der wirkliche Speicherbereich angegeben ist, zusätzlich zu den Zugriffsrechten. Im paged mode (ab 386) darüberhinaus, wird jede 4k Speicherseite einzeln betrachtet und in einer Pagetable verwaltet. Die Speicheradressen heißen dann auch anders, es sind nur noch "virtuelle Adressen" und die Page-Tables ordnen physikalische Adressen virtuellen zu (und umgekehrt). Dies passiert für den Anwendungsprogrammierer transparent, er merkt und sieht nichts davon. Diese Mechanismen werden von der Prozessorhardware abgewickelt, unter der Ägide des Betriebssystems. Im Idealfall merkt die Anwendung davon gar nichts.
Und auf der Ebene darunter, noch tiefer, gibt es die MTRRs, die Memory Type Range Registers, ein Satz von MSR (machine specific registers), die dem Prozessor und/oder der Speicherverwaltung (evtl. in der Northbridge) die wirkliche physikalische Konfiguration und Aufteilung des Speichers mitteilen, u.a. die Form des Speichers, die Zugriffsgeschwindigkeiten, den Bus und alles, was hardwarerelevant ist.
Diese ganze Darstellung ist stark abstrahiert. Kaum ein Programmierer kommt jemals mit *allen* Ebenen der Speicherverwaltung in Kontakt.
Und wo diese Tabellen liegen ist: a) Systemabhängig (Abhängig vom genauen Prozessor) und b) betriebssystemabhängig. Alle vom Betriebssystem verwalteten Tabellen sind für den Prozessor programmierbar, das Betriebssystem bestimmt, wo sie liegen. Das Betriebssystem achtet da aber genau drauf und läßt längst nicht jeden darauf zugreifen. Die im Prozessor integrierten Tabellen, speziell die MTRRs, liegen an jeweils prozessorspezifischen Adressen, die auch nicht im normalen Speicher zugängig sind. Übernimmt der Prozessor auch die Adressierung des Speichers, wie beim Athlon oder bei den neuen Intel Core-i-Prozessoren, so sind all diese Tabellen in den Prozessor integriert und über die RDMSR und WRMSR-Befehle zugänglich. In allen anderen Fällen ist auch die sog. Northbridge im Spiel. Deren Register sind im IO-Bereich per IN und OUT erreichbar, hängen aber wiederum vom genauen Chipsatz ab.
König der coder
20.06.2010, 14:59
Was hast du eigentlich vor? Einen umfangreichen cpu test.
Ich lese das hier gerade und dabei fällt mir ein, daß ich mal ein kurzes Tutorial über den Real Mode (also "Real Address Mode", bzw 16-Bit-Mode) geschrieben habe - das zwar keineswegs vollständig alles beschreibt, was den Real Mode ausmacht, aber einen kurzen Einblick gibt, wie der funktioniert. Im Prinzip ist aber auch schon alles in diesem Thead dazu gesagt worden.
Falls trotzdem Interesse:
http://www.imperial-games.de/html/dosd2.htm
Und dort "Read Mode Beschreibung" anwählen.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.