Speicherverwaltung
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Speicherverwaltung
Also, ich hab noch einmal einige grundlegende Fragen zum Paging:
Die pagedir besteht aus 1024 pointern die an sich ein Eintrag in der Pagedir sind und man deren Addresse, auf die sie verweisen, modifizieren muss oder?
Und jedes dieser Pagedir Elemente zeigt auf den ERSTEN pointer einer pagetable.
Das ersten Elmente einer Pagedir oder pagetable muss auf einer durch 4096(Dezimal) Zahl liegen, damit sie durch eine page geschützt wird.
Pages werden vom Computer Automatisch gesetzt und müssen nicht über eine Kenrelfunktion wieder gelöscht werden, oder irre ich mich da?
Und noch eine Frage:
Kann man ein Pagedir Element durch ein Struct darstellen, auf das das Element verweißt oder muss man die Addresse erst in des Struct konvertieren?
Die pagedir besteht aus 1024 pointern die an sich ein Eintrag in der Pagedir sind und man deren Addresse, auf die sie verweisen, modifizieren muss oder?
Und jedes dieser Pagedir Elemente zeigt auf den ERSTEN pointer einer pagetable.
Das ersten Elmente einer Pagedir oder pagetable muss auf einer durch 4096(Dezimal) Zahl liegen, damit sie durch eine page geschützt wird.
Pages werden vom Computer Automatisch gesetzt und müssen nicht über eine Kenrelfunktion wieder gelöscht werden, oder irre ich mich da?
Und noch eine Frage:
Kann man ein Pagedir Element durch ein Struct darstellen, auf das das Element verweißt oder muss man die Addresse erst in des Struct konvertieren?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherverwaltung
Tag
PageDir und PageTable müssen an 4 KB-Grenzen liegen, ja.
In der PageDir sind (es müssen nicht alle Einträge gesetzt sein) Einträge, die auf eine PageTable zeigen. Eintrag heißt dabei, dass die ersten 20 Bit die ersten 20 Bit eines 32 Bit Pointers auf eine PageTable liefern.( Deswegen liegen die auch an 4 KB Grenzen....) Die restlichen Bits sind Einstellungen.
Was meinst du mit pages werden automatisch gesetzt??
Natürlich nicht...?
Wenn ein Programm im virtuellen Bereich Speicher an der 1GB-Marke anfordert, dann wandelst du die Adresse in die entsprechende Eintragnummer der pageDir um, setzt die notfalls (auf eine neue PageTable) und in der PageTable nimmst du dann den richtigen Eintrag. Da rein schreibst du die Adresse (phys!!!!!) des Frames, wo der neu angeforderte Speicher liegen soll.
Die letzte Frage versteh ich nicht ganz??
Das könnte funktionieren? Aber was spricht gegen ein bisschen Bitkombiniererei? Dafür braucht man doch kein Struct??
Eine PageTable/PageDir:
unsigned int tab[1024];
PageDir und PageTable müssen an 4 KB-Grenzen liegen, ja.
In der PageDir sind (es müssen nicht alle Einträge gesetzt sein) Einträge, die auf eine PageTable zeigen. Eintrag heißt dabei, dass die ersten 20 Bit die ersten 20 Bit eines 32 Bit Pointers auf eine PageTable liefern.( Deswegen liegen die auch an 4 KB Grenzen....) Die restlichen Bits sind Einstellungen.
Was meinst du mit pages werden automatisch gesetzt??
Natürlich nicht...?
Wenn ein Programm im virtuellen Bereich Speicher an der 1GB-Marke anfordert, dann wandelst du die Adresse in die entsprechende Eintragnummer der pageDir um, setzt die notfalls (auf eine neue PageTable) und in der PageTable nimmst du dann den richtigen Eintrag. Da rein schreibst du die Adresse (phys!!!!!) des Frames, wo der neu angeforderte Speicher liegen soll.
Die letzte Frage versteh ich nicht ganz??
Code: Alles auswählen
struct pagedir_entry {
unsigned int add:20;
unsigned int flags:12;
}
Eine PageTable/PageDir:
unsigned int tab[1024];
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Speicherverwaltung
Ich habe mal etwas nach diesem Tutorial hier gemacht, aber es Funktionierte nicht:Die letzte Frage versteh ich nicht ganz??
Code: Alles auswählen
struct pagedir_entry {
unsigned int add:20;
unsigned int flags:12;
}
Das könnte funktionieren?
http://www.jamesmolloy.co.uk/tutorial_h ... aging.html
Also, nachdem der Computer sowas wie den TLB hat und es auch ein CPU Access Bit gibt, dachte ich mir das das so sein könnte.Was meinst du mit pages werden automatisch gesetzt??
Also fasse ich mal zusammen:
Paging besteht aus 2 Abstraktionschichten: Der PageDirectory und den PageTables.
Jede PageTable und PageDirectory sind 4KB groß und straten auf einer durch 0x1000 Teilbaren Addresse.
Jedes programm hat eine eigene pageDirectory.
Der erste Eintrag der ersten PageTable ist die virtuelle Speicheraddresse 0, kann baer im reelen Speicher sonstwo liegen, das geht halt so weiter und weiter.
Wenn ein Programm auf eine Stelle zugreift, auf die noch keine Page gemappt ist, dann wird ein Pagefault ausgelöst.
Oder stimmt da wieder etwas nicht?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherverwaltung
Das Tutorial ist vom Prinzip her aber wirklich gut
Bei mir funktioniert es, mehr oder weniger, nachdem ich eine andere Art der Verwaltung anstrebe
Soweit ist das eigentlich alles richtig.
Und wenn der PageFault ausgelöst wird, dann musst du (als Betriebssystem) den abfangen und weiterverarbeiten:
1. Der virtuelle Speicher ist "freier" Speicher, also kein Code oder sowas. Du musst also einfach nur einen Frame (phys Speicher) anfordern und dann die entsprechende page auf diesen Frame mappen.
2. Der virt Speicher ist "Programmspeicher", also Speicher, der eigentlich schon gewisse Werte zu enthalten hat (Funktionen, Stack, etc). Das musst du (iwann mal) aus dem Programm selbst laden (je nach Strategie wird das aber schon beim Programmstart erledigt)
3. Der virtuelle Speicher liegt evtl schon im Cache, in der Auslagerungsdatei oder wie auch immer es genannt wird. Dann muss die entsprechende Page von dort in einen freien Frame geladen werden.
Bei mir funktioniert es, mehr oder weniger, nachdem ich eine andere Art der Verwaltung anstrebe
Soweit ist das eigentlich alles richtig.
Und wenn der PageFault ausgelöst wird, dann musst du (als Betriebssystem) den abfangen und weiterverarbeiten:
1. Der virtuelle Speicher ist "freier" Speicher, also kein Code oder sowas. Du musst also einfach nur einen Frame (phys Speicher) anfordern und dann die entsprechende page auf diesen Frame mappen.
2. Der virt Speicher ist "Programmspeicher", also Speicher, der eigentlich schon gewisse Werte zu enthalten hat (Funktionen, Stack, etc). Das musst du (iwann mal) aus dem Programm selbst laden (je nach Strategie wird das aber schon beim Programmstart erledigt)
3. Der virtuelle Speicher liegt evtl schon im Cache, in der Auslagerungsdatei oder wie auch immer es genannt wird. Dann muss die entsprechende Page von dort in einen freien Frame geladen werden.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Speicherverwaltung
Ich habe mal eine Frage:
Also, ich ahbe die Speicherverwaltung soweit neu Implementiert, doch hängt sich das Init-Script auf, sozusagen.
Er Allokiert Frames und Pages für den kenrel und hört aber nicht wieder auf.
Die Addresse für das ende des Kernels liegt bei: 0x105130, was ca. einem Megabyte entspricht.
Ist diese zahl normal oder eine Anomalie?
Also, ich ahbe die Speicherverwaltung soweit neu Implementiert, doch hängt sich das Init-Script auf, sozusagen.
Er Allokiert Frames und Pages für den kenrel und hört aber nicht wieder auf.
Die Addresse für das ende des Kernels liegt bei: 0x105130, was ca. einem Megabyte entspricht.
Ist diese zahl normal oder eine Anomalie?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherverwaltung
Äh, naja, das hängt natürlich davon ab, wie du deinen Speicher verwendest.
Ich nehme mal an du lädst den Kernel auf 1 MB (=0x100000).
Folglich hast du 0x5130 Bytes verwendet. Sprich etwas mehr als 20 KB.
Jetzt schau, wie groß dein Kernel ist und dann müsstest du wissen, ob das normal ist oder nicht.
( 0x100000 entspricht 1 MB ! )
Ich nehme mal an du lädst den Kernel auf 1 MB (=0x100000).
Folglich hast du 0x5130 Bytes verwendet. Sprich etwas mehr als 20 KB.
Jetzt schau, wie groß dein Kernel ist und dann müsstest du wissen, ob das normal ist oder nicht.
( 0x100000 entspricht 1 MB ! )
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Speicherverwaltung
Ok, das wäre dann natürlich normal, ihc dachte schon es wäre etwas falsch gelaufen.Jetzt schau, wie groß dein Kernel ist und dann müsstest du wissen, ob das normal ist oder nicht.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum