- správce prostředků počítače, koordinátor, řídící složka
- cíle: uživatelská přívětivost, efektivní využití zdrojů, bezchybnost, spolehlivost
- více procesorů, společná paměť a hodinový signál
- výcejádrové systémy
- všechny procesory jsou si rovny
- některé procesory mají specifické funkce
- nemají společnou paměť a hodinový signál
- využívají komunikační kanály
- záleží na rychlosti odezvy
- pracují v reálném čase
- řízení strojů, monitoring
- přísné
- speciální OS, rozhoduje, jestli se proces stihne a podle toho jej zamítne nebo akceptuje
- tolerantní
- snažíme se dodržet limit, ale když se to nepovede, zas tak moc se nestane
- procesy s vyšší prioritou mají přednost před procesy s nižší prioritou
- mnohá omezení (velikost, cena, výdrž, výkon...)
- JCL (Job Control Language)
- job = program + data + řídící informace
- využití procesoru dřív nebylo efektivní
- zajištění stálého vytížení procesoru
- pokud se procesor uvolní, přepne se na zpracovávání jiné úlohy
- proces procesoru odebereme i v případě, pokud jej zpracovává moc dlouho
- rychle přepínáme mezi procesy, což vzbuzuje dojem paralelního běhu
- nutná ochrana procesů (jeden nesmí zasahovat do paměti druhého)
- I/O zařízení mají vlastní vyrovnávací paměť (buffer) -> CPU a I/O zařízení mohou pracovat paralelně, ale musí se synchronizovat
- snižuje dobu odezvy
- aktivní čekání -- vyplatí se pouze na velmi krátkou dobu
- loop > získej další instrukci > proveď instrukci > (je-li nastaven flag přerušení a je-li povoleno, proveď přerušení) > end loop
- přerušení -- uložení adresy aktuálně prováděného kódu a provedení kódu obslužné rutiny
- tabulka přerušení -- definice chování jednotlivých přerušení
- synchronní přístup -- nejdřív načteme a pak až použijeme, proces přichází ze stavu běžící do stavu čekající
- asynchronní přístup -- zahájíme načítání a pak můžeme dělat něco jiného, následně se ptáme, jestli už je to hotovo, pokud ne, nesmíme k datům přistupovat
- způsob rychlého přenosu dat mezi I/O a pamětí
- CPU požádá o přenos dat a po dokončení je o tom informován přerušením
RES -- rezidentní paměť, která nebyla odswapovaná (neodswapovaná fyzická paměť)
- přímá adresace
- volatilní (energeticky závislá)
- kapacita: stovky MB až desítky GB
- rychlost: nanosekundy
- rozšiřuje paměťovou kapacitu (velká kapacita)
- energeticky nezávislá
- pomalá
- rychlá & drahá
- ochrana paměti -- Memory management unit (jednotka správy paměti), báze a limit nastavené v registrech
- spravedlivé přidělení CPU -- podle časovače
- koordinace přístupu k I/O prostředkům
- běžný režim -- má jistá omezení (nemůže přistupovat k HW...)
- privilegovaný režim -- dostaneme se do něj přerušením
- jádro (nejdůležitější část, která běží v privilegovaném režimu)
- systémová volání -- spojovník mezi jádrem a uživatelskými procesy
- uživatelský proces (shell,... )
- vytváření, ukončování, potlačování, obnovování, synchronizace, komunikace procesů, deadlock
- program -- pasivní entita
- proces -- aktivní entita, spuštěný program, potřebuje procesor, paměť a soubory
- vlákno -- jeden proces se může skládat z více vláken (v Linuxu "task")
- jednotka plánování procesoru -- dříve proces, dnes vlákno
- alokace a dealokace paměti pro procesy
- OS nezajímá struktura souboru
- souborový systém -- má za úkol zajistit přístupová práva
- otevírání, vytváření a rušení souborů a adresářů, zálohování (metadata)
- cílem je jednotnost a jednoduchost
- speciální soubory (bloková nebo znaková zařízení) v UNIXu
- rychlost, buffery, kešování, spooling
- implementace protokolů zajišťujících zpřístupnění vzdálených souborů v podobném rozhraní, jakou jsou lokální soubory
- sockety
- izolace procesů
- proces může přistupovat jen do svého adresového prostoru v paměti
- proces nesmí získat plný přístup k CPU
- uživatelský proces nesmí spouštět privilegované instrukce
- plánovací algoritmy pro procesor, pro plánování paměti...
- účtování -- přehled o tom, kteří uživatelé zabrali jaké zdroje
- tvoří rozhraní mezi uživatelem a rozhraním jádra
- Linux: open, write, close, exit
- lze je implementovat pomocí přerušení
- MS-DOS: int 0x21, Linux: 0x80, sysenter, syscall
- sysenter -- slouží k rychlému systémovému volání
- číslo systémového volání a výsledek je v registru eax
- psána v assambleru, většina programovacích jazyků má funkce, která zprostředkovávají systémová volání
- předávání parametrů je realizováno:
- zásobníkem
- registry
- pointrem na strukturu s daty uloženými v paměti patřičného procesu
- snaha o sjednocení rozhraní: POSIX (Portable Operating System Interface), WIN32 (Windows API)
- strace -- monitoruje systémová volání a signály pomocí speciálního syscallu ptrace, který slouží pro trasování běžícího kódu programu
- od roku 1988
- standardizace
- pthread_create() -- vytvoření vlákna
- programátorské volání není definováno na úrovni systémových volání jádra
- nižší vrstva ntdll.dll
- CreateThread() -- vytvoření vlákna
- monolitické jádro
- modulární, hierarchický přístup
- malé jádro + procesy
- programování pro MS-DOS: spuštěné rezidentní programy, OS, BIOS, HW
- cíl: maximální možná funkcionalita v co nejmenším prostoru
- UNIX: jádro & systémové programy
XENIX -- 1979 Microsoft koupil licenci na UNIX a tento OS se stal velmi rozšířeným
- OS dělíme na úrovně
- každá vrstva se buduje na funkcionalitě nižších vrstev a používá funkce pouze předchozí vrstvy
- nejnižší vrstva je HW
- nejvyšší vrstva je UI (User Interface)
- dekompozice > jednoduchost
- princip modularity -- vrstvu lze uvnitř modifikovat, bez ovlivnění ostatních vrstev
- výhoda: modularita
- nevýhoda: efektivita (pomalé vykonávání systémových volání)
- neprocesově orientované
- OS v privilegovaném režimu
- proces = uživatelský program
- služba se provádí jako součást jádra, samostatný zásobník
- přerušení se vyvolá pouze při přepnutí režimu procesoru (uživatelský > privilegovaný)
- přepínání kontextu procesů dochází jen když je to nutné kvůli plánování
- program a data OS jsou sdílena všemi uživatelskými procesy
- část funkčnosti jádra přesunu na jiné procesy
- OS je souhrnem systémových procesů
- co nejméně kódu se provádí v privilegovaném režimu
- mikrojádro, nanojádro
- jádro: komunikace mezi procesy, správa paměti
- výhody: přenositelnost OS, spolehlivost, bezpečnost, flexibilita, stabilita
- nevýhody: zvýšená režie (pomalost)
MACH -- OS s mikrojádrem z 80. let
- funkčnost je v jádře v privilegovaném režimu
- /dev/kmem -- soubor, ve kterém mohu jako root modifikovat jádro
- LKM (Loadable Kernel Module) -- přidávání funkčnosti do jádra za běhu, běží v privilegovaném režimu
- modularita kódu
- výhody: nízké paměťové nároky jádra
- integrita -- moduly se nepodepisují (ale můžou -- RH, Win7), ale obsahují licenci
- Secure Boot -- (bezpečný boot), samostatné zavádění komponent, prevence rootkitů (bootkitů), vytvoří se hash a podle něj se kontroluje po vrstvách to, co se zavádí
- rootkit -- maskuje přítomnost určitého sw v počítači
- snaha omezit modifikace LKM tabulky systémových volání
- můžeme vkládat ovladače
- podepisování: spolehlivost systému, bezpečnost, DRM (Digital Rights Management)
- User Mode Drivers -- snaha omezit množství kódu bežícího v jádře
- OS se přizpůsobí při instalaci danému HW
- program Sysgen získá informace o konfiguraci HW
- inicializace HW
- z kterého zařízení zavést OS
- MBR (Master Boot Record) -- limitován velikostí disku 2TB
- spuštění zavaděče
- výběr OS a parametrů (GRUB, LILO)
- spuštění jádra -- načtení obrazu, dekomprimace, inicializace, spuštění
- jádro -- nastavení systému, spuštění plánovače, spuštění procesu Init, jehož úkolem je spustit všechno ostatní
- spuštěný program (proces)
- dávkové systémy: úloha, dávka, job
- multiprogramové systémy: proces, vlákno
- vlákno = dílčí proces v rámci procesu
- proces obsahuje: čítač instrukcí, zásobník, datová sekce, instrukční sekce (program)
- hierarchie procesů: rodič, potomek, sourozenci
- multiprogramování -- prokládání procesů, slouží k maximalizaci využití procesoru
- stavy procesu: nový, běžící, čekající (čeká na událost), připravený (čeká na přidělení času procesoru), ukončený
- Process Control Block -- tabulka obsahující všechno, co OS o procesoru ukládá (stav, čítač instrukcí, registry procesoru, informace pro správu paměti a I/O zařízení, účtovací informace)
- IPC (Inter Proces Communication) -- semafory, sdílená paměť, roury, signály (asynchronní události), zprávy
- plánovač rozhoduje, který proces dostane čas procesoru
- mezi přepnutím probíhá záznam do Process Control Blocku
- do PCB se zaznamená stav původně běžícího procesu
- z PCB se zavede stav nového procesu
- během přepnutí kontextu se neděje nic efektivního -- režijní ztára (zátěž)
- doba závisí na HW
- při přerušení procesor uchovává čítač instrukcí a zavést do něj informace o přerušení
- fronty plánování procesů
- z připravených procesů vybrat další proces
- musí být velmi rychlý (protože plánuje na velmi malé časové úseky)
- rozhoduje, kdy bude který proces spuštěn
- zařazuje procesy mezi připravené
- určuje stupeň multiprogramování
- nemusí být rychlý
- když je úloh moc
- vyplatí se nějaký proces odložit (na disk, pryč z operační paměti)
- dva nové stavy procesu: odložený čekající, odložený připravený
- strom procesů
- proces vytvoří jiný proces
- dědění -- potomek sdělí veškeré zdroje od rodiče nebo jen podmnožinu
- běh -- rodič a potomek běží současně nebo rodič čeká na dokončení potomka
- UNIX:
fork()
, LINUX:vfork
, WIN32:CreateProcess()
- proces sám požádá o ukončení
- požádá-li jedno vlákno, skončí všechna
- proces může být ukončen OS
- pokud skončí rodič mohou skončit i potomci
- UNIX:
exit
, WIN32:ExitProcess
program -- soubor na disku, obsahující data, instrukce a další informace
proces -- spuštěný program
vlákno (sled) -- "podproces", na který se dělí proces
- proces má zdroje, vlákno je jednotka plánovací činnosti
- každé vlákno má: zásobník, PC (program counter), registry, TCB (Thred Context Block)
- vlákna sdílejí: stejný adresový prostor (paměť), číslo procesu, číslo vlákna
- vlákno může přistupovat ke zdrojům svého procesu
- výhody: jednodušší programování, využití multiprocesorových strojů, vlákna jsou rychlejší (vytvoření, ukončení, přepínání) než procesy
- modely: 1:1 (1 proces = 1 vlákno, MS-DOS), 1:M (1 proces = M vláken, Windows XP)
- přepnutí mezi vlákny je rychlejší, protože vlákna jednoho procesu využívají stejné zdroje
- problém konzistence -- vlákna se musí synchronizovat
- vlákno ve WIN: fiber, vytvoření vlákna v Linuxe:
clone()
- běží
- připravený
- čekající
- vlákna se neodkládají
- ukončení ukončí všechna vlákna jednoho procesu
- vláknová knihovna -- provádí správu vláken
- jádro o vláknech neví, o vše se stará knihovna
- knihovna obsahuje funkce: vytváření, rušení, předávání zpráv, plánování, uchovávání a obnova kontextu vláken
- jádro manipuluje s celými procesy
- stavy vláken jsou na stavu nezávislé
- pokud vlákno volá službu jádra, je blokován celý proces
- správu jader podporuje jádro
- pomalejší
- umožňuje paralelní běh dvou vláken na dvou procesorech
- k blokování dochází na úrovni vlákna (neblokuje se celý proces)
- OS/2, Windows 95<, Solaris, Tru64 UNIX, BeOS, Linux
- vlákna se vytvářejí v uživatelském prostoru
- většina plánování a synchronizace probíhá v uživatelském prostoru
- programátor může nastavit počet vláken na úrovni jádra
- kombinuje přínosy obou přístupů
- např. OS Solaris <= 8
- n : 1 (více ULT se zobrazuje do 1 KLT)
- 1 : 1 (1 ULT odpovídá 1 KLT)
- n : m
- zvyšuje využití CPU
- pokud jeden proces čeká, je spuštěn jiný
- nejvhodnější je kombinovat procesy orientované na I/O zařízení a na využití CPU
- vybírá proces (z připravených a zavedených do operační paměti), kterému bude přidělen CPU
- rozhodnutí vydá v případě, že proces
- nepreemptivní (bez předbíhání):
- přechází ze stavu běžící do čekající
- končí
- preemptivní (s předbíháním):
- přechází ze stavu běžící do připravený
- přechází ze stavu čekající do připravený
- nepreemptivní (bez předbíhání):
- dispečer -- modul předávající procesor novému procesoru
- předání zahrnuje: přepnutí kontextu, přepnutí procesoru na uživatelský režim, skok na odpovídající místo v programu pro pokračování běhu programu
- Dispath latency (dispečerské zpoždění) -- doba, kterou potřebuje dispečer k pozastavení jednoho procesu a startu druhého
- využití CPU -- snaha o neustálý provoz procesoru (max)
- propustnost -- počet procesů, které dokončí svůj běh za jednotku času (max)
- doba obrátky -- doba potřebná k provedení konkrétního procesu (min)
- doba čekání -- doba, po kterou proces čeká ve frontě "připravených" procesů (min)
- doba odpovědi -- doba od zadání požadavku do okamžiku první reakce (min)
- First Come, First Served.
- konvojový efekt -- krátké procesy po jednom dlouhém zhoršují průměrnou dobu čekání
- Shortest Job First
- vybírá procesy s nejkratším požadavkem na CPU
- nepreemptivní (bez předbíhání) -- žádný proces nemůže předběhnout ten, jež je právě zpracováván
- preemptivní (s předbíháním) -- pokud se ve frontě objeví proces s nižšími požadavky na CPU, než zbývá aktuálně probíhajícímu procesu, je aktuální proces předběhnut tímto kratším procesem
- je to optimální algoritmus (dává minimální průměrnou dobu čekání pro danou množinu procesů)
- délku neznáme, můžeme ji odhadnout na základě historie
- každý proces má prioritní číslo, čím nižší, tím vyšší priorita
- CPU se přiděluje podle priority procesu
- nepreemptivní
- preemptivní
- problém stárnutí -- procesy s nízkou prioritou nepřijdou nikdy na řadu > řešení: zrání -- priorita se postupem času zvyšuje
- každý proces dostane pevně přidělenou dobu procesoru, která se odvíjí od počtu procesů ve frontě
- n procesů ve frontě, každý proces získá 1/n doby CPU
- provádí se přerušení, při kterém proces přechází ze stavu běžící do stavu připravený
- synchronizace běhu procesů
- jeden proces čeká na druhý
- komunikace mezi procesy -- způsob synchronizace a koordinace různých aktivit
- uváznutí -- každý proces čeká na zprávu od jiného procesu
- stárnutí -- dva procesy posílají zprávy a třetí čeká nekonečně dlouho
- sílení prostředků -- procesy používají a modifikují sdílená data
- operace zápisu se nesmí vzájemně překrýt
- operace zápisu se nesmí překrýt s operací čtení
- kritická sekce
- nekonzistence -- je způsobena paralelním přístupen k datům
- více procesů současně pracuje se zdroji
- podstatné je, kdo zdroje modifikoval naposled
- ochrana před negativními dopady -- synchronizace
- n procesů soupeří o právo používat jistá sdílená data
- kritická sekce je kus kódu, ve kterém prosec přistupuje ke sdíleným zdrojům
- je třeba zajistit, aby se v konkrétní kritické sekci nacházel nanejvýš jeden proces
- podmínka vzájemného vyloučení (mutual exclusion), podmínka bezpečnosti, „safety“ -- pokud se nějaký proces nachází v kritické sekci spojené s určitými daty, nemůže do ní vejít jiný proces
- podmínka trvalosti postupu (progress) podmínka živosti, „liveliness“ -- procesy, které čekají na přístup do kritické sekce, by se do ní měly dostat, pokud není další proces, který by toto blokoval (viz výše)
- podmínka konečnosti doby čekání, (bounded waiting), podmínka spravedlnosti, „fairness“ -- pokud je přístup do kritické sekce umožněn procesům s vyšší prioritou, také ostatní procesy by se do ní měly v konečném čase dostat
- softwarové řešení -- algoritmy s aktivním čekáním (busy waiting), Petersonův algoritmus
- hardwarové řešení -- vyžaduje speciální instrukce procesoru, aktivní čekání, instrukce test_and_set
- OS řešení -- potřebné funkce poskytuje OS, pasivní čekání, např. semafory, monitory, zasílání zpráv, vyšší režie
- synchronizační nástroj, který lze implementovat i bez "busy waiting"
- OS proces "uspí" nebo "probudí"
- dvě atomické operace: wait & signal
- Obecný semafor -- celočíselná hodnota z neomezovaného intervalu, lze implementovat binárním semaforem
- Binární semafor -- celočíselná hodnota z intervalu <0,1>, lze snadněji implementovat
- synchronizační nástroj vysoké úrovně
- umožňuje bezpečné sdílení abstraktního datového typu souběžnými procesy
- skupina blokovaných procesů, ve které každý čeká na zdroj držený jiným procesem z této skupiny
- stárnutí -- požadavky jednoho nebo více procesů nebudou splněny v konečném čase
- z důvodu vyšších priorit jiného procesu
- z důvodu prevence uváznutí
- pokud chce proces použít zdroj: požádá, použije a uvolní
- vzájemné vyloučení (mutual exclusion) -- zdroj může naráz používat jen jeden proces
- ponechání si zdroje a čekání na další (hold and wait) -- získám zdroj a pak až chci něco dalšího
- bez předbíhání (no preemption) -- nemůžeme předbíhat, uvolňovat zdroje nuceně
- kruhové čekání (circular wait) -- P1 čeká na P2 a P2 čeká na P1
- RAG (Resource-Allocation Graph)
- pokud graf neobsahuje cyklu, k uváznutí nedošlo
- pokud graf obsahuje cyklus, záleží na počtu instancí zdroje
- ignorace -- je to problém aplikace, OS to nebude řešit
- přímé metody -- zneplatnění některé z podmínek:
- vzájemné vyloučení -- u nesdílených zdrojů podmínka platí (př. virtualizace prostředků)
- požadování všech prostředků naráz -- neefektivní, možnost stárnutí
- odebírání požadovaných prostředků ostatním procesům
- nepřímé metody -- nepřipuštění cyklu v grafu:
- uspořádání pořadí vyžadovaných prostředků
- prostředek se nepřidělí, pokud by hrozilo uváznutí
- algoritmus, který se dynamicky dívá, jestli nemůže dojít k uváznutí
- uváznutí povolíme, ale jeho vznik detekujeme a aplikujeme plán obnovy
- hledáme cykly v grafu
- ukončujeme proces po procesu (podle priority), dokud neodstraníme cyklus
- pro běh procesu je nutné, aby program, který jej vykonává byl umístěn v operační paměti
- program je složen z různých částí: execute-only, read/write, private, public
- více procesů může sdílet společnou část paměti
- při kompilaci -- umístění v paměti je známé předem, lze vygenerovat absolutní kód, při změně umístění se musí program znovu přeložit
- při zavádění -- umístění v paměti není v době kompilace známé, generuje se přemístitelný kód
- za běhu -- adresy budou vytvářeny dynamicky, v určitém limitu
- HW modul převádějící logické adresy na fyzické
- uživatelský program pracuje pouze s logickou adresou, fyzickou nevidí
- relokační registr
- LAP (Logický Adresový Prostor) -- logická adresa, virtuální adresa, dána adresou ve strojovém jazyku, generuje CPU
- FAP (Fyzický Adresový Prostor) -- adresa akceptovaná operační pamětí
- v době kompilace a době zadávání se LAP a FAP shodují
- při vázání v době běhu se mohou lišit
- programový kód se zavádí, dokud není spuštěn
- lepší využití paměti
- program nevyžaduje speciální podporu od OS
- vázání je odkládáno na dobu běhu
- funkce, které nemáme k dispozici nahrazujeme kódem "stub", který se potom nahradí kódem funkce, až bude nahrána
- pokud za běhu programu nejsme schopni nahrát veškerou funkčnost programu
- rozdělíme program do modulů
- dvě sekce:
- rezidentní OS, FAP s tabulkou ovladačů přerušení
- uživatelské procesy
- přidělování jedné souvislé paměti:
- schéma s relokačním registrem
- relokační registr -- hodnota nejmenší fyzické adresy paměti procesu
- mezní registr -- rozpětí logických adres, logická adresa <= mezní registr
- přidělování několika částí paměti:
- díra -- blok volné paměti
- evidenci o volných a obsazených sekcích vede OS
- first-fit -- přiděluje se první dostatečně velká díra
- best-fit -- přidělí se nejmenší možná padnoucí díra
- worst-fit -- přidělí se největší díra
- vnější fragmentace -- všechny díry jsou příliš malé, ale dohromady tvoří požadované místo
- vnitřní fragmentace -- nedostanu přesnou velikost požadované paměti, protože paměť je rozdělena do bloků, po kterých se paměť alokuje
- setřásání -- snižování vnější fragmentace, přesouvají se bloky paměti, aby vznikl jeden volný, nutná dynamická relokace
- rozdělení adresový prostor na stránky a rámce
- MMU překládá logické adresy na fyzické
- udržujeme seznam volných rámců
- vzniká vnitřní fragmentace kvůli pevné velikosti rámce
- uložena v operační paměti
- počátek a konec je odkazován registry (PTBR, PTLR)
- číslo stránky a ofset stránky
- dvouúrovňová tabulka stránek -- jedna vnořená do druhé
- invertovaná tabulka stránek -- jaká stránka je ve kterém rámci, je časově náročnější
- sdílení stránek -- některý rámec odkazujeme několikrát, musí se nacházet na stejné logické adrese ve všech procesech, kód je reentrantní a „read-only“
- segment -- souvislá část paměti, která někde začíná a má určitou velikost
- segmentovací tabulka -- kde segment začíná a jeho velikost (base, limit)
- STBR (Segment-table base register)
- STLR (Segment-table length register)
- relokace -- dynamická, pomocí tabulky
- oddělení LAP a FAP
- LAP může být větší než FAP
- efektivnější vytváření procesů
- techniky implementace:
- stránkování na žádost
- segmentování na žádost
- nutná podpora HW
- swapovací oblast v paměti pro odkládání stránek
- rezidentní množiny -- část procesů umístěných v FAP
- překlad LA na FA dělá HW
- pokud LA nelze převést, vyvolá se přerušení (page fault), proces se označí za čekající
- stránka se natáhne do operační paměti
- výhody: ve FAP lze udržovat více procesů najednou, "máme" více paměti, než máme
- stránkování na žádost -- nezavádím, dokud se o stránku "nepožádá" (není k ní nutné přistoupit)
- odkazovaná stránka
- legální reference
- nelegální reference
- předstránkování -- predikuji, co bude potřeba a nahraji to dopředu, princip lokality (v podobném čase potřebuju podobné adresy)
- když je FAP plný
- některé rámce mohou být "zamknuty"
- pokud se stránka nenachází v FAP, provede se přerušení
- "page fault"
- OS zavede stránku do paměti (získání prázdného rámce, zavedení stránky do rámce, úprava tabulky)
- opakování instrukce, která způsobila page fault
- pokud nemáme volný rámec, hledáme oběť
- princip lokality -- lze dělat rozumné odhady o částech programu/dat potřebných v nejbližší budoucnosti
- nejmenší pravděpodobnost výpadku stránky
- čím více rámců máme, tím méně často dojde k výpadku stránky
- LRU (Least Recently Used) -- oběť = nejdéle neodkazovaná stránka
- FIFO (First-In-First-Out) -- oběť = stránka nejdéle zobrazená ve FAP
- Algoritmus poslední šance -- FIFO + vynechávání z výběru těch stránek, na které od posledního výběru bylo odkázáno
- rozmanitý
- běžně používané prvky: port, sběrnice, hub
- instrukce IN (načtení třeba do registru), OUT
- skládá se ze 4 registrů:
- Data-in -- čtení vstupu zařízení
- Data-out -- zápis výstupu do zařízení
- Status -- v jakém stavu se zařízení nachází
- Control -- ovládání zařízení
- polling
- aktivní čekání
- stavy: připraven, pracuje, chyba
- přerušení
- OS -- ovladač přerušení
- maskování přerušení
- prioritní přerušení
- DMA
- přímý přístup k paměti
- paralelně můžeme dělat jinou činnost
- jádro OS se snaží poskytovat jednotné rozhraní různých HW zařízení
- vlastnosti I/O zařízení:
- znakové (get, put)/blokové (read, write, seek) -- v Linuxu reprezentována jako speciální soubor (b), reprezentována dvěma čísli
- sekvenční/přímý přístup
- sdílené/dedikované
- rychlost přenosu
- read-write, read only, write only
- mívají samostatné rozhraní OS
- sockets -- rozhraní, separující síťové protokoly od síťových operací
- přistupuje se jako k souborům
- přístupy k síťovým službám: roury, FIFOs, streams, queues, mailboxes
- blokující
- synchronní
- proces čeká na ukončení I/O
- jednoduché na programování
- někdy nedostačující kvůli nízké efektivitě
- neblokující
- synchronní
- pokud data nejsou k dispozici, nic se nestane -- nejsem blokován
- asynchronní
- proces běží souběžně s I/O
- konec I/O se hlášen signály
- složité na programování
- více efektivní
- plánování -- některé OS se snaží o "spravedlnost"
- buffer -- paměť pro vyrovnávání bloků I/O
- caching -- rychlá paměť udržující kopie, zajištění vyššího výkonu
- spooling -- udržování fronty dat určených k výpis na zařízení (tiskárna)
- rezervace zařízení -- exkluzivita přístupu k zařízení pro proces, hrozí deadlock, rezervace / uvolnění -- volání systému
- číslo chyby -- záporná hodnota
- syslog -- záznam o chybách v systému
- I/O je nejvýznamnější faktor výkonu celého systému
- ovladače a programy I/O části jádra, přepínání kontextu při přerušení, kopírování dat, síťový provoz
- minimalizovat počet přepnutí kontextu
- omezit kopírování dat
- minimalizovat počet přerušení (přenášením delších bloků)
- využití funkcí moderních řadičů
- využití DMA
- kombinace komponent (CPU, paměť, sběrnice, I/O zařízení) vedoucí k vysoké propustnosti
- nejrychlejší
- energeticky závislé
- cache, operační paměti
- hlavičky a plotny se soustřednými kružnicemi a sektory
- adresace: jednorozměrné pole
- přístup k disku je starost OS
- doba přístupu (access time) = doba vystavení (seek time, nastavíme hlavičku na konkrétní cylindr) + průchod adresového sektoru pod čtecí/zápisovou hlavou (rotační zpoždění)
- disk scheduling
- FCFS (First Come, First Served) -- popořadě
- SSTF (Shortest Seek Time First) -- první nejbližší, má přirozené chápání, často implementován
- SCAN -- algoritmus typu výtah, jede z jedné strany na druhou a po cestě plní požadavky, vhodný pro velkou zátěž na disku
- C-SCAN -- poskytuje jednotnější čekací dobu, při cestě zpátky nevykonává požadavky, vhodný pro velkou zátěž na disku
- C-LOOK -- výtah v rozmezí minima a maxima požadavků, často implementován
- moderní HW -- nemusí být známé mapování LA na FA, pořadí adres si disk optimalizuje sám (kromě priority z původu výpadku stránek a zápisu dat a metadat souborového systému)
- Linux -- algoritmy:
- Noop -- nemění pořadí požadavků, pokud na sebe dva požadavky navazují, jsou sloučeny
- Anticipatory -- jako Deadline, ale chvíli vyčká, jestli nepřijde následující požadavek
- Deadline -- známka, do kdy má být požadavek vyřídit, pokud něco expiruje, je to vyřízeno ve speciální dávce, upřednostňuje čtení před zápisem
- CFQ (Completely Fair Queue) -- každý proces má přidělený časový díl (slice), parametrizovatelný,
- Redundant Arrays of Independent (Inexpensive) Disks
- několik nezávislých disků
- vyšší výkon, kapacita a spolehlivost
- zvýšení spolehlivosti: redundance, zrcadlení, stínování (mirroring, shadowing)
- zvýšení výkonu: část dat je na jednom disku, část na jiném (bit-level striping, blok-level striping)
- RAID Level 0: pouze více disků
- RAID Level 1: zrcadlení disků
- ...
- RAID Level 6: odolnost při více než jedné poruše
- středně rychlé
- energeticky nezávislé
- on-line storage
- flash disky, magnetické disky
- levná, vyměnitelná média
- pomalé
- energeticky nezávislé
- off-line storage
- floppy disky, magnetické pásky, optické disky
= způsob organizace dat ve formě souborů a adresářů
- snadný přístup
- virtualizaci adresového prostoru média
- řízení přístupu
- souborové systémy v uživatelském prostoru
- použití jaderného modulu FUSE
- GlusterFS, sshfs
- souborové systémy v jaderném prostoru*
- distribuované, síťové (NFS, Samba), lokální (
- speciální souborové systémy
- pseudo souborové systémy -- neobsahuje data, neukládá data, pouze je exportuje z kernelu, pouze se jako souborový systém tváří
- nástroje pro vytvoření
- vytvoření souborového systému s danými parametry
- mkfs, ext4, mkfs.xfs...
- nástroje pro kontrolu
- kontrola, oprava, optimalizace
- nástroje pro správu
Inode -- struktura reprezentující všechny typy souborů v paměti (i_mode -- typ souboru, i_ino -- číslo inodu, i_nlink -- počet odkazů na inode, i_size -- velikost inode...)
Dentry (Directory entry) -- struktura mapující jméno souboru na číslo inode v paměti (d_parent -- ukazatel na rodičovskou dentry, d_name -- jméno záznamu, d_inode -- odkaz na inode, může být i Null...)
File -- reprezentuje otevřený soubor (f_path -- cesta k souboru, f_inode -- odkaz na příslušný inode, f_mode -- mód otevřeného souboru, F_pos -- aktuální pozice v souboru...)
Superblock -- identifikuje souborový systém na médiu v paměti (s_dev -- číslo identifikující zařízení, s_blocksize, s_magic...)
Blok -- nejmenší alokovatelná jednotka souborového systému
Stránka -- nejmenší alokovatelná jednotka virtuálního systému; přesun dat mezi pamětí a záznamovým médiem
- systémová volání -- standardní rozhraní pro komunikaci s jádrem
- input/output control -- ioctl
- procfs, sysfs
Dentry cache -- spravuje hašovací tabulku adresářových záznamů
Inode cache -- spravuje hashovací tabulku inode, urychluje přístup k inode
- zprostředkovává rozhraní mezi souborovými systémy a ovladači blokových zařízení
- fronty -- vkládání požadavků do fronty k odeslání do ovladače zařízení
- I/O plánovače -- připojují a odpojují frontu za účelem seskupování požadavků do dávek
- virtuální bloková zařízení -- mdraid, device mapper
- správa volného místa -- rozsahy bloků uložené ve stromech, zastaralejší řešení: bitmapy
- alokátor -- kritická část souborového systému, alokuje bloky ze zásoby volných bloků, snaha o prostorovou optimalizace, definuje rozložení disku
- diskový formát -- definuje formát a rozložení dmetadat na disku, statické/dynamické rozložení
- přímé/nepřímé adresování stromů
- extent tree