Skip to content

Slovnicek

Martin Skalicky edited this page Aug 7, 2026 · 1 revision

Slovníček

Zkratky a pojmy, na které narazíš. Řazeno abecedně.

ABI - dohoda o tom, jak se volání předává na úrovni strojového kódu: v jakých registrech jsou argumenty a jaká čísla mají jednotlivá volání. Na rozdíl od API se nesmí měnit nikdy. Viz systémová volání.

ACL - rozšířená práva nad rámec devíti bitů, kterými se dá dát právo konkrétnímu uživateli. getfacl, setfacl. Viz práva.

Adresní prostor - množina adres, které proces vidí. Není to paměť, je to seznam slibů - většina z nich nemá za sebou nic, dokud se jich proces nedotkne. Viz správa paměti.

Anonymní stránka - stránka paměti, která nemá kopii v žádném souboru (halda, zásobník). Nedá se zahodit, musí se odložit do swapu. Viz výměnné algoritmy.

ASLR - náhodné umístění zásobníku, haldy a knihoven v adresním prostoru, aby útočník nevěděl, kam skočit. Viz virtuální paměť.

Atomická operace - operace, kterou nelze přerušit v půlce. x = x + 1 atomická není, lock cmpxchg ano. Na tom stojí všechny zámky. Viz kritická sekce.

Bankéřův algoritmus - postup pro vyhýbání se uváznutí, který povolí přidělení jen tehdy, zůstane-li systém v bezpečném stavu. V operačních systémech se nepoužívá, protože vyžaduje dopředu znát maximální nároky. Viz uváznutí.

Beládyho anomálie - jev, kdy FIFO při větší paměti udělá víc výpadků stránek. LRU ji nemá. Viz výměnné algoritmy.

Blokové zařízení - zařízení s adresovatelnými bloky a vyrovnávací pamětí (disk). Proti němu stojí znakové zařízení, které je jen proud bajtů. Viz vstup a výstup.

Capabilities - rozdělení práv roota na jednotlivé pravomoci (CAP_NET_BIND_SERVICE, CAP_NET_RAW) místo „všechno nebo nic". Dnešní náhrada za setuid. Viz práva.

CFS - plánovač Linuxu založený na virtuálním běhovém čase, výchozí od roku 2007. Od jádra 6.6 (rok 2023) ho nahradil EEVDF. Viz plánování.

cgroups - mechanismus jádra, kterým se skupině procesů omezí procesor, paměť, vstup a výstup nebo počet procesů. Jedna ze tří věcí, na kterých stojí kontejnery. Viz virtualizace a kontejnery.

Clock (druhá šance) - levná aproximace LRU postavená na jediném bitu „bylo přistoupeno". To, co se skutečně používá. Viz výměnné algoritmy.

Copy-on-write - stránka se sdílí, dokud do ní někdo nezapíše; teprve pak vznikne kopie. Proto je fork levný i u procesu s osmi gigabajty. Viz virtuální paměť.

cr3 - registr procesoru s adresou kořene tabulek stránek. Jeho přepsání znamená výměnu celého adresního prostoru a je to nejdražší část přepnutí procesu. Viz přepínání kontextu.

Dentry - záznam v mezipaměti překladu jmen na i-uzly. Bez něj by každý průchod cestou znamenal několik čtení z disku. Viz VFS.

Deskriptor souboru - malé celé číslo, index do tabulky otevřených souborů procesu. 0, 1 a 2 jsou standardní vstup, výstup a chybový výstup. Viz VFS.

Dirty COW - zranitelnost jádra z roku 2016 (CVE-2016-5195), souběh v obsluze copy-on-write umožňující zápis do souboru jen pro čtení. V jádře byla devět let. Viz virtuální paměť.

DMA - přenos dat mezi zařízením a pamětí bez účasti procesoru. Obchází ochranu paměti, a proto existuje IOMMU. Viz vstup a výstup.

eBPF - cizí kód spuštěný v jádře, ale jen poté, co projde ověřovatelem. Řízená mezera v hranici mezi jádrem a uživatelským prostorem. Viz architektury jádra.

EEVDF - výchozí plánovač Linuxu od jádra 6.6 (rok 2023). Proti CFS řeší navíc latenci, ne jen spravedlivé rozdělení času. Viz plánování.

epoll - způsob, jak jedno vlákno hlídá tisíce deskriptorů. Nahradil select s limitem 1024. Viz vstup a výstup.

errno - proměnná s číslem poslední chyby. Nastavuje ji knihovna, ne jádro - to vrací záporné číslo. Číst ji po úspěšném volání nedává smysl. Viz systémová volání.

Extent - souvislý rozsah bloků zapsaný jedním záznamem. Nahradil v ext4 klasické nepřímé bloky a u velkých souborů výrazně zmenšil metadata. Viz souborový systém.

FCFS - plánování v pořadí příchodu. Jednoduché a náchylné na konvojový efekt: jedna dlouhá úloha zdrží všechny za sebou. Viz plánování.

fork - systémové volání, které vytvoří kopii procesu. Vrátí nulu potomkovi a PID rodiči. Kopíruje tabulky, ne paměť. Viz procesy.

fsck - kontrola souborového systému. Před žurnálováním musela po každém výpadku projít celý disk. Na připojený svazek se nepouští. Viz žurnálování.

fsync - jediné volání, které skutečně dostane data z page cache na disk. Bez něj write neznamená „zapsáno". Viz žurnálování.

FUSE - souborový systém napsaný jako běžný program v uživatelském prostoru. Pomalejší, protože každá operace je přechod do jádra a zpět, ale jediná rozumná cesta pro sshfs nebo rclone. Viz VFS.

Futex - stavební kámen zámků v Linuxu. Dokud o zámek nikdo nesoupeří, do jádra se vůbec nechodí, a proto je dnešní mutex levný. Viz kritická sekce.

Halda - oblast adresního prostoru, ze které přiděluje malloc. Roste směrem nahoru. Viz správa paměti.

Hypervizor - vrstva, která provozuje virtuální stroje. Typ 1 běží přímo na železe, typ 2 nad hostitelským systémem. Viz virtualizace.

i-uzel (inode) - datová struktura popisující soubor: práva, vlastník, časy, velikost a ukazatele na data. Neobsahuje jméno souboru. Viz souborový systém.

initramfs - dočasný kořenový systém v paměti, jehož jediným úkolem je najít a připojit ten skutečný. Existuje kvůli tomu, že ovladač kořenového disku leží na kořenovém disku. Viz start systému.

io_uring - rozhraní pro asynchronní vstup a výstup s dávkovanými požadavky přes sdílené fronty, od jádra 5.1 (rok 2019). Dnešní odpověď na cenu systémových volání. Viz vstup a výstup.

IOMMU - jednotka, která překládá adresy pro zařízení a tím zavádí ochranu paměti i pro DMA. Viz vstup a výstup.

IOPS - počet operací za vteřinu. U plotnového disku řádově stovky, u NVMe statisíce - a proto se na nich databáze chová úplně jinak. Viz vstup a výstup.

IRQ - žádost o přerušení od hardwaru. cat /proc/interrupts ukáže, kolik jich přišlo a odkud. Viz přerušení.

Jmenný prostor (namespace) - mechanismus, kterým skupina procesů vidí vlastní sadu PID, přípojných bodů, síťových rozhraní nebo uživatelů. Viz kontejnery.

Kernel panic - jádro narazilo na stav, ze kterého nemá jak pokračovat, a zastaví se. Proti tomu pád procesu, který systému nevadí. Viz režim jádra.

Konvojový efekt - jedna dlouhá úloha vpředu drží frontu krátkých úloh za sebou. Viz plánování.

KPTI - oddělení tabulek stránek jádra a uživatelského prostoru, zavedené jako obrana proti Meltdownu v roce 2018. Zdražilo každé systémové volání. Viz režim jádra.

Kritická sekce - úsek kódu, ve kterém smí být nejvýš jedno vlákno naráz. Viz kritická sekce a zámky.

Kvantum - doba, po kterou smí proces běžet, než ho plánovač odstaví. Krátké znamená hodně přepínání, dlouhé znamená špatnou odezvu. Viz plánování.

Livelock - procesy se hýbou, reagují na sebe a nepostupují. Na rozdíl od uváznutí nic nestojí, jen se nic neděje. Viz uváznutí.

Lokalita - sklon programu sahat opakovaně na stejná místa (v čase) a na místa blízko sebe (v prostoru). Bez ní by nefungovala žádná mezipaměť. Viz výměnné algoritmy.

LRU - vyhoď stránku, která se nejdéle nepoužila. Nejlepší praktický odhad optimálního algoritmu, přesně se ale neimplementuje. Viz výměnné algoritmy.

malloc - knihovní alokátor, ne systémové volání. Do jádra chodí zřídka, a proto free paměť systému většinou nevrátí. Viz správa paměti.

Meltdown a Spectre - zranitelnosti procesorů zveřejněné v roce 2018, které přes spekulativní vykonávání a mezipaměť umožnily číst paměť jádra. Viz režim jádra.

Mikrojádro - architektura, kde v jádře zůstane jen plánování, správa paměti a předávání zpráv, a ovladače jsou běžné procesy. Viz architektury jádra.

MLFQ - víceúrovňové fronty se zpětnou vazbou. Úloha, která se sama vzdá procesoru, si drží prioritu; úloha, která vyčerpá kvantum, klesne. Viz plánování.

MMU - jednotka procesoru, která při každém přístupu překládá virtuální adresu na fyzickou podle tabulek stránek. Viz virtuální paměť.

Monitor - kritická sekce zabalená do datového typu, kde zamykání zařídí překladač. synchronized v Javě, pthread_cond_t v C. Viz semafory a monitory.

Monolitické jádro - všechno podstatné běží v jednom adresním prostoru s plnými právy. Linux, a je to většinový model. Viz architektury jádra.

Mutex - zámek s vlastníkem: odemknout ho smí jen ten, kdo ho zamkl. Tím se liší od semaforu. Viz kritická sekce.

nice - číslo od -20 do 19, kterým se posouvá váha procesu při plánování. Procesu čekajícímu na disk nepomůže. Viz plánování.

NMI - nemaskovatelné přerušení, které se nedá zakázat. Používá se na watchdog a hlášení hardwarových chyb. Viz přerušení.

NX bit - příznak v tabulce stránek, který zakáže spuštění kódu z datové stránky. Viz virtuální paměť.

OOM killer - když už není co odložit, jádro vybere podle skóre proces a zabije ho. Typicky ten největší, což bývá ta databáze, kterou chráníš. Viz výměnné algoritmy.

Ovladač - kód, který překládá mezi jednotnou sadou operací a konkrétním kusem železa. V monolitickém jádře běží s plnými právy. Viz vstup a výstup.

Page cache - mezipaměť jádra nad obsahem souborů. Proto je druhé čtení téhož souboru okamžité a proto free ukazuje málo volné paměti. Viz vstup a výstup.

Paravirtualizace - hostovaný systém ví, že běží ve virtuálu, a používá zjednodušené ovladače (virtio) místo emulace skutečného hardwaru. Viz virtualizace.

PCB - záznam, ve kterém si jádro pamatuje všechno o procesu. V Linuxu struct task_struct. Viz procesy.

PCID - identifikátor adresního prostoru v položkách TLB, díky kterému se při přepnutí procesu nemusí TLB zahazovat celá. Viz přepínání kontextu.

Petersonův algoritmus - softwarové řešení vzájemného vyloučení pro dva procesy. Dnes se nepoužívá, protože bez paměťových bariér neplatí. Viz kritická sekce.

Pevný odkaz - další jméno téhož i-uzlu. Soubor zmizí, až když na něj neukazuje žádné jméno ani žádný otevřený deskriptor. Viz souborový systém.

PID 1 - první proces systému. Adoptuje sirotky a nesmí skončit. Viz start systému.

Preemptivní plánování - jádro smí procesu odebrat procesor, i když o to nežádá. Opak je kooperativní multitasking, kde stačil jeden zaseknutý program a stál celý systém. Viz plánování.

Prstenec (ring) - úroveň oprávnění procesoru. Na x86-64 jsou čtyři a používají se dvě: 0 pro jádro, 3 pro programy. Viz režim jádra.

procfs - virtuální souborový systém v /proc, kde jsou procesy adresáře a stav jádra soubory. Všechny diagnostické nástroje čtou hlavně odsud. Viz VFS.

PSI - ukazatele tlaku na procesor, paměť a vstup a výstup v /proc/pressure/, od jádra 4.20 (rok 2018). Poctivější než zátěž. Viz nástroje.

Přepínání kontextu - výměna běžícího procesu nebo vlákna za jiné. Registry jsou to levné, studená mezipaměť to drahé. Viz přepínání kontextu.

Přerušení - asynchronní žádost hardwaru o pozornost, kvůli které procesor odloží, co počítá. Viz přerušení a výjimky.

Přeprodávání paměti (overcommit) - jádro slíbí víc paměti, než má. Proto malloc skoro nikdy nevrátí NULL a proto tě může zabít OOM killer. Viz správa paměti.

Rámec - kus fyzické paměti o velikosti stránky. Stránka je virtuální, rámec fyzický. Viz virtuální paměť.

Round Robin - každý dostane kvantum a jde na konec fronty. Celý spor je o délku toho kvanta. Viz plánování.

RSS - kolik fyzické paměti proces právě zabírá. Zavádějící, protože sdílené knihovny se započítají každému procesu zvlášť. Viz správa paměti.

Sdílená paměť - nejrychlejší meziprocesová komunikace, protože data neprocházejí jádrem. Synchronizaci si musíš dodat sám. Viz IPC.

seccomp - filtr povolených systémových volání pro proces. Stojí na něm izolace v prohlížečích i v kontejnerech. Viz systémová volání.

Segmentace - starší způsob dělení paměti na oblasti proměnné délky. Na x86-64 prakticky zmizela, zůstala jen v fs a gs. Viz správa paměti.

Semafor - počítadlo dostupných kusů zdroje s operacemi P a V. Nemá vlastníka, a proto to není zámek. Viz semafory a monitory.

setuid - bit, kvůli kterému program běží s právy vlastníka souboru, ne toho, kdo ho spustil. Zdroj většiny lokálních zranitelností v unixových systémech. Viz práva.

Signál - asynchronní oznámení procesu nesoucí jedno číslo. Není to komunikační kanál a může se ztratit. Viz IPC.

Sirotek - proces, jehož rodič skončil dřív. Adoptuje ho PID 1. Viz procesy.

SJF - nejkratší úloha první. Optimální průměrná doba čekání a nepoužitelné, protože délku dopředu nikdo nezná. Viz plánování.

SMEP a SMAP - ochrany procesoru, které jádru zakážou spustit kód a sáhnout na data v uživatelském prostoru. Viz režim jádra.

Souběh (race condition) - výsledek závisí na tom, jak se dvě vlákna prostřídají. Neprojeví se, dokud nezměníš časování - proto ho testy nechytí. Viz kritická sekce.

Spinlock - zámek, který místo uspání aktivně čeká. Má smysl jen tam, kde se nesmí spát a čeká se kratší dobu, než trvá přepnutí. Viz kritická sekce.

Sticky bit - na adresáři znamená, že soubor smí smazat jen jeho vlastník. Proto ti v /tmp nikdo nesmaže data. Viz práva.

Stránka - jednotka, po které se přiděluje paměť. Na x86-64 obvykle 4 KiB, velké stránky 2 MiB. Viz virtuální paměť.

Superblok - popis připojeného souborového systému: velikost, typ, kde jsou i-uzly. Viz VFS.

Swap - místo na disku, kam se odkládají stránky, o které se dlouho nikdo nepřihlásil. Není to náhradní RAM. Viz výměnné algoritmy.

swappiness - poměr, v jakém jádro sahá na anonymní stránky proti souborovým. Ne „jak moc se má swapovat". Viz výměnné algoritmy.

Symbolický odkaz - malý soubor obsahující cestu. Když cíl zmizí, odkaz zůstane a ukazuje do prázdna. Viz souborový systém.

Systémové volání - řízený vstup do jádra na jediném předem daném místě. Není to volání funkce. Viz systémová volání.

systemd - dnešní init v většině distribucí. Startuje služby paralelně podle závislostí a dohlíží na ně přes cgroups. Viz start systému.

Tabulka stránek - struktura, podle které MMU překládá adresy. Na x86-64 čtyřúrovňová, volitelně pětiúrovňová. Viz virtuální paměť.

Thrashing - systém stráví víc času stránkováním než prací. Zvenku vypadá jako nevytížený procesor a disk na sto procentech. Viz výměnné algoritmy.

TLB - malá mezipaměť překladů adres. Bez ní by každý přístup do paměti znamenal několik dalších. Viz virtuální paměť.

tmpfs - souborový systém existující jen v paměti. Soubory v něm se počítají do spotřeby paměti a při restartu zmizí. Viz VFS.

UEFI - dnešní firmware, který nahradil BIOS. Zavaděč je obyčejný soubor na FAT32 oddílu, disk má tabulku GPT. Viz start systému.

UID a GID - čísla uživatele a skupiny. Jádro jména nezná, pracuje jen s čísly, a root je prostě UID 0. Viz práva.

umask - maska bitů, které se novým souborům odeberou. Výchozí 022 je důvod, proč má nový soubor práva 644. Viz práva.

Uváznutí (deadlock) - dva a víc procesů čeká navzájem na to, co drží ten druhý. Nastane jen při současné platnosti čtyř podmínek. Viz uváznutí.

vDSO - kus kódu jádra namapovaný do každého procesu, díky kterému některá volání (clock_gettime) do jádra vůbec nedojdou. Viz systémová volání.

VFS - vrstva jádra, která dává všem souborovým systémům i zařízením jednu sadu operací. Důvod, proč cat funguje na disk, síť i /dev/urandom. Viz VFS.

Virtuální paměť - adresy, které vidí program, nejsou adresy v paměti; jsou to indexy do tabulek, které vede jádro a překládá hardware. Viz virtuální paměť.

Vlákno - běhová jednotka uvnitř procesu. Vlastní má jen zásobník, registry a errno, zbytek sdílí. Viz vlákna.

Vyhladovění - proces nikdy nedostane, na co čeká, protože ho pořád někdo předběhne. Viz uváznutí.

Výjimka - synchronní událost způsobená prováděnou instrukcí: dělení nulou, neplatná instrukce, výpadek stránky. Viz přerušení a výjimky.

Výpadek stránky - přístup na adresu, která nemá platný záznam v tabulce. Měkký se vyřídí v paměti, tvrdý vyžaduje čtení z disku a je zhruba tisíckrát dražší. Viz virtuální paměť.

Working set (pracovní soubor) - množina stránek, které proces v daném okně skutečně používá. Dostane-li jich míň, začne thrashing. Viz výměnné algoritmy.

Zámek - obecně cokoliv, co vynutí vzájemné vyloučení. Konkrétní podoby jsou mutex, spinlock a čtenářsko-zapisovatelský zámek. Viz kritická sekce.

Zásobník - oblast adresního prostoru pro lokální proměnné a návratové adresy. Roste dolů, implicitně má 8 MiB, a každé vlákno má vlastní. Viz správa paměti.

Zombie - proces, který skončil, ale nikdo si nepřevzal jeho návratový kód. Nedá se zabít, protože už je mrtvý. Viz procesy.

Žurnálování - zápis záměru do vyhrazené oblasti dřív, než se změna provede. Chrání strukturu souborového systému, ne obsah tvých souborů. Viz žurnálování.

Clone this wiki locally