Rozcestník pojmů¶
Tato stránka je centrální rejstřík celého předmětu BI-OSY (Operační systémy). Najdeš zde definice a stručné vysvětlení všech klíčových pojmů, seřazené abecedně v rámci každé kapitoly, s přímými odkazy na příslušné skripta. Máš-li konkrétní pojem, použij vyhledávací pole (ikona lupy) v horním navigačním panelu — je to nejrychlejší cesta.
Jak stránku používat
Vyhledej pojem v libovolné sekci, přečti stručnou definici a klikni na tučný název — dostaneš se do celé kapitoly, kde je téma rozvinuto do hloubky s příklady a kódem.
Rychlá navigace¶
- 01 — Úvod do operačních systémů · celá kapitola
- 02 — Procesy a vlákna · celá kapitola
- 03 — Synchronizace a meziprocesová komunikace · celá kapitola
- 04 — Uváznutí (deadlock) · celá kapitola
- 05 — Plánování procesů a vláken · celá kapitola
- 06 — Správa paměti · celá kapitola
- 07 — Datová úložiště a souborové systémy · celá kapitola
- Vzorce na jednom místě
01 Úvod do operačních systémů¶
→ Celá kapitola ve skriptech: Úvod do operačních systémů
ABI (Application Binary Interface) — binární rozhraní mezi aplikacemi a jádrem OS; implementováno systémovými voláními (syscalls). Odlišuj od API: ABI = syscalls, API = knihovní funkce.
API (Application Programming Interface) — rozhraní mezi aplikacemi a knihovnami; volání knihovních funkcí (např. printf, malloc). Neprovede přechod do kernel módu.
BARs (Base Address Registers) — registry PCI/PCIe zařízení umožňující dynamické přiřazení paměťových adres nebo čísel portů I/O prostoru.
BIOS (Basic Input-Output System) — starší firmware pro inicializaci HW a bootování; rozpoznává boot sektor podle signatury 0x55 0xAA na offsetu 510–511.
Boot sektor (MBR) — první sektor bootovacího zařízení (512 B); obsahuje bootstrap kód. BIOS ho načte na adresu 0x07C00 v paměti.
Bootovací signatura — hodnoty 0x55 0xAA na offsetu 510–511 boot sektoru; BIOS podle nich rozpozná bootovatelné médium.
Cache (skrytá paměť) — rychlá mezipaměť uvnitř CPU (L1/L2/L3) maskující latenci hlavní paměti; programátorovi "neviditelná", spravuje ji HW.
CLI (Command Line Interface) — textové uživatelské rozhraní; příkazová řádka.
CPU (Central Processing Unit) — primární procesor počítače; implementuje konkrétní ISA definující sadu instrukcí, registry a organizaci paměti/I/O.
Démon (daemon) — systémová služba běžící v user módu na pozadí, reagující na události nebo požadavky jiných procesů; komunikuje s jádrem přes syscalls (např. sshd, systemd).
GUI (Graphical User Interface) — grafické uživatelské rozhraní.
I/O prostor (port-mapped I/O) — přístup k I/O zařízením přes speciální instrukce in/out na x86-64; odlišný od paměťového prostoru.
ISA (Instruction Set Architecture) — architektura souboru instrukcí definující instrukce, registry a organizaci paměti a I/O. Dělí se na System ISA (pro kernel) a User ISA (pro aplikace).
ISR (Interrupt Service Routine) — obslužná rutina přerušení/výjimky vykonávaná jádrem OS v kernel módu.
Jádro OS (kernel) — část OS běžící v kernel módu; implementuje správu I/O, procesů, paměti, FS a sítě.
Kernel mód — privilegovaný režim CPU (ring 0 / EL1 / S-mode); veškeré operace jsou povoleny; zde běží jádro OS.
libc (glibc) — standardní knihovna jazyka C; obsahuje obálky systémových volání (write, read) i vyšší funkce (printf, malloc). Nepatří do jádra OS.
Long mode — 64-bitový režim procesoru x86-64; aktivuje plnohodnotnou 64-bitovou adresaci a stránkování.
Memory-mapped I/O — přístup k I/O zařízením přes paměťový adresní prostor standardními instrukcemi (mov, ldr); zařízení se tváří jako paměť.
Multitasking — schopnost OS spouštět více procesů zdánlivě současně prostřednictvím sdílení času CPU (time slicing).
Multithreading — schopnost procesu obsahovat více souběžně plánovaných vláken.
NVRAM / Flash — non-volatile paměť pro firmware (BIOS, UEFI) a konfiguraci HW; obsah přežije výpadek napájení.
Operační systém (OS) — základní software, prostředník mezi HW a aplikacemi; spravuje fyzické i logické prostředky a poskytuje rozhraní aplikacím a uživatelům.
POSIX — standard definující přenositelné rozhraní unixových OS; specifikuje čísla file descriptorů (stdin = 0, stdout = 1, stderr = 2), názvy a chování syscalls.
Protected mode — 32-bitový chráněný režim x86-64; umožňuje privilegované módy, stránkování a virtuální paměť.
Přerušení (interrupt) — asynchronní reakce CPU na vnější událost (dokončení I/O, přetečení časovače, HW chyba); přichází z okolí CPU bez ohledu na aktuální instrukci.
RAM (Random-Access Memory) — hlavní operační paměť; volatile (ztrácí obsah po odpojení napájení); obsahuje jádro OS a běžící procesy.
Real mode — počáteční 16-bitový režim x86-64 po resetu; 20-bitový fyzický adresní prostor; bez stránkování a privilegovaných módů.
Reset vector — předem definovaná fyzická adresa, od níž CPU po resetu začíná vykonávat kód (x86-64: 0xFFFFFFFF0).
Ring 0 — nejvyšší privilegovaný stupeň v x86-64 = kernel mód; veškeré operace povoleny.
Ring 3 — nejnižší privilegovaný stupeň v x86-64 = user mód pro aplikace; přímý přístup k I/O ani ke správě paměti není povolen.
Scancode — kód vrácený klávesnicí z I/O portu 0x60; reprezentuje stisk nebo uvolnění klávesy (není to ASCII znak). Bit 7 = 0: stisk, bit 7 = 1: uvolnění.
SMP (Symmetric Multi-Processing) — podpora více CPU jader; OS plánuje vlákna na různá jádra paralelně.
Sběrnice (bus) — přenosové médium pro data a řídicí povely mezi částmi výpočetního systému (PCIe, SATA, USB, Fibre Channel).
strace — linuxový nástroj pro sledování systémových volání volaných z procesu (ekvivalent truss na Solarisu).
Systémové volání (syscall) — jediný způsob, jak uživatelský proces může legálně požádat jádro OS o privilegovanou operaci. Na x86-64/Linux: číslo syscall do rax, argumenty do rdi, rsi, rdx, …, instrukce syscall.
UEFI (Unified Extensible Firmware Interface) — moderní náhrada BIOSu s bohatšími možnostmi; hledá EFI soubor v partici ESP.
User mód — omezený režim CPU pro uživatelské procesy (ring 3 / EL0 / U-mode); přímý přístup k I/O ani ke správě paměti není povolen.
VGA framebuffer — textový video buffer grafické karty dostupný na adrese 0xB8000 v reálném režimu; každý znak = 2 B (ASCII kód + barva).
Výjimka (exception) — synchronní přerušení vzniklé při zpracování instrukce (syscall, dělení nulou, výpadek stránky). Záměrně vyvolává ji aplikace instrukcí syscall.
Výpadek stránky (page fault) — výjimka vzniklá přístupem na virtuální adresu, k níž není namapována fyzická stránka; řeší ji správa paměti v jádře.
02 Procesy a vlákna¶
→ Celá kapitola ve skriptech: Procesy a vlákna
Adopce sirotků — mechanismus, při kterém init (PID 1) přijme potomky procesu, který skončil dříve než oni, a po jejich ukončení správně převezme návratový kód.
Deterministický algoritmus — algoritmus, který ze stejných vstupů vždy produkuje stejné výstupy bez ohledu na časování a pořadí operací.
ELF (Executable and Linkable Format) — binární formát spustitelných souborů v unixových OS (GNU/Linux, BSD). Obsahuje sekce TEXT, DATA a metadata.
execve() — systémové volání, které zcela přepíše adresový prostor procesu obsahem nového spustitelného souboru; výpočet začíná od začátku nového programu. Původní kód přestane existovat.
fork() — systémové volání v Unixu vytvářející nový proces jako kopii rodiče. V rodiči vrátí PID potomka, v potomkovi vrátí 0. Při chybě vrátí -1.
Kontext vlákna — veškeré informace potřebné k obnovení výpočtu vlákna od místa přerušení; zejména čítač instrukcí (PC) a hodnoty všech registrů CPU.
Kritická sekce (critical section) — část kódu, ve které vlákno přistupuje ke sdílenému prostředku. Sdružené kritické sekce dvou vláken se týkají téhož prostředku.
Light-weight process (LWP) — historický název pro vlákno.
Multitasking / Multithreading — schopnost OS zdánlivě (nebo skutečně na vícejádrovém HW) provádět více úloh souběžně střídáním vláken na jádrech CPU.
PE (Portable Executable) — binární formát spustitelných souborů v MS Windows (.exe, .dll).
PID (Process ID) — jedinečné celé číslo identifikující proces (nebo vlákno) v rámci OS. Přiřadí ho jádro při fork().
POSIX Thread Library (pthreads) — přenositelné rozhraní pro práci s vlákny na unixových systémech. Klíčové funkce: pthread_create(), pthread_join(), pthread_exit().
PPID (Parent Process ID) — číslo rodičovského procesu.
Preemptivní plánování — strategie, při které OS přiděluje vláknům časová kvanta a může vlákno přerušit i bez jeho souhlasu po uplynutí kvanta nebo příchodu přerušení.
Proces — instance spuštěného programu; základní entita OS pro alokaci prostředků (paměť, vlákna, soubory, zámky…). Má vlastní virtuální adresový prostor.
Program — spustitelný binární soubor uložený v sekundární paměti, obsahující kód (TEXT), data (DATA) a metadata. Jeho formát závisí na cílovém OS (ELF, PE).
pthread_create() — vytvoří nové vlákno, které bude vykonávat zadanou funkci; číslo vlákna uloží na adresu předanou prvním argumentem.
pthread_exit() — ukončí pouze volající vlákno; sdílené struktury procesu zůstanou zachovány, dokud neskončí poslední vlákno skupiny.
pthread_join() — zablokuje volající vlákno, dokud zadané vlákno neskončí; analogie wait() pro vlákna.
Přepínání kontextu (context switch) — mechanismus uložení kontextu běžícího vlákna a obnovení kontextu jiného vlákna; zajišťuje iluzi nepřerušovaného běhu každého vlákna.
Race condition (časově závislá chyba) — nedeterministická chyba vzniklá nekontrolovaným souběžným přístupem více vláken ke sdíleným datům; výsledek závisí na pořadí instrukcí, má náhodný výskyt a je velmi těžko odhalitelná.
Sdružené kritické sekce — kritické sekce dvou nebo více vláken, které se týkají téhož sdíleného prostředku; k race condition dojde, pokud vstoupí do svých sdružených sekcí naráz.
Stav vlákna — Idle (nové), Ready (čeká na CPU), Running (běží na jádře), Blocked (čeká na událost), Zombie (ukončuje se, ale rodič ještě nepřevzal kód), Free (zrušeno).
task_struct — datová struktura v Linuxovém jádře reprezentující jak proces, tak vlákno; obsahuje pid, tgid, paměťový deskriptor mm, tabulku souborů files, stav exit_state a další.
TGID (Thread Group ID) — identifikátor skupiny vláken; všechna vlákna jednoho procesu sdílí stejné TGID, rovnající se PID hlavního vlákna.
TID (Thread ID) — číslo vlákna; v Linuxu totožné s pid v task_struct.
Virtuální adresový prostor — izolovaný paměťový prostor každého procesu; skládá se ze segmentů TEXT, DATA, heap, stack a mapovaných sdílených knihoven. Procesy navzájem do sebe nevidí.
Vlákno — výpočetní entita (proud instrukcí), které OS přiděluje jádro CPU. Vlákna v procesu sdílí adresový prostor, ale mají vlastní zásobník a kontext.
wait() / waitpid() — systémové volání zablokující rodičovský proces, dokud se potomek (nebo konkrétní potomek) neukončí; předá návratový kód potomka.
Zásobník vlákna (stack) — privátní paměťová oblast vlákna pro lokální proměnné a historii volání funkcí. V Linuxu se alokuje pomocí mmap() před spuštěním vlákna.
Zombie — stav ukončeného procesu, jehož task_struct ještě nebyla uvolněna, protože rodič nepřevzal návratový kód voláním wait().
Časové kvantum (time slice) — časový úsek, po který OS nechá vlákno běžet na jádře CPU, než provede přeplánování; typicky 10–50 ms.
Vzájemné vyloučení (mutual exclusion) — princip, že sdružené kritické sekce nesmí být vykonávány souběžně; nejvýše jedno vlákno smí být v kritické sekci najednou.
03 Synchronizace a meziprocesová komunikace¶
→ Celá kapitola ve skriptech: Synchronizace a meziprocesová komunikace
Aktivní čekání (busy waiting, spinning) — vlákno ve smyčce opakovaně testuje podmínku vstupu do kritické sekce; spotřebovává 100 % jednoho jádra CPU po celou dobu čekání.
Atomická operace — operace, která se z pohledu ostatních vláken jeví jako nedělitelná; nelze ji přerušit přepínačem kontextu. Základ správné implementace synchronizačních primitiv.
Bariéra (barrier) — synchronizační primitiv pro iterační výpočty; vlákna volají barrier_wait() a čekají, dokud to neudělá požadovaný počet vláken; pak jsou všechna uvolněna. POSIX: pthread_barrier_t.
Binární semafor — semafor inicializovaný na 1, chová se jako mutex; hodnoty nabývá pouze 0 a 1. sem_wait = mutex_lock, sem_post = mutex_unlock.
Čtenáři-písaři (Readers-Writers) — klasická synchronizační úloha: více čtenářů může číst paralelně, ale písař potřebuje výlučný přístup. Spravedlivé řešení vyžaduje explicitní FIFO frontu čekajících vláken; bez ní trpí písaři hladověním.
Deadlock (uváznutí) — situace, kdy skupina vláken čeká na události, které může vyvolat pouze jedno z čekajících vláken; systém se zasekne. Viz kapitola 04.
Funkce test() — pomocná funkce v řešení večeřících filosofů; zkontroluje, zda filosof může jíst (oba sousedé nejedí a filosof má hlad). Pokud ano, nastaví stav na eating a zavolá sem_post na filosofův semafor.
Generální semafor (počítací semafor) — semafor s čítačem > 1; vhodný pro počítání dostupných instancí prostředku nebo pro signalizaci (inicializace na 0).
Hladovění písařů — situace v úloze čtenářů-písařů, kdy nepřetržitý proud čtenářů trvale blokuje přístup písařů k sdílenému prostředku.
Hladovění (starvation) — vlákno je ve stavu Ready, ale je opakovaně předbíháno ostatními vlákny a nedostane se k prostředkům; není blokováno, ale nepostupuje.
Instrukce TSL (Test-and-Set-Lock) — atomická hardwarová instrukce: načte hodnotu z paměti do registru a nastaví paměťové místo na nenulovou hodnotu v jedné nedělitelné operaci. x86-64: xchg, cmpxchg; SPARC: cas, ldstub; RISC-V: lr/sc.
Inverzní prioritní problém (priority inversion) — uváznutí při aktivním čekání: vlákno s vysokou prioritou obsadí jádro busy-waitingem a vytlačí nízko-prioritní vlákno, které drží zámek, takže ho nemůže uvolnit.
Kritická sekce (critical section/region) — část kódu, kde vlákno přistupuje ke sdílenému prostředku; v jednom okamžiku smí být uvnitř nejvýše jedno vlákno.
Livelock — vlákna aktivně mění svůj stav v reakci na ostatní, ale žádné z nich nedokončí výpočet. Na rozdíl od deadlocku nejsou vlákna blokována (jsou Running/Ready).
Mutex (MUTual EXclusion lock) — blokující synchronizační primitiv; vlákno čekající na zamčený mutex je přepnuto do stavu Blocked a nespotřebovává CPU. POSIX: pthread_mutex_t.
Optimální řešení — synchronizační schéma maximalizující paralelismus; pro N filosofů dovoluje floor(N/2) jíst současně.
POSIX Threads (pthreads) — standardní API pro vlákna v Unixu; poskytuje pthread_mutex_t, pthread_cond_t, sem_t, barrier_t.
Podmíněná proměnná (condition variable) — synchronizační primitiv umožňující vláknu atomicky odemknout mutex a zablokovat se; probuzení nastane po zavolání cond_signal nebo cond_broadcast. POSIX: pthread_cond_t.
Producent-konzument (producer-consumer) — klasická synchronizační úloha: producent vkládá data do sdílené fronty (kapacita N), konzument je odebírá. Nutná synchronizace výlučného přístupu (mutex) a stavu fronty (empty, full semafory nebo podmíněné proměnné).
Race condition — viz sekce 02.
Semafor — synchronizační primitiv s celočíselným čítačem a frontou čekajících vláken. sem_wait: sníží čítač nebo zablokuje; sem_post: zvýší čítač nebo probudí čekající. POSIX: sem_t.
Spící holiči (Sleeping Barbers) — klasická synchronizační úloha: N holičů, N křesel, M čekacích míst. Zákazník odejde, je-li čekárna plná. Řešení: mutex + 2 semafory (customers, barbers). Optimální, ale bez FIFO nespravedlivé.
Spravedlivé řešení — synchronizační schéma, ve kterém žádné vlákno není předbíháno; čekající jsou obsloužena v FIFO pořadí. Standardní API (POSIX, WinAPI) FIFO pořadí nezaručuje — nutno implementovat explicitně.
Spurious wakeup (falešné probuzení) — vlákno čekající na podmíněné proměnné se může probudit bez zavolání cond_signal; proto musí být podmínka testována ve smyčce while, ne if.
Večeřící filosofové (Dining Philosophers) — klasická synchronizační úloha: N filosofů, N vidliček; každý potřebuje dvě sousední. Naivní řešení → deadlock; vrácení vidliček → livelock; správné optimální řešení: mutex + N semaforů s funkcí test().
cond_wait(var, mutex) — atomicky odemkne mutex a zablokuje vlákno; po probuzení mutex opět zamkne. Podmínku kontrolovat ve while (ne if) kvůli spurious wakeup.
cond_signal(var) — probudí aspoň jedno vlákno čekající na podmíněné proměnné.
mutex_lock — zamkne mutex; pokud je zamčen, zablokuje volající vlákno.
mutex_unlock — odemkne mutex nebo probudí jedno čekající vlákno.
sem_post — zvýší čítač semaforu o 1 nebo probudí jedno čekající vlákno.
sem_wait — sníží čítač semaforu o 1; pokud je 0, zablokuje volající vlákno.
04 Uváznutí (deadlock)¶
→ Celá kapitola ve skriptech: Uváznutí (deadlock)
Alokace prostředku — přidělení prostředku vláknu na jeho žádost. Varianty: blokující (čeká neomezeně), s časovým limitem (mutex_try_lock), neblokující (okamžitě vrátí výsledek).
Alokační graf (resource allocation graph) — orientovaný graf s uzly prostředků a vláken. Hrana prostředek→vlákno = vlákno drží prostředek; hrana vlákno→prostředek = vlákno čeká. Cyklus v grafu = uváznutí.
Bankéřův algoritmus (banker's algorithm, Dijkstra 1965) — algoritmus předcházení uváznutí; před každým přidělením prostředku OS "zkusmo" přidělí a ověří bezpečnost výsledného stavu. Pokud by stav byl nebezpečný, vlákno čeká.
Bezpečná posloupnost — pořadí vláken, v němž lze každé vlákno postupně uspokojit z volných prostředků + prostředků uvolněných předchozími vlákny; existence bezpečné posloupnosti = bezpečný stav.
Bezpečný stav (safe state) — stav systému, ze kterého existuje alespoň jedna bezpečná posloupnost; žádné vlákno neuvázne.
Checkpoint — pravidelně ukládaný snímek stavu vlákna/systému; umožňuje rollback při zotavení z uváznutí.
Coffmanovy podmínky — čtyři nutné podmínky uváznutí (musí platit všechny současně): vzájemné vyloučení, neodnímatelnost, drž a čekej, kruhové čekání. Porušení jediné uváznutí znemožní.
Deadlock (uváznutí) — situace, kdy skupina vláken čeká na události nebo prostředky, které může vyvolat pouze jedno z čekajících vláken; žádné z nich nemůže pokročit.
Detekce uváznutí — pravidelné spouštění algoritmu pracujícího s maticí aktuálních požadavků Q_c a vektorem volných prostředků C; označuje vlákna, která lze uspokojit; neoznačená = uvázlá.
Drž a čekej (hold and wait) — Coffmanova podmínka č. 3: vlákno, které drží prostředky, může žádat o další bez uvolnění stávajících.
Kruhové čekání (circular wait) — Coffmanova podmínka č. 4: existuje cyklus vláken, kde každé čeká na prostředek držený dalším vláknem v cyklu.
Matice přidělených prostředků A (allocation matrix) — A[k][i] = počet prostředků typu i aktuálně přidělených vláknu k.
Matice chybějících prostředků M (need matrix) — M = Q - A; M[k][i] = kolik prostředků typu i vlákno k ještě potřebuje. Klíčový vstup Bankéřova algoritmu.
Matice požadavků Q (request matrix) — Q[k][i] = maximální počet prostředků typu i, které vlákno k může celkem potřebovat.
Matice aktuálních požadavků Q_c (current request matrix) — používaná při detekci; obsahuje prostředky, které vlákna právě nyní aktivně požadují (ne maximální hodnoty jako Q).
Nebezpečný stav (unsafe state) — stav, ze kterého může (ale nemusí) nastat uváznutí; žádná bezpečná posloupnost neexistuje.
Neodnímatelnost (no preemption) — Coffmanova podmínka č. 2: přidělený prostředek nelze vláknu násilím odebrat, musí ho uvolnit dobrovolně.
Neodnímatelný prostředek (nonpreemptable resource) — prostředek, který nelze odebrat bez rizika poškození dat nebo stavu (např. tiskárna).
Odnímatelný prostředek (preemptable resource) — prostředek, který lze vláknu odebrat bez trvalých následků (např. stránka fyzické paměti — lze odložit na disk).
Prevence uváznutí (deadlock prevention) — statické porušení jedné z Coffmanových podmínek ve fázi návrhu programu; nejpraktičtější: vzestupné číslování prostředků (porušení kruhového čekání).
Předcházení uváznutí (deadlock avoidance) — dynamické rozhodování o každém přidělení prostředku (Bankéřův algoritmus); systém nikdy nevstoupí do nebezpečného stavu.
Pštrosí strategie (ostrich algorithm) — ignorování problému uváznutí; vhodné tam, kde je uváznutí vzácné a náklady na sofistikované řešení vysoké. Používá většina univerzálních OS.
Rollback a restart — zotavení: uvázlá vlákna jsou vrácena do dříve uloženého checkpointu a znovu spuštěna. Nedeterminismus snižuje pravděpodobnost opakování uváznutí.
Vektor existujících prostředků E (existence vector) — E[i] = celkový počet prostředků typu i v systému; neměnný.
Vektor volných prostředků F (free vector) — F[i] = počet aktuálně volných prostředků typu i. Platí: E[i] = F[i] + suma(A[k][i]).
Vzájemné vyloučení (mutual exclusion) — Coffmanova podmínka č. 1: prostředek je přidělen nejvýše jednomu vláknu v daném okamžiku; nelze sdílet bez koordinace.
Vzestupné číslování prostředků — technika prevence kruhového čekání: vlákna smí alokovat prostředky pouze v rostoucím pořadí přiřazených čísel; nelze vytvořit cyklus v alokačním grafu.
Výpočetní prostředek (resource) — fyzický (paměť, tiskárna, síťová karta) nebo logický (soubor, mutex, semafor) systémový zdroj, ke kterému vlákna soupeří o přístup.
Zotavení z uváznutí (deadlock recovery) — ukončení uvázlých vláken (jednorázově nebo postupně) nebo rollback a restart; nutná předchozí detekce.
05 Plánování procesů a vláken¶
→ Celá kapitola ve skriptech: Plánování procesů a vláken
CFS (Completely Fair Scheduler) — výchozí plánovač Linuxu pro běžná vlákna; zajišťuje proporcionální přidělování CPU pomocí vruntime a červeno-černého stromu. Vlákno s nejnižším vruntime vždy dostane CPU jako další.
CPU-bound vlákno — vlákno intenzivně využívající CPU, málo blokujících operací; typické pro vědecké výpočty. Dynamická priorita ho penalizuje, ale dává mu větší kvantum.
Červeno-černý strom — vyvážená datová struktura, do které CFS ukládá vlákna setříděná podle vruntime; operace vložení/odebrání v O(log n). Nejlevější uzel = vlákno s nejnižším vruntime.
FCFS (First-Come-First-Served) — kooperativní strategie; vlákno běží, dokud samo neuvolní CPU; FIFO fronta. Minimalizuje přepínání, ale nevhodné pro uživatelská vlákna (jedno vadné vlákno zablokuje systém).
Fiber — v MS Windows vlákno spravované výhradně v uživatelském prostoru; analogie user-level thread modelu many-to-one.
fork-bomba — útok, při kterém proces rekurzivně vytváří nové procesy, dokud nevyčerpá systémový limit; bránit lze příkazem ulimit -u.
Hladovění (starvation) — vlákno s nízkou prioritou nedostává CPU po neomezeně dlouhou dobu, protože jsou neustále přítomna vlákna s vyšší prioritou.
I/O-bound vlákno — vlákno krátce využívající CPU, pak čeká na V/V operace; typické pro databáze a webové servery. Dynamická priorita ho zvýhodňuje.
Job — v MS Windows množina procesů sdílejících kvóty a limity (CPU, paměť, počet procesů).
Kooperativní plánování (cooperative scheduling) — vlákno CPU uvolní samo (dokončení nebo blokující volání); OS ho nepřeruší násilně. Vhodné jen pro prověřená kernel vlákna.
LWP (Lightweight Process) — v Solarisu mapování mezi user-level threads a kernel threads; od Solarisu 8 je podporován pouze model one-to-one.
Model many-to-many — hybridní implementace: m uživatelských vláken namapováno na n kernel vláken (m ≥ n); kombinuje výhody obou přístupů.
Model many-to-one — více uživatelských vláken namapováno na jedno kernel vlákno; blokující systémové volání zablokuje celý proces; nelze využít více jader najednou.
Model one-to-one — každé uživatelské vlákno odpovídá jednomu kernel vláknu; standard v Linux, Windows, macOS; umožňuje paralelismus na více jádrech, ale vyšší režie přepínání.
PCB (Process Control Block) — datová struktura v jádru OS uchovávající informace o procesu: PID, PPID, přidělená paměť, tabulka deskriptorů souborů, bezpečnostní identita. Jedna položka tabulky procesů.
Plánování s odnímáním (preemptive scheduling) — OS odebere CPU vláknu po uplynutí časového kvanta; vhodné pro interaktivní systémy, kratší odezva.
Prioritní RR se statickou prioritou — každé vlákno má pevnou neměnnou prioritu; CPU dostane vlákno z nejvyšší obsazené fronty; nebezpečí hladovění vláken s nízkou prioritou. Linux: SCHED_RR.
Prioritní RR s dynamickou prioritou — priorita a kvantum se mění podle chování vlákna: I/O-bound → priorita +, kvantum ÷2; CPU-bound → priorita -, kvantum ×2. Řeší hladovění a snižuje počet přepnutí. Výchozí v moderních OS.
Response time (doba odezvy) — čas od zadání požadavku do první reakce systému; kritická metrika pro interaktivní aplikace.
Round-Robin (RR) — preemptivní strategie s jednou FIFO frontou; všechna vlákna dostávají stejné kvantum (10–50 ms). Efektivita = tq / (tcs + tq) × 100 %. Odezva zablokovaného vlákna D = pocet_ostatnich × (tcs + tq).
SCHED_BATCH — třída Linuxu pro výpočetně náročné dávkové úlohy; používá CFS, snížená priorita odezvy.
SCHED_FIFO — třída Linuxu pro real-time vlákna s kooperativním FCFS; vlákno běží bez přerušení, dokud se samo nevzdá nebo nepřijde vlákno s vyšší prioritou.
SCHED_IDLE — třída Linuxu pro vlákna běžící pouze při nulové zátěži systému.
SCHED_OTHER — výchozí třída plánování Linuxu pro běžná vlákna; používá CFS.
SCHED_RR — třída Linuxu pro real-time vlákna s preemptivním prioritním RR; statická priorita, pevné kvantum (100 ms).
SYS třída v Solarisu — kooperativní plánování se statickou prioritou; vyhrazeno pro kernel vlákna; běžný uživatel do ní vlákno zařadit nemůže.
Tabulka procesů — zřetězený seznam PCB struktur, který jádro OS udržuje pro všechny aktivní procesy.
TCB (Thread Control Block) — datová struktura pro každé vlákno: TID, registry CPU, zásobník, priorita, stav, plánovací informace.
TS třída v Solarisu (Time Sharing) — preemptivní plánování s dynamickou prioritou a proměnným kvantem; parametry (ts_quantum, ts_tqexp, ts_slpret) definovány tabulkou příkazu dispadmin.
Turnaround time (doba zpracování) — čas od spuštění úlohy do jejího dokončení; kritická metrika pro dávkové úlohy.
Vlákno reálného času (Realtime thread) — vlákno, které musí zareagovat na událost v garantovaném čase; nevyžaduje nutně velký CPU výkon.
Zóna (Solaris) — virtuální instance OS sdílející jádro s hostitelským systémem; obdoba Linux kontejnerů (cgroups/namespaces).
/proc — pseudo-souborový systém v Linuxu existující pouze v RAM; umožňuje číst a nastavovat parametry jádra a informace o procesech (/proc/sys/kernel/threads-max).
ulimit — unixový příkaz pro nastavení limitů procesů/vláken na úrovni uživatele (ulimit -u 100 omezí počet vláken); chrání před fork-bombou.
Efektivita CPU — podíl doby, kdy CPU vykonává užitečnou práci: efektivita = tq / (tcs + tq) pro Round-Robin.
min_vruntime — nejmenší vruntime z aktuálně neblokovaných vláken; při probuzení z blokujícího volání se vruntime vlákna nastaví na tuto hodnotu (vlákno dostane CPU brzy, ale ne příliš velké zvýhodnění).
nice hodnota — číslo -20 až 19 nastavující váhu vlákna v CFS; záporná = vyšší váha = vruntime roste pomaleji = více CPU; kladná = méně CPU.
vruntime (virtual runtime) — vážený běhový čas vlákna v CFS; roste pomaleji pro vlákna s vyšší váhou (nižší nice); vlákno s nejnižším vruntime dostane CPU jako další.
06 Správa paměti¶
→ Celá kapitola ve skriptech: Správa paměti
ASLR (Address Space Layout Randomization) — náhodné posunutí adres segmentů VAS při startu procesu pro ztížení exploitů.
Aging — softwarová simulace LRU: každá stránka má n-bitový čítač C; OS periodicky posune C doprava a nastaví MSB na hodnotu R bitu, poté resetuje R. Oběť = stránka s nejmenším C.
Anonymní VMA — VMA bez svázaného souboru (halda, zásobník, .bss); inicializuje se nulami (demand-zero page).
Aréna (glibc) — oblast paměti + mutex pro správu haldy v jednom vláknu; hlavní aréna pro hlavní vlákno (roste přes sbrk), sekundární pro ostatní (přes mmap).
ASID (Address Space ID) — identifikátor VAS v TLB; umožňuje koexistenci záznamů více procesů v TLB bez nutnosti flush při každém přepnutí kontextu.
Assembler — převádí assembly kód na binární objektový soubor (.o) s nevyřešenými externími symboly; každá sekce začíná od adresy 0.
Base register — registr obsahující fyzickou adresu začátku oblasti procesu; spolu s limit registrem slouží pro relokaci a ochranu adres (historická metoda bez stránkování).
Brk (program break) — konec haldy v adresovém prostoru procesu; posouvá se systémovými voláními brk/sbrk.
Buddy alokátor — alokátor fyzické paměti s oblastmi o velikostech mocnin dvou (2^i); umožňuje rychlé slučování sousedních volných oblastí (buddies). Linux ho používá pro fyzické rámce.
Cache (skrytá paměť) — mezipaměť mezi CPU a hlavní pamětí; funguje na principu časové a prostorové lokality. Průměrný čas přístupu: t_avg = r_h * t_h + (1 - r_h) * t_m.
CMA (Contiguous Memory Allocator) — alokátor pro velké (> 4 MB) souvislé bloky fyzické paměti; rezervuje paměť při startu systému.
COW (Copy-on-Write) — optimalizace při fork(): obě kopie sdílejí rámce do prvního zápisu; při zápisu OS vytvoří novou kopii rámce jen pro zapisující proces.
Demand paging (stránkování na žádost) — stránka se načte do fyzické paměti až při prvním přístupu k ní (page fault); šetří paměť.
Dirty bit D — bit v PTE; nastaví HW při zápisu; 1 = stránka byla modifikována a musí být zapsána na disk (do swap nebo zdrojového souboru) před odstraněním z paměti.
DMA (Direct Memory Access) — přenos dat mezi I/O zařízením a fyzickou pamětí bez účasti CPU; vyžaduje souvislé fyzické oblasti (proto buddy alokátor).
Dynamické linkování — spustitelný soubor odkazuje na sdílené knihovny (.so, .dll); váže symboly za běhu (load-time nebo run-time/lazy binding).
Dynamické oddíly — historická metoda správy paměti alokací jedné souvislé oblasti pro každý proces; trpí fragmentací.
ELF — formát objektových a spustitelných souborů v Linuxu; metadaje dostupná přes readelf -a.
FIFO (algoritmus náhrady stránek) — nahradí stránku, která je v paměti nejdéle; nejjednodušší, ale nejhorší počet výpadků; nezohledňuje nedávnost přístupu. V příkladu: 9 výpadků.
File-backed VMA — VMA svázaná se souborem (.text, dynamická knihovna).
Fragmentace — rozpad fyzické paměti na malé volné ostrůvky, do nichž se nový proces nevejde; řeší ji stránkování.
Fyzická adresa — skutečná adresa v hlavní paměti; výsledek překladu z virtuální adresy přes MMU.
Halda (heap) — oblast VAS pro dynamicky alokovanou paměť (malloc, new); roste od nižších adres nahoru; spravuje ji knihovna glibc.
Hierarchie paměti — víceúrovňová organizace: registry (~1 ns) → L1–L3 cache (~1–10 ns) → hlavní paměť (~50 ns) → SSD (~0,1 ms) → HDD (~10 ms).
Hit ratio (r_h) — podíl přístupů, při nichž jsou data nalezena v cache: r_h = n_h / (n_h + n_m). Klíčový parametr výkonu.
Hlavní paměť (main memory) — fyzická DRAM paměť; nejmenší adresovatelná jednotka je byte; přistupují k ní CPU instrukce load/store.
Huge pages — větší stránky/rámce (2 MB, 1 GB na x86-64); snižují frekvenci TLB miss pro paměťově náročné aplikace (databáze, vědecké výpočty).
Chunk — alokační jednotka haldy v glibc; obsahuje metadata (velikost, příznak obsazenosti) a uživatelská data.
Invertovaná ST — stránkovací tabulka s jedním záznamem na fyzický rámec; jedna pro celý systém; úspora paměti, ale pomalejší překlad (hašování s kolizemi). Používala: PowerPC, UltraSPARC (TSB).
Jednoúrovňová ST — stránkovací tabulka s jedním záznamem (PTE) na každou stránku VAS; na 32-bit CPU se 4KB stránkami = 4 MB na proces. Pro 128 procesů = 512 MB jen na tabulky.
Kompilátor — překládá zdrojový kód do assembly; výstupem jsou symbolické (nevyřešené) adresy.
KPTI (Kernel Page Table Isolation) — obrana proti Meltdown; odděluje stránkovací tabulky jádra od VAS uživatelských procesů.
Limit register — registr obsahující velikost oblasti procesu; přístup za limit vyvolá výjimku (ochrana paměti).
Linker — sloučí objektové moduly do spustitelného souboru (load module); vyřeší nevyřešené symboly a vypočítá adresy sekcí.
Loader — část OS zavádějící program do paměti; vytváří VAS na základě metadat z ELF.
LRU (Least Recently Used) — nahradí stránku, ke které se nejdéle nepřistupovalo; nejlepší aproximace optimálního algoritmu. Obtížná implementace (nutný HW čítač). V příkladu: 7 výpadků.
MMU (Memory Management Unit) — hardwarová jednotka v CPU překládající virtuální adresy na fyzické pomocí stránkovacích tabulek a TLB.
NRU (Not Recently Used) — algoritmus náhrady: třídí stránky do 4 tříd podle R a D bitů (třída 0 = R=0,D=0 = nejlepší oběť; třída 3 = R=1,D=1 = nejhorší). Nahradí z nejnižší neprázdné třídy. V příkladu: 7 výpadků.
Objekový modul (object module) — binární soubor (.o) s přemístitelným kódem a nevyřešenými externími symboly; není přímo spustitelný.
Optimální algoritmus — nahradí stránku, ke které bude přistoupeno nejpozději v budoucnosti; generuje minimální počet výpadků, ale nelze implementovat (nezná budoucnost). Slouží jako referenční mez. V příkladu: 6 výpadků.
Page fault (výpadek stránky) — přerušení nastávající, když MMU zjistí bit P=0 v PTE; OS načte stránku z disku nebo inicializuje nulami, aktualizuje ST a TLB, vrátí řízení procesu.
Paging-out — OS odloží vybrané stránky na disk (swap nebo zdrojový soubor) pro uvolnění rámců.
Present bit P — bit v PTE; 1 = stránka je v hlavní paměti, 0 = page fault.
Prepaging (před-stránkování) — při page fault se načtou i sousední stránky na základě prostorové lokality; snižuje počet I/O operací.
Prostorová lokalita — data blízká aktuálně používaným budou brzy potřeba; proto cache načítá celou cache line a OS předstránkuje sousední stránky.
PTBR (Page Table Base Register) — registr CPU ukazující na top-level stránkovací tabulku aktivního procesu; na x86-64 registr CR3.
PTE (Page Table Entry) — jeden záznam stránkovací tabulky; obsahuje číslo rámce, P bit, D bit, R/A bit, W, X, U/S, C.
Rámec (frame) — pevně velká oblast fyzické paměti stejné velikosti jako stránka (typicky 4 KB).
Reference bit R (Accessed bit A) — bit v PTE; HW ho nastaví při každém přístupu ke stránce (čtení nebo zápis); OS ho periodicky resetuje pro sledování "nedávnosti".
Reverzní mapování — mechanismus (přes anon_vma/address_space) pro dohledání všech procesů mapujících daný fyzický rámec; nutné pro aktualizaci jejich ST po výběru oběti.
Slab alokátor — alokátor jádra OS pro malé objekty fixní velikosti (task_struct, inode…); pracuje nad oblastmi od buddy alokátoru; eviduje se přes cat /proc/slabinfo.
Statické linkování — linker zahrne vše potřebné přímo do spustitelného souboru; program je nezávislý na externích knihovnách.
Stránka (page) — pevně velká oblast VAS (typicky 4 KB na x86-64, 8 KB na SPARC); základ stránkování.
Stránkování (paging) — mechanismus správy paměti: VAS rozdělen na stránky, fyzická paměť na rámce stejné velikosti; v hlavní paměti musí být jen aktuálně potřebné stránky.
Stránkovací tabulka (Page Table, PT) — datová struktura OS mapující čísla stránek VAS na čísla fyzických rámců.
Swap — diskový prostor (oddíl nebo soubor) pro ukládání anonymních stránek odložených z fyzické paměti.
Swapping — dočasné přesunutí celého procesu na disk při kritickém nedostatku paměti; pomalejší než paging-out.
TLB (Translation Lookaside Buffer) — hardwarová n-cestná asociativní cache nedávných překladů adres (stránka → rámec); TLB hit je řádově rychlejší než prohledání ST v paměti.
TLB miss — překlad nebyl nalezen v TLB; nutno prohledat stránkovací tabulku v hlavní paměti.
TLB shootdown — invalidace položek TLB na všech CPU jádrech po změně mapování rámce; nutné při aktualizaci sdílených stránek.
Thrashing (paměťový kolaps) — situace, kdy součet Working Set všech aktivních procesů překročí velikost RAM; procesy si vzájemně kradou rámce, CPU tráví většinu času obsluhou page faultů.
Časová lokalita — data nedávno použitá budou s vysokou pravděpodobností potřeba znovu v blízké budoucnosti; základ efektivity cache.
VAS (Virtual Address Space) — virtuální adresní prostor; izolovaný logický prostor adres každého procesu; instrukce load/store generují virtuální adresy, MMU je překládá na fyzické.
VMA (Virtual Memory Area, struct vm_area_struct) — souvislý blok virtuální paměti s daným účelem (.text, heap, zásobník, knihovna) a přístupovými právy (R, W, X).
Virtuální adresa — adresa generovaná procesem; skládá se z čísla stránky (index do ST) a offsetu (pozice uvnitř stránky/rámce).
Víceúrovňová ST — hierarchická stránkovací tabulka; tabulky nižších úrovní existují jen pro skutečně používané oblasti VAS; šetří paměť. x86-64: 4 úrovně (PML4 → PDPT → PD → PT), index po 9 bitech, 12 bitů offset = 48-bit virtuální adresa.
Working Set (WS) — množina stránek aktivně používaných procesem v daném časovém okně; rozumný počet rámců pro daný proces pro minimální výpadky.
execve() — systémové volání nahrazující obraz procesu novým programem; odstraní starý VAS, vytvoří nový podle ELF, nastaví PC na Entry Point.
mmap() — systémové volání pro mapování souboru nebo anonymní paměti do VAS procesu; základ pro sdílené knihovny, sdílenou paměť a zásobník vláken.
Clock algoritmus — modifikovaný FIFO s kruhovým bufferem a ručičkou; stránky s R=1 dostanou "druhou šanci" (reset R, ručička dál); stránky s R=0 jsou oběti. V příkladu: 8 výpadků.
07 Datová úložiště a souborové systémy¶
→ Celá kapitola ve skriptech: Datová úložiště a souborové systémy
B strom — vyvážený strom řádu n: každý vnitřní uzel má ceil(n/2)–n potomků; O(log N) vložení/smazání/vyhledání. Každý uzel se vejde do jednoho bloku/stránky.
B+ strom — varianta B stromu: vnitřní uzly obsahují pouze klíče a ukazatele, data jsou jen v listech; listy propojeny ukazateli → efektivní sekvenční průchod. Základ moderních FS (NTFS, XFS, BTRFS).
Block Read Ahead — přednačítání sousedních datových bloků do Page cache při I/O požadavku; využívá prostorovou lokalitu; zlepšuje výkon sekvenčního čtení.
Boot block — oblast FS s kódem zavaděče OS (nebo prázdná, není-li oblast bootovatelná).
CHS (Cylinder-Head-Sector) — starší způsob adresování sektorů HDD trojicí [cylindr, povrch, sektor].
COW (Copy-on-Write) — při modifikaci se původní bloky nikdy nepřepisují; nová data jdou do nových bloků, atomicky se přepíše ukazatel v superbloku. Zaručuje vždy konzistentní stav FS + základ snapshotů.
Cylinder Group (CG) — oblast UFS reprezentující skupinu cylindrů s vlastní zálohou superbloku, bitmap a i-nodů; soubor alokován uvnitř jedné CG = hlavičky se pohybují jen v malé oblasti.
DAS (Direct-Attached Storage) — úložiště přímo připojené k systému přes SATA/SAS/…; OS vidí sektory.
Datový blok (cluster) — logická jednotka FS, skupinování sektorů; typicky 1 KB–2 MB dle FS a konfigurace. Administrátor volí velikost při mkfs.
DNLC / Dentry cache — cache v RAM pro přeložená jména adresářů/souborů a jejich v-nody; dramaticky urychluje opakovaný přístup k souborům (7,5× v příkladu).
FAT (File Allocation Table) — tabulka adres bloků souboru: každý řádek obsahuje Free/adresu dalšího bloku/EOF. Adresář si pamatuje jen adresu prvního bloku. Varianty: FAT12/16/32 (28 b fakticky)/exFAT (64 b).
Floating gate MOSFET — typ tranzistoru s plovoucí bránou izolovanou z obou stran; základ NAND flash buňky. Přítomnost náboje = logická 0, absence = logická 1.
FS layout — typické rozložení dat ve FS: boot block → super block → struktury volného prostoru → tabulka i-nodů → datové bloky.
FTL (Flash Translation Layer) — firmware SSD překládající LBA adresy na fyzické NAND stránky/bloky; zajišťuje wear leveling, garbage collection a správu vadných bloků.
FUSE (Filesystem in Userspace) — umožňuje implementovat FS jako uživatelský proces bez zásahu do jádra; nevýhoda: vyšší latence kvůli přepínání kontextu.
Garbage collection (SSD) — proces uvolňování neplatných NAND bloků a přípravy prázdných bloků pro zápis.
Hard link — přímý odkaz na i-node z adresáře; soubor existuje, dokud je alespoň jeden hard link. Nelze přes hranice FS.
HDD (Hard Disk Drive) — magnetické rotační úložiště; data kódována změnou směru magnetizace na feromagnetických plotnách. Seek time 1–10 ms, rotační zpoždění avg 3–6 ms.
I-node (index node) — datová struktura pevné velikosti pro každý soubor/adresář; obsahuje atributy + 12 přímých adres + 1 nepřímou 1. úrovně + 1 nepřímou 2. úrovně + 1 nepřímou 3. úrovně. Základ UFS, Ext2/3/4.
IFS (Installable File System) — API v OS/2 a MS Windows pro dynamické načítání ovladačů FS za běhu.
LBA (Logical Block Addressing) — lineární adresování sektorů sekvenčně od 0; novější a jednodušší než CHS.
Multihosting — jedno úložiště připojeno k více systémům současně (např. přes SCSI nebo SAN).
Multipathing — více nezávislých síťových cest mezi systémem a úložištěm (SAN); zvyšuje propustnost i odolnost.
NAND flash — organizace flash buněk do sériové struktury analogické NAND hradlu; mazání probíhá vždy po celých blocích najednou.
NAS (Network-Attached Storage) — síťové úložiště sdílené přes NFS nebo SMB; OS vidí soubory, nikoliv sektory.
NCQ (Native Command Queuing) — technologie reorderingu příkazů přímo v řadiči SATA disku pro minimalizaci pohybu hlaviček.
NFS (Network File System) — síťový protokol pro sdílení souborového systému v unixových systémech.
Page cache — mezipaměť v RAM pro nedávno použité datové bloky FS; cache hit = data z RAM bez disk I/O. Strategie zápisu: write-behind (interní úložiště) nebo write-through (přenosná média).
Perpendicular Recording — moderní technika záznamu HDD: magnetické domény kolmo na povrch plotny; vyšší hustota záznamu než longitudinal recording.
RAID (Redundant Array of Independent Disks) — sdružení fyzických disků pro kapacitu, výkon a/nebo redundanci.
RAID 0 (striping) — prokládání dat po blocích; žádná redundance; sekvenční R/W až m-krát rychlejší; výpadek jednoho disku = ztráta všech dat.
RAID 1 (mirroring) — zrcadlení na všechny disky; redundance (m-1)/m × 100 %; čtení až m-krát rychlejší; zápis = rychlost jednoho disku.
RAID 10 — kombinace RAID 1 + RAID 0; redundance 50 %; sekvenční R/W až (m/2)-krát rychlejší; IOPS až m-krát.
RAID 5 — prokládání + distribuovaná parita; redundance 100/m %; výpadek jednoho disku; využití (m-1)/m; zápis pomalejší (4 I/O na 1 logický zápis).
RAID 6 — prokládání + dvojitá parita; redundance 200/m %; výpadek dvou disků; využití (m-2)/m; zápis nejpomalejší.
Rotational delay — průměrné rotační zpoždění HDD = polovina doby jedné otáčky = 60 / (2 × RPM) sekund. Při 10 000 RPM ≈ 3 ms.
SAN (Storage Area Network) — dedikovaná síť úložišť (Fibre Channel nebo Ethernet); OS vidí sektory přes síť; podporuje multihosting a multipathing.
SCAN (výtahový algoritmus) — algoritmus plánování přístupu na HDD: hlavičky se pohybují jedním směrem, obslouží vše, pak se otočí. Omezuje stárnutí požadavků.
Seek time — čas přesunu hlaviček HDD nad správný cylindr; typicky 1–10 ms; hlavní složka latence při náhodném přístupu.
Sektor — nejmenší fyzicky adresovatelná jednotka datového úložiště (512 B nebo 4 KB); obsahuje synchronizaci, data a ECC.
Slab alokátor — viz sekce 06.
SLC / MLC / TLC / QLC — typy NAND flash: ukládají 1/2/3/4 bity do jedné buňky; více bitů = vyšší kapacita, nižší trvanlivost a spolehlivost. SLC: 50 000–100 000 zápisů; QLC: 100–1 000 zápisů.
SMB / CIFS / Samba — síťový protokol pro sdílení FS v prostředí MS Windows.
Soft link (symbolický link) — speciální soubor obsahující cestu k cíli; funguje přes hranice FS; při smazání cíle vzniká "dangling link".
SSD (Solid State Drive) — úložiště na bázi NAND flash; bez pohyblivých částí; konstantní latence (nezávislá na poloze); omezený počet zápisů.
SSTF (Shortest Service Time First) — algoritmus plánování HDD: obslouží požadavek nejblíže aktuální pozici hlavičky; lepší výkon než FIFO, ale hrozí stárnutí vzdálených požadavků.
Super block — metadata FS: typ, velikost datových bloků, celková velikost, obsazenost, adresy klíčových struktur; uložen i v záložních kopiích.
UFS (Unix File System / BSD FFS) — klasický unixový FS s i-nody a Cylinder Groups; datový blok 8 KB (Solaris); i-node 128 B; kořenový adresář = i-node č. 2. Inspiroval Ext2/3/4 a HFS+.
V-node (virtual node) — abstraktní reprezentace souboru/adresáře v rámci VFS; každý konkrétní FS implementuje operace nad v-nody po svém.
VFS (Virtual File System) — abstraktní vrstva jádra unixového OS; rozhraní mezi procesy a konkrétními implementacemi FS; zajišťuje, že open, read, write fungují stejně pro ext4, UFS, FAT32 i NFS.
Wear leveling — technika FTL rovnoměrně rozložující zápisy na buňky NAND flash pro prodloužení životnosti SSD.
Write-behind cache (write-back) — zápisová strategie: zápis do Page cache ihned, na disk se zpožděním (flush přes sync()). Výkon vyšší, ale hrozí ztráta dat při výpadku napájení.
Write-through cache — zápisová strategie: zápis do cache i na disk současně; bezpečnější, ale pomalejší. Používá se u přenosných médií.
ZBR (Zone Bit Recording) — technika HDD: vnější zóny stopy mají více sektorů než vnitřní; zvyšuje celkovou kapacitu disku.
ZFS (Zettabyte File System) — moderní FS integrující SW RAID, COW, Merkle strom kontrolních součtů, snapshoty a self-healing. Detekuje a opravuje všechny typy poškození dat (bit corruption, lost/misdirected/torn writes).
Žurnálování (Journaling) — FS zapisuje záznamy o chystaných změnách do žurnálu před jejich provedením; po pádu systému se záznamy přehrají → FS vrácen do konzistentního stavu. Implementují: UFS, Ext3/4, NTFS, XFS.
Žurnál — speciální oblast na disku (nebo externím SSD) pro záznamy o chystaných změnách FS.
Vzorce na jednom místě¶
Tato sekce shrnuje nejdůležitější vzorce a výpočty z celého předmětu.
Cache a paměť¶
| Veličina | Vzorec |
|---|---|
| Průměrný čas přístupu | t_avg = r_h × t_h + (1 - r_h) × t_m |
| Hit ratio | r_h = n_h / (n_h + n_m) |
| Velikost jednoúrovňové ST (32-bit, 4 KB stránky) | 2^20 záznamu × 4 B = 4 MB na proces |
| Počet adres v bloku (stránkovací tabulka) | počet adres = velikost bloku / velikost adresy |
| Maximální velikost souboru přes i-node | (12 + 2^k + 2^2k + 2^3k) × vel. bloku, kde k = log2(blok / adresa) |
Příklad i-node (blok 4 KB, adresa 4 B → k=10):
(12 + 1024 + 1 048 576 + 1 073 741 824) × 4 KB ≈ 4 TB
Plánování — Round-Robin¶
| Veličina | Vzorec |
|---|---|
| Efektivita CPU | tq / (tcs + tq) × 100 % |
| Doba odezvy zablokovaného vlákna D | pocet_ostatnich_vlaken × (tcs + tq) |
| Přepnutí kontextu pro CPU-bound vlákno (zdvojování kvanta) | suma: 1 + 2 + 4 + 8 + ... = N → log2(N) přepnutí (poslední kvantum zkráceno) |
Příklad: vlákno potřebuje 100×T, kvantum se zdvojuje:
1 + 2 + 4 + 8 + 16 + 32 + 37 = 100 → 7 přepnutí (vs. 100 u fixního kvanta)
Algoritmy náhrady stránek (srovnání)¶
| Algoritmus | Výpadků (příklad 12 přístupů, 3 rámce) | Implementace |
|---|---|---|
| Optimální | 6 | nelze (referenční mez) |
| NRU | 7 | jednoduchá (třídy R, D) |
| LRU | 7 | složitá / HW čítač |
| Clock | 8 | střední (kruhový buf. + R bit) |
| Aging | 9 | střední (SW simulace LRU) |
| FIFO | 9 | nejjednodušší (fronta) |
RAID — kapacita a spolehlivost¶
| RAID | Využitá kapacita (m disků) | Odolnost |
|---|---|---|
| RAID 0 | m × kapacita (100 %) |
žádná |
| RAID 1 | 1 × kapacita (50 % pro m=2) |
výpadek m-1 disků |
| RAID 10 | m/2 × kapacita (50 %) |
výpadek 1 disku z každé zrcadlové dvojice |
| RAID 5 | (m-1)/m × celková kapacita |
výpadek 1 disku |
| RAID 6 | (m-2)/m × celková kapacita |
výpadek 2 disků |
Příklad RAID 5: 6 disků po 4 TB → využití 5/6 ≈ 83 % → 20 TB pro data.
Parita v RAID 5: P = D0 XOR D1 XOR ... XOR D_(m-2). Obnova výpadlého D_k: D_k = P XOR D0 XOR ... (všechna ostatní).
Přístup na HDD¶
| Složka | Vzorec / typická hodnota |
|---|---|
| Celková doba přístupu k sektoru | T = seek_time + rotational_delay + transfer_time |
| Průměrné rotační zpoždění | 60 / (2 × RPM) sekund; při 10 000 RPM → 3 ms |
| Sekvenční vs. náhodný přístup | sekvenční bývá 100–400× rychlejší než náhodný |
FAT — limity souborového systému¶
Max. velikost FS = 2^(počet bitů adresy) × velikost datového bloku
Max. velikost FAT = 2^(počet bitů adresy) × velikost jedné položky FAT
Příklad FAT32 (28 b adresa, blok 1 KB):
- Max. FS: 2^28 × 1 KB = 256 GB
- Max. soubor: omezen 32-bit délkovým polem → 4 GB
Bankéřův algoritmus — postup¶
1. Vypočti M = Q - A (chybějící prostředky každého vlákna)
2. Algoritmus bezpečnosti:
a) Najdi neuspokojené vlákno T: M[T] <= F?
ANO → T označit jako hotové, F += A[T], opakuj a)
NE → přejdi na b)
b) Jsou všechna vlákna označena?
ANO → stav je BEZPEČNÝ
NE → stav je NEBEZPEČNÝ (zbylá vlákna jsou potenciálně uvázlá)
Stránkování — struktura adresy¶
Virtuální adresa: [ číslo stránky (page#) | offset ]
Fyzická adresa: [ číslo rámce (frame#) | offset ]
Offset = log2(velikost stránky) bitů
Číslo stránky = (celková šířka adresy) - offset bitů
Příklad: 32-bit adresa, 4 KB stránka → 12 b offset, 20 b číslo stránky → 2^20 = 1M stránek ve VAS.