Správa procesů, paměti a souborových systémů: jádro operačního systému

Správa procesů, paměti a souborového systému: Jádro OS

Správa procesů, paměti a souborových systémů v operačních systémech

Operační systém (OS) je prostředníkem mezi hardwarem a aplikacemi. Zajišťuje správu procesů (běh programů), správu paměti (přidělování a ochranu adresního prostoru) a správu souborového systému (organizaci dat na úložištích). Tyto tři oblasti se prolínají: plánovač procesů rozhoduje o běhu vláken, paměťový subsystém mapuje jejich adresní prostory do fyzické paměti a cache souborového systému efektivně propojuje I/O s virtuální pamětí.

Model procesů a vláken

Proces je instance programu za běhu se svým adresním prostorem, otevřenými popisovači a stavem. Vlákno je výpočetní jednotka uvnitř procesu, která sdílí jeho adresní prostor. Moderní OS podporují vícevláknové procesy a plánování na úrovni vláken pro lepší paralelismus na více jádrech CPU.

  • Stavy procesu: Running, Ready, Blocked (čekání na I/O, zámek), Terminated.
  • Kontext: registry, zásobník, ukazatel instrukcí, mapy paměti, deskriptory souborů, signály.
  • Kontrola přístupu: UID/GID, schopnosti (capabilities), limity (např. maximální počet otevřených souborů).

Vytváření a ukončování procesů

Proces vzniká rozvětvením či spuštěním binárního souboru (Unix: fork + execve, Windows: CreateProcess). Při ukončení proces vrací návratovou hodnotu a uvolní prostředky; rodič získá stav voláním wait. Některé OS používají pro efektivní vytvoření potomka mechanismus copy-on-write: stránky paměti jsou sdílené, dokud nedojde k zápisu.

Plánování CPU (scheduler)

Plánovač přiděluje CPU běžícím vláknům. Cíle: spravedlnost, propustnost, latence a úspora energie.

  • Preemptivní plánování: běh vlákna přeruší časovač (po uplynutí časového kvanta) a plánovač vybere další vlákno.
  • Algoritmy: Round-Robin, Priority Scheduling (stárnutí, které předchází vyhladovění), Multilevel Feedback Queue, v Linuxu CFS (Completely Fair Scheduler) s virtuálním časem.
  • Afinitní vazba a NUMA: přiřazování vláken k jádrům a uzlům paměti za účelem minimalizace latence.
  • Plánování v reálném čase: třídy FIFO, RR s vyšší prioritou a deterministickou latencí (omezeno rizikem vyhladovění ostatních).

Synchronizace a komunikace mezi vlákny

Souběžně běžící vlákna musí koordinovat přístup ke sdíleným zdrojům, aby se předešlo závodům (race conditions) a uváznutí (deadlockům).

  • Primitiva: mutex, spinlock, semafor, bariéra, podmínková proměnná.
  • IPC: roury (pipes), sokety, fronty zpráv, sdílená paměť, signály, RPC.
  • Předcházení deadlockům: pořadí zámků, časové limity, detekce a zotavení, bezuzamykací struktury (CAS, RCU).

Virtuální paměť: koncepty a důvody jejího použití

Virtuální paměť abstrahuje fyzickou RAM a poskytuje procesům izolované adresní prostory. Umožňuje ochranu (oddělení procesů), flexibilní přidělování, mapování I/O do paměti a využití diskového prostoru (swap/pagefile).

  • Adresní prostor: rozdělený na segmenty (kód, data, zásobníky, heap), mapované pomocí stránek.
  • Stránkování: pevně velké bloky (typicky 4–16 KiB) a velké stránky (2 MiB, 1 GiB) pro snížení počtu výpadků TLB.
  • MMU a TLB: hardwarová podpora překladu adres; cache TLB urychluje mapování virtuálních adres.

Správa stránek, přidělování a uvolňování

Jádro udržuje tabulky stránek (page tables) a algoritmy, které rozhodují o umísťování a odstraňování stránek z paměti.

  • Algoritmy výměny: LRU a jeho aproximace (Clock, NRU), model Working Set.
  • Overcommit: OS může „slíbit“ více paměti, než je fyzicky k dispozici, a spoléhat na to, že aplikace nealokují vše současně.
  • Copy-on-write: stránky sdílené až do zápisu; šetří alokace při fork a mapování souborů.
  • Alokace na NUMA: přednostní přiřazení stránek k uzlu, na němž běží vlákno, pro dosažení nižší latence.

Heap, zásobník a alokátory

Vedle stránek řeší OS nebo uživatelská knihovna také jemnozrnnou alokaci.

  • Zásobník (stack): automaticky se zvětšuje či zmenšuje podle volání funkcí; proti přetečení jej chrání ochranná stránka.
  • Heap: spravovaný alokátorem (glibc ptmalloc, jemalloc, tcmalloc); strategie: buddy systém, oddělené třídy, alokátory slabů, mezipaměť pro jednotlivá vlákna.
  • Fragmentace: interní nebo externí; zmírňuje se pomocí slabů, defragmentace a vracení stránek OS.

Ochrana paměti a bezpečnost

Jádro uplatňuje ochranu na úrovni stránek a segmentů, aby zabránilo zneužití.

  • Bity R/W/X: zásada W^X (paměť není současně zapisovatelná a spustitelná).
  • ASLR: náhodné rozmístění adres znesnadňuje zneužití zranitelností (knihovny, zásobník, heap).
  • Ochranné stránky a stack canary: detekce přetečení zásobníku.
  • IOMMU: izolace přístupu zařízení k paměti prostřednictvím DMA.

Mapování souborů do paměti (mmap) a stránkovací cache

Souborový systém a virtuální paměť se propojují prostřednictvím mechanismů page cache a mmap. Čtení a zápis souborů probíhá přes cache, která uchovává často používané bloky v RAM. Soubory mapované do paměti umožňují aplikacím přistupovat k souborům jako k paměti, čímž omezují kopírování a snižují latenci I/O.

Architektura souborových systémů

Souborový systém (FS) organizuje data do stromu adresářů a souborů s metadaty (práva, časová razítka, odkazy). Systémová vrstva (např. VFS v Unixe) nabízí jednotné API pro konkrétní FS (ext4, XFS, NTFS, APFS, ZFS) i pseudo-FS (procfs, sysfs).

  • Inody a adresáře: inode obsahuje metadata a mapování bloků; adresáře mapují názvy na inody.
  • Žurnálování: zaznamenávání metadat či dat pro odolnost vůči výpadkům (režimy žurnálování: pouze metadata, uspořádaný zápis, zpětný zápis).
  • Kopírování při zápisu (COW): ZFS, Btrfs a APFS zapisují nové verze bloků a uchovávají snímky bez přepisování.
  • ACL a rozšířené atributy: jemnozrnná oprávnění a rozšířená metadata.

Cache, zpětný zápis a konzistence

Cesta I/O zahrnuje několik úrovní cache: page cache v OS, cache řadiče disku, cache SSD (SLC/TLC) a NVRAM. Proces writeback periodicky zapisuje změněné stránky na úložiště; bariéry (FUA, flush) a řazení zápisů zajišťují konzistenci se žurnálem nebo schématem COW.

Alokace a organizace bloků

FS se snaží o lokálnost a nízkou fragmentaci:

  • Extenty: popis rozsahu po sobě jdoucích bloků namísto seznamu bloků.
  • Alokátory: buddy a bitmapové alokátory, skupiny (XFS AG), odložené přidělování (delayed allocation) pro lepší rozmístění.
  • TRIM/Discard: informování SSD o uvolněných blocích pro zachování výkonu.

Integrita, RAID a odolnost

Spolehlivost FS ovlivňují podkladové vrstvy úložiště.

  • RAID: 1/5/6/10/50/60 – kompromisy mezi kapacitou, výkonem a odolností; problém write hole řeší cache s BBU nebo souborový systém COW.
  • Kontrolní součty: ZFS a Btrfs ověřují data i metadata od začátku do konce a automaticky provádějí samoopravu (s využitím redundance).
  • Snímky a klony: okamžité konzistentní body v čase; efektivní základ pro zálohování a testování.

Jmenný prostor a připojování souborových systémů

VFS umožňuje připojit více FS do jednoho stromu. Jmenný prostor připojení v kontejnerech izoluje pohled na souborový strom. Bind mounts, overlay FS (např. pro kontejnery) a síťové FS (NFS, SMB, 9P) rozšiřují flexibilitu.

Oprávnění a bezpečnost souborového systému

Bezpečnost se opírá o modely oprávnění a audit.

  • Oprávnění POSIX: rwx pro uživatele, skupinu a ostatní; umask určuje výchozí oprávnění.
  • ACL: podrobnější řízení přístupu pro více subjektů; rozšíření nad rámec POSIX nebo NTFS DACL.
  • Šifrování: na úrovni FS (eCryptfs, fscrypt), na úrovni bloků (dm-crypt/LUKS, BitLocker) či na aplikační úrovni.
  • Audit: auditd, USN Journal (NTFS), rozšířená metadata a protokoly pro forenzní analýzu.

Správa vstupně-výstupních operací (I/O) a plánování

Bloková vrstva používá fronty a plánovače (deadline, BFQ, Kyber) k vyhlazování latencí a upřednostňování zátěží. Asynchronní I/O, io_uring a DMA snižují režii systémových volání a kopírování dat.

Interakce OS s úložišti: HDD vs. SSD vs. NVMe

SSD/NVMe nabízejí vysokou paralelitu a nízkou latenci; OS využívá více front, větší hloubku front a dotazování s minimální režií. HDD upřednostňují sekvenční přístup; souborové systémy s odloženým přidělováním a extenty minimalizují pohyby čtecích hlav.

Propojení s kontejnery a virtualizací

Virtualizace přidává další vrstvy: hypervizor plánuje vCPU na pCPU, hostitelský OS spravuje paměť a souborový systém, zatímco hostované systémy (VM) mají vlastní plánovače a FS. Mechanismy ballooning a deduplikace paměti (KSM) umožňují efektivně sdílet paměť mezi VM. V kontejnerech jádro sdílí plánovač a paměťový subsystém; izolaci zajišťují jmenné prostory a cgroups (CPU, paměť, I/O).

Monitorování a ladění

  • Procesy: metriky CPU (uživatelský/systémový režim), běžící a čekající vlákna, přepínání kontextu, latence plánovače.
  • Paměť: využití RSS/VSZ, výpadky stránek (major/minor), tlak na paměť (kswapd), výpadky TLB.
  • Souborový systém: míra zásahů do page cache, změněné stránky, IOPS/propustnost/latence, hloubka fronty.
  • Nástroje: perf, sondy eBPF (kprobes, uprobes), iostat, vmstat, sar, strace, ftrace, Windows Performance Analyzer.

Kompromisy ve výkonu a anti-patterny

  • Thundering herd: příliš mnoho vláken čekajících na stejný zdroj → použít epoll/kqueue/IOCP a řízení zpětného tlaku.
  • Malé náhodné I/O: zhoršuje výkon HDD i SSD → dávkování, přednačítání, přeuspořádání bloků.
  • Nadměrná fragmentace heapu: zmírnit vhodnou volbou alokátoru a fondů, recyklovat objekty.
  • Neřízený overcommitment: může vést ke spuštění OOM killeru v Linuxu nebo k drastickému stránkování na disk.

Spolehlivost, zotavení a konzistence

OS musí po pádu zachovat konzistenci: žurnálování omezuje potřebu kontroly souborového systému pomocí fsck; COW umožňuje vytvářet atomické snímky a rychle vracet změny. Mechanismy jako watchdog, detekce soft-lockupu a panic-on-oops chrání před tichými chybami.

Bezpečnostní aspekty správy procesů a paměti

  • Sandboxing: seccomp, AppArmor/SELinux, Job Objects/Integrity Levels; omezují systémová volání a oprávnění procesů.
  • Omezení zdrojů: cgroups/rlimit brání vyčerpání CPU, paměti a I/O (DoS).
  • Ochrana před ROP/JOP: DEP/NX, ASLR, integrita řídicího toku, shadow stack.

Trendy a směřování

  • Heterogenní architektury: plánování na CPU/GPU/DPU; přesun zpracování I/O a kryptografie na smartNIC.
  • Trvalá paměť: DAX a přímé mapování NVMe-over-Fabrics, nové FS optimalizované pro paměť NVM s adresováním po jednotlivých bajtech.
  • Observabilita založená na eBPF: dynamické sondování bez změn jádra a s nižší režií.

Závěr

Správa procesů, paměti a souborového systému tvoří jádro funkcí operačního systému. Efektivní plánování CPU, robustní virtuální paměť a moderní souborové systémy se žurnálem nebo COW zajišťují výkon, spolehlivost a bezpečnost. Pochopení jejich vzájemných interakcí – od page cache přes plánovač až po plánování I/O a bezpečnostní model – je klíčové pro návrh i provoz škálovatelných a odolných systémů.