Správa paměti

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 „správce paměti“ (anglicky memory manager, MM). Pro některé činnosti je obvykle nutná hardwarová podpora v procesoru, kterou zajišťuje jednotka správy paměti (MMU).[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, čímž se myslí volání příslušné funkce v programu).

Úvod

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ě většina procesorů 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 programům a aplikacím, přistupovat k místu na pevném disku stejně jako k operační paměti RAM, což umožňuje (na úkor snížení výkonu) snadno rozšířit kapacitu paměti počítače.

Úkoly správy FAP

  • 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

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

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 [monolitická aplikační paměť]

Rozdělení paměti

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

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

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í

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í)

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í

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

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

  • 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)

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

  • 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

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

Ochrana paměti

  • Metoda mezních registrů
    • paměť je rozdělena na bloky různých velikostí (segmenty)
    • každému programu je přiřazena bázová adresa (privilegovanou operací)
    • program pracuje s tzv. logickou adresou (offset)
    • program nesmí adresou offsetu přesáhnout jemu přidělený adresovatelný limit
    • při porušení ochrany → vnitřní přerušení (zařídí OS)
    • metoda mezních registrů se běžně používá v architektuře x86
  • Stránkování
    • podporuje virtualizaci paměti, multitasking a sdílení paměti mezi procesy
    • proces pracuje s virtuální pamětí, jejíž velikost je rovna maximální možné adresovatelné hodnotě daného systému
    • paměť je rozdělena na bloky stejných velikostí (vyspělejší architektury ovšem podporují různé, avšak předem definované, velikosti bloků (např.: ARM) )
    • každý proces dostane přidělenou tabulku (tzv. primární tabulku), ve které pevně daný počet položek definuje:
      • překlad každé virtuální adresy na fyzickou adresu, nebo odkaz na tabulku vyšší úrovně – existuje-li překlad takové stránky pro proces, je tato část povinná
      • příznak existence stránky (stránka může být uložena na externím úložišti, nebo pro proces neexistuje (výpadek stránky) → zařídí OS)
      • přístupové práva (čtení, zápis, stránka obsahující spustitelný kód)
      • příznak umožňující položky ze stránky ukládat do mezipaměti procesoru
      • a další…
  • Mechanismus zámků a klíčů
    • paměť je rozdělena na bloky stejné velikosti (např. 4 KiB)
    • 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 operační paměti jako pole
    • metoda zámků a klíčů se používá dodnes

Reference

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

Externí odkazy

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.