Operační paměť, vlastnosti, přístupové metody
Operační paměť je volatilní (nestálá) vnitřní elektronická paměť číslicového počítače typu RWM-RAM, určená pro dočasné uložení zpracovávaných dat a spouštěného programového kódu. Tato paměť má obvykle rychlejší přístup, než vnější paměť (např. pevný disk). Tuto paměť může procesor adresovat přímo, pomocí podpory ve své instrukční síti. Strojové instrukce jsou adresovány pomocí instrukčního ukazatele a k datům se obvykle přistupuje pomocí adresace prvku paměti hodnotou uloženou v registru procesoru nebo je adresa dat součástí strojové instrukce.
Operační paměť je spojena s procesorem pomocí sběrnice, obvykle se mezi procesor a operační paměť vkládá rychlá vyrovnávací paměť typu cache, neboli paměť, která je přímo přístupná procesoru. Jedná se o nepostradatelný fyzický prostředek, který je spravován jednou z hlavních části operačního systému. Operační paměť je určená pro uchovávání kódu programů respektive procesů spolu s mezivýsledky a výsledky jejich činnosti. Zrovna tak je v operační paměti uchováván stav dalších prostředků a základní datové struktury jádra.
Vezmeme-li v potaz adresování operační paměti, lze zjednodušeně paměť chápat jako souvislý prostor paměťových buněk o nějaké velikosti. Tyto buňky jsou pak lineárně adresovány adresami pevné délky.
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 buď 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 podporují adresovat pouze paměť s přímým přístupem, tedy adresovat pouze fyzický adresový prostor. V dnešní době velká část procesorů umožňuje adresovat i logické adresové prostory. Jedná se o tzv. virtualizaci paměti respektive jde o neomezený počet logických adresových prostorů.
Ú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
Architektura operační paměti
- Johnn von Neumannova architektura, paměť je společná pro data i instrukce
- Harvardská architektura, existují dvě nezávislé paměti pro data a instrukce (časté využití je u mikrokontrolérů)
Metody správy
Monolitická paměť
Jedná se o nejednodušší zprávu operační paměti. FAP je zde rozdělen 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 tj. „Kernel memory“. Druhý je pak přidělován na požádání ostatním procesům tj. „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. Paměť procesů nebo-li aplikační paměť je soukromého charakteru, tedy přístup k ní má pouze vlastník.
Regulace je prováděna velice triviálně. 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 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 na stavuje pomocí privilegované instrukce, která se můžu volat pouze v režimu jádra.
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í nebo-li odkládací paměti, např. pevný disk. Bohužel 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ěť.
Statické bloky
edná se o jedno z možných řešení nedostatečného využít aplikační paměti. Aplikační paměť je rozdělena ne několik samostatných bloků, které lze alokovat samostatně. Tedy nepočítáme-li procesy odložené sekundární pamět,i maximální počet procesů je omezen počtem bloků. Jeden proces může zabírat i více nesouvislých bloků (bloky oddělené jiným blokem). Jedná se o bloky pevné velikosti, jejichž velikost bývá vzájemně rozdílná a počet s velikostí se stanovují při překladu operačního systému. Velikost s počtem bloků vycházejí z druhu aplikací, které mají být na daném operačním systému provozovány.
Strategie přidělování bloků je založena na stejném principu u čistě monolitické paměti s rozdílem, že žádajícímu procesu o přidělení paměti je přidělen blok o nejmenší velikosti o dostatečné velikosti. Informace o obsazení bloků jsou udržovány poli o stanovené velikosti.
Jelikož je aplikační paměť rozdělena na již zmíněné bloky je nutné zajisti jejich ochranu . Na tuto ochranu se používá tzv. limitní registr procesoru. 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.
Adresový prostor procesu se většinou 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í.
S těmito strategiemi založenými na statických blocích se lze setkat na úrovni správy paměti jádra. Jelikož lze požadavky rutin jádra odhadnout včetně jejich posloupnosti.
Dynamické bloky
Aplikační paměť je rozdělena na bloky jejichž velikost se dynamicky upravuje dle požadavků procesů . Před alokací prvního regionu tvoří paměť aplikačního prostoru jeden blok
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ý. V ostatních případech je blok rozdělen na dva jeden o požadované velkosti procesu a druhý zůstává jako volné místo. 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.
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 je opět realizována pomocí bázového a limitního registru. Nutné je velice pečlivě ochránit hlavičky jednotlivých bloků. Nevýhoda tohoto systému je velký sklon k fragmentaci paměti, respektive vzniku velkého množství volných malých nesouvislých bloků. Je to velký problém zejména u víceúlohových systémů kde žádosti o alokování a dealokování přicházejí v libovolném a nezávislém pořadí.
Fragmentace paměti se dá řešit tzv. setřásáním bloků. V praxi se jedná o soustřední volné paměti do jediného bloku většinou na konci paměti. Tato technologie má několik omezení. Musí existovat alespoň minimální technická podpora na úrovni procesoru, tedy podporou bázového registru. Všechny procesory však toto nepodporují, proto je nutné nuceně použít popisovače paměti. Není to zcela ideální řešení. Kdyby nebylo toto zajištěno mohlo by například dojít při zápisu řetězce do paměti k přesunu cílové paměti a většina programu by toto nezvládla. Dalším problémem je potřeba přímého přístupu do paměti a to je pak nutné zamknout celý region. Zamknutí brání dokonalému setřesení a je povoleno na dobu nezbytně nutnou. Zamknutí na nejmenší možný čas přináší v důsledku závislosti mezi procesy. Toto vede k degradaci systému, respektive při určité úrovni fragmentace dojde ke zvýšení režie systému a vzrůstu závislostí mezi procesů nad únosnou mez. Systém se zdánlivě zastaví.
Setřásání bloků bylo dříve používáno v kooperativních víceúlohových systémech(Windows 3, starší verze MacOS a Symbian).
Zdroj informací
www.wikipedia.cz
--Hmarek 11. 6. 2010, 08:27 (UTC)