Správa paměti

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Správa paměti (anglicky memory management) je v informatice soubor metod, které operační systém používá při přidělování operační paměti jednotlivým procesům, které jsou v počítači spuštěny. Může zajišťovat i následné uvolňování paměti (když už proces paměť nepotřebuje), nastavovat ochranu paměti a eventuálně i správu adresace paměti. Všechny tyto činnosti v operačním systému zajišťuje modul správy paměti. Pro některé z výše uvedených úkolů je nutná hardwarová podpora uvnitř procesoru.[1]

Garbage collection je automatizovaná správa paměti, která je součástí programu nebo jeho běhového prostředí a umožňuje automaticky uvolňovat již nepoužívanou paměť (na rozdíl od ruční správy paměti).

Úvod[editovat | editovat zdroj]

Je-li operační paměť reprezentována pamětí s přímým přístupem označujeme adresový prostor jako fyzický adresový prostor (FAP). Velikost tohoto prostoru je omezena bud fyzickou velikostí paměťových modulů a nebo velikostí adresy tj. adresa o velikosti n bitů umožňuje adresovat 2 na n-tou paměťových míst.

Jednodušší procesory umožňují adresovat pouze paměť s přímým přístupem, tedy adresovat pouze fyzický adresový prostor. V dnešní době velká část procesorů, spíš většina jich umožňuje adresovat i tzv. logické adresové prostory. Jedná se o tzv.Virtuální paměť jde v podstatě o speciální správu paměti, která umožňuje přistupovat k operační paměti RAM stejně jako k místu na pevném disku, což umožňuje na úkor snížení výkonu snadno rozšířit kapacitu paměti počítače.

Úkoly správy FAP[editovat | editovat zdroj]

  • přidělování paměťových regionů na požádání procesů
  • uvolňování paměťových regionů na požádání procesů
  • udržování informací o obsazení adresového prostoru
  • zabezpečení ochrany paměti – zabránění přístupu procesu k paměti mimo jeho přidělený region
  • u víceúlohových systémů musí podporovat střídavý běh více procesů či v minimálním případě mu nesmí bránit

Historie[editovat | editovat zdroj]

Počítače do 70. let minulého století disponovaly velmi malým množstvím paměti. Proto ani nároky na správu paměti nebyly vysoké, takže vlastně v podstatě ani žádná neexistovala. Později paměť přibývala a bylo v zájmu majitelů počítačů, aby byla co nejlépe využita. To vedlo ke snaze umisťovat do paměti počítače více programů a k následnému požadavku na oddělení jednotlivých částí paměti, aby si jednotlivé procesy ať už záměrně nebo omylem neškodily. V tomto okamžiku můžeme sledovat nástup skutečných operačních systémů a postupně i čím dál kvalitnější správy paměti, která byla podporována hardwarovou podporou uvnitř procesorů.

Metody přidělování paměti[editovat | editovat zdroj]

Každý proces potřebuje ke svému běhu přidělení určité části operační paměti. Proto má každý operační systém modul správy paměti, který zajišťuje přidělování a ochranu paměti. Podle implementace modulu správy paměti rozlišujeme:

  1. přidělování veškeré volné paměti
  2. přidělování bloků paměti pevné velikosti
  3. přidělování bloků paměti proměnné velikosti

Přidělování veškeré volné paměti [monilitická aplikační paměť][editovat | editovat zdroj]

Rozdělení paměti[editovat | editovat zdroj]

Při přidělování veškeré volné paměti[1] je paměť rozdělena na dva bloky tj. na dvě souvislé části jež jsou určeny počáteční adresou. První blok je přidělen rutinám jádra operačního systému a jeho datovým strukturám - tzv. paměť jádra z anglického Kernel memory. Druhý je pak přidělován na požádání ostatním procesům - tzv. aplikační paměť z anglického Application memory. Paměť jádra sdílí všechny procesy, protože rutiny jádra včetně jeho datových struktur jsou využívány veškerými procesy při vykonávání služeb operačního systému. Aplikační paměť je soukromého charakteru, tedy přístup k ní má pouze vlastník.

Princip činnosti[editovat | editovat zdroj]

Je-li paměť volná tzn. není-li alokována je přidělena procesu celá bez ohledu na požadovanou velikost, přičemž nesmí přesáhnout velikost bloku. V případě obsazené paměti jiným procesem je požadavek na přidělení odmítnut. Toto zamítnutí může mít fatální důsledky pro proces žádající o paměť. K alokování paměti vlastně dochází jen při spuštění procesu a proces ji využívá po celou dobu svého životního cyklu. K uvolnění dojde po ukončení života procesu.

Ochrana paměti[editovat | editovat zdroj]

Ochrana paměti je zde realizována pouze v případě ochrany paměti jádra pomocí tzv. bázového registru. V praxi jde o znemožnění použití nižších adres než je báze. V registru je uložena báze bloku aplikační paměti a paměť jádra leží tedy před tímto blokem. Proces tedy ani nemůže adresovat paměť jádra. Registr se nastavuje pomocí privilegované instrukce, která se může volat pouze v režimu jádra.

Využití[editovat | editovat zdroj]

Tato strategie správy paměti se jeden čas používala ve více úlohových systémech. Kdy byl tento princip jediného bloku v paměti rozšířen o možnost odkládání paměťového regionu do sekundární neboli odkládací paměti, např. pevný disk. Avšak obnova procesu z pevného disku je velice pomalá a proto je tato strategie v dnešních systémech téměř nepoužitelná. Jak je asi pochopitelné vzniká zde problém s nedostatečným využitím aplikační paměti. V praxi to znamená, že proces s malou velikostí zabere celou aplikační paměť.

  • operační paměť ISIS-2
    • nejdříve OS, pak proměnné a buffery a pak program
  • operační paměť CP/M
    • prvních 100H pro OS, pak paměť pro program a pak proměnné a buffery

Přidělování bloků paměti pevné velikosti [statická aplikační paměť] (Stránkování)[editovat | editovat zdroj]

OS MFT (Multitasking with Fixed number of Tasks). Aplikační paměť je při startu OS rozdělena na bloky, které lze alokovat samostatně. OS přidělí programu blok, jehož délka je větší nebo rovna nárokům tohoto programu. V paměti se může nacházet několik procesů současně. Jeden proces může zabírat i více nesouvislých bloků (bloky oddělené jiným blokem). Oproti tomu dochází k fragmentaci (špatné využití paměti), je potřeba znát nároky programu předem a u procesu, který má větší nároky než je velikost největšího bloku paměti nedojde k odstartování. Velikost s počtem bloků vycházejí z druhu aplikací, které mají být na daném operačním systému provozovány.

Adresování[editovat | editovat zdroj]

Nelze předem stanovit, kde (na jaké adrese) bude program uložen → program musí být relokabilní.

  • použití relokační tabulky
  • použití bázování a relativních skoků

Adresový prostor procesu[editovat | editovat zdroj]

Většinou se skládá ze tří regionů: kódového, datového a zásobníkového regionu. Kódový region většinou obsahuje kód programu. Datový region nese statické data programu. Vyžaduje jak zápis tak čtení a v některých systémech může změnit svoji velikost. Zásobníkový region já charakter LIFO a jsou zde obsaženy lokální datové proměnné a návratové adresy funkcí

Ochrana paměti[editovat | editovat zdroj]

  • Metoda mezních registrů – Užití dvou mezních registrů (nastavuje OS), které uvádějí nejnižší a nejvyšší dostupnou adresu. V limitním registru procesoru je uložena hodnota aktuálního paměťového regionu. Hodnota lokální adresy se porovnává s hodnotou limitního registru. Pokud je tato hodnota větší, následuje vyvolání výjimky – proces se pokouší zapsat mimo region.
  • Mechanismus zámků a klíčů – Rozdělení paměti na stránky o pevné velikosti. Každé je přidělen zámek (celé číslo). Ve speciálním registru procesoru je klíč. Ty stránky, které mají stejnou hodnotu zámku jako je hodnota klíče, může proces používat.

Přidělování bloků paměti proměnné velikosti [dynamická aplikační paměť] (Segmentace)[editovat | editovat zdroj]

Paměť není rozdělena na pevné bloky, ale programu je při jeho startu přidělena paměť podle nároků. Neboli se přidělí celý volný blok a to, co nepotřebuje, program vrátí. Při alokaci se vyhledá opět první přípustný blok, pokud je jeho velikost rovna či blízká požadavku je blok použit celý. Když dochází k uvolnění bloků je nutné provádět tzv. zcelování volných bloků. Vznikne-li souvislá řada 2 či 3 bloků jsou spojeny do jednoho.

Metody výběru bloku[editovat | editovat zdroj]

  • First fit - vybere se první blok kde je délka větší nebo rovna chtěné velikosti
  • Last fit - přidělí se poslední vyhovující
  • Worst fit - přidělí největší volný blok
  • (exact- or) worst-fit

Vybere buď blok o stejné velikosti, nebo pokud takový neexistuje největší existující

  • first-fit

První z řady. Projíždíš pro každé číslo celou řadu a hledáš první hodnotu do které se vejde

  • best-fit

Vybere buď blok o stejné velikosti, nebo nejlépe padnoucí (s nejmenší možnou velikostí)

Obsazení paměti[editovat | editovat zdroj]

Je v tomto případě realizováno na počátku každého bloku, informace zde tvoří jakousi hlavičku.

Ochrana paměti[editovat | editovat zdroj]

  • Metoda mezních registrů
  • Mechanismus zámků a klíčů
    • paměť je rozdělena na bloky stejné velikosti (4kB)
    • každému programu přidělíme zámek (celé číslo)
    • bloky patřící danému programu označujeme stejným číslem (zámek)
    • v CPU je speciální registr s číslem běžícího procesu programu (klíč)
    • CPU povolí jen typ operace s pamětí kde zámek=klíč
    • při porušení ochrany → vnitřní přerušení (zařídí OS)
    • speciální klíč 0 slouží OS (bez ochrany)
    • nastavení registru s klíčem je privilegovanou instrukcí
    • zámky jsou uloženy v RAM jako pole
    • metoda zámků a klíčů se používá dodnes

Reference[editovat | editovat zdroj]

  1. a b KOLÁŘ, Petr. Operační systémy [online]. Liberec: 2005-02-01. S. 38-53. Dostupné online.