Přeskočit na obsah

Preempce (informatika)

Z Wikipedie, otevřené encyklopedie

Šablona:Upravit - informatika

Preemptivní plánování procesu (neboli plánování s předbíháním) je metoda, kterou využívá operační systém pro přidělování svého výpočetního času jednotlivým spuštěným procesům.

Systém může předejít či zastavit právě naplánovanou úlohu ve prospěch úlohy s vyšší prioritou. Plánování používané v nejmodernějších operačních systémech jako například různé typy UNIXu, mohou zastavit uživatelské procesy. Toto se nazývá preemptivní multitasking a je v kontrastu s kooperativním multitaskingem kde je proces „dán stranou“ v době kdy jádro čerpá prostředky, nebo při specifickém volání rutiny jádra k tomu, aby ostatní procesy dostaly čas pro běh. Plánování u některých operačních systémů (třebu v Linuxu verze 2.6) má schopnost zabránit proces, zatímco je vykonáváno systémové volání stejně jako (preemptivní jádro). Windows XP, Windows Vista, Linux, Unix, Amiga OS, *BSD, Mac OS X, a Windows NT jsou všechno příklady operačních systémů které používají preemptivní multitasking; NetWare, Windows for Workgroups, a Mac OS verze 9.x nebo mladší, jsou všechno příklady kooperativních multitaskingových operačních systémů.

Preemptivní multitasking

Preemptivní multitasking je jeden ze způsobů multitaskingu. K pochopení této koncepce srovnáme s kooperativním paralelním zpracováním (cooperative multiprocessing), ve kterém jenom aktivní úloha (známe jako proces) může zavést změnu kontextu, protože úloha musí:

  1. Ukončit běh programu
  2. Stát se blokovaná ve sdílených systémových prostředcích
  3. Vzdát se procesoru, podobně jako kooperativní úloha

U preemptivního multitaskingu, může jádro operačního systému také zavést změnu kontextu ke splnění omezení priority rozhodování, čili k zabránění aktivní úlohy. Jestliže v tomto případě úloha s vyšší prioritou vezme současně běžící úlohu, tak to nazýváme preemptivní plánování.

Preemptivní multitasking dovoluje počítačovému systému spolehlivěji garantovat každému procesu stejný díl operačního času. To také dovoluje systému rychleji jednat s důležitými externími událostmi, jako příchozí data, které vyžadují okamžitý přístup k jednomu, nebo jiným procesům.

Za určitých okolností můžeme procesy zařadit do dvou kategorií:

a) Ty které jsou čekající na vstup nebo výstup (nazýváme I/O Bound)

b) Ty které plně využívají procesor (nazýváme CPU Bound)

V předchozích systémech mohly procesy často vyčkávat, zatímco čekají na požadavek vstupu (jako Harddisk, klávesnice, nebo síťový vstup). Během této doby nebyl proces počítán k běžné práci, ale je stále udržována kompletní kontrola procesorem. S příchodem přerušení a preemptivního multitaskingu tyto I/O bound procesy mohou být blokovány, nebo zařazeny do držených. Protože příchod požadovaných dat může generovat přerušení, tak by mohly blokované procesy mít garantovaný včasný návrat k vykonání.

Ačkoli byly techniky multitaskigu původně vyvinuty k umožnění více uživatelům sdílet jeden počítač, brzo bylo zřejmé že je užitečný bez ohledu na počet uživatelů. U mnoha operačních systémů od sálových počítačů k jednouživatelským osobním počítačům po neuživatelské řídící systémy (například různé robotické systémy), se z mnoha důvodů poznala důležitost podpory multitaskingu. Multitasking vytváří jednomu uživateli možnost pouštět více úloh v jeden okamžik.

Ve zkratce Preemptivní multitasking vyžaduje použití přerušovacího mechanizmu, které pozastaví současnou běžící úlohu a vyvolá plánovač procesů, který určí, jaký proces se bude vykonávat dále. Tudíž všechny procesy dostanou stejný díl času procesoru.

Časový díl. (Time slice)

Časová perioda pro kterou je proces přiřazen k vykonávání, se u systému s preemptivním multitaskingem všeobecně nazývá Time slice. Plánovač každý časový úsek vybírá jaký proces poběží příště. Jestliže je časový díl moc krátký, potom plánovač zkonzumuje mnoho operačního času, ale když je naopak moc dlouhý, potom nemusí být schopný rozpoznat externí události dostatečně rychle.

Přerušení je rozvržené tak aby jádro operačního systému mohlo co nejefektivněji přepínat mezi procesy jakmile vyprší jejich časový úsek. Procesor přepíná mezi úlohami tak rychle, že nám dává iluzi, že všechny programy běží naprosto současně.