20:08 < Jaffe> ok, staale
20:08 < Jaffe> paging
20:08 < staale> Yeah
20:09 < Jaffe> ok, rekner med du vet hva et segment
20:09 < Jaffe> er
20:09 < staale> Jeje
20:09 < Jaffe> good, for ikke tenk på segmenter nå :P
20:09 < staale> Minne "reservert" for et "program" liksom?
20:09 < staale> "Heh"
20:09 < staale> :p
20:09 < Jaffe> ikke et segment nei
20:10 < staale> Hva er et segment da?
20:10 < Jaffe> et segment er et definert område i minnet
20:10 < Jaffe> vi _kan_ bruke segmentering for å skille programmer fra hverandre
20:10 < Jaffe> men det få OS som gjør det
20:10 < staale> Som begrenser hva et program har tilgang til av minnet?
20:10 < staale> Ja, for å skille programmer fra hverandre slik at de ikke
overskriver hverandre f.eks.
20:10 < staale> Ved buffer overflows..
20:10 < Jaffe> neinei
20:10 < staale> :/
20:10 < Jaffe> vi skal kke bruke segmentering til det
20:11 < Jaffe> vi kan
20:11 < staale> Åkey
20:11 < Jaffe> hvis vi vil skille oss fra 99% av OS-ene
20:11 < Jaffe> :P
20:11 < staale> Uh, aha :p
20:11 < Jaffe> jeg rekner med det er en grunn til at alle bruker paging
20:11 < Jaffe> så vi har bare fire segmenter i os-et (så langt hvertfall):
kernel code og data, og user code og data
20:11 < Jaffe> altså kernel space og user space
20:12 < staale> Jepps
20:12 < Jaffe> hvis vi skulle brukt segmentmekanismen slik intel sikkert mente
den skulle brukes, gjør vi slik du sier
20:12 < Jaffe> og gir hvert program et eget segment
20:12 < staale> Har ikke Linux det?
20:12 < Jaffe> nei
20:12 < staale> SIGSEGV-fault da?
20:13 < Jaffe> det er når et program prøver å skrive i minnet til kernelen
20:13 < Jaffe> kernel space
20:13 < staale> Åh
20:13 < staale> Så i praksis så er det mulig at jeg lager et program som
skriver over minnet til f.eks. Firefox?
20:13 < Jaffe> nei, for det er der paging kommer inn
20:14 < staale> Ah
20:14 < Jaffe> en page er en blokk i minnet på 4KB
20:14 < staale> Åkey
20:14 < Jaffe> den blokken kalles en page frame
20:15 < staale> Ah, "grab next frame"-opplegg når jeg disassembler et program i
GDB :p
20:15 < Jaffe> adressen til 1024 slike pages kan lagres i en struktur som
kalles page table
20:15 < Jaffe> staale, sikkert ... skal ikke uttale meg :P
20:15 < staale> :P
20:15 < staale> Er en page table det meste som kan "lagres"?
20:15 < Jaffe> nei
20:16 < Jaffe> page table har altså 1024 pekere (spesielle pekere medi kke bare
adressen)
20:16 < staale> Åkey..
20:16 < Jaffe> hver entry i arrayet har adressen til page-framen til den pagen
den representerer, i tillegg til noen flagg
20:17 < Jaffe> hvis du rekner litt, finner du ut at en page table da strekker
seg over 4MB
20:17 < staale> Jepps
20:17 < staale> 1024 * 4kb aktig
20:17 < Jaffe> videre er det en omrent lik struktur, kalt page directory
20:18 < Jaffe> den har igjen 1024 entries som peker til hver sin page table
20:18 < Jaffe> da har du hele adresseområdet dekket
20:18 < Jaffe> (0 - 4GB)
20:18 < staale> Nettopp, ja
20:18 < Jaffe> (1024 * 1024 * 4096)
20:18 < staale> Mhm
20:19 < Jaffe> pekeren til page directoryen, ligger i CR3-registeret til CPU-en
20:19 < Jaffe> her kommer det som kanskje er litt tricky
20:20 < Jaffe> posisjonen til hver entry i page directoryen og page table,
avgjør den fysiske/reelle adressen
20:20 < Jaffe> nenienneienei
20:20 < Jaffe> den virtuelle
20:20 < staale> Heh, åkey
20:21 < staale> Neesten som et koordinat-system
20:21 < Jaffe> heh
20:21 < staale> 3,4 f.eks.
20:21 < staale> :p
20:22 < Jaffe> men altså
20:22 < Jaffe> videre
20:24 < Jaffe> pagen pagedirectory[3], page table [9] vil da ha virtuell
adresse 3 * 9 * 4096 = 110592 = 0x1B000
20:24 < Jaffe> men den _fysiske_ adressen, ligger lagret i page table entryen!
20:24 < Jaffe> den er det vi som lagrer der når vi allokerer/setter
opp/whatever en page
20:25 < Jaffe> verstehst du?
20:26 < Jaffe> så for å finne den reelle/fysiske adressen til en virtuell
adresse, gjør CPU-en noe slikt:
20:27 < Jaffe> slår opp i page dir og finner rett page table -> slår opp i page
table og finner page -> henter pagens adresse
20:28 < staale> Åkey..
20:28 < staale> Men bare sånn av ren nyskjerrighet. Hva skjer hvis man har mer
enn 4GB ram?
20:28 < staale> Evt. hva er det som ikke skjer? :p
20:28 < Jaffe> vel, dette er 32-bits paging
20:29 < Jaffe> som har vært i x86 siden 386 i 1985
20:29 < Jaffe> men med pentium-prosessoren utvidet intel adressområdet til 64GB
20:29 < Jaffe> (36-bits)
20:29 < Jaffe> dette ordnet de ved å introdusere en ny paging-type
20:30 < Jaffe> den skipper page directory, og har bare en stor page-table
20:30 < staale> Åkey
20:31 < Jaffe> men jeg tror vi holder oss med den "vanlige"
20:31 < Jaffe> hvis ingen protesterer?
20:32 < Jaffe> eller, hvis å støtte eldre prosessorer enn pentium ikke er noe
sterkt ønske, kan vi vel egentlig bruke den 36-bits-metoden
20:32 < GeirGrusom> *lagre på et trygt sted*
20:32 -!- GeirGrusom [n=HanTuffe@40.80-203-55.nextgentel.com] has left
#dvorient []
20:32 < staale> Jeg har ingen protester :p
20:32 < staale> På hverken av delene forsåvidt
20:33 < Jaffe> men du ser hvordan paging kan gjøre at programmer tror de har
hele adressområdet for seg selv?
20:33 < Jaffe> hvis hvert program har en egen page directory
20:34 < Jaffe> da vil det jo automatisk ha et eget virtuelt adresseområde fra 0
20:35 < Jaffe> så i multitaskingsmekanismen (når den tid kommer), vil vi
sannsynligvis laste CR3 med page directoryen til neste task når
det byttes task
20:36 < Jaffe> hvertfall såvidt jeg kan se, om jeg ikke har gått glipp av noe
kritisk da
20:36 -!- Chills [n=coderapo@21.80-203-59.nextgentel.com] has joined #dvorient
20:37 < Chills> Her går det unna .D?
20:37 < Jaffe> jau, du gikk nettopp glipp av en lang page-forklaring
20:37 < staale> Jaffe: Da blir det også umulig å skrive over andre "frames"
20:37 < staale> Fordi de ikke finnes
20:37 < staale> For programmene ihvertfall :p
20:37 < Chills> :P
20:37 < Chills> faen
20:37 < Chills> copy past :P
20:38 < Chills> eller ligg ut en logg på diskusjon.no :P
20:38 < staale> Ikke faen -- søren
20:38 < staale> Faen er umodent og groteskt
20:38 < Chills> cpy past?
20:39 < staale> Nevah!
20:39 < Chills> hahahaha
20:39 < Jaffe> ja, staale, akkurat
20:39 < Jaffe> det er kernelens jobb å sørge for at hvert program får pages som
ikke allerede er i bruk
20:39 < Jaffe> eller blokker i minnet da
20:40 < Jaffe> men om man vil at to programmer skal dele noe, kan man sette en
page i begge programmene til samme fysiske område
20:40 < Chills> mutex?
20:41 < Jaffe> ja, noe sånt
20:41 < Jaffe> kan vel kalle det det
20:41 < Chills> hehe bra! Glad du står for kernel delen da ^^
20:41 < Jaffe> :P
20:42 < Chills> Det er gale nok å lære å bruke et mutex, lage selve greia o.O
uff