Virtuálna pamäť: Rozdiel medzi revíziami
Smazaný obsah Přidaný obsah
d →Pozadie: jazyk |
tonalnagual |
||
Riadok 3:
Efektívne použitie virtuálnej pamäte je závislé na podpore procesora. MMU (jednotka pre správu pamäte) vykonáva samotný preklad logickej (virtuálnej) adresy na fyzickú. Pre procesy je proces mapovania transparentný, operačný systém im ponúka model lineárnej pamäte.
'''Virtuálna pamäť'''
Virtuálna pamäť alebo adresovanie virtuálnej pamäti je technika riadenia pamäti, používaná bežne viacúlohovými (multitasking) operačnými systémami, kde rôzne druhy nesusediacej pamäte sú prezentované aplikácii ako súvislá pamäť. Táto pamäť je označovaná ako virtuálny adresný priestor.▼
==1. História a virtuálna pamäť==
Virtuálna pamäť je technika dovoľujúca vykonanie prcesov, ktoré sa nenachádzajú v operačnej pamäti celé. Výhodou tejto techniky je, že poskytuje používateľovi veľký pamäťový priestor pri využití malého množstva fyzickej pamäte. Zjednodušuje prácu programátora, pretože nie je potrebné vytvárať segmenty pre prekrytie a plánovať ich poradie zavedenia do pamäte. Tieto úlohy preberá správa pamäte.▼
Veľa aplikácií však požaduje prístup k informáciám (kód alebo dáta), ktoré nemôžu byť uložené vo fyzickej pamäti. Toto je častý jav pri operačných systémoch, ktoré dovoľujú súčasný viacnásobný beh procesov (multitasking). Existuje viacero spôsobov, ako zabezpečiť riešenie tohto problému:▼
▲Veľa aplikácií však požaduje prístup k informáciám (kód alebo dáta), ktoré nemôžu byť uložené vo fyzickej pamäti. Toto je častý jav pri operačných systémoch, ktoré dovoľujú súčasný viacnásobný beh procesov (multitasking). Existuje viacero spôsobov, ako zabezpečiť riešenie tohto problému:
▲ Virtuálna pamäť alebo adresovanie virtuálnej pamäti je technika riadenia pamäti, používaná bežne viacúlohovými (multitasking) operačnými systémami, kde rôzne druhy nesusediacej pamäte sú prezentované aplikácii ako súvislá pamäť. Táto pamäť je označovaná ako virtuálny adresný priestor.
▲# Jednou z možností je nechať rozhodnutie o druhu použitej pamäte pre konkrétnu informáciu a proces manipulácie s ňou priamo na samotnú aplikáciu. Nevýhodou tohto prístupu je že programátor aplikácie musí stráviť čas a úsilie na návrh, implementáciu a odstraňovanie chýb správy pamäte namiesto toho, aby sa sa zameriaval na vlastnú aplikáciu, čo veľmi znižuje efektivitu jeho práce. Taktiež môže dochádzať ku konfliktom programov, ktoré chcú používať fyzickú pamäť v rovnakom čase.
▲# Inou možnosťou je nepracovať s dátami priamo vo forme smerníkov, ale prideliť im istú formu handlerov a nechať operačný systém swapovať dáta združené s týmito handlermi medzi odkladacou oblasťou a fyzickou pamäťou. Problémom je, že tento postup komplikuje aplikačný kód a vyžaduje isté formy správania od aplikácie – dáta je potrebné uzamknúť do fyzickej pamäte, aby sa s nimi mohlo pracovať, pričom sa obchádzajú jazykové jazykové knižnice, ktoré robia vlastné prideľovanie pamäte vo forme veľkých blokov, čo urýchľuje beh systému. Príkladom takéhoto druhu usporiadania je 16 bitová verzia operačného systému Windows.
▲# Moderné riešenie je v použití virtuálnej pamäte, v ktorej kombinácia špeciálneho hardvéru a operačného systému dovoľuje použiť oba druhy pamäte tak, že vytvárajú dojem väčšej fyzickej pamäte. Pre programy sa táto pamäť javí spoločne ako jedna súčasť. Teoreticky poskytuje schopnosť napodobniť hlavnú pamäť ľubovolnej veľkosti, v praxi je hranica veľkosti limitovaná adresným priestorom (pre 32 bitové operačné systémy 4 GB, pre 64 bitové operačné systémy to môže byť oveľa viac).
▲ Virtuálna pamäť je technika dovoľujúca vykonanie prcesov, ktoré sa nenachádzajú v operačnej pamäti celé. Výhodou tejto techniky je, že poskytuje používateľovi veľký pamäťový priestor pri využití malého množstva fyzickej pamäte.
Virtuálna pamäť robí prácu programátorov oveľa jednoduchšou. Nezáleží na tom, koľko pamäte aplikácia potrebuje, bude sa správať ako keby mala prístup k hlavnej pamäti požadovanej veľkosti a jej dáta budú uložené do virtuálneho pamäťového priestoru. Programátor môže kompletne ignorovať potrebu správy presunu dát medzi rôznymi druhmi pamäte. Ak však programátor chce zabrániť častému swapovaniu, mal by venovať pozornosť minimalizáciu počtu blokov, ku ktorým sa pristupuje často.▼
▲ Virtuálna pamäť robí prácu programátorov oveľa jednoduchšou.
Virtuálna pamäť býva zvyčajne implementovaná dvoma spôsobmi:▼
# stránkovaním na žiadosť▼
# segmentáciou na žiadosť▼
== Stránkovanie na žiadosť ==▼
Virtuálna pamäť je zvyčajne implementovaná použitím stránok. Procesy sú umiestnené na disku. Keď chceme vykonávať proces, presunieme ho do pamäte, nemusíme ho však do pamäte presúvať celý, ale len jeho časť. Za tento proces je zodpovedný tzv. stránkovač - pager. Stránkovač predpokladá, ktoré stránky budú pre beh procesu potrebné a presunie ich do pamäti, čím sa zníži réžia potrebná na výmenu procesov v pamäti. ▼
▲ Virtuálna pamäť býva zvyčajne implementovaná dvoma spôsobmi:
Ku správnej implementácii virtuálnej pamäte je potrebné zabezpečiť mapovanie (prepojenie) virtuálnej pamäte k fyzickej pamäti, a to tak, aby bolo možné rozpoznať, ktoré dáta patria do fyzickej pamäte, aby ich bolo možné rozlíšiť a swapovať. Operačný systém ukladá adresnú prekladaciu tabuľku, mapovanú z virtuálnych čísiel stránok na fyzickú, v dátovej štruktúre známej ako stránková tabuľka. Vo väčšine počítačov, sú tieto prekladacie tabuľky uložené vo fyzickej pamäti.▼
▲ Virtuálna pamäť je zvyčajne implementovaná použitím stránok. Procesy sú umiestnené na disku. Keď chceme vykonávať proces, presunieme ho do pamäte, nemusíme ho však do pamäte presúvať celý, ale len jeho časť. Za tento proces je zodpovedný tzv. stránkovač - pager. Stránkovač predpokladá, ktoré stránky budú pre beh procesu potrebné a presunie ich do pamäti, čím sa zníži réžia potrebná na výmenu procesov v pamäti.
▲ Ku
Dôležitým problémom je
Dôležitým faktorom je tiež rozhodnutie, či pri nahradzovaní stránky sa táto stránka vyberá lokálne
V prípade chýbajúcej hardware-ovej podpory umožňujúcej efektívny systém stránkovania na žiadosť, používa sa virtualizačná technika segmentácie na žiadosť. Program sa v tomto prípade zavádza do pamäte po segmentoch, ktoré sú predmetom výmeny. Pri odkaze na segment, ktorý nie je v pamäti, sa vygeneruje prerušenie pre výpadok segmentu. Správa pamäte nájde pre požadovaný segment vhodný úsek v pamäti a presunie ho tam. Využíva pritom striasanie. Segmentácia na žiadosť má silnejšie väzby na štruktúru programu a minimalizuje vnútornú fragmentáciu. Nevýhodou je nebezpečenstvo vonkajšej fragmentácie.▼
▲Dôležitým problémom je voľba algoritmu, ktorým sa bude vyberať stránka, ktorá sa má nahradiť. Existuje viacero algoritmov, ktoré je možné použiť: Algoritmus FIFO, Optimálny algoritmus, Algoritmus LRU.
==3. Implementácia VM v OS rodiny GNU/Linux==
Virtuálna pamäť v operačných systémoch Linux je implementovaná prostredníctvom stránkovania na žiadosť. V prípade použitia 32 bitovej architektúry systému je možné adresovať 4GB fyzickej pamäte (232). V prípade, že procesor obsahuje implementáciu správy pamäte (MMU – Memory Management Unit), Linux podporuje koncept virtuálnej pamäte. V tomto prípade sú linuxovým kernelom vytvárané tabuľky stránok (page tables), ktoré mapujú virtuálne adresy na fyzické adresy. Znamená to, že každý proces v systéme môže adresovať až 4GB pamäte, pričom z pohľadu procesu, je on sám jediným procesom bežiacim v systéme. ▼
Mapovanie virtuálnych adries na fyzické adresy sa vykonáva prostredníctvom linuxového kernelu. Pri vytvorení nového procesu (pomocou fork()), kernel vytvára novú sadu tabuliek stránok (page tables) pre vytvorený proces. Referenčné adresy pre proces sú virtuálnymi adresami. Nie sú nutne
Dôvod implementácie virtuálnej pamäte v operačnch systémoch GNU/Linux nie je len ten, že väčšina aplikácii obsahuje kód a dáta, ktoré nie sú nikdy využívané všetky naraz a preto nie je nutné udržiavať celý proces vo fyzickej pamäti, dôvod je i v koncepte použitia zdieľaných knižníc pre rôzne rutiny, ktoré sú často využívané. Bolo by zbytočné, aby si každý program vytváral svoje vlastné kópie týchto knižníc, preto môže byť jedna kópia využívaná súčasne viacerými bežiacimi procesmi. Kód a dáta z týchto knižníc sú preto namapované do virtuálneho adresného priestoru každého procesu využívajúceho danú knižnicu.
Je nepravdepodobné, aby proces využíval naraz všetok kód a dáta, ktoré sú uložené v pamäti. Pamäť môže obsahovať kód a dáta, ktoré sa využívajú iba v špecifických situáciách. Linux využíva techniku stránkovania na žiadosť pre implementáciu virtuálnej pamäte. Stránka virtuálnej pamäte je presúvaná do fyzickej pamäte len vtedy, keď ju proces požaduje. Pre rozlíšnie, ktoré stránky sa nachádzajú v pamäti sa používa systém validačného bitu. Keď je nastavený do stavu platná, znamená to, že stránka je uložená v pamäti.Ak proces požaduje kód alebo dáta, ktoré nie sú obsiahnuté vo fyzickej pamäti, systémový hardware generuje výnimku chyby stránky a odovzdá kontrolu kernelu, aby problém vyriešil.
▲Prideľovanie rámcov je taktika, ktorá určuje, koľko rámcov bude pridelených ktorému procesu. Obyčajne čím menej rámcov vlastní proces, tým viac výpadkov stránok vyvoláva, čo spomaľuje chod systému. Minimálny počet rámcov, ktoré majú byť pridelené procesu, vyplýva z maximálneho počtu rámcov, na ktoré sa je možné pri vyvolaní jednej inštrukcie odvolať. Ako algoritmy sa používajú algoritmus spravodlivého rozdelenia medzi procesy a algoritmus proporcionálneho prideľovania.
Linuxový kernel potrebuje spravovať všetky oblasti virtuálnej pamäte. Obsah virtuálnej pamäte každého procesu je opísaný štruktúrou typu mm_struct, na ktorú proces odkazuje v dátovej štruktúre task_struct. Dátová štruktúra mm_struct obsahuje informácie potrebné na vyriešenie výnimky chyby stránky. Obsahuje ukazovateľe do tabuľky stránok procesu – do zoznamu štruktúr typu vm_area_struct, z ktorých každá reprezentuje oblasť virtuálnej pamäte patriacej procesu. Keďže jednotlivé oblasti virtuálnej pamäte pochádzajú z rôznych zdrojov, Linux zabezpečuje abstraktnosť prístupu do virtuálnej pamäte pomocou rutín správy pamäte.
Dátová štruktúra vm_area procesu je pristupovaná opakovane kernelom vždy v prípade, keď dôjde k vyvolaniu výnimky chyby stránky, vytvárajú sa nové stránky vo virtuálnej pamäti alebo sa modifikujú informácie v existujúcich stránkach. Z tohto dôvodu je časť nájdenia správneho záznamu v štruktúre vm_area kritický pre výkonnosť systému. Preto pre urýchlenie prístupu linux udržiava záznamy vm_area v dátovej štruktúre AVL stromu, keď lavý smerník odkazuje na prvok z nižšou začiatočnou štartovacou adresou a pravý smerník na prvok z vyššou štartovacou adresou virtuálnej pamäte. Za urýchlenie prístupu sa v tomto prípade platí zvýšeným obslužným časom pri vložení nového záznamu do štruktúry AVL stromu.
V prípade, že počet volných rámcov vo fyzickej pamäti dochádza, pamäťový manažment Linuxu musí zabezpčiť uvolnenie stránok vo fyzickej pamäti. Tieto funkcie sú zabezpečované pomocu démona Kernel Swap Daemon (kswapd). Kernel Swap Daemon je zodpovedný za efektívne fungovanie pamäťového manažmentu. Démon je spúšťaný počas Init procesu a následne je aktivovaný v periodických intervaloch po uplynutí časovača. V prípade, že démon zistí nedostatok volných rámcov v pamäti, zabezpečí ich ulovlnenie aplikáciou nasledovných postupov:
▲Dôležitým faktorom je tiež rozhodnutie, či pri nahradzovaní stránky sa táto stránka vyberá lokálne alebo globálne, to znamená, či sa vyberá len spomedzi rámcov pridelených procesu alebo spomedzi všetkých rámcov v pamäti. Od toho aj závisí, či sa počet rámcov pridelených procesu môže dynamicky meniť.
1.Znižie veľkosťi cache pamäťe pre stránky,
2.Presun stránok z fyzickej pamäte do swap priesotru,
3.Presun zdielaných stránok z fyzickej pamäte do swap priestoru.
Démon vyberie vhodný proces, ktorého stránky budú swapované. Swapovanie sa však netýka všetkých stránok procesu, vyberá sa len určitý predvolený počet stránok a v prípade potreby sa proces uvolňovania stránok opakuje pri ďalšej aktivácii démona. Algoritmus, ktorý je používaný pre výber stránky, ktorá bude presunutá do swap priestoru vychádza zo systému nazývaného page ageing. Každá stránka má počítadlo (udržiavané v štruktúre mem_map_t), ktoré je informáciou pre systém, či je daná stránka vhodným kandidátom na swapovanie. Keď je stránka v pamäti alokovaná, jej počítadlo je nastavené na hodnotu 3. Vždy, keď je zaznamenaný prístup na stránku, jej počítadlo je znova zvýšené o hodnotu 3, až do maximálnej hodnoty 20. Pri každom spustení Kernel Swap Daemon znižuje hodnotu počítadla stránky o 1. Tieto nastavenia môžu byť zmenené v konfigurácii systému.
Démon taktiež nemôže swapovať ľubovolnú stránku len z ohľadom na intenzitu jej používania. Niektoré stránky majú nastavený tzv. dirty bit, čo zamedzuje ich výberu pre swapovanie. Swapovanie nie je možné stránky, ktoré sú uzamknuté v pamäti, alebo zdielané. Pre zdielané stránky je používaný oddelený komplexný algoritmus swapovania.
==4. Implementácia VM v OS rodiny MS Windows==
▲== Segmentácia na žiadosť ==
▲V prípade chýbajúcej hardware-ovej podpory umožňujúcej efektívny systém stránkovania na žiadosť, používa sa virtualizačná technika segmentácie na žiadosť. Program sa v tomto prípade zavádza do pamäte po segmentoch, ktoré sú predmetom výmeny. Pri odkaze na segment, ktorý nie je v pamäti, sa vygeneruje prerušenie pre výpadok segmentu. Správa pamäte nájde pre požadovaný segment vhodný úsek v pamäti a presunie ho tam. Využíva pritom striasanie. Segmentácia na žiadosť má silnejšie väzby na štruktúru programu a minimalizuje vnútornú fragmentáciu. Nevýhodou je nebezpečenstvo vonkajšej fragmentácie.
==5. Záver==
Virtuálna pamäť robí prácu programátorov oveľa jednoduchšou. Nezáleži na tom koľko pamäte aplikácia potrebuje, bude sa správať ako keby mala prístup k hlavnej pamäti požadovanej veľkosti a jej dáta budú uložené do virtuálneho pamäťového priestoru. Programátor može kompletne ignorovať potrebu správy presunu dát medzi rôznymi druhmi pamäte. Ak však programátor chce zabrániť častému swapovaniu, mal by venovať pozornosť minimalizáciu počtu blokov pamäte, ku ktorým sa pristupuje často.
▲== Implementácia VM v OS Linux ==
▲Virtuálna pamäť v operačných systémoch Linux je implementovaná prostredníctvom stránkovania. V prípade použitia 32 bitovej architektúry systému je možné adresovať 4GB fyzickej pamäte (232). V prípade, že procesor obsahuje implementáciu správy pamäte (MMU – Memory Management Unit), podporuje koncept virtuálnej pamäte. V tomto prípade sú linuxovým kernelom vytvárané tabuľky stránok (page tables), ktoré mapujú virtuálne adresy na fyzické adresy. Znamená to, že každý proces v systéme môže adresovať až 4GB pamäte, pričom z pohľadu procesu, je on sám jediným procesom bežiacim v systéme.
==6. Zdroje==
▲Mapovanie virtuálnych adries na fyzické adresy sa vykonáva prostredníctvom linuxového kernelu. Pri vytvorení nového procesu (pomocou fork()), kernel vytvára novú sadu tabuliek stránok (page tables) pre vytvorený proces. Referenčné adresy pre proces sú virtuálnymi adresami. Nie sú nutne namapované na zhodné fyzické adresy v pamäti. Virtuálna adresa je odovzdaná správe pamäte (MMU), ktorá ju skonvertuje na fyzickú adresu založenú na tabuľkách vytvorených kernelom. Teda, dva rôzne procesy sa môžu odkazovať na rovnakú adresu (napr. 0x08329), ale v skutočnosti sa odkazujú na dve odlišné adresy v závislosti od tabuliek stránok.
http://en.wikipedia.org/wiki/Virtual_memory
http://www.linux-tutorial.info/modules.php?name=Tutorial&pageid=322
http://www.science.unitn.it/~fiorella/guidelinux/tlk/node33.html
http://kerneltrap.org/node/2450
Operačné systémy, Martincová Penka, Grondžák Karol
[[Kategória:Informatika]]
|