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.
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.
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:
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.
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:
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:
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.
Implementeringen av virtuell datalagring i olika operativsystem skiljer sig på grund av de arkitektoniska egenskaperna hos deras kärnor och filsystem.
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.
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.
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 /swapOracle Solaris kan använda ZFS- volymer som växlingspartitioner:
# zfs skapar -V 2G pool/swap # swap -a /dev/zvol/dsk/pool/swapFö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%.
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.
av operativsystem | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Kärna |
| ||||
Processledning _ |
| ||||
Minneshantering och adressering | |||||
Ladda och initieringsverktyg | |||||
skal | |||||
Övrig | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |