02. januar 2009 - 23:14Der er
12 kommentarer og 2 løsninger
Memory Paging
Hej, jeg beklager hvis denne tråd er placeret det forkerte sted, men jeg kunne ikke rigtigt finde andre steder og eftersom jeg plejer at få meget godt feedback herinde, så har jeg valgt at placere den her.
Mit spørgsmål er angående memory paging. Dette emne er omhandlet i min bog, men på utrolig kryptisk vis, derfor vil søger jeg nogle links eller evt en kortfattet forklaring om, hvad det helt konkret går ud på.
Når EXE loades ender variabel a på virtuel adresse 1024 og variabel b på virtuel adresse 1536.
Når movl #123,a udføres så oversættes den virtuelle adresse til fysisk RAM adresse 5121024 og værdien 123 gemmes der.
Når movl #456,b udføres så sker der en page fault fordi den virtuelle adresse 1536 ikke er mappet til fysisk RAM. En page med 512 byte med indholdet af virtuelle adresser 1536-2047 læses derfor op fra PAGEFILE.SYS og placeres i fysisk RAM på addresse 2561036. Instruktionen movl #456,b udføres derefter igen og denne gang oversættes den virtuelle adresse 1536 til den fysiske RAM adresse 2561036 og værdien 456 gemmes der.
Den bog jeg bruger hedder THE INTEL MICROPROCESSORS - Architecture, programming and interfacing - 7th edition.
#arne_v
Tak for dit eksempel. Jeg går ud fra at de registre du taler om for Intels vedkommende er CR0-CR4. I min bog står der følgende:
"The memory paging mechanism located within ... allows any physical memory location to be assigned to any linear address. With the memory paging unit, the linear address is invisibly translated to any physical address, which allows and app written to function at a specific address to be relocated through the paging mechanism."
Det jeg ikke forstår er hvad "linear address" (virtuel addresse) er og betyder? Bruger kode segmentet linear addressen?
I er begge velkommen til at smidde et svar. Jeg kom lige til at stave forkert til google og tror derfor at min hjerne er godt ristet for idag, så jeg vil få mig en kort lur, så jeg kan læse til eksamen hele dagen imorgen igen og kigge på emnet "memory paging" en gang til :(
Det har store fordele: - det er muligt at implementere readonly data sektioner (teknisk set readonly i user mode men readwrite i kernel mode) fordi den information gemmes også i de page tabeller som oversætter fra virtual til physical - to brugere der kører samme program kan begge bruge virtuel adresse 1024, der så er mappet til forskellige fysiske adresser
De lineære adresser du snakker om må vær evirtuelle adresser.
Så vidt jeg hurtigt kan læse mig til så indeholder CR2 adressen på den funktion der skal kaldes ved page fault og CR3 indeholder adressen på page tabellerne.
I en Intel CPU bliver et program gemt i data/kode/stak/... segmentet, som er i TPA'en. Når programmet skal køre bliver de "nødvendige dele" loadet fra TPA'en til RAM'ene og når et program fylder for meget eller, hvis dele af et program er inaktiv i længere perioder, så kan man bruge paging til at flytte dele af programmet på harddisken fra RAM'ene. Dvs gennem paging flytter man fragmenter af programmet over på forskellige fysiske hukommelser, men man adressér til dem gennem en virtuel adresse?
En virtuel page er mappet via page tabellen. Den kan være mappet til enten en placering RAM eller en placering i page fil.
Page hentes fra pagefil til RAM, når den skal bruges. Og flyttes fra RAM til page fil, når RAM skal bruges til andet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.