Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: nooooooooos am 11. March 2006, 19:52

Titel: 4 MB Pages
Beitrag von: nooooooooos am 11. March 2006, 19:52
Hallo

1.) Kann ich im PageDirectory des Kernels 4M Pages eintragen obwohl eigentlich der ganze Speicher in 4 KB Pages segmentiert ist ??? Ich will nämlich im Kernel den ganzen Speicher ansprechen und 1024 PageTables zu beschreiben dauert zu lange und braucht zu viel Speicher.
2.) Wie sieht ein 4MB-Eintrag im PageDirectory aus ????

Vielen Dank
Noooooooooooos
Titel: 4 MB Pages
Beitrag von: GhostCoder am 12. March 2006, 13:08
http://www.x86.org/articles/4mpages/4moverview.htm
Titel: 4 MB Pages
Beitrag von: nooooooooos am 12. March 2006, 13:40
Wie unterscheidet sich denn im PageDirectory ein Eintrag auf eine PageTable zwischen einem Eintrag auf eine 4MB Page ???
Titel: 4 MB Pages
Beitrag von: nooooooooos am 12. March 2006, 17:34
Ich hab herausgefunden dass man für 4MB Pages das 4. Bit im CR4 setzen muss. Gelesen getan:xor eax,eax
mov eax,cr4
or eax,0x0000000000010000b
mov cr4,eax


Bochs meldet allerdings:MOV_RdCd: read of CR4und:#GP(0): SetCR4: Write of 0x0010000b not supported (allowMask =0x6fc)

Bochs zeigt an, dass er PSE unterstützt.
Was bedeutet das ???


Gruss
Noooooooooos
Titel: 4 MB Pages
Beitrag von: nooooooooos am 26. March 2006, 10:55
Also das Problem ist jetzt gelöst.
Da ja aber die 4MB-Pages erst bei neueren Prozessoren möglich sind, muss ich eine Alternative anbieten.

Wie finde ich aber heraus ob 4MB Pages möglich sind?
Muss ich CPUID benutzen oder kann ich einfach das entsprechende Bit im CR4-Register setzen und nachher überprüfen ob es erfolgreich gesetzt wurde?


Gruss
Nooooooooooooos
Titel: 4 MB Pages
Beitrag von: Legend am 26. March 2006, 14:19
CPUID klingt zumindestens sauberer ...
Titel: 4 MB Pages
Beitrag von: nooooooooos am 27. March 2006, 18:11
Ist aber komplizierter und braucht mehr Rechen-Zeit, weshalb ich die andere Methode vorziehen würde, falls sie funktioniert.