Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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
-
http://www.x86.org/articles/4mpages/4moverview.htm
-
Wie unterscheidet sich denn im PageDirectory ein Eintrag auf eine PageTable zwischen einem Eintrag auf eine 4MB Page ???
-
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 CR4
und:#GP(0): SetCR4: Write of 0x0010000b not supported (allowMask =0x6fc)
Bochs zeigt an, dass er PSE unterstützt.
Was bedeutet das ???
Gruss
Noooooooooos
-
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
-
CPUID klingt zumindestens sauberer ...
-
Ist aber komplizierter und braucht mehr Rechen-Zeit, weshalb ich die andere Methode vorziehen würde, falls sie funktioniert.