kalizec schreef op woensdag 26 maart 2008 @ 11:13:
Het is geen swap-file. Het is een page-file.
Dat betekent dat informatie die in het geheugen staat ook in de page-file voor kan komen, zodat indien nodig het ter plekke verwijderd kan worden uit het geheugen, zonder eerst nog even een kopietje te moeten maken. (Daarom was een OS of programma dat vroeger ging swappen, ook ineens zo langzaam). Het voordeel van paging is dat het het mogelijk maakt dit al 'voor' te bereiden en dat je dus als puntje bij paaltje komt en het geheugen vol raakt het OS simpel een deel vrij kan maken door eenvoudig te verwijderen ipv te kopieren (het staat immers ook in de page-file).
Sec genomen, kent je CPU alleen maar paging: een mechanisme, geintroduceerd bij de 386, waarbij de processor de 'virtual address space' opdeelde in 4K pages.
'swappen' is niet iets dat, vanuit de CPU gezien, bestaat. Iedere PTE (Page Table Entry) heeft drie bits die hier van belang zijn: P: present bit, R: read/write bit, en D: dirty bit. Wanneer het 'present' bit uitstaat, genereert je CPU een Page Fault wanneer die 'afwezige' page aangesproken wordt (een Page Fault is dus niet iets dat 'fout' gaat). Aan de hand van de ISR die de Page Fault afhandelt, de memory manager dus, zal die page al dan niet van disk gehaald worden (de Page Fault die je 'fysiek' ziet, bij een blue screen bv, betekent alleen maar dat de bewuste Page Fault onverwacht was, en er dus ergens iets niet goed gegaan is). Dit van disk halen, of liever gezegd: het 'uitwisselen' van pages van en naar disk, heet dus 'swappen'. Je kunt een pagefile, gezien de activiteit die ermee begaan wordt, dus best een swapfile noemen. Niks mis mee.
Je zou met het 'present' bit dus ook iets anders kunnen doen dan swappen van en naar disk. Zo heb ik vroeger, voor de 386, nog eens een debugger geschreven die strings, real-time, in het geheugen kon 'opzoeken'; dwz, op het moment dat zeg de string "The quick brown fox jumps over the lazy dog" in het geheugen verscheen, kon ik hem direct detecteren. Daar gebruikte ik dus ook paging voor, omdat je dan per page die aangesproken werd, een Page Fault kon triggeren om die page te onderzoeken. Ging razendsnel, en was een leerzame oefening in paging.
Er is -- in tegenstelling tot wat je lijkt te suggereren -- dus geen kunstmatig onderscheid, en/of voor- en nadelen, tussen een pagefile en een swapfile, omdat er allebei precies hetzelfde mee bedoeld wordt. En als al het 'virtually paged memory' via de disk gaat, dan gaat dat vandaag de dag niet substantieel sneller dan vroeger (al zijn de harddisken nu wel wat rapper, uiteraard). "Daarom was een OS of programma dat vroeger ging swappen, ook ineens zo langzaam" geldt dus nog steeds voor vandaag. En of een pagina "ter plekke verwijderd kan worden uit het geheugen, zonder eerst nog even een kopietje te moeten maken" hangt dus af af het 'dirty bit' (wat dus signaleert wanneer de page, qua inhoud, veranderd is). Ook daar geldt dus, dat niet het ene typisch iets is voor een swapfile vs. een pagefile, of omgekeerd.
Het grote voordeel van paging is vooral dat je een vrijwel ongelimiteerde pool geheugen tot je beschikking hebt. Immers, stuit je op een page die niet 'present' is, dan haal je em gewoon van disk.
[
Voor 20% gewijzigd door
albatross op 26-03-2008 13:49
]
i9 12900K | MSI Meg CoreLiquid S360 | ASUS ROG STRIX Z690-A GAMING WIFI D4 | G.Skill Trident Z Royal Elite 2x32GB 4266Mhz Gold | AORUS RTX 4090 MASTER | Dark Power 13 1300W | Samsung 980/860/970/990 Pro | Logitech Z-906 | Phanteks Evolv X | Dell AW3821DW