Stránkování ( anglicky paging ; někdy se používá termín swapování od swap , /swɔp/ ) je jedním z mechanismů virtuální paměti , při kterém se jednotlivé fragmenty paměti (obvykle neaktivní) přesouvají z paměti RAM do sekundárního úložiště ( pevný disk nebo jiné externí disk, jako je flash paměť ), uvolní RAM pro načtení dalších aktivních paměťových fragmentů. Takovými fragmenty v moderních počítačích jsou paměťové stránky.
Stránky dočasně uvolněné z paměti mohou být uloženy na externích úložných zařízeních jak v souboru, tak ve speciálním oddílu na pevném disku (oddílu), který se nazývá odkládací soubor a odkládací oddíl. Pokud je nutné z paměti RAM uvolnit stránky, které odpovídají obsahu souboru na pevném disku (například soubory mapované do paměti), nemusí být uvolněny, ale jednoduše odstraněny. Když je taková stránka požadována, lze ji přečíst z původního souboru.
Když aplikace přistoupí na stránku, která není v paměti RAM, dojde k výjimce PageFault. Obslužná rutina této události by měla zkontrolovat, zda byla požadovaná stránka již dříve odložena, a pokud je v odkládacím souboru, načíst ji zpět do paměti.
Zpočátku se swapování chápalo jako vyložení procesu z RAM jako celku, v důsledku čehož mohly neaktivní procesy v RAM zcela chybět. Když byly splněny aktivační podmínky pro proces , správce paměti načetl obraz procesu zpět.
Význam termínu se změnil v 60. letech , kdy se v operačních systémech objevila podpora virtuální paměti : swapování začalo znamenat načítání a vyjímání jednotlivých stránek. Stránkování bylo poprvé implementováno v počítači Atlas , vydaném v roce 1962.
Hlavní funkce mechanismu stránkování se provádějí, když se program pokouší o přístup ke stránkám, které nejsou aktuálně mapovány do fyzické paměti (RAM). Tato situace se nazývá selhání stránky . V tomto okamžiku by měl operační systém převzít kontrolu a zpracovat poruchu stránky způsobem transparentním pro program. Operační systém tedy potřebuje:
Pokud při přijetí prázdného rámce stránky není dostatek volné paměti RAM, provede se algoritmus nahrazení stránky, který vybere jeden z použitých rámců stránky pro uvolnění. Pokud byl stránkovaný rámec stránky alokován dynamicky během provádění programu nebo pokud je součástí datového segmentu programu a změnil se od doby, kdy byl načten do paměti (jinými slovy, pokud se stal „špinavým“), musí být před uvolněním uloženy do sekundárního úložiště. Jinak je obsah rámce stránky v paměti RAM stejný jako obsah stránky v sekundárním úložišti, takže ji není třeba stránkovat. Pokud je uvolněná stránka zpřístupněna později během běhu, dojde k další chybě stránky a rámec stránky bude muset být znovu přidělen, aby bylo možné obsah stránky v sekundárním úložišti znovu načíst do paměti RAM.
Aby byl zajištěn efektivní provoz, musí stránkovací systém vybrat pro stránkování ty rámce stránek, u kterých je nejmenší pravděpodobnost, že k nim bude v blízké budoucnosti přistupovat. Existují různé algoritmy nahrazování stránek . Operační systémy používají algoritmy LRU ( Last recent used ) , FIFO ( First In First Out ) nebo algoritmy zohledňující pracovní sadu procesu [ 1] .
K dalšímu zkrácení doby odezvy mohou stránkovací systémy používat různé strategie k předpovídání návštěv další stránky. Takové systémy se snaží načíst stránky do hlavní paměti s dostatečným předstihem, než k nim program přistoupí.
Při přidělování místa pro novou stránku může být nutné odstranit kteroukoli stránku aktuálně v paměti. Pravidla nahrazení stránek se používají k rozhodnutí, která stránka by měla být odstraněna z paměti. Ideálním kandidátem je „mrtvá“ stránka, kterou již nikdo nepotřebuje (například odkazuje na ukončený proces). Pokud žádné takové stránky v paměti nejsou (nebo jich není dostatek), použije se pravidlo lokální nebo globální náhrady stránky:
Nejčastěji používaná kritéria vyhledávání:
Většina programů nevyužívá celou paměť, která je jim přidělena, najednou, ale pouze část z ní, což je určeno právě prováděnými instrukcemi a daty, které vyžadují. Pokud program vyhovuje principu lokality , pak může být použitá část paměti výrazně menší než celá paměť přidělená programu. Velikost této použitelné části odráží dosažení určitého ustáleného stavu ve spotřebě paměti programem a je často označována jako pracovní sada .
Systémy virtuální paměti pracují efektivně, když součet pracovních sad všech procesů nepřesahuje velikost fyzické paměti RAM. V tomto případě nemá čas potřebný k vyřešení chyb stránek velký vliv na výkon. Program, který pracuje s velkými datovými strukturami, však může mít pracovní sadu, která je příliš velká na to, aby ji odkládací systém efektivně obsluhoval. To bude mít za následek nepřetržitý proud selhání stránek a drastický pokles výkonu počítače. Této situaci se říká mlácení : stránky jsou neustále uvolňovány a následně zpřístupňovány, což způsobuje časté selhání stránky.
Zajímavým rysem thrashingu je to, že až do určitého kritického bodu se počet selhání stránky pomalu zvyšuje, jak roste pracovní sada. Po dosažení tohoto kritického bodu se počet selhání stránky dramaticky zvýší a většina výpočetního výkonu se spotřebuje na jejich zpracování.
Aby se uživatel vyhnul uklouznutí, může provést následující akce:
V případě dat virtuální paměti umístěných na externích úložných zařízeních (například pevných discích), jak se nejčastěji stává, se přístup do paměti zpomaluje (ve srovnání s úložnými zařízeními s náhodným přístupem).
S vysokou pravděpodobností použití swappingu na SSD discích (které mají omezený počet cyklů zápisu) snižuje jejich životnost. Ale výrazně to zvyšuje rychlost swapování. Pokud se SSD neplánuje zdědit, pak je to výhodné.
V 32bitových systémech Windows XP, Vista, 7 může odkládací soubor používat RAM přes 3 gigabajty pomocí softwaru pro vytváření ramdisku v paměti od jiného výrobce .
Linux podporuje podobný mechanismus, zswap , který umístí swap do paměti v komprimované podobě.
Implementace virtuálních datových úložišť v různých operačních systémech se liší v důsledku architektonických vlastností jejich jader a souborových systémů.
Během provozu se může odkládací soubor (diskový oddíl nebo soubor na oddílu) fragmentovat, to znamená, že souvislé oblasti virtuální paměti se budou skládat z mnoha samostatných (nesouvislých) oblastí v odkládacím souboru. Při čtení a zápisu dat stránky, umístěných lineárně ve virtuální paměti, ale rozptýlených po stránkovacím souboru, zabere přemístění hlav pevného disku na začátek další oblasti hodně času. To může vést k poklesu výkonu celého systému kvůli množství pomalých I/O požadavků.
Z odkládacího souboru (oddílu) je často možné extrahovat důvěrné informace používané při provozu výpočetního systému. Proto se při práci s tajnými daty swap obvykle vymaže - například pomocí nástroje sswap z balíčku secure remove .
Také mnoho programů, které pracují s cennými informacemi nebo se šifrováním, může selektivně zakázat schopnost pumpovat fragmenty paměti.
V Linuxu můžete zašifrovat odkládací soubor nebo oddíl (například v distribuci Ubuntu se to děje automaticky, když během instalace OS vyberete možnost šifrování domovského adresáře uživatele). Toto řešení poněkud zvyšuje zátěž procesoru, ale zaručuje bezpečnost důvěrných informací i v případě náhlého výpadku proudu.
Použití stránkovacího souboru může vést k infekci některých operačních systémů počítačovými viry , protože existuje zranitelnost , který umožňuje tlačit běžící programy do virtuální paměti a měnit běžící kód pomocí přímého přístupu na pevný disk.
V Unixu a podobných operačních systémech je swap obvykle umístěn na samostatném oddílu pevného disku, což dříve umožňovalo rychlejší přístup k datům než umístění swapu na běžném oddílu. Na linuxových jádrech 2.6 a novějších je výkon odkládacího souboru stejně dobrý jako výkon odkládacího oddílu [2] [3] .
Příklad vytvoření odkládacího souboru pro GNU/Linux:
# dd if=/dev/zero of=/swap bs=1024 count=128 kB # mkswap /swap # synchronizace # swapon / swapOracle Solaris může používat svazky ZFS jako odkládací oddíly:
# zfs vytvořit -V 2G pool/swap # swap -a /dev/zvol/dsk/pool/swapKromě toho, že se používají za běhu systému, některé distribuce GNU/Linuxu používají odkládací oddíl k uspořádání režimu spánku ("hibernace", hibernace nebo "uspání na disk" - režim S4 ACPI ). Pro podporu tohoto režimu by měla být velikost swapu nastavena na stejnou velikost jako velikost RAM, zvýšená o 10-15%.
Oblast pevného disku určená k odkládání se nachází v samostatném souboru s názvem swap file , swap file (z anglického swap file ). Jmenuje se pagefile.sys a je standardně vytvořen systémem v kořenovém adresáři jednotky C :. V budoucnu může uživatel ovládat velikost a umístění stránkovacího souboru například pomocí ovládacího panelu , položka Systém .
Ve Windows 9x se odkládací soubor jmenuje win386.swp a je umístěn v adresáři Windows. Úpravou souboru system.ini jej však lze přesunout do kořenového adresáře pro pozdější sdílení se systémem Windows NT.
Počínaje Windows Vista bylo také možné vytvořit vyhrazený odkládací oddíl, podobný účelu jako v systémech UNIX.
operačních systémů | Aspekty|||||
---|---|---|---|---|---|
| |||||
Typy |
| ||||
Jádro |
| ||||
Řízení procesů |
| ||||
Správa a adresování paměti |
| ||||
Nástroje pro načítání a inicializaci | |||||
skořápka | |||||
jiný | |||||
Kategorie Wikimedia Commons Wikibooks Wikibooks |