Personsökning

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 19 oktober 2021; kontroller kräver 4 redigeringar .

Paging ( engelska  paging ; termen swapping from swap , /swɔp/ används ibland ) är en av mekanismerna för virtuellt minne , där enskilda minnesfragment (vanligtvis inaktiva) flyttas från RAM till sekundär lagring (en hårddisk eller annat extern enhet, såsom flashminne ), frigör RAM-minne för att ladda andra aktiva minnesfragment. Sådana fragment i moderna datorer är minnessidor.

Sidor som temporärt laddas ner från minnet kan lagras på externa lagringsenheter både i en fil och i en speciell partition på en hårddisk (partition), som kallas en swap-fil respektive en swap-partition. Om det är nödvändigt att ladda ur sidor från RAM-minnet som motsvarar innehållet i en fil på hårddisken (till exempel minnesmappade filer), kan de inte laddas ur, utan helt enkelt raderas. När en sådan sida efterfrågas kan den läsas från originalfilen.

När ett program kommer åt en sida som inte finns i RAM-minnet, kommer ett PageFault-undantag att inträffa. Hanteraren för denna händelse bör kontrollera om den begärda sidan har bytts ut tidigare, och om den finns i växlingsfilen, ladda den tillbaka till minnet.

Historik

Inledningsvis förstod man byte som att man lossade en process från RAM som helhet, vilket resulterade i att inaktiva processer kunde vara helt frånvarande från RAM. När aktiveringsvillkoren för processen var uppfyllda, laddade minneshanteraren tillbaka processbilden.

Innebörden av termen förändrades på 60-talet , när stöd för virtuellt minne dök upp i operativsystem : byte började betyda att ladda och ta bort enskilda sidor. Personsökning implementerades först i Atlas -datorn , som släpptes 1962.

Sidfel

Huvudfunktionerna för personsökningsmekanismen utförs när ett program försöker komma åt sidor som för närvarande inte är mappade till fysiskt minne (RAM). Denna situation kallas sidfel . Vid denna tidpunkt bör operativsystemet ta kontroll och hantera sidfelet på ett sätt som är transparent för programmet. Därför behöver operativsystemet:

  1. Bestäm platsen för den önskade sidan i sekundär lagring.
  2. Få en tom sidram i det fysiska minnet att använda som en databehållare.
  3. Ladda den begärda informationen i den mottagna sidramen.
  4. Uppdatera sidtabellen så att den pekar på den nya sidramen.
  5. I en genomskinlig form, återställ kontrollen till programmet genom att köra om instruktionen som orsakade sidfelet.

Om, när en tom sidram tas emot, det inte finns tillräckligt med ledigt RAM, exekveras sidersättningsalgoritmen, som väljer en av de använda sidramarna för urladdning. Om sidramen som ska sökas tilldelades dynamiskt under programkörningen, eller om den är en del av programmets datasegment och har ändrats sedan den lästes in i minnet (med andra ord, om den har blivit "smutsig"), måste den vara sparas i sekundär lagring innan den omallokerades. Annars är innehållet i sidramen i RAM detsamma som innehållet på sidan i sekundär lagring, så den behöver inte bläddras ut. Om en olastad sida nås senare i körningen, kommer ett annat sidfel att inträffa och sidramen måste omallokeras så att innehållet på sidan i sekundär lagring kan laddas om till RAM.

För att säkerställa effektiv drift måste personsökningssystemet välja de sidramar som är minst sannolikt att nås inom en snar framtid för utsökning. Det finns olika algoritmer för sidbyte . Operativsystem använder LRU ( Senast använd ) , FIFO ( First In First Out ) algoritmer eller algoritmer som tar hänsyn till processens arbetsuppsättning [ 1] .  

För att ytterligare förbättra svarstiden kan personsökningssystem använda olika strategier för att förutsäga nästa sidträffar. Sådana system försöker ladda sidor i huvudminnet i god tid innan programmet kommer åt dem.

Algoritmer för att fastställa föråldrade sidor

När du tilldelar utrymme för en ny sida kan det vara nödvändigt att radera alla sidor som för närvarande finns i minnet. Sidersättningsregler används för att bestämma vilken sida som ska tas bort från minnet. Den ideala kandidaten är en "död" sida som inte längre behövs av någon (till exempel hänvisar till en avslutad process). Om det inte finns några sådana sidor i minnet (eller om det inte finns tillräckligt med dem), används regeln om lokal eller global sidbyte:

De vanligaste sökkriterierna:

Slipage

De flesta program använder inte allt minne som tilldelats dem på en gång, utan bara en del av det, bestämt av de instruktioner som för närvarande körs och de data de kräver. Om programmet överensstämmer med lokalitetsprincipen kan den del av minnet som används vara betydligt mindre än hela minnet som tilldelats programmet. Storleken på denna användbara del återspeglar programmets uppnående av ett stabilt tillstånd i minnesförbrukning och kallas ofta för arbetsuppsättningen .

Virtuella minnessystem fungerar effektivt när summan av arbetsuppsättningarna för alla processer inte överstiger storleken på fysiskt RAM. I det här fallet har den tid som krävs för att hantera sidfel inte så stor inverkan på prestandan. Ett program som fungerar med stora datastrukturer kan dock ha en arbetsuppsättning som är för stor för att växlingssystemet ska fungera effektivt. Detta kommer att resultera i en kontinuerlig ström av sidfel och en drastisk minskning av datorns prestanda. Denna situation kallas thrashing : sidor laddas kontinuerligt ur och öppnas sedan, vilket orsakar ofta sidfel.

En intressant egenskap med thrashing är att antalet sidfel upp till en viss kritisk punkt ökar långsamt när arbetsuppsättningen växer. Efter att ha nått denna kritiska punkt ökar antalet sidfel dramatiskt och det mesta av processorkraften går åt till att bearbeta dem.

För att undvika att halka kan användaren vidta följande åtgärder:

Nackdelar och möjligheten att övervinna dem

När det gäller virtuella minnesdata som finns på externa lagringsenheter (till exempel hårddiskar), som oftast händer, saktar minnesåtkomsten ner (jämfört med slumpmässiga lagringsenheter).

Med hög sannolikhet minskar användningen av swapping på SSD-enheter (som har ett begränsat antal skrivcykler) deras livslängd. Men det ökar byteshastigheten avsevärt. Om SSD inte är planerad att ärvas, är detta fördelaktigt.

På 32-bitars Windows XP, Vista, 7, kan växlingsfilen använda RAM mer än 3 gigabyte med hjälp av programvara för att skapa ramdisk i minnet från tredje part .

Linux stöder en liknande mekanism, zswap , som placerar bytet i minnet i komprimerad form.

Byt filer och partitioner

Implementeringen av virtuell datalagring i olika operativsystem skiljer sig på grund av de arkitektoniska egenskaperna hos deras kärnor och filsystem.

Sidfilfragmentering

Under drift kan växlingsfilen (diskpartition eller fil på partition) bli fragmenterad, det vill säga angränsande virtuella minnesområden kommer att bestå av många separata (diskontinuerliga) regioner i växlingsfilen. När du läser och skriver siddata, som ligger linjärt i det virtuella minnet, men utspridda över växlingsfilen, kommer det att ta mycket tid att flytta hårddiskhuvudena till början av nästa område. Detta kan leda till en minskning av prestanda för hela systemet på grund av överflöd av långsamma I/O-förfrågningar.


Riktlinjer för platsbyte

Säkerhet när du arbetar med en växlingsfil

Från växlingsfilen (partitionen) är det ofta möjligt att extrahera konfidentiell information som används vid driften av datorsystemet. Därför, när man arbetar med hemlig data, rensas swap vanligtvis - till exempel med hjälp av sswap-verktyget från det säkra borttagningspaketet .

Dessutom kan många program som arbetar med värdefull information eller med kryptering selektivt inaktivera möjligheten att pumpa ut minnesfragment.

På Linux kan du kryptera växlingsfilen eller partitionen (till exempel på Ubuntu-distributionen görs detta automatiskt när du väljer alternativet att kryptera användarens hemkatalog under OS-installation). Denna lösning ökar belastningen på processorn något, men garanterar säkerheten för konfidentiell information även vid plötsligt strömavbrott.

Användning av personsökningsfilen kan leda till infektion av vissa operativsystem med datavirus , eftersom det finns en sårbarhet , som låter dig skjuta in pågående program till det virtuella minnet och ändra körkoden med direktåtkomst till hårddisken.

Unix

I Unix och liknande operativsystem placeras swap vanligtvis på en separat hårddiskpartition, vilket tidigare gjorde dataåtkomst snabbare än swap plats på en vanlig partition. På Linux-kärnor 2.6 och senare är prestandan för en växlingsfil lika bra som för en växlingspartition [2] [3] .

Ett exempel på att skapa en växlingsfil för GNU/Linux:

# dd if=/dev/noll av=/swap bs=1024 count=128K # mkswap /swap # synk # swapon /swap

Oracle Solaris kan använda ZFS- volymer som växlingspartitioner:

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

Förutom att användas medan systemet körs, använder vissa GNU/Linux-distributioner en swap-partition för att organisera viloläge ("viloläge", viloläge eller "avstängning till disk" - S4 ACPI -läge ). För att stödja detta läge bör storleken på bytet ställas in lika med storleken på RAM-minnet, ökat med 10-15%.

Microsoft Windows och Windows NT

Området på hårddisken som är avsett för växling finns i en separat fil som heter swap file , swap file (från engelska  swap file ). Den kallas pagefile.sys och skapas av systemet i rotkatalogen på C: -enheten som standard . I framtiden kan användaren styra storleken och placeringen av personsökningsfilen, till exempel genom att använda kontrollpanelen , item System .

I Windows 9x heter växlingsfilen win386.swp och finns i Windows-katalogen. Men genom att redigera filen system.ini kan den flyttas till rotkatalogen för senare delning med Windows NT.

Från och med Windows Vista blev det också möjligt att skapa en dedikerad swap-partition, liknande i syfte att användas i UNIX-system.

Anteckningar

  1. Peter J. Denning. Trassling: Dess orsaker och förebyggande  // Proceedings AFIPS, Fall Joint Computer Conference. - 1968. - T. 33 . — S. 915–922 .
  2. "Jesper Juhl": Re: Hur skickar man en paus? - dumpa från frusen 64bit linux . LKML (29 maj 2006). Hämtad 28 oktober 2010. Arkiverad från originalet 19 juni 2012.
  3. Andrew Morton: Re: Swap partition vs swap fil . LKML. Hämtad 28 oktober 2010. Arkiverad från originalet 19 juni 2012.