Sunday, June 26, 2011

SW: Strankovanie, segmentacia a kombinovane techniky spravy pamate

Jednoduche strankovanie, sa pouziva v strankovanej pamati. Hlavna pamat je v tomto pripade rozdelena na male useky rovnakej velkosti, ktore nazyvame ramce (spomente na APS). Program je zase rozdeleny na male useky rovnakej velkosti - stranky. Velkost stranky a ramca je rovnaka a programy su nahravane do ramcov hlavnej pamate. OS si musi pamatat ramce pridelene jednotlivym procesom. To je zariadene pomocou page table (http://mycvut.blogspot.com/2011/06/hw-virtualna-pamat.html) a musi si pamatat aj volne ramce v pamati.

Virtualnu pamat pouzivame kvoli miestu v pamati, ktore je limitovane. Pomocou virtualnej pamate je proces rozdeleny na mensie kusky a do pamate vkladame len tie kusky, ktore su aktualne pouzivane. Zvysok procesu je ulozeny na disku.

Virtualna pamat je vacsinou kombinovana so strankovanim a to jednourovnovym alebo viacurovnovym. Proces potom pouziva virtualne adresy, ktore tvoria virtualny adresovy priestor virtualnej pamate. Tento priestor je rozdeleny na virtualne stranky. Korespondujuce useky vo fyzickej pamati su nazyvane ramce stranok a su rovnakej velkosti, ako stranky.

Virtualnyu adresu na fyzicku preklada memory management unit. Pri page fault MMU zposobi, aby CPU poziadalo o nahranie stranky do ramca pamate. OS najprv musi uvolnit ramec (casovy princip/princip lokality ?).

Ak by sme pouzivali len jednu tabulku stranok pre proces, tak by sme sa mohli dostat do problemov s jej velkostou a preto pouzivame viacurovnove strankovanie. Proces zvycajne pouziva len podmnozinu adries svojho  virtualneho priestoru. V pamati staci mat len tie polozky tabulky stranok, ktore proces potrebuje pri preklade. Zvycajne sa pouziva delenie na 2 - 3 urovne, hoci teoreticky je tento pocet lubovolny (konecne cislo, pls :) ).

Teraz sme v situacii, kedy mame Top Level page table a potom stranky nizsej urovne. Virt. adresa, ktora dorazi obsahuje 3 polozky, super page table address, 2nd level page table address a offset. Tak sa dostaneme na 1 tabulku, z nej sa dostaneme na druhu, kde najdeme polozku a to prelozime na fyzicku adresu s offsetom, ktory len skopirujeme.

Page Table Entry obsahuje

  • page frame number 
  • present/absent bit - {1 | 0} => {v RAM | mimo RAM}
  • protection bit - su to 3 bity, reading, writing, executing
  • modified bit - ked je obsah stranky modifikovany, tak je nastaveny na 1 . Ak je uvolnovany - obsah stranky sa musi ulozit na disk, ak je modified bit = 1
  • referenced bit - zmeneny na 1, kedykolvek je k stranke pristupovane, pouziva sa algoritmami pre nahradu stranky. 
  • disabled bit - dolezity pre stranky, ktore su mapovane na registre I/O zar. 
Popri tabulke stranok sa puziva este invertovana tabulka stranok, ktora sa pouzije, ak sa informacia nenajde v page table. V tejto tabulke je na i-tej pozicii ulozena informacia o virtualnej stranke, ktora je nahrana v ramci i. 

Segmentace 
- virtualny adresovy prostor moze byt rozdeleny na niekolko segmentov. Segment je linearna postupnost adries, s dynamickou dlzkou a s vlastnym stupnom ochrany. Adresa segmentu - logicka adresa - sa sklada z cisla segmentu a offsetu. Cislo segmentu adresuje segment jednoznacne a offset sa zase iba kopiruje. Segmentacia je obvykle viditelna uzivatelovi. 

Segmentacia je pre programatora viditelna, narozdiel od strankovania, ktore je transparentne. Segmentacia je vhodna pre dynamicke struktury a modularitu. Strankovanie zase eliminuje externu fragmentaciu. 

A ked toto vsetko dame dokopy, tak dostaneme segmentaciu so strankovanim. Virtualny adresovy priestor je rozdeleny na niekolko segmentov. Kazdy segment sa sklada z rovnako velkych stranok, ktore su rovnako velke, ako ramce v hlavnej pamati.

Takze, ak dorazi adresa, tak dorazi virtualna adresa so segment #, page # a offsetom. Segment # urci polozku v segment page table, ktory urci page table, v ktorej pomocou page # najdeme najdeme spravny riadok s fyzickou adresou a pomocou offsetu dokazeme adresovat riadok v hlavnej pamati (v ramci).