Principy operačního systému
Operačnímu systému, který umí spouštět najednou více úloh, říkáme multitaskový systém. Zřejmě nám bude hned jasné, že ve skutečnosti úlohy nemohou běžet současně, protože procesor může v jednom okamžiku provádět jen jednu instrukci. Pomineme případ počítače s více procesory (tzv. skutečný multitasking). Nelze předpokládat, že procesorů bude vždy dostatečné množství, pro každou úlohu jeden. Snad jen s výjimkou počítačů Cray, ale to není náš případ.
Nejdříve na odbočku k pojmu "úloha". Slovem "program" jsme označili soubor instrukcí pro procesor. Program můžeme načíst z disku. Procesor dostane za úkol tento program vykonat. Dokonce může dostat více úkolů ke zpracování jednoho programu, které běží současně. Pojmem úloha tedy označujeme obecně prováděcí činnost procesoru. Více úloh může pracovat ve stejné datové oblasti procesoru, těmto úlohám pak říkáme "vlákna" a soubor datové oblasti spolu s vlákny označujeme jako "proces". Skupinu programů a dat patřících k sobě a sloužících k vykonávání určité dané činnost nazýváme "aplikací".
Abychom dosáhli (zdánlivě) současného chodu úloh, musí být provádění úloh rychle přepínáno. Procesor bude každou úlohu zpracovávat jen krátký okamžík a pak bude pokračovat s další úlohou. Celková výkonnost takového systému může být vyšší než kdybychom úlohy zpracovávaly postupně za sebou. Je mnoho situací, kdy úloha nepracuje a jen čeká, např. na načtení dat z disku.
Nejjednodušší metodou, jak přepínat procesor mezi úlohami, je dobrovolné předávání řízení - kooperativní (nepreemptivní) multitasking. V tomto případě se jednotlivé úlohy samy rozhodnou, kdy předají procesor další úloze. Tato metoda nevyžaduje podporu od procesoru a byla částečně využívána již v dobách DOS vnitřně u některých programů. Nevýhodou této metody je, že chybně napsaný program může způsobit chybnou funkci nebo až zamrznutí celého počítače.
Moderní operační systémy používají nucený (preemptivní) multitasking. O přidělování procesoru úlohám se stará operační systém na základě pravidelných přerušení od časovače. Výhodou je, že je možné odebrat řízení i zamrznuté nebo jinak chybně fungující úloze.
Nucený multitasking je možné poměrně snadno realizovat již u jednočipových procesorů. O přepínání úloh se stará obsluha přerušení od časovače. Při každém přerušení se uchovají obsahy všech registrů procesoru a návratová adresa, nahradí se obsahy registrů a návratovou adresou jiné úlohy, po návratu z přerušení pokračuje ve vykonávání tato nová úloha.
Nucený multitasking ještě ale není vše co od operačního systému vyžadujeme. Jedná-li se např. o jednočipový procesor tak je jistě v pořádku, že jednotlivé úlohy probíhají různými místy programu a sdílejí spolu datovou oblast v RAM. Ale u osobních počítačů potřebujeme, aby aplikace pracovaly pokud možno na sobě nezávisle. Aby si navzájem nepoškozovaly data, ale především aby chybná funkce aplikace nezpůsobila havárii celého operačního systému. K zajištění tohoto požadavku potřebujeme již dokonalejší podporu procesoru - chráněný (protect) mód procesoru.
Chráněný mód procesoru umožňuje vzájemné oddělení operačního systému od jednotlivých běžících úloh. K tomu má k dispozici několik prostředků.
Nejdůležitějším prostředkem procesoru je "úroveň oprávnění" udávající, jaká práva má běžící úloha, např. které instrukce může provádět. Procesory Intel 386+ (procesory Intel 80386 a vyšší nebo s nimi kompatibilní, dále budeme používat jen označení I386) poskytují 4 úrovně oprávnění, ale většina systémů používá pouze dvě úrovně - úroveň 0 pro operační systém a úroveň 3 pro aplikace (pozor na možnou záměnu - vyšší úroveň oprávnění je označeno nižším číslem než nižší úroveň oprávnění). Přepínání mezi úrovněmi oprávnění se děje voláním služeb operačního systému přes tzv. brány, což může být např. instrukce "int 90h". Nastavením nové adresy programového segmentu procesor přejde od jedné úrovně oprávnění k druhé. Nepovolené operace programu jsou systémem zachyceny díky obsluze chyb procesorem.
Dalším prostředkem procesoru je privátní adresový prostor procesu. Procesor může přemapovávat fyzickou RAM paměť po úsecích zvaných "stránky" (u procesorů I386 má stránka velikost 4 KB) do prakticky libovolného místa v paměti. Tak je možné, aby každý proces měl svou vlastní sadu stránek paměti, nezávislou na ostatních procesech, takže nemůže dojít k vzájemnému ovlivňování mezi procesy.
Zpravidla je fyzické paměti RAM méně než kolik paměti vyžadují všechny běžící procesy. Proto proces nedostává přidělenu skutečnou paměť RAM, ale pouze rezervace paměti. Jednotlivé stránky paměti jsou procesům pouze "zapůjčovány" a mohou být opakovaně použity více procesy současně. To se děje na základě swapování paměti na disk s využitím podpory procesorem. Provede-li procesor přístup do oblasti, ve které není přístupná žádná paměť RAM, vyvolá procesor přerušení a obsluha přerušení zajístí namapování stránky paměti do této oblasti. Není-li stránka procesem dlouho používána, je její obsah uschován do swapovacího souboru, stránka odpojena a může být využita na jiném místě. Trochu to připomíná vlak s kolejnicemi neustále přemisťovanými zezadu dopředu.
Ve skutečnosti nemá proces k dispozici celý možný adresový prostor, ale musí se o něj dělit s operačním sytémem. U systému Litos je 4 GB adresový prostor rozdělen na spodní 2 GB procesu a horní 2 GB operačního systému. Sdílení prostoru si vyžaduje nutnost, aby operační systém měl přístup k datovým oblastem procesu a aby aplikace mohla volat služby operačního systému. Pomocí úrovní oprávnění je zabezpečeno, aby aplikace nemohla nijak poškodit operační systém.
Operační systém dokáže používat pouze tolik paměti RAM, jak je velká virtuální oblast operačního systému. Důvodem je zpřístupnění všech stránek paměti najednou, aby mohly být se stránkami prováděny všechny potřebné operace. Proto používá Litos rozdělení paměti na 2 + 2 GB a je schopen využít pouze 2 GB fyzické paměti. Větší paměť bude možná u 64-bitové verze systému Litos. Klasické operační systémy, jako Linux či Windows, využívají větší fyzickou paměť a to tak, že zbývající paměť nad viditelnou oblastí přemapovávají do okna (64 KB), což je operace zdlouhavá a takto mapované stránky mají problematičtější obsluhu.