Personsøgning

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 19. oktober 2021; checks kræver 4 redigeringer .

Paging ( engelsk  paging ; udtrykket swapping fra swap , /swɔp/ bruges nogle gange ) er en af ​​mekanismerne i virtuel hukommelse , hvor individuelle hukommelsesfragmenter (normalt inaktive) flyttes fra RAM til sekundært lager (en harddisk eller andet ) eksternt drev, såsom flash-hukommelse ), frigør RAM for at indlæse andre aktive hukommelsesfragmenter. Sådanne fragmenter i moderne computere er hukommelsessider.

Sider, der midlertidigt fjernes fra hukommelsen, kan lagres på eksterne lagerenheder både i en fil og i en speciel partition på en harddisk (partition), kaldet henholdsvis en swap-fil og en swap-partition. Hvis det er nødvendigt at fjerne sider fra RAM, der svarer til indholdet af en fil på harddisken (f.eks. hukommelseskortede filer), kan de ikke fjernes, men blot slettes. Når en sådan side efterspørges, kan den læses fra den originale fil.

Når et program får adgang til en side, der ikke er i RAM, vil der opstå en PageFault-undtagelse. Behandleren for denne hændelse bør kontrollere, om den anmodede side tidligere er blevet skiftet ud, og hvis den er i swap-filen, skal du indlæse den tilbage i hukommelsen.

Historie

Oprindeligt blev swapping forstået som at fjerne en proces fra RAM som helhed, hvilket resulterede i, at inaktive processer kunne være fuldstændig fraværende fra RAM. Da aktiveringsbetingelserne for processen var opfyldt, indlæste hukommelsesadministratoren procesbilledet tilbage.

Betydningen af ​​begrebet ændrede sig i 60'erne , da understøttelse af virtuel hukommelse dukkede op i operativsystemer : bytte begyndte at betyde indlæsning og aflæsning af individuelle sider. Paging blev først implementeret i Atlas -computeren , udgivet i 1962.

Sidefejl

Hovedfunktionerne i personsøgningsmekanismen udføres, når et program forsøger at få adgang til sider, der i øjeblikket ikke er knyttet til fysisk hukommelse (RAM). Denne situation kaldes sidefejl . På dette tidspunkt bør operativsystemet tage kontrol og håndtere sidefejlen på en måde, der er gennemsigtig for programmet. Operativsystemet har derfor brug for:

  1. Bestem placeringen af ​​den påkrævede side i sekundært lager.
  2. Få en tom sideramme i den fysiske hukommelse til brug som en databeholder.
  3. Indlæs de anmodede data i den modtagne sideramme.
  4. Opdater sidetabellen, så den peger på den nye sideramme.
  5. I en gennemsigtig form returneres kontrol til programmet ved at genudføre instruktionen, der forårsagede sidefejlen.

Hvis der, når en tom sideramme modtages, ikke er nok ledig RAM, udføres sideerstatningsalgoritmen, som vælger en af ​​de brugte sideramme til udlæsning. Hvis den sideramme, der skal søges, blev tildelt dynamisk under programafviklingen, eller hvis den er en del af programmets datasegment og har ændret sig siden den blev læst ind i hukommelsen (med andre ord, hvis den er blevet "beskidt"), skal den gemt i sekundært lager, før det deallokeres. Ellers er indholdet af siderammen i RAM det samme som indholdet på siden i sekundært lager, så det behøver ikke at blive paget ud. Hvis en ikke-indlæst side tilgås senere i kørslen, vil der opstå endnu en sidefejl, og siderammen skal genallokeres, så indholdet af siden i sekundært lager kan genindlæses i RAM.

For at sikre effektiv drift skal personsøgningssystemet udvælge de siderammer, som der er mindst sandsynlighed for at få adgang til i den nærmeste fremtid. Der er forskellige sideerstatningsalgoritmer . Operativsystemer bruger LRU ( Senest brugt ) , FIFO ( First In First Out ) algoritmer eller algoritmer under hensyntagen til processens arbejdssæt [1] .  

For yderligere at forbedre responstiden kan personsøgningssystemer bruge forskellige strategier til at forudsige de næste sidehits. Sådanne systemer forsøger at indlæse sider i hovedhukommelsen i god tid før programmet får adgang til dem.

Algoritmer til at bestemme forældede sider

Når der tildeles plads til en ny side, kan det være nødvendigt at slette en hvilken som helst side i hukommelsen. Regler for sideerstatning bruges til at bestemme, hvilken side der skal fjernes fra hukommelsen. Den ideelle kandidat er en "død" side, som ingen længere har brug for (refererer f.eks. til en afsluttet proces). Hvis der ikke er sådanne sider i hukommelsen (eller der ikke er nok af dem), bruges reglen om lokal eller global sideerstatning:

De mest brugte søgekriterier:

Skridning

De fleste programmer bruger ikke hele den hukommelse, der er allokeret til dem på én gang, men kun en del af den, bestemt af de instruktioner, der udføres i øjeblikket, og de data, de kræver. Hvis programmet overholder lokalitetsprincippet , kan den anvendte del af hukommelsen være betydeligt mindre end hele den hukommelse, der er allokeret til programmet. Størrelsen af ​​denne brugbare del afspejler programmets opnåelse af en stabil tilstand i hukommelsesforbrug og omtales ofte som arbejdssættet .

Virtuelle hukommelsessystemer fungerer effektivt, når summen af ​​arbejdssæt af alle processer ikke overstiger størrelsen af ​​fysisk RAM. I dette tilfælde har den tid, der kræves til at håndtere sidefejl, ikke meget på ydeevnen. Et program, der arbejder med store datastrukturer, kan dog have et arbejdssæt, der er for stort til, at swap-systemet kan betjenes effektivt. Dette vil resultere i en kontinuerlig strøm af sidefejl og et drastisk fald i computerens ydeevne. Denne situation kaldes thrashing : sider bliver løbende unloadet og derefter tilgået, hvilket forårsager hyppige sidefejl.

Et interessant træk ved thrashing er, at antallet af sidefejl op til et bestemt kritisk punkt stiger langsomt, efterhånden som arbejdssættet vokser. Efter at have nået dette kritiske punkt, stiger antallet af sidefejl dramatisk, og det meste af processorkraften bruges på at behandle dem.

For at undgå at glide kan brugeren udføre følgende handlinger:

Ulemper og muligheden for at overvinde dem

I tilfælde af virtuel hukommelsesdata placeret på eksterne lagerenheder (for eksempel harddiske), som oftest sker, sænkes hukommelsesadgangen (sammenlignet med tilfældig adgang lagerenheder).

Med stor sandsynlighed reducerer brugen af ​​swapping på SSD-drev (som har et begrænset antal skrivecyklusser) deres levetid. Men det øger hastigheden af ​​bytte betydeligt. Hvis SSD'en ikke er planlagt til at blive nedarvet, så er dette en fordel.

På 32-bit Windows XP, Vista, 7, kan swap-filen bruge RAM ud over 3 gigabyte ved at bruge tredjeparts software til oprettelse af ramdisk i hukommelsen .

Linux understøtter en lignende mekanisme, zswap , som placerer byttet i hukommelsen i komprimeret form.

Skift filer og partitioner

Implementeringen af ​​virtuel datalagring i forskellige operativsystemer adskiller sig på grund af de arkitektoniske funktioner i deres kerner og filsystemer.

Sidefilfragmentering

Under drift kan swap-filen (diskpartition eller fil på partition) blive fragmenteret, det vil sige, at sammenhængende virtuelle hukommelsesområder vil bestå af adskillige separate (diskontinuerlige) områder i swap-filen. Når du læser og skriver sidedata, der er placeret lineært i virtuel hukommelse, men spredt ud over sidefilen, vil det tage meget tid at flytte harddiskhovederne til begyndelsen af ​​det næste område. Dette kan føre til et fald i hele systemets ydeevne på grund af overfloden af ​​langsomme I/O-anmodninger.


Retningslinjer for swap filplacering

Sikkerhed ved arbejde med en swap-fil

Fra swap-filen (partitionen) er det ofte muligt at udtrække fortrolige oplysninger , der bruges i driften af ​​computersystemet. Derfor, når du arbejder med hemmelige data, ryddes swap normalt - for eksempel ved at bruge sswap-værktøjet fra den sikre fjernelsespakke .

Også mange programmer, der arbejder med værdifuld information eller med kryptering, kan selektivt deaktivere muligheden for at pumpe hukommelsesfragmenter ud.

På Linux kan du kryptere swap-filen eller partitionen (for eksempel på Ubuntu-distributionen sker dette automatisk, når du vælger muligheden for at kryptere brugerens hjemmemappe under OS-installation). Denne løsning øger belastningen på processoren noget, men garanterer sikkerheden for fortrolige oplysninger selv i tilfælde af pludseligt strømafbrydelse.

Brug af personsøgningsfilen kan føre til infektion af nogle operativsystemer med computervirus , da der er en sårbarhed , som giver dig mulighed for at skubbe kørende programmer ind i virtuel hukommelse og ændre kørekoden ved hjælp af direkte adgang til harddisken.

Unix

I Unix og lignende operativsystemer placeres swap normalt på en separat harddiskpartition, hvilket tidligere gjorde dataadgang hurtigere end swapplacering på en almindelig partition. På Linux-kerner 2.6 og nyere er ydeevnen af ​​en swap-fil lige så god som en swap-partition [2] [3] .

Et eksempel på oprettelse af en swap-fil til GNU/Linux:

# dd if=/dev/nul af=/swap bs=1024 count=128K # mkswap /swap # synkronisere # swap / swap

Oracle Solaris kan bruge ZFS- volumener som swap-partitioner:

# zfs oprette -V 2G pool/swap # swap -a /dev/zvol/dsk/pool/swap

Ud over at blive brugt, mens systemet kører, bruger nogle GNU/Linux-distributioner en swap-partition til at organisere dvaletilstand ("dvale", dvale eller "suspend til disk" - S4 ACPI -tilstand ). For at understøtte denne tilstand skal størrelsen af ​​byttet sættes lig med størrelsen af ​​RAM, øget med 10-15%.

Microsoft Windows og Windows NT

Området på harddisken beregnet til at bytte er placeret i en separat fil kaldet swap-fil , swap-fil (fra engelsk  swap-fil ). Det kaldes pagefile.sys og oprettes af systemet i rodmappen på C: -drevet som standard . I fremtiden kan brugeren styre størrelsen og placeringen af ​​personsøgningsfilen, for eksempel ved hjælp af kontrolpanelet , punkt System .

I Windows 9x hedder swap-filen win386.swp og er placeret i Windows-mappen. Ved at redigere filen system.ini kan den dog flyttes til rodmappen for senere deling med Windows NT.

Fra og med Windows Vista blev det også muligt at oprette en dedikeret swap-partition, der ligner dem, der bruges i UNIX-systemer.

Noter

  1. Peter J. Denning. Thrashing: Dens årsager og forebyggelse  // Proceedings AFIPS, Fall Joint Computer Conference. - 1968. - T. 33 . — S. 915–922 .
  2. "Jesper Juhl": Re: Hvordan sender man en pause? - dump fra frossen 64bit linux . LKML (29. maj 2006). Hentet 28. oktober 2010. Arkiveret fra originalen 19. juni 2012.
  3. Andrew Morton: Re: Swap partition vs swap fil . LKML. Hentet 28. oktober 2010. Arkiveret fra originalen 19. juni 2012.