p8mm/p8mm.d 21. listopadu

Podobné dokumenty
09. Memory management. ZOS 2006, L.Pešička

Operační systémy. Přednáška 7: Správa paměti I

Operační systémy. Správa paměti (SP) Požadavky na SP. Spojování a zavedení programu. Spojování programu (linking) Zavádění programu (loading)

zos/p8mm.d 24. listopadu

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Při překrývání se využívá toho, že ne všechny moduly programu jsou vyžadovány současně. Jakmile skončí využívání jednoho

Přidělování paměti II Mgr. Josef Horálek

Systém adresace paměti

Operační systémy. Přednáška 8: Správa paměti II

ÚVOD DO OPERAČNÍCH SYSTÉMŮ. Správa paměti. Přímý přístup k fyzické paměti, abstrakce: adresový prostor, virtualizace, segmentace

2010/2011 ZS P i r i nc č py po ít č čů a PAMĚŤOVÝ ĚŤ SUBSYSTÉM z pohledu OS OS

Paměťový podsystém počítače

4 Správa paměti. 4.1 Základní správa paměti

Procesy a vlákna (Processes and Threads)

Principy operačních systémů. Lekce 2: Správa paměti

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Operační systémy 2. Přednáška číslo 2. Přidělování paměti

08. Deadlock Přidělování paměti. ZOS 2006, L. Pešička

Struktura a architektura počítačů (BI-SAP) 11

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Přidělování paměti I Mgr. Josef Horálek

Management procesu I Mgr. Josef Horálek

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

Logická organizace paměti Josef Horálek

Principy operačních systémů. Lekce 3: Virtualizace paměti

požadovan adované velikosti a vlastností Interpretace adresy POT POT

3. Počítačové systémy

Přidělování zdrojů (prostředků)

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy)

2.9 Vnitřní paměti. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

Memory Management vjj 1

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Memory Management vjj 1

IUJCE 07/08 Přednáška č. 6

Přerušovací systém s prioritním řetězem

Pamět ová hierarchie, virtuální pamět. doc. Ing. Róbert Lórencz, CSc.

Přidělování CPU Mgr. Josef Horálek

Metody připojování periferií BI-MPP Přednáška 2

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Činnost počítače po zapnutí

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Principy počítačů a operačních systémů

TÉMATICKÝ OKRUH Počítače, sítě a operační systémy

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Matematika v programovacích

Procesy. Procesy Přepínání kontextu (proc_ctxsw) Postup:

Virtualizace. Lukáš Krahulec, KRA556

PB002 Základy informačních technologií

Základní deska (1) Parametry procesoru (2) Parametry procesoru (1) Označována také jako mainboard, motherboard

Struktura programu v době běhu

Bootkity v teorii a praxi. Martin Dráb martin.drab@ .cz

Paměti a jejich organizace

Přednáška. Systémy souborů. FAT, NTFS, UFS, ZFS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Systém souborů Mgr. Josef Horálek

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Ukázka zkouškové písemka OSY

Přednáška. Správa paměti III. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Prohledávání do šířky = algoritmus vlny

Řízení IO přenosů DMA řadičem

Disková pole (RAID) 1

Architektura počítačů

Disková pole (RAID) 1

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Operační systémy 1. Přednáška číslo Souborové systémy

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

OPERAČNÍ SYSTÉMY VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ ÚVOD DO TEORIE OPERAČNÍCH SYSTÉMŮ. doc. Dr. Ing.

Architektura Intel Atom

Čísla, reprezentace, zjednodušené výpočty

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Operační systémy 2. Struktura odkládacích zařízení Přednáška číslo 10

Spojová implementace lineárních datových struktur

Operační systémy 1. Přednáška číslo Struktura odkládacích zařízení

Pohled do nitra mikroprocesoru Josef Horálek

Mezipaměti počítače. L2 cache. L3 cache

Katedra informatiky a výpočetní techniky. 10. prosince Ing. Tomáš Zahradnický doc. Ing. Róbert Lórencz, CSc.

Paměti. Paměť je zařízení, které slouží k ukládání programů a dat, s nimiž počítač pracuje

OS Správa paměti. Tomáš Hudec.

ZOS OPAKOVÁNÍ. L. Pešička

ORGANIZACE A REALIZACE OPERAČNÍ PAMĚTI

Principy operačních systémů. Lekce 1: Úvod

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Základní deska (1) Označována také jako mainboard, motherboard. Deska plošného spoje tvořící základ celého počítače Zpravidla obsahuje:

Počítač jako prostředek řízení. Struktura a organizace počítače

1. Databázové systémy (MP leden 2010)

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Pokročilé architektury počítačů

Paměťová hierarchie. INP 2008 FIT VUT v Brně

Tonda Beneš Ochrana informace podzim 2011

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Více o konstruktorech a destruktorech

SÁM O SOBĚ DOKÁŽE POČÍTAČ DĚLAT JEN O MÁLO VÍC NEŽ TO, ŽE PO ZAPNUTÍ, PODOBNĚ JAKO KOJENEC PO PROBUZENÍ, CHCE

Pamět ová hierarchie, návrh skryté paměti 2. doc. Ing. Róbert Lórencz, CSc.

Vnitřní a vnější paměti Část: vnitřní paměti

Operační systémy. Přednáška 9: Správa paměti III

Architektura procesoru ARM

Transkript:

pmm/pmm.d 21. listopadu 2002 1 KIV/ZOS 2002/2003 Přednáška Správa hlavní paměti ==================== * ideální přání programátora - mít nekonečně velkou a rychlou pamět a levnou, která je zároveň perzistentní, tj. uchová obsah po vypnutí * taková pamět ale neexistuje * většina počítačů má hierarchii pamětí - malé množství rychlé cache - desítky až stovky MB středně rychlé a středně drahé RAM - desítky až stovky GB na pomalých, ale levných a perzistentních discích * část OS, která spravuje pamět se nazývá správce paměti - udržuje informaci, které části paměti se používají a které jsou volné - alokuje pamět procesům podle potřeby (např. jako důsledek Pascalského new nebo malloc v jazyce C) - zařazuje pamět do volné paměti po uvolnění procesem (např. po release v Pascalu nebo free v jazyce C) * v této části probereme různé mechanismy správy paměti * postupně od nejjednodušších ( program má veškerou pamět ) po propracovaná schémata (např. stránkování se segmentací ) * mechanismy pro správu paměti lze rozdělit do dvou kategorií - program je v paměti po celou dobu běhu - základní mechanismy - programy jsou přesouvány mezi hlavní pamětí a diskem - mechanismy s odkládáním * nejdříve probereme základní mechanismy - jsou jednodušší Základní mechanismy pro správu paměti ===================================== * základní mechanismy = správa paměti bez odkládání a stránkování Jednoprogramové systémy bez odkládání a stránkování --------------------------------------------------- * nejjednodušší - spouštíme pouze jeden program v jednom čase * uživatel zadá příkaz, OS zavede odpovídající program do paměti * dovoluje procesu použít veškerou pamět, kterou nepotřebuje OS * po skončení procesu je možné spustit další proces * jako příklad tři varianty, jak může vypadat rozdělení paměti: - OS je ve spodní části adresního prostoru v RAM, dříve na minipočítačích apod. - OS je v horní části adresního prostoru v ROM - např. zapouzdřené systémy - OS je v RAM, ovladače v ROM, dříve osobní počítače (MS DOS v RAM, BIOS v ROM) free/program OS in RAM 0FFFFh 0 OS in ROM free/program 0FFFFh a) b) c) 0 drivers in ROM free/program OS in RAM 0FFFFh 0 Multiprogramování s pevným přidělením paměti --------------------------------------------

pmm/pmm.d 21. listopadu 2002 2 * většina současných systémů dovoluje paralelní nebo pseudoparalelní běh více procesů = multiprogramování * např. kvůli současné práci více uživatelů, maximálnímu využití CPU apod. * nejjednodušší schéma - rozdělit pamět na n oblastí (mohou být i různé velikosti) - v historických systémech se provádělo např. ručně při startu stroje - po načtení úlohy do oblasti je obvykle část oblasti nevyužitá - proto snaha umístit úlohu do nejmenší oblasti, do které se vejde * několik strategií: 1. více front, každá úloha do fronty nejmenší oblasti, kam se vejde 2. jedna fronta - po uvolnění oblasti z fronty vybrat největší úlohu, která se vejde processes processes common queue separate queues * v případě (1) se může stát, že je prázdná oblast, která se nevyužije, protože úlohy čekají na jiné oblasti * algoritmus (2) diskriminuje malé úlohy, ale přitom je obvykle dobré poskytnout malým úlohám nejlepší službu - jedno řešení je vždy mít malou oblast, kde mohou běžet malé úlohy - druhé řešení je mít s každou úlohou ve frontě sdružen čítač přeskočení který bude zvětšen při každém přeskočení úlohy; po dosažení mezní hodnoty už nesmí být úloha přeskočena Systém s pevným rozdělením paměti (Multiprogramming with Fixed Number of Tasks) se používal např. v systému OS/360. Poznámka (multiprogramování a velikost paměti)... * multiprogramování také zvyšuje využití CPU - předpokládejme, že proces stráví část p svého času čekáním na dokončení I/O - při n procesech bude pravděpodobnost, že všech n procesů čeká na dokončení I/O pˆn - tj. využití CPU je u = 1 - pˆn - např. pokud proces tráví 0% času čekáním, pak p=0.: n=1 => u=0.2 (20% času CPU využito) n=2 => u=0.36 (36%) n=3 => u=0. (9%) n= => u=0.590 (59%)... n je tzv. stupeň multiprogramování (Pozor, je to zjednodušení, protože předpokládáme, že procesy běží navzájem nezávisle, což při jednom CPU není pravda.) * při multiprogramování je nutné mít všechny procesy (alespoň částečně) zavedeny v paměti, jinak neefektivní * výše uvedený předpoklad o výkonnosti stačí pro odhad potřebné velikosti paměti * např. předpokládejme počítač s MB RAM, os=16 MB a každý

pmm/pmm.d 21. listopadu 2002 3 uživatelský program MB (tj. max. programy v paměti) * pokud čekání na I/O 0% času, je využití CPU u = 1-0.ˆ = 0.590 * přidáním dalších 16 MB bychom zvýšili stupeň multiprogramování na, využití CPU u = 1-0.ˆ = 0.227 * přidáním dalších 16 MB na 12 procesů, u = 0.9313 * tj. prvním přidáním zvýšíme průchodnost cca 1.x (tj. o 0%), druhým přidáním 1.12x (tj. o 12%) - druhé přidání paměti se asi nevyplatí Multiprogramování s proměnnou velikostí oblasti ----------------------------------------------- * každé úloze je přidělena pamět podle požadavku * obsazení paměti se postupně mění, jak úlohy přicházejí a končí Příklad: new = proces vytvořen end = proces ukončen A A A D D D B B B B E C C C C C 1. new A 2. new B 3. new C. end A 5. new D 6. end B 7. new E * hlavní rozdíl od pevných oblastí - počet, velikost, umístění oblastí se mění s časem * zlepšuje využití paměti - nejsme omezeni existujícími oblastmi * komplikuje alokaci/dealokaci paměti * postupem může vznikat mnoho malých volných oblastí ( děr ) * teoreticky možné přesunout všechny procesy směrem dolů - kompakce paměti (memory compaction) * kompakce je ale drahá (např. pokud přesun 1 byte 10 ns, 256 MB 2.7 sec) * proto se obvykle neprovádí, pokud není k dispozici speciální HW * OS musí vědět, která pamět je volná a která alokovaná * nejpoužívanější způsoby zajištění správy paměti jsou: - pomocí bitových map - pomocí seznamů - buddy systems. Správa paměti pomocí bitových map... * pamět rozdělena do alokačních jednotek stejné délky (velikost od několika bytů do několika KB) * s každou alokační jednotkou sdružen 1 bit (např. 0 = volno, 1 = obsazeno) A B C 0 1 1 1 0 0 1 1 1 1 0 0 1 1 * menší alokační jednotky = větší bitmapa (a obráceně) * větší alokační jednotky = více nevyužité paměti, protože velikost procesu nebude přesně násobek alokační jednotky Například při velikosti alokační jednotky byty ( bitů) bude bitová

pmm/pmm.d 21. listopadu 2002 mapa zabírat 1/33 paměti, tj. ani při malé alokační jednotce není neúnosné. * výhoda - konstantní velikost bitmapy * nevýhoda - pokud požadujeme úsek paměti velikost N alokačních jednotek, musí se v bitmapě vyhledat N po sobě následujících nulových bitů - drahá operace - proto se v praxi příliš často nepoužívá. Správa paměti pomocí seznamů... * myšlenka udržovat seznam alokovaných a volných oblastí ( procesů a děr ) * každá položka seznamu obsahuje: - informaci, zda se jedná o proces (P) nebo díru (H) - počáteční adresu oblasti - délku oblasti hole starts at 0 size is 10 A B C * práce se seznamem - pokud proces skončí, P se nahradí H - pokud jsou 2H vedle sebe - sloučí se * seznam je dobré mít seřazený podle počáteční adresy oblasti * je lepší mít jako dvojitě vázaný seznam - známe polohu nové H, podíváme se zda je předchozí nebo následující položka také H (pokud ano, sloučíme) Jak alokovat pamět pro procesy? Pokud jsou procesy a díry udržovány v seznamu seřazeném podle adresy oblasti, můžeme pamět pro procesy alokovat některým z následujících způsobů: * algoritmus first fit, česky první vhodná - nejjednodušší, prohledávání seznamu dokud se nenajde dost velká díra - díra se rozdělí na část pro proces a nepoužitou oblast (kromě nepravděpodobného případu, že sedne přesně) - algoritmus je rychlý, protože prohledává co nejméně. * algoritmus next fit, česky další vhodná - malá změna - prohledávání začne tam, kde skončilo předchozí - simulace ukázaly, že next fit je jen o málo horší než first fit * algoritmus best fit, česky nejmenší vhodná nebo nejlepší volná - prohledá celý seznam, vezme nejmenší díru, do které se proces vejde - algoritmus je pomalejší (prohledává celý seznam) - podle simulací také více ztracené paměti než first fit nebo next fit, protože zaplňuje pamět malými nepoužitelnými dírami. Můžeme přemýšlet o variantě worst fit (vždy vybere největší díru), simulace však ukázaly, že to není dobrá myšlenka. Urychlení algoritmů: * výše uvedené algoritmy alokace mohou být urychleny oddělenými seznamy pro proces a díry, za cenu složitosti a rychlosti při dealokaci - při alokaci prohledáváme pouze seznam děr - při dealokaci musí být uvolněná oblast přesunuta ze seznamu procesů do seznamu děr - někdy se ale přesto vyplatí (např. v případě alokace paměti pro data přicházející od I/O zařízení - alokace musí být rychlá) * další optimalizace algoritmu best fit

pmm/pmm.d 21. listopadu 2002 5 - pokud oddělené seznamy, seznam děr může být podle velikosti (od nejmenší do největší) - při nalezení první vhodné víme, že je nejmenší vhodná - stejně rychlé jako first fit, ale vyšší režie na dealokaci (sousední díry nemusí být sousední v seznamu) Pokud jsou známy další vlastnosti (resp. pravděpodobnost distribuce požadovaných vlastností) jsou možné další algoritmy. Poznámka pro zajímavost (algoritmus quick fit)... Algoritmus quick fit udržuje samostatné seznamy pro díry některých častěji požadovaných délek. Jako centrální datovou strukturu můžeme mít tabulku, jejíž první položka ukazuje na hlavu seznamu děr velikosti KB, další KB,... např. díry ostatních velikostí mohou být v samostatném seznamu. Alokace požadované velikosti je velmi rychlá, ale opět je obtížné sdružování sousedů. * jak ušetřit pamět - místo samostatného seznamu děr mohou být využity díry - první slovo díry může obsahovat velikost díry, druhé ukazatel na na další díru - takto funguje např. alokátor paměti pro proces v jazyce C pod UNIXem (používá algoritmus next fit, viz příklad.7 v [Kernighan & Ritchie]) Poznámka (asymetrie mezi procesy a dírami) Dvě sousedící volné oblasti (H) se sloučí, zatímco dva procesy (P) se nesloučí - při normálním běhu je počet H poloviční oproti počtu P. Mechanismus buddy system... * mějme seznamy volných bloků velikosti 1, 2,,, 16... alokačních jednotek až do seznamu bloků velikosti celé paměti * na začátku veškerá pamět volná, všechny seznamy jsou prázdné kromě seznamu obsahujícího 1 položku velikosti paměti * např. alokační jednotka 1 KB, pamět velikosti 6 KB (7 seznamů) * přijde-li požadavek, zaokrouhlí se nahoru na mocninu 2 (např. požadavek na 7 KB se zaokrouhlí na KB) * blok velikosti 6 KB se rozdělí na 2 bloky velikosti KB, tzv. buddies * protože ještě moc velké, jeden z nich (ten s nižší adresou) se rozdělí na 2 bloky 16 KB, jeden z nich na 2 bloky KB, jeden z nich alokován 6 16 16 16 16 16 * požadavek na 5 KB (tj. KB), je přidělen druhý KB blok * požadavek na 3 KB (tj. KB), další 16 KB blok se rozdělí na + K,

pmm/pmm.d 21. listopadu 2002 6 nižší K blok se rozdělí na + K, nižší se přidělí (tj. nejmenší dostatečně velký blok se rozdělí) * uvolnění paměti: pokud jsou volné oba sousední bloky stejné velikosti ( buddies ), spojí se do jednoho většího bloku Neefektivní ve využití paměti (chci-li 9 K, dostanu 16 K), ale rychlý: * alokace paměti - vyhledání v seznamu dostatečně velkých děr * slučování - vyhledání buddy. Výše uvedená schémata (pevné přidělení, proměnné oblasti) se používala u dávkových systémů. Relokace a ochrana ------------------ Při multiprogramování nastávají dva problémy: 1) programy poběží na různých adresách v paměti - relokace 2) pamět programů musí být chráněna před zasahováním jiných programů - ochrana. Relokace při zavedení do paměti... * překlad a sestavení programu - většina aplikací je napsaných v vysokoúrovňovém jazyce - SW systémy většího rozsahu jsou rozděleny do modulů - musejí být přeloženy do strojově specifické verze - výsledkem překladu jsou tzv. objektové moduly, instrukce jsou přeloženy do číselných hodnot, ale zůstávají reference (odkazy) na adresy (adresy proměnných, procedur a fcí) - výsledný program vznikne pomocí sestavení (linking) modulů a knihoven - při sestavení se řeší hlavně externí reference:. všechna místa referencí se sdruží do seznamu. ve chvíli, kdy se adresa stane známou, vloží se na všechna místa, která ji používají - tj. symbolické odkazy se převedou na číselné hodnoty - adresy - výsledek - spustitelný program * komplikace při více programech v paměti - představme si, že první instrukcí programu je volání podprogramu na adrese 66 (call 66) - pokud je program umístěn v oblasti začínající od adresy 1000, musí ve skutečnosti provést call 1066 (podobně se posunou všechny ostatní odkazy) * jedno možné řešení je modifikovat instrukce programu při zavedení do paměti - linker musí do spustitelného programu přidat seznam nebo bitmapu označující, co jsou adresy (které musejí být relokovány) - při zavádění programu do paměti se ke každé adrese přičte adresa začátku oblasti call A call B... CALL 55 CALL 66... other program A:... B:... 55 66 1000... 1055 1066

pmm/pmm.d 21. listopadu 2002 7 Relokace při zavedení programu do paměti se nazývá {statická relokace}. Tímto způsobem pracoval např. OS/MFT fy IBM. Poznámka pro zajímavost (ochrana paměti při statické relokaci) * výše uvedené schéma neřeší problém ochrany paměti, tj. proces by mohl zasahovat do paměti jiných procesů * např. IBM 360 řešilo ochranu takto: - pamět rozdělena do bloků velikosti 2 KB - s každým blokem HW sdružen bitový kód ochrany - PSW procesoru obsahuje bitový klíč - při pokusu o přístup k paměti jejích kód ochrany se liší od klíče v PSW nastane výjimka - kód ochrany a klíč může měnit pouze OS (privilegované instrukce) - výsledek - uživatelské procesy nemohou zasahovat do paměti jiných procesů nebo do OS Mechanismus báze a limitu... * mezi CPU a pamět vložíme tzv. jednotku správy paměti (MMU) * tu vybavíme dvěma registry - nazveme báze a limit * do báze zavedeme počáteční adresu oblasti * do registru limit zavedeme velikost oblasti * fce MMU - dostává adresy od CPU, převádí na adresy do fyzické paměti - nejprve zkontroluje, zda adresa není > limit - je => výjimka - není => k adrese přičte bázi * např. pokud báze=1000 a limit=60 - adresa 55 -> ok, výsledek=1055 - adresa 66 -> není ok, výjimka * tomuto (a podobným) mechanismům se říká {dynamická relokace}, protože se provádí dynamicky za běhu * nastavení báze a limitu může měnit pouze OS (privilegované instrukce) Např. 06 používá slabší variantu tohoto schématu, bázové registry (= segmentové registry DS, SS, CS, ES), nemá limit. Správa paměti s odkládáním ========================== * pro dávkové systémy můžeme považovat výše uvedené způsoby organizace paměti za přiměřené (jednoduchost, efektivita) * systémy se sdílením času - odlišná situace: uživatelé mají obvykle spuštěno více procesů, než kolik se jich vejde současně do paměti * používají se dvě strategie: - jednodušší - mechanismus odkládání celých procesů, angl. swapping. nadbytečné procesy se odloží na disk. v paměti je místo - proces se zavede z disku do paměti. mechanismus odkládání celých procesů používal například původní systém UNIX Version 7 - složitější - virtuální pamět - procesy nemusejí být zavedeny v paměti celé * nejprve popíšeme mechanismus odkládání celých procesů * problém - kolik paměti má být procesu alokováno? * pokud je proces vytvořen s pevnou velikostí, je alokace jednoduchá - alokuje se přesně kolik je zapotřebí * ve většině současných programovacích jazycích data procesu mohou růst - pro proces je alokováno o něco více paměti než bezprostředně potřebuje - při požadavku na pamět může růst

pmm/pmm.d 21. listopadu 2002 - pokud proces potřebuje překročit alokovaný prostor, můžeme:. přesunout proces do dostatečně velké díry. překážející proces odložit a tím vytvořit prostor pro růst procesu. odložit žadatele o pamět, až bude prostor tak znovu zavést a alokovat prostor pro růst.. proces zrušit (to se nám nelíbí, ale nic jiného nám nezbyde např. pokud proces nemůže růst v paměti a odkládací oblast na disku je plná) * pokud procesy mají dva rostoucí segmenty (data a zásobník), nabízí se možnost, aby rostly proti sobě - při překročení velikosti může být proces opět přesunut, odložen nebo zabit. Alokace odkládací oblasti... * bud po dobu běhu programu, při skončení dealokována * nebo při každém odložení * používají se stejné algoritmy jako pro přidělení paměti, velikost oblasti na disku je ovšem zaokrouhlena nahoru na násobek alokační jednotky disku Poznámka: Výše uvedené algoritmy se v současných systémech používají pro alokaci paměti uvnitř jádra nebo uvnitř procesu. Příklad: Jádro systému Linux běží ve fyzické paměti, pro správu paměti jádra používá buddy system. Příklad: Fce malloc(3) v jazyce C žádá o více paměti a tu pak přiděluje např. algoritmem first fit. V současných systémech se uvedené algoritmy se nepoužívají pro alokaci paměti procesům, protože je zastupuje mechanismus virtuální paměti. Algoritmy mají ovšem obecnější platnost a lze je používat i v jiných kontextech. Příklad: Linux spravuje pomocí odkládací prostor pomocí bitové mapy algoritmem next fit. Virtuální pamět =============== * už před dlouhou dobou problém, že programy jsou větší než dostupná fyzická pamět - 2 způsoby řešení: 1. mechanismus překrývání (overlays) 2. virtuální pamět. 1. překrývání (overlays): ------------------------- * program rozdělen na části, například moduly * nejjednodušší varianta: při startu spuštěna část 0, při svém skončení zavede část 1,... * problém - časté zavádění některých modulů, proto některé systémy složitější: - více překryvných modulů + data v paměti současně - moduly zaváděny podle potřeby, mechanismus odkládání (podobně jako u odkládání procesů) * mechanismus zavádění zařizoval OS, ale rozdělení programů i dat na části programátor

pmm/pmm.d 21. listopadu 2002 9 - vhodné rozdělení do modulů ovlivňuje výkonnost, značná komplikace - pro každou úlohu nutné nové rozdělení => snaha hodit to na počítač (aby to zařídil) * některé systémy pokusy o automatickou segmentaci, nevede k cíli * virtuální pamět (Fortheringham 1961) 2. virtuální pamět ------------------ * potřebujeme počítač s velmi rozsáhlým, prakticky téměř neomezeným adresovým prostorem * kdybychom celý prostor realizovali skutečnou pamětí - neúměrně drahé * chceme, aby ve skutečné paměti realizována pouze část adresového prostoru (zbytek může odložen na disku) * kterou část mí v paměti? - tu, kterou právě potřebujeme Poznámka: Jako mnoho jiných technických objevů má i tato myšlenka své předchůdce v historii. Podobný nápad ušetřil konšelům města Kocourkova spoustu peněz za koberce, když se chystali uvítat ve městě krále. Neznámý génius přišel tehdy na to, že k (virtuálnímu) pokrytí celé cesty od městské brány až k radnici stačí všeho všudy dva (fyzické) koberce. Když král jeden z nich přejde, musí ho dva sluhové (sloužící coby operační systém) přenést dopředu dříve, než král dojde na konec druhého. * tj. jinými slovy - budeme chtít, aby fyzická pamět sloužila coby cache virtuálního adresního prostoru procesů * procesor používá tzv. virtuální adresy (adresy ve virtuálním pamět ovém prostoru) * pokud je požadovaná část virtuálního pamět ového prostoru ve fyzické paměti, MMU převede virtuální adresu na fyzickou adresu => přístup k paměti * pokud není ve fyzické paměti - OS jí musí přečíst z disku * čtení z disku je I/O => CPU může být dána jinému procesu * většina systémů virtuální paměti používá techniku nazývanou stránkování (paging) Mechanismus stránkování ======================= * program používá (CPU generuje) virtuální adresy * potřebujeme rychle zjistit, zda je požadovaná adresa v paměti * pokud je, musíme převést virtuální adresu na fyzickou * obojí musí být co nejrychlejší (provádí se při každém přístupu k paměti) * jak převést virtuální adresu na fyzickou? - virtuální adresový prostor rozdělí na stránky (pages) pevné délky

pmm/pmm.d 21. listopadu 2002 10 - délka stránky mocnina 2 - nejčastěji KB, běžně se používají od 512 B do KB - fyzická pamět rozdělena na části stejné délky - rámce (page frames, česky také stránkové rámy, regály - terminologie je i v angličtině nejednotná) - rámec může obsahovat právě jednu stránku - na známém místě v paměti je uložena mapa - tabulka stránek - tabulka stránek poskytuje mapování virtuálních stránek na rámce frame 5 frame frame 3 frame 2 frame 1 frame 0 physical memory page page 3 page 2 page 1 page 0 virtual memory swap area on a disc * mechanismus převodu: virtuální adresa.. VA fyzická adresa... FA číslo stránky... str offset... offset číslo rámce... ramec 1. virtuální adresu rozdělíme na číslo stránky a offset: str = VA div 096 offset = VA mod 096 2. číslo stránky převedeme na číslo rámce pomocí tabulky stránek: Například tabulka stránek může vypadat takto: tab_str[0] = 2 tab_str[1] = 5 tab_str[2] = -- (stránka není mapována) tab_str[3] = 3 Je-li VA=3, pak: str = 0 offset = 3 ramec = tab_str[str] = tab_str[0] = 2 3. z čísla rámce a offsetu sestavíme fyzickou adresu: FA = ramec*096 + offset = 2*096 + 3 = 195 * nechceme dělit, proto velikost stránky mocnina dvou - 2ˆ12 = 096 ( KB) - nejnižších 12 bitů virtuální adresy = relativní adresa od počátku stránky (offset) - svrchní bity virtuální adresy = pořadové číslo stránky ve virtuálním adresovém prostoru => index do tabulky stránek - offset není nutné transformovat, je i relativní adresou uvnitř rámce (12 bitů)

pmm/pmm.d 21. listopadu 2002 11 3 = 0000 000000000011 = str=0, offset=3 -> 0010 000000000011 = ramec=2, offset=3 CPU virtual address physical address physical memory page table - převod: podle čísla stránky MMU najde číslo rámce, to vyšle na sběrnici Poznámka: tento výklad je poněkud zjednodušený: 1. tabulky stránek mohou být velkého rozsahu; např. adresa bitů -> 1 mil. stránek, ne všechny obsazeny - různé optimalizace uložení 2. přístup musí být rychlý - přístup k paměti úzké místo není možné pokaždé přistupovat k paměti - různá HW řešení, například kopie části tabulky v MMU * fyzická pamět není nic o rámcích, rozdělení jen v MMU Adresa 192 = (2, 0) nelze! - není mapování * není mapována - způsobí událost výpadek stránky - výpadek stránky způsobí výjimku, tu zachytí OS - OS iniciuje zavádění stránky a přepne na jiný program - po zavedení stránky OS vytvoří pro mapování - program může pokračovat => dva problémy: kam stránku zavést a odkud?