Vyšlo v týdeníku Computerworld č. 31/92 v roce 1992
Vytištěno z adresy: http://www.earchiv.cz/a92/a231c120.php3

Preempce

Jistě to znáte z vlastní zkušenosti - jsou lidé, kteří jakmile se jednou dostanou ke slovu, mluví a mluví, a sami už nikoho jiného dobrovolně ke slovu nepustí. Jsou ovšem i tací, kteří řeknou to, co považují za nutné, a pak sami předají slovo někomu jinému (zatímco těm prvním je nutné skočit do řeči, překřičet je, či jinak je umlčet).

Teď si ale místo lidí představte samostatné programy, procesy či úlohy, které se v rámci víceúlohového operačního systému musí podělit o jediný procesor. Místo obrazného udělení slova je jim střídavě přidělován procesor - tedy vlastně možnost "běžet" - zatímco ostatní úlohy musí čekat, až na ně přijde řada. Otázkou ovšem je, kdy a na čí podnět právě běžící úloha procesor vrací.

Právě běžící úloha může dočasně přerušit svůj běh a nechat pokračovat jinou úlohu (tedy "vrátit procesor") sama, ze své vlastní iniciativy. Například po vypršení určitého časového intervalu, po dosažení určitého význačného stavu, při čekání na vnější událost apod. Takováto úloha je tedy určitou analogií člověka, který dobrovolně předá slovo někomu jinému. Sama ovšem rozhoduje o tom, kdy to bude.

Protipólem je pak úloha, která jednou přidělený procesor sama dobrovolně "nepustí", ale musí jí být násilím (resp. bez její dobrovolné účasti) odebrán. A to je právě podstata mechanismu, který se nazývá preempce (zatímco předchozí případ se označuje přívlastkem nepreemptivní).

Mechanismus preempce se obvykle implementuje prostřednictvím přerušení, generovaného technickými prostředky (hardwarem) po uplynutí stanoveného časového intervalu. Toto přerušení "odstaví" právě běžící úlohu, a předá procesor úloze jiné. Výhodou je skutečnost, že není nutné spoléhat se na individuální disciplínu jednotlivých úloh. Samotné úlohy pak dokonce ani nemusí vědět o tom, že se o procesor dělí ještě i s jinými úlohami. Problém je ovšem v poněkud složitější realizaci než v případě nepreemptivního mechanismu - je nutné například zajistit, aby právě běžící úloha nebyla přerušena nevhodně, a nebyla tím ovlivněna její činnost.