windows - hukommelse forbeholder og begår

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg læser < Windows via C/C ++> og her er noget citat.



  Når en proces oprettes og gives
  dets adresse plads, hovedparten af ​​dette
  Brugbart adresserum er gratis, eller
  ikke-allokeret. At bruge dele af dette
  adresse plads, skal du allokere
  regioner inden for det ved at ringe
  VirtualAlloc. Handlen om at allokere en
  regionen hedder reservering
.

  
  At bruge en reserveret region af adresse
  plads, skal du tildele fysisk
  lagring og derefter kortlægge denne opbevaring til
  den reserverede region. Denne proces er
  kaldet begå fysisk opbevaring
.

  
  Når du har reserveret en region, skal du
  nødt til at begå fysisk opbevaring til
  region, før du kan få adgang til
  hukommelsesadresser indeholdt i det.
   Systemet tildeler fysisk lagring
  forpligtet til en region fra
  systemets personsøgningsfil.




Her er et par spørgsmål:



  • Hvorfor skal vi følge reserve-komit-paradigmet, når du bruger hukommelse? dvs. Hvorfor skal vi følge dette 2-trins paradigme i stedet for at tildele fysisk hukommelse direkte og bruge den?

  • Hvis den fysiske opbevaring, der er begået til en region, er allokeret fra systemets personsøgningsfil, hvorfor har vi brug for RAM'en (lyder latterligt)? Efter min mening skal en adresselokalregion være kortlagt til RAM (via personsøgning mekanisme), og RAM-siderne skal understøttes af personsøgerfilen.



Måske kan dette spørgsmål besvares ved at forklare følgende 2 aspekter:



  • Hvad reserverer du?

  • Hvad forpligter sig?



Opdatering - 1 2:48 PM 11/23/2010



Det er følgende citat fra < Windows via C/C ++ 5th edition> det gør mig forvirret.



  ... Det er bedst at tænke på fysisk
  lagring som data, der er gemt i en personsøgning
  fil på et diskdrev. Så når en
  ansøgning forpligter fysisk opbevaring
  til en region af adresserummet ved
  kalder VirtualAlloc-funktionen,
   Rummet er faktisk allokeret fra a
  fil på harddisken
.

  
  Når du har reserveret en region, skal du
  nødt til at begå fysisk opbevaring til
  region, før du kan få adgang til
  hukommelsesadresser indeholdt i det.
   Systemet tildeler fysisk opbevaring forpligtet til en region fra
  systemets personsøgningsfil.




Så hvor er RAM'en? Hvad hvis jeg konfigurerer min maskine for at have nogen sidefil?

Bedste reference


Hele punktet med at reservere sider er at sikre, at sammenhængende adresserum er til rådighed for en opgave. For eksempel ønsker vi, at stakken skal kunne vokse til 1 MB, men vi ønsker ikke at begå al den hukommelse, fordi den ikke bliver brugt endnu. Så vi forbeholder 1MB sider, men begår en lille mængde, som 64kB. Ved at oprette en vagtside i slutningen af ​​den engagerede region kan vi opdage, hvornår vi skal begå mere hukommelse.


At begå hukommelse er handlingen om at kortlægge en slags opbevaring til en side. Dette kan placeres i fysisk RAM, hvor det er en del af arbejdssættet eller i sidebilledet. Det kan også kortlægges i eller privat hukommelse. NtAllocateVirtualMemory/VirtualAlloc kan reservere og begå på samme tid for nemheds skyld.


EDIT for opdateret spørgsmål: Når du forpligter sider, debiteres det for procesblokskvoten/systemets samlede forpligtelsesgrænse. Denne grænse bestemmes af mængden af ​​fysisk RAM til rådighed og størrelsen af ​​sidebilledet. Dette betyder ikke, at siderne er gemt i eller skrevet til sidefilen. De kan være, hvis hukommelsen er lav, men ellers sides hovedsageligt i fysisk hukommelse.

Andre referencer 1



  • Du behøver ikke at følge 2-trins reserve/commit-tildelingsordning.


    Punktet er, at VirtualAlloc og VirtualFree kan gøre flere ting. Og nogle gange er det virkelig nyttigt at gøre det. Du behøver dog ikke.

  • Forpligtet hukommelsesområde er det, som systemet tildeler fysisk lagring til.


    Du behøver ikke bekymre dig om hvor præcis det er tildelt: RAM eller sidefil. Dette skal være gennemsigtigt for dig (medmindre du skriver en kerne-mode enhedsdriver). Desuden kan de fleste af hukommelsessiderne byttes ud til sidefilen og indlæst i RAM-on-demand.


    Det er bare nogle dedikerede hukommelsessider, der behøver ikke bindes med sidefilen, fordi de allerede er bundet til en anden fysisk lagring. Hukommelsesmappede filer er eksemplet herpå.


    I normalt scenario, når du begår en hukommelsessider, skal du bruge det i en periode og frigøre den - sandsynligvis vundet den slet ikke på sidefilen.