Virtuálna pamäť: Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
Alexbot (diskusia | príspevky)
Riadok 81:
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 [[kernel]]om 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.
 
Linuxový kernel rozdeľuje 4GB virtuálneho adresného priestoru procesu na dve rovnaké časti – 3GB a 1GB. Nižšie 3GB virtuálneho adresného priestoru procesu sú prístupné ako užívateľský priestor (user-space), vyšší 1GB je rezervovaný pre virtuálne adresovanie kernelom a užívateľský proces tam zvyčajne nepristupuje. Virtuálna oblasť kernelu (3-4GB adresného priestoru) sú mapované na 1GB fyzickej pamäte. Zvyšné 3GB adresovateľnej fyzickej pamäte sú dostupné pre procesy.
 
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 mapované 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.