Avatar billede dehdar Nybegynder
02. januar 2009 - 23:14 Der 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å.
Avatar billede welcor Nybegynder
02. januar 2009 - 23:27 #1
Hvis du ikke har noget imod en norsk version, er her et link til nogen forelæsningsnotater:
http://www.iu.hio.no/~haugerud/os/Forelesning/os/node9.html

Hvilken bog er det du ellers har ?
Avatar billede welcor Nybegynder
02. januar 2009 - 23:30 #2
så vidt vides er forelæsningsnotaterne baseret på dette afsnit af Mark Brugess' "A short introduction to operating systems":
http://www.iu.hio.no/~mark/os/os.html#SECTION00620000000000000000
Avatar billede arne_v Ekspert
02. januar 2009 - 23:34 #3
Lad mig prøve med en lille historie.

Dit C program indeholder:

int a;
...
int b;
...
a = 123;
...
b = 456;

Det bliver overtsat til følgende assembler (jeg tillader mig at bruge VAX assembler):

a:      .blkl  1
...
b:      .blkl  1
...
movl    #123,a
...
movl    #456,b

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.
Avatar billede arne_v Ekspert
02. januar 2009 - 23:35 #4
Oversættelsen fra virtuel addresse til fysisk RAM adresse sker i CPU'en udfra
nogle tabeller der ligger i memory.

Mens håndteringen af pagefault der læser fra page fil op i RAM er kode i operativ
systemet.
Avatar billede welcor Nybegynder
02. januar 2009 - 23:42 #5
hmm.. pdf er her:

http://www.iu.hio.no/~mark/os/os.pdf

Bogen er frit tilgængelig, og du bryder ingen copyright ved at hente den.
Avatar billede dehdar Nybegynder
02. januar 2009 - 23:57 #6
#welcor

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?
Avatar billede dehdar Nybegynder
03. januar 2009 - 00:01 #7
#welcor

Tusind tak for linket. Jeg ser det igennem med det samme.
Avatar billede dehdar Nybegynder
03. januar 2009 - 00:14 #8
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 :(

Tak for hjælpen.
Avatar billede arne_v Ekspert
03. januar 2009 - 02:20 #9
Programmerne bruger virtuelle adresser.

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
Avatar billede arne_v Ekspert
03. januar 2009 - 02:22 #10
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.
Avatar billede arne_v Ekspert
03. januar 2009 - 02:22 #11
Og et svar fra mig.
Avatar billede welcor Nybegynder
03. januar 2009 - 02:58 #12
arne_v har helt tydeligt styr på sagerne.

Du skal bare spørge, hvis der er andet, du har brug for at vide :)
Avatar billede dehdar Nybegynder
03. januar 2009 - 12:17 #13
Lige et opklarende spørgsmål.

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?

Er det helt forkert eller?
Avatar billede arne_v Ekspert
03. januar 2009 - 15:47 #14
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester