Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Scan am 20. December 2007, 10:48

Titel: 4Mb-Pages
Beitrag von: Scan am 20. December 2007, 10:48
Joa ich bin mal wieder dabei... hab wegen einer Lapalie irgendwie alles verloren, was ich mal vorgearbeitet habe.
Beim vorherigen Entwurf von Eyrin hat das Mirror-Mapping funktioniert, aber ich weiß nicht mehr wie. Ich wollte alles als eine liste von 4MB maps darstellen, damit ich 1024 page tables benutzen muss usw. sondern nur 2. Ich glaube, dazu sind die Dinger auch da.
Hab mir also das Intel Manual zu Herzen genommen und nachgesehen, und diesen Code gebaut:
start:
mov eax, ebx
sub eax, (0xf0000000-0x00100000)
mov [multiboot], eax

push 2
popf

; First thing to do is setting up the memory to virtual memory

; At first: Mirror map all the memory from 0x00000000 to 0xf0000000

mov eax, 0x00301000
mov ebx, 0x00000083
mov ecx, 0xf00 / 4
.loop1:
mov [eax], ebx
add eax, 0x04
add ebx, 0x00400000
loop .loop1

or dword [0x00301000], 0x10 ; Disable cache for the first 4 MB in memory (too much movement)

; Second: map physical memory from kernel start to kernel end to 0xf0000000
extern __kernel_phys_end__

mov eax, 0x00302000
mov ebx, 0x00100103
mov ecx, 0x1000 / 0x04
.loop2:
mov [eax], ebx
add eax, 0x04
add ebx, 0x1000
loop .loop2

; Then set the directory up

mov dword [0x00300000], 0x00301103
mov dword [0x00300f00], 0x00302103

mov eax, 0x00300000
mov cr3, eax

; Set PSE flag
mov eax, cr4
or eax, 0x10
mov cr4, eax

; Set Paging
mov eax, cr0
or eax, 0x80000000
mov cr0, eax
Okay ich bin mit kommentaren sparsam, aber es sollte soweit ersichtlich sein. Der Kernel liegt physikalisch an 0x00100000 und virtuell bei 0xf0000000 und wird offensichtlich ordentlich gemappt. Aber mein Problem ist jetzt folgendes: Beim nächsten Schritt versucht der auf Speicher zuzugreifen, auf 0x00100090 oder so, dass allerdings aus irgendeinem Grund nach 0x40000000 gemappt worden ist. Und weiß nicht wieso, ich hab doch alles ordentlich gesetzt oder?

TFYA
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 20. December 2007, 11:58
Dir ist aber schon klar, was ein Page Directory macht und was die Page Tables machen?

Die Page Table Nummer n enthält das Mapping für den Speicherbereich von n*4 MB bis (n+1)*4 MB - 1 Byte. Was du hier also machst...
mov dword [0x00300000], 0x00301103
mov dword [0x00300f00], 0x00302103
...ist, daß du Page Tables für insgesamt 8 MB aufsetzt. Ups, das war nicht, was du wolltest? ;)

Wenn du dein Zeug an 0x300100 als Page Directory nimmst (in dem werden nämlich 4 MB-Pages definiert), könnte noch ein Schuh draus werden. Dort mußt du halt an der entsprechenden Stelle im PD (die Ermittlung sei dem geneigten Leser zur Übung überlassen) noch die Page Table für den Kernel eintragen.
Titel: Re: 4Mb-Pages
Beitrag von: Scan am 20. December 2007, 15:40
Achso die 4MB pages werden anstelle der Page tables in das Directory geschrieben! Wieder schlauer geworden...  :roll:
Jetzt funktioniert es, danke sehr  :-D
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 20. December 2007, 20:22
4 MByte pages, soo grooooooooooß????????  :-o

Davon würde ich abraten. Aber musst du natürlich selber wissen. Es lebe 4 KByte. ^^

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: RedEagle am 20. December 2007, 21:17
Man muss ja nicht nur 4MB-Pages verwenden....
Ich habe 3 * 4MB - Pages für mein kernel reserviert. Alles andere wird mit 4KB-Pages gemacht...
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 20. December 2007, 22:59
Naja, die fürchterlichen 4 MByte pages gibt es im LongMode sowieso nicht mehr (da sind es dann höchstens 2 MByte ^^).

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 21. December 2007, 00:17
Und es wird von AMD dringend empfohlen, diese 2-MB-Pages auch zu benutzen. So ungeschickt ist diese Größe (und auch die 4 MB) für manche Zwecke auch gar nicht.
Titel: Re: 4Mb-Pages
Beitrag von: bluecode am 21. December 2007, 00:36
Und es wird von AMD dringend empfohlen, diese 2-MB-Pages auch zu benutzen.
Interessant dazu ist auch Brendans Post aus dem osdev.org Forum: siehe hier (http://www.osdev.org/phpBB2/viewtopic.php?t=15616&highlight=tlb) (3ter Post von Brendan in dem Thread, Letzter Absatz).
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 21. December 2007, 01:23
Ich denke, so langsam kommen wir schon in Bereiche, wo man jedem Prozeß einfach mal auf Verdacht 2 MB geben kann. Dynamisches Aufsplitten und Zusammenfassen ist natürlich irgendwo theoretisch denkbar, dürfte praktisch gesehen aber nicht sinnvoll sein. Insofern stimme ich da schon zu.

Aber mal abgesehen davon kann man oft z.B. dem Kernel die großen Pages geben und dann davon profitieren, daß die Kernelpages so gut wie immer noch im TLB der großen Pages sind.
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 21. December 2007, 11:35
Ne ne, 4 KByte sonst nichts. :-P

Mein ganzes OS (Kernel, Shell, Treiber etc.) verbrauchen zurzeit nicht mal 1,5 MByte.

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: bluecode am 21. December 2007, 12:06
Ich bin hier mit bitmaster fast einer Meinung (kommt selten genug vor :-D ). Ich möchte eigentlich nicht viel RAM sinnlos verschwenden und va. bei einem Microkernel lohnt sich die 4/2MB Page für den Kernel nicht und die 4/2MB Pages für die Treiber erst recht nicht. Ich nehme auch mal an, dass wenn man beides verwendet, dass man dann zuschauen kann wie schnell die 2/4MB Pages bei Auslastung total zerstückelt werden und die Wahrscheinlichkeit die wieder zusammenzufrickeln ist relativ gering würde ich mal vermuten und der Aufwand das zu managen ist wahrscheinlich auch um einiges größer.
Ich seh noch nicht so ganz, dass man für (Micro-)Kernel/Treiber/Apps 4/2MB Pages braucht.
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 21. December 2007, 13:53
Mein ganzes OS (Kernel, Shell, Treiber etc.) verbrauchen zurzeit nicht mal 1,5 MByte.
Und meine ganzen anderen schönen Megabytes bleiben ungenutzt, obwohl sich damit die Geschwindigkeit verbessern ließe? Es hat immer alles zwei Seiten.
Titel: Re: 4Mb-Pages
Beitrag von: Scan am 21. December 2007, 14:20
Ich brauche die 4MB-pages nur an einer einzigen Stelle, nämlich für das mirror-mapping im Kernel. Sonst müsste ich, nur damit ich global auf den Speicher zugreifen kann, 1024 page tables bauen, jede mit 4 KB Speicherverbrauch, also schon alleine 4 MB nur für die mirror map verschwendet. So brauche ich nur 8 KB.
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 21. December 2007, 14:33
@bluecode : Geht es dir nicht gut? Wie kannst du nur mit mir einer Meinung sein?  :-o  :?  :-D

@taljeth: Na ja, also die 1,5 MByte sind so schnell geladen, das glaubst du gar nicht. Da würde kein Unterschied zu merken sein, was die Schnelligkeit betrifft. Was den RAM-Verbrauch betrifft schon. :-P

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 21. December 2007, 15:26
@taljeth: Na ja, also die 1,5 MByte sind so schnell geladen, das glaubst du gar nicht. Da würde kein Unterschied zu merken sein, was die Schnelligkeit betrifft. Was den RAM-Verbrauch betrifft schon. :-P
Ich rede ja auch nicht vom Laden, da ist es die Platte die bremst, nicht die CPU... Ich rede von der Ausführungsgeschwindigkeit der Programme, wenn sie mal geladen sind.
Titel: Re: 4Mb-Pages
Beitrag von: bluecode am 21. December 2007, 15:51
Und meine ganzen anderen schönen Megabytes bleiben ungenutzt, obwohl sich damit die Geschwindigkeit verbessern ließe? Es hat immer alles zwei Seiten.
Das ist (zumindest) mir klar. Ich hab ja schon oben beschrieben, warum ich denke, dass sich der Aufwand für Kernel/Treiber/Apps nicht lohnt (va. im Microkernel).
btw. irgendwie erinnert mich das an Vista, das nach dem Start mal gleich einiges an Speicher für sich veranschlagt... 900MB wenn ich mich recht erinnere, aber um das zu verifizieren müsste ich es ja starten... :-o
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 21. December 2007, 16:11
Na ja, vielleicht will taljeth ja ein ähnliches Vista bauen, welches Unmengen an Ressourcen verbraucht. *duck*

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: bluecode am 21. December 2007, 16:13
Na ja, vielleicht will taljeth ja ein ähnliches Vista bauen, welches Unmengen an Ressourcen verbraucht. *duck*
Vorsicht! Er versteht heute keinen Spaß :-D  :mrgreen:
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 21. December 2007, 16:15
Vielleicht labere ich auch einfach nicht so viel Müll wie du?

Pages, die beispielsweise der Kernel als 2/4-MB-Pages gemappt hat, können für den Prozeß immer noch als 4k-Pages zur Verfügung gestellt werden. Und wenn wir uns mal erinnern, worum es in diesem Thread geht (ich weiß, interessiert dich nicht, bitmaster), dann geht es um Identity Mapping im Kernel. Wo wird denn da Speicher verbraten? Dort wird mit den großen Pages Speicher gespart, weil man keine Page Tables braucht.
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 21. December 2007, 16:29
@bluecode: Oo, wenn ich das gewusst hätte. ;-)

@taljeth:

Zitat
Vielleicht labere ich auch einfach nicht so viel Müll wie du?
Na ja, aber dafür tut es dein LOST. ^^ hahaha  :-D

Zitat
Und wenn wir uns mal erinnern, worum es in diesem Thread geht (ich weiß, interessiert dich nicht, bitmaster)[...]
Das ist eine Frechheit so etwas zu behaubten. :-P

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 21. December 2007, 17:44
Wow, du machst dem Troll alle Ehre. ;)
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 22. December 2007, 13:40
Wow, du machst dem Troll alle Ehre. ;)
Hehe, dein OS auch. Heute funktioniert nicht mal mehr "date". Exception #14 ist das Resultat. Schade, habe gedacht heute wäre vielleicht Sonntag der 22. Dienstag 2007. haha

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 22. December 2007, 14:00
Das wundert mich jetzt. Es weiß doch jeder, daß heute Samstag, der 22. Montag 2007 ist. ;)
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 22. December 2007, 18:04
Das wundert mich jetzt. Es weiß doch jeder, daß heute Samstag, der 22. Montag 2007 ist. ;)
Jo stimmt, Montag wars. Na ja, jetzt ist es halt ne Exception. Dafür ist eurer OS ja jetzt schon ziemlich abwechslungsreich, das muss man euch lassen.

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 22. December 2007, 19:08
Was macht OS-64 eigentlich?
Titel: Re: 4Mb-Pages
Beitrag von: nooooooooos am 22. December 2007, 20:59
Es macht natürlich Freitag...
Titel: Re: 4Mb-Pages
Beitrag von: bitmaster am 22. December 2007, 21:50
Ich verbessere gerade den OS-Loader. Den Kernel, die Treiber und die Shell bin ich wieder am Umschreiben.

EDIT: Ich hatte in letzter Zeit nicht viel Zeit dafür, aber jetzt sind ja erstmal Ferien. ;-)

bitmaster
Titel: Re: 4Mb-Pages
Beitrag von: Scan am 22. December 2007, 23:38
Is zwar echt verdammt witzig, diesen Thread zu beobachten... aber was, frag ich mich, hat er noch mit den Pages zu tun?
Titel: Re: 4Mb-Pages
Beitrag von: kevin am 23. December 2007, 00:00
Nix, aber zu den Pages ist wohl auch alles gesagt. ;)