Skip to content

Co dela operacni system

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

Co dělá operační systém, čili proč to není ta plocha s ikonkami

Zeptej se pěti lidí, co je operační systém, a čtyři popíšou plochu, ikonky a nabídku Start. Pátý řekne „Windows", což je aspoň správný druh odpovědi.

Zdroj zmatku číslo jedna: do jednoho slova se slily tři různé věci - jádro, distribuce a desktop. Server s Debianem 13 nemá plochu ani ikonky a operační systém má.

Tahle stránka říká, co operační systém dělá a proč musí existovat. Neřeší, jak je to udělané uvnitř: plánování, správa paměti i souborový systém mají vlastní stránky. Nepředpokládá nic kromě toho, že jsi někdy pustil program.

Dvě role, které si navzájem odporují

Tohle je nejdůležitější věc na celé stránce: operační systém plní dvě role zároveň a ty dvě role si odporují.

Zaprvé je to rozšířený stroj. Hardware umí přečíst sektor podle čísla a vykonat instrukci, nic víc. Systém nad tím postaví použitelné rozhraní: soubor místo sektorů, proces místo procesoru, virtuální paměť místo RAM, soket místo ethernetových rámců.

Zadruhé je to správce zdrojů. Programů je víc než procesorů, takže někdo musí rozhodnout, kdo dostane co a na jak dlouho - a odebrat to i tomu, kdo se toho vzdát nechce.

Rozšířený stroj přitom každému programu lže. Namlouvá mu, že má počítač sám pro sebe; arbitr ví, že nemá, a dá mu to najevo: sebere mu procesor uprostřed výpočtu nebo odloží jeho paměť na disk.

Skoro každé překvapivé chování systému vzniká na téhle hranici. Když si zapamatuješ tyhle dvě role, zbytek wiki se z nich dá odvodit.

Co abstrahuje a čím to nahrazuje

Vlevo je stroj, vpravo to, co z něj vidí program.

Surový hardware Co z toho vidíš
Sektory na /dev/nvme0n1, adresované číslem Soubor se jménem, právy a pozicí čtení
Jedna sada registrů a jeden čítač instrukcí na jádro Proces, který má procesor sám pro sebe
16 GB fyzické RAM sdílené vším, co běží Souvislý adresní prostor, 48 bitů, jen tvůj
Ethernetové rámce, řadič, DMA a přerušení Soket, do kterého píšeš bajty

Pravý sloupec neexistuje. Soubor je záznam v tabulce, proces struktura v paměti jádra, virtuální adresa číslo překládané hardwarem.

Ta iluze se platí: jedno systémové volání stojí 50-100 ns, přepnutí kontextu jednotky mikrosekund.

Správa zdrojů v čase a v prostoru

V čase se dělí procesor. Osm jader a dvě stě procesů znamená, že naráz běží nejvýš osm. Kdo poběží dál, rozhoduje plánovač - v jádře 6.12 je to EEVDF, který nahradil CFS v jádře 6.6 (2023).

Vynutitelné je to díky časovači. Přerušení vrátí řízení systému bez ohledu na program.

V prostoru se dělí paměť a disk. Každý proces dostane vlastní adresní prostor po stránkách 4 KiB a nemá jak sáhnout do cizího. Když paměť dojde, jádro nejméně užitečné stránky odloží - proces si toho nevšimne, jen mu jedno čtení místo 80 ns trvá 100 µs.

Od dávek k dnešku

Dávkové zpracování, padesátá léta. Programy se odevzdávaly na děrných štítcích a zpracovávaly jeden po druhém. Za první operační systém se obvykle považuje GM-NAA I/O z roku 1956 pro IBM 704; uměl jedinou věc - spustit další úlohu.

Multiprogramování, šedesátá léta. Do paměti se vešlo víc úloh naráz; když jedna čekala na disk, procesor počítal jinou. Manchesterský Atlas měl v roce 1962 stránkování, IBM OS/360 se dodával od roku 1966.

Sdílení času, od roku 1961. CTSS na MIT ukázal, že se procesor dá mezi terminály střídat tak rychle, že každý má dojem vlastního stroje. Následoval Multics (1965) a Unix (1969), od kterého vede přímá čára k dnešku.

Multitasking, který multitasking nebyl

V devadesátkách znamenalo slovo „multitasking" něco jiného než dnes. Windows 3.1 (1992) a po nich řada 9x plánovaly šestnáctibitové programy kooperativně: systém procesor neodebíral, čekalo se, až si program řekne o další zprávu.

Program, který si o zprávu přestal říkat, položil celý systém. Nekonečná smyčka v jediné aplikaci znamenala zamrzlou plochu a restart. Windows 95 už 32bitové programy plánovalo preemptivně, ale starý šestnáctibitový kód uměl zablokovat zbytek systému; NT (1993) a Linux (1991) preemptovaly od začátku.

Co operační systém není

Shell není operační systém. bash je obyčejný program pod UID 1000 bez zvláštních práv. Vyměníš ho za zsh a systém si toho nevšimne.

Grafické prostředí není operační systém. GNOME i KDE jsou programy v uživatelském prostoru; server s nginx žádné nemá.

Distribuce není operační systém. Debian 13 a Ubuntu stojí na stejném jádře; liší se balíčky a verzemi knihoven.

uname -r              # verze jádra, například 6.12.x
cat /etc/os-release   # verze distribuce - úplně jiné číslo

Vrstvy jsou tři a vyplatí se je držet od sebe. Jádro běží v privilegovaném režimu a jako jediné smí na hardware. Systémové knihovny (glibc) jen balí systémová volání do funkcí jazyka C. Uživatelský prostor je všechno ostatní, včetně systemd i tvé plochy.

Obecný, real-time a vestavěný

Typ Kritérium úspěchu Kde ho potkáš
Obecný průměrná odezva, propustnost, spravedlnost Linux, Windows, macOS
Real-time zaručený horní odhad doby odezvy řízení motoru, airbag, obráběcí stroj
Vestavěný paměťová stopa, spotřeba, běh bez obsluhy router, pračka, čtečka knih

U real-time systému nerozhoduje průměr, ale nejhorší případ. Systém, který odpoví průměrně za 200 µs a jednou za den za 40 ms, je pro airbag nepoužitelný. Linux se do téhle role dostane s volbou PREEMPT_RT, od jádra 6.12 (2024) součástí hlavní větve.

Mars Pathfinder, 1997. Sonda po přistání opakovaně restartovala: nízkoprioritní meteorologická úloha držela zámek, na který čekala vysokoprioritní správa sběrnice, zatímco procesor dostávala středněprioritní komunikace. Watchdog to bral jako zatuhnutí a každý restart stál část dat; NASA to opravila na dálku zapnutím dědění priorit. Poučení: inverze priorit není kuriozita, v real-time systému z ní je výpadek.

Kde ta abstrakce prosakuje

Soubor, který zmizí uprostřed čtení. Na síťovém disku může open() uspět a následné read() skončit chybou ESTALE, tedy „Stale file handle", protože soubor na serveru mezitím přestal existovat. Lokálně se to nestane: odkaz zmizí, ale data drží, dokud ho má někdo otevřený.

malloc, který nikdy nevrátí NULL. Linux ve výchozím nastavení paměť přeprodává, tedy slibuje víc, než má.

cat /proc/sys/vm/overcommit_memory   # 0 = heuristika, jádro přeprodává

Alokace uspěje, i když tolik paměti neexistuje. Problém přijde, až na stránku sáhneš a žádná volná není: zasáhne OOM killer a zabije proces - často jiný. Kontrola návratové hodnoty malloc je na Linuxu z velké části obřad.

Shrnutí v jedné větě

Operační systém je lhář, který každému programu namluví, že je na stroji sám, a zároveň arbitr, který ví, že sám není - a zbytek plyne z toho, že obě role dělá týž kus kódu.

Clone this wiki locally