Cesta do hlubin procesoru - Z čeho se skládá mozek počítače?

1. 8. 2000

Sdílet

Miliony malých dělníkůPro pochopení toho, jak vůbec uvnitř pracuje procesor, je třeba nejdříve vědět, z čeho je vlastně vyroben. CPU se skládá z milionů maličkých tranzistorů, ...
Miliony malých dělníků
Pro pochopení toho, jak vůbec uvnitř pracuje procesor, je třeba nejdříve vědět,
z čeho je vlastně vyroben. CPU se skládá z milionů maličkých tranzistorů,
nanesených fotografickou cestou na křemíkový plátek o velikosti nehtu na
malíčku. Ono ani slovo nanesených není příliš přesné, neboť právě v křemíkové
destičce jsou polovodičové přechody vlastně vytvořeny.

Tyto maličké tranzistory umějí jediné nastavit se do polohy nuly či jedničky
tedy "zapnuto" a "vypnuto", nebo chcete-li "otevřeno", "zavřeno". Řada z nich
je určena k prostému ukládání hodnot, skupinky tisíců a tisíců tranzistorů
zajišťují provádění matematických operací, další tisíce realizují logické
rozhodování atd. Celkem bývá v procesoru až několik desítek milionů
tranzistorů. I když počítání tranzistorů a srovnávání procesorů podle jejich
množství je také velmi ošemetnou záležitostí. Mnoho polovodičových přechodů je
v procesoru stejně spotřebováno k tomu, aby sloužilo jako vyrovnávací paměť
(cache) pro rychlejší zpracovávání dat přicházejících z paměti, a ve
skutečnosti nemá žádnou "aktivní" funkci.

Cesta instrukce procesorem
Když poklepete na ikonku programu, stane se spousta věcí. Odhlédněme od toho,
že Windows nějakým způsobem servisně zajistí, aby program mohl být spuštěn, že
mu podle informací v hlavičce vyhradí paměť, že zaregistrují proces programu v
režimu multitaskingu a mnoha dalších věcí. Zásadní je až to, že program je
zkopírován do operační paměti. Tam se usídlí a procesor dostane adresu, na
které spuštěná aplikace začíná. Na tuto adresu se nastaví zvláštní registry,
zejména pak instruction pointer (instrukční ukazatel), podle kterého procesor
určuje, kde v programu se právě nachází.

Z takto určené adresy paměti si procesor vyžádá několik bajtů, které se jen tak
mimochodem zapíší do vyrovnávací paměti pro další použití a předají se dál do
procesoru, kde je jako první čeká instrukční dekodér. Instrukční dekodér je
poměrně vychytralé zařízení, které se stará o to, aby procesor věděl, co má
vlastně dělat, jakou instrukci má zpracovávat, jaké jsou její parametry a jak
je vlastně dlouhá. Je třeba si uvědomit zásadní věc architektura x86 nemá
pevnou délku instrukcí! Proto až po dekódování instrukce procesor pozná, jak je
dlouhá a kde začíná instrukce následující. Jakmile se tento problém vyřeší,
řadič určí, kam rozkódovaná instrukce poputuje. Zda se o ni bude starat ALU
jako o instrukci aritmetickou, nebo či poputuje do jiného bloku procesoru.
Zároveň se posune instruction pointer na další instrukci v paměti, protože teď
už je zřejmé, kde vlastně začíná.

Podle toho, o jakou instrukci se jedná, zajistí jádro CPU její provedení. Změny
se mohou promítnout buď do paměti, nebo pouze do vnitřních registrů, případně
může program ovlivňovat i chování periferií prostřednictvím vstupně/výstupních
portů. Aby toho ještě nebylo málo, může i samotná instrukce požadovat další
údaje z paměti, na které se pak čeká. Také ty se ale zapisují do vyrovnávací
paměti a jsou zde k dispozici pro případ, že by ještě někdy byly třeba.

Aby to všechno fungovalo nějak synchronizovaně, je součástí procesoru také
generátor impulzů. Ten jako bubeník určuje momenty, kdy se instrukce předává
mezi jednotlivými částmi procesoru, počítá také tiky pro jednotlivé bloky
procesoru v případě, že jim zpracování instrukce trvá déle, než je hodinový
takt (a takových instrukcí je mnoho).

Cache první stupeň pro zrychlení procesoru
Jak už bylo zmíněno, na klíčových místech procesoru jsou umístěny vyrovnávací
paměti. Jejich jedinou funkcí je uchovávat si veškeré informace, které jimi
projdou. Cache se skládá z vlastní velmi rychlé paměti a řadiče cache. Veškeré
požadavky na čtení z paměti jdou přes řadič cache, který rozhoduje, zda je
požadovaný údaj k dispozici ve vyrovnávací paměti, či zda se musí načíst z
paměti operační (RAM). Zpočátku se řadič může snažit jak chce, ale přesto
procesor neuspokojí. Všechny údaje požadované CPU z paměti jsou totiž zcela
nové a ještě neexistuje jejich kopie ve vyrovnávací paměti. Řadič cache však
vyžaduje kopie od každého přenášeného bajtu spolu s informací, z jaké oblasti
paměti data vlastně pocházejí. Ty si ukládá do paměti cache a vyčkává. Za
chvíli (což může být třeba pouhých pár tisíc tiků hodinového generátoru
procesoru) nastane situace, kdy si procesor vyžádá informace z operační paměti,
které již ale jsou k dispozici v cache. Řadič cache ví, zda data, která má k
dispozici, jsou platná, má informace o tom, jestli se procesor sám nepokusil
hlídanou oblast paměti změnit. Najde-li v paměti cache procesorem požadovaná
data, dá mu je k dispozici rychlostí, která několikanásobně přesahuje možnosti
přenosu sběrnice mezi procesorem a pamětí RAM. Vzhledem k tomu, že program se
velmi často "točí na místě" a požaduje stále stejné údaje, je úspěšnost
vyrovnávací paměti poměrně vysoká.

Tento princip vyrovnávací paměti lze aplikovat na různé fáze práce s pamětí.
Cache může zrychlovat čtení dat z paměti, může ale pomáhat také při čtení
instrukcí a dokonce zvládne zrychlit i zápis do paměti. Aby ještě nebyl
možnostem vyrovnávací paměti konec, dnešní procesory využívají dvě, a někdy
dokonce i tři zřetězené cache za sebou, každou vždy s nižší rychlostí a vyšší
kapacitou. Všechny se ale chovají několikrát rychleji než vlastní operační
paměť počítače. Při požadování instrukcí procesorem pak systém prochází
vyrovnávací paměti postupně podle rychlosti a hledá v nich požadovanou
instrukci. Vzhledem k tomu, že velikosti cache 2. úrovně jsou na úrovni
megabajtů, bývá procesor velmi často uspokojen ještě před operační pamětí.

Všechno je vlastně jinak
V části o cestě instrukce procesorem jsme si nastínili, jak vypadá procesor
uvnitř. Bohužel, realita je taková, že popsaným způsobem se procesor choval v
dávné minulosti a dnes se tak jeví pouze programu, který je jím prováděn.
Uvnitř současných CPU se nachází celá řada systémů pro zrychlení zpracovávání a
provádění instrukcí. Jen díky nim je možné, že frekvence, na které pracuje
dnešní Pentium III 500 MHz (které má výkonnostní index CPUMark99 kolem 44) je
jen desetkrát vyšší, než frekvence historické 486/DX2 50 MHz (dosahující
CPUMark99 jen něco přes 1,6), zatímco rozdíl jejich výkonu je bezmála
30násobný! Takže i kdyby zmíněná čtyřiosmšestka pracovala na zázračných 500
MHz, beztak by bylo Pentium III na stejné frekvenci 3x rychlejší.

Hlavním problémem, se kterým se moderní procesory musejí potýkat, je již
zmiňovaná nestejná délka příliš komplikovaných instrukcí x86. Když už se ale
instrukce dekóduje, musí čekat na zpracování, které také není příliš rychlé, a
složitější instrukce se tak zpracovávají i několik taktů procesoru.

Jak tohle všechno zrychlit? Základem výkonu dnešních procesorů je to, že
instrukce nejsou zpracovávány jako komplikované dlouhé instrukce systému x86,
ale jsou instrukčním dekodérem rozloženy na několik malinkých, ale stejně
dlouhých instrukcí RISC, jež je procesor schopen zpracovat rychleji. Způsobů,
které umožňují tyto instrukce provádět rychleji, je mnoho, mezi ty
nejzákladnější patří paralelní zpracování (parallel tasking) a zřetězení
(pipelining).
Při paralelním zpracování jsou v procesoru současně zpracovávány, tedy pouštěny
do jednotlivých jednotek CPU, instrukce, které nemají vliv na stejné registry.
Je totiž třeba si uvědomit, že v procesoru je řada jednotek, které instrukce v
klasickém pojetí nemohou používat současně, čímž je vlastně potenciál CPU
nevyužit. Současné procesory mají implementovány pro využití této funkce ještě
další jednotky ALU či FPU navíc, aby bylo možné zpracovávat současně také
několik instrukcí, z nichž více využívá právě např. jednotku ALU.

Zřetězení je umožněno vnitřním rozdělením cesty instrukce v jednotkách
procesoru na několik stupňů, které jsou na sobě nezávislé, a v okamžiku, kdy je
instrukce posunuta do dalšího stupně zpracování, může se ten právě uvolněný
zabývat instrukcí následující. V jedné chvíli jsou tedy v procesoru dvě, tři i
více instrukcí v různém stupni rozpracování a celý výkon procesoru je naplno
využit. Připomínám, že slovo "instrukce" v této souvislosti neznamená už
instrukci klasickou x86, ale zjednodušenou mikroinstrukci RISC, která vznikla v
instrukčním dekodéru procesoru.

Když už je možné provádět instrukce, které neovlivňují stejné registry
paralelně, co brání tomu, aby je procesor mohl provádět také v jiném pořadí,
než v jakém jsou zapsány v programu? Tato technika se nazývá out-of-order
execution (zpracovávání instrukcí mimo pořadí). K její realizaci je třeba, aby
mezi instrukčním dekodérem a řadičem byl ještě navíc malý kousek vyrovnávací
paměti, tzv. instruction pool, do kterého dekodér ukládá instrukce x86
přeložené do jazyka RISC. Z něj si pak řadič vytahuje mikroinstrukce podle
potřeby, a podle aktuálního stavu jednotlivých jednotek procesoru je rozesílá
ke zpracování. To se ale děje už bez ohledu na to, v jakém pořadí šly instrukce
v programu.
Avšak ani dekódování instrukcí x86 není tak jednoduchou záležitostí. Krátké
instrukce jsou dekódovány přímo tak, že je dekodér zpracuje a pošle do
instruction poolu. U delších a komplikovanějších instrukcí ale nastupuje u
dekodéru malá paměť ROM, ve které jsou zapsány dlouhé x86 instrukce a jejich
riscové ekvivalenty.

K těmto hlavním nástrojům zvyšujícím výkon se přidávají také další drobné
pomůcky. Zajímavou funkcí je cachování návratových adres. V jazyku assembler se
do podprogramů vskakuje pomocí instrukce CALL a z podprogramu se vrací
instrukcí RET. Při této operaci se adresa, kam se má program vrátit z
podprogramu, až dojde na instrukci RET, ukládá do zásobníku. Zásobník však není
nic jiného než místo v operační paměti počítače, na které směřují ukazatele
typu stack pointer (ukazatel zásobníku). A jak jsme si řekli, operační paměť je
z pohledu procesoru velmi pomalé zařízení. Proto jsou ještě navíc návratové
adresy ukládány do zvláštní velmi rychlé vyrovnávací mezipaměti, odkud při
požadavku na čtení (které vyvolá právě instrukce RET) budou bleskurychle
vytaženy a použity procesorem jako nový instruction pointer (instrukční
ukazatel).

Skutečně špičkovou záležitostí je systém pro branch prediction (předpovědi
větvení) a speculative execution (spekulativní provádění instrukcí). Princip je
opět velmi jednoduchý větvení v programu, tedy místa, kde se rozhoduje, jakým
způsobem se bude program provádět dále, jsou relativně častá. Mnoho z nich však
opakovaně proběhne se zcela stejným výsledkem. Jednotka pro předpovědi větvení
(resp. pro odhady výsledků jednotlivých rozhodování) sleduje, jak probíhají
instrukce pro větvení a především s jakým výsledkem. Všechna rozhodnutí si
zapisuje a v době, kdy program opět dojde ke stejnému větvení, je schopna
odhadnout, jak toto rozhodování dopadne. Vzhledem k tomu, že řada větvení
dopadá, laicky řečeno, pořád stejně, pohybuje se úspěšnost systému branch
prediction v hodnotách přes 70 %.

Na předpovědi větvení úzce navazuje technika spekulativního provádění
instrukcí. Když se totiž dekodér dostane k větvení a branch prediction unit
odhadne, jak větvení dopadne (uvědomme si, že v této fázi je skutečné
zpracování programu o několik instrukcí zpožděno), nechá do instrukčního
dekodéru poslat větev, kterou považuje za pravděpodobnou. Ta je pak zcela
standardně zpracovávána jednotkami procesoru, ale stále se čeká na skutečný
výsledek větvení. Dopadne-li vše podle předpokladů a rozhodování skončí tak,
jak branch prediction unit předpokládal, jsou k dispozici instrukce, které
následují za skokem okamžitě, a dokonce už jsou některé z nich zpracovány se
známým výsledkem (opět se uplatňuje parallel tasking a pipelining).
Když náhodou výsledek rozhodování dopadne jinak, než se očekávalo,
předpřipravené instrukce se zahodí, procesor si zcela klasicky vyžádá instrukce
z druhé větve a postupuje běžným způsobem.

Novinky pro programátory
I procesory přinášejí čas od času některé novinky, se kterými se musejí
programátoři vyrovnávat. Před několika lety to byla jednotka MMX pro zrychlení
zpracovávání multimédií, na kterou navázaly proprietární systémy AMD 3Dnow! a
Intel KNI. Jejich základem je systém SIMD (single instruction multiple data),
tedy postup, při kterém nemá instrukce klasicky jeden či dva operandy, ale hned
několik navíc. Cílem je zrychlit zpracovávání rozsáhlých polí relativně
stejných dat, kterými jsou obrázky, videosekvence, zvuky a podobně, případně
navíc ztrátově komprimované některou z technik JPEG či MPEG. Principem je
aplikování například instrukce pro sčítání na 8 operandů během jedné instrukce,
což je samozřejmě velmi vhodné pro zmíněné paralelní zpracování v několika
jednotkách ALU či zřetězení instrukcí.

Závěrem
Technologie skryté uvnitř procesoru jsou v neustálém překotném vývoji, ale zdá
se, že se pomalu dostávají na úroveň, kde už není možné provádění programu
příliš zrychlit. S napětím a nadějí se tedy čeká na příchod nové generace
procesorů architektury IA-64, z nichž prvním zástupcem bude Intel Itanium.
Vzhledem k tomu, že programy pro nové procesory už nebudou zatíženy problémy
přinesenými z archaické minulosti architektury x86, lze předpokládat, že také
na ně budou mít procesory různé fígle, jak zrychlit jejich provádění.

Patice procesorů
Plastový rámeček či plůtek mezi procesorem a základní deskou je zodpovědný za
to, který procesor lze do jaké základní desky vložit. Přestože zajišťuje v
podstatě jen spojení mezi čipovou sadou na desce a samotným procesorem, a to
navíc jen to mechanické, jeho marketingová síla je značná. Patice totiž určují
možnosti záměn procesorů bez nutnosti obměnit i základní desku počítače.

V současnosti jsou na trhu procesory vyžadující patice těchto typů:

Socket7 - Původně byla určena pro procesory Pentium, ale dnes, v době, kdy
Intel už dávno ukončil výrobu procesorů využívající tuto platformu, jej
využívají pouze ostatní výrobci. I AMD ustupuje od jejího využívání a Athlon
ani nový Duron ji nepoužívají. Socket7 byl k dispozici na deskách se 66MHz
sběrnicí, modernější procesory si vyžádaly zvýšení frekvence sběrnice až na 100
MHz, a tak se patice pro tyto procesory nazývá Super7. Na každý pád ve fyzické
konstrukci plastového výlisku specifikace Socket7 a Super7 není žádného
rozdílu. Procesory s paticí Socket7 mají 321 nožiček.

Socket8 - O patici určené procesorům Pentium Pro (DCPGA
dual-cavity-pin-grid-array) se tvrdilo, že bude poslední socketovou variantou
na trhu a že Intel půjde dále cestou slotů. Realita však dala zapravdu těm,
kteří Intelu v tomto směru nevěřili. Na patici je velmi zajímavě vidět oddělení
vlastního procesoru a cache, které jsou sice v jedné plastové schránce, ale
nikoliv na stejném plátku křemíku (není to procesor s cache on-die).

Slot 1 - Poměrně revoluční paticí byl ve své době plůtkový Slot 1. První
procesorem, který jej využíval, bylo Pentium II kapotované do formátu SECC
(single-edge-contact-cartidge), tedy ve velké černé plastové krabičce, ze které
na jedné straně vykukovaly jen stovky kontaktních plošek plůtku. Jako další
používá Slot 1 procesor Celeron, tedy odlehčená varianta Pentia II ve formátu
SEPP (single-edge-processor-package), který vypadá jako takové nahé Pentium II.
A konečně zatím posledním produktem určteným do Slotu 1 je Pentium III v
kapotáži SECC2.

Slot 2 - Pro serverové varianty Pentia II a Pentia III je určen Slot 2. Fyzicky
vypadá velmi podobně jako Slot 1, ale lze do něj zasunout jen procesor Pentium
II Xeon a Pentium III Xeon (oba ve formátu kartridge SECC).

Socket370 - Socket370 byl návratem Intelu k socketovým paticím. Na první pohled
vypadá velmi podobně jako Socket7, jen má větší počet kontaktních vývodů (370
oproti 321 u Socketu). Do Socketu370 lze nainstalovat procesory Celeron ve
formátu PPGA (plastic-pin-grid-array) a Pentium III kapotované typem FCPGA
(flip-chip-pin-grid-array).
Vzhledem k tomu, že patice Slot 1 a Socket370 jsou vývodově a elektricky velmi
podobné, je možné na trhu najít také redukce, které umožňují použít procesory
typu PPGA či FCPGA (Socket370) v základních deskách s paticí Slot 1. Redukce
nejsou jen prosté "drátové propojky", ale obsahují i elektroniku, čímž je možné
na nich i řadu věcí nastavovat. Proto by se do instalace procesoru do redukce a
následného zapojení do základní desky měl pouštět jen zkušenější uživatel. Na
druhou stranu jsou procesory ve formátech PGA (Socket370) levnější, než
odpovídající slotové varianty a příslušná redukce.

Slot A - Po definitivním vyčerpání možnosti architektury postavené na patici
Socket7 se firma AMD rozhodla k poměrně riskantnímu kroku, kterým byl přechod
na vlastní patici procesoru nekompatibilní se standardy určenými Intelem. AMD
Athlon byl tedy první procesor využívající nové rozhraní typu Slot A, tedy
vizuálně podobné patice, jako je Slot 1, avšak připojená ke sběrnici Alpha EV6.
Stejně tak následník Athlonu určený pro levné stanice, AMD Duron, využívá
patici typu Slot A se stejnou sběrnicí.

Historie procesorů

1970 Intel 4004
1972 Intel 8008
1974 Intel 8080
1978 Intel 8086
1979 Intel 8088

1982 Intel 80286
1985 Intel 80386
1988 Intel 80386SX
1989 Intel 486

1991 AMD Am386DX
1993 Intel Pentium, AMD Am486
1995 Intel Pentium Pro
1996 AMD zakoupil NexGen
1997 Intel Pentium MMX, Intel Pentium II, AMD K6

Slovníček

3Dnow! - rozšíření instrukční sady x86 zavedené společností AMD. Obsahuje řadu
nových instrukcí pro zrychlení zpracovávání videa, grafiky a zvuku.

ALU - Arithmetic Logic Unit (jednotka pro aritmetické a logické operace) jedna
ze základních a nejdůležitějších jednotek v procesoru. Realizuje drtivou
většinu instrukcí.

Assembler - velmi nízký, systémový programovací jazyk. Velmi se blíží tomu, jak
skutečně procesor chápe jednotlivé instrukce.

bajt (byte) - jedna ze dvou základních jednotek kapacity informací.

cache (vyrovnávací paměť) - rychlá mezipaměť využívaná pro snížení počtu
přístupů do operační paměti RAM.

FPU - Floating Point Unit (jednotka pro práci s desetinnou čárkou) jednotka,
která realizuje neceločíselné numerické operace.

IA-64 - architektura 64bitových procesorů, reprezentovaná jako první procesorem
Itanium
instrukce - příkaz pro procesor. Jeden z nejzákladnějších stavebních prvků
programu.

JPEG - Join Picture Experts Group velmi účinný způsob ztrátové komprese grafiky.

KNI - Katmai New Instruction rozšíření instrukční sady zavedené společností
Intel od procesoru Pentium III. Opět určeno speciálně pro rychlejší dekódování
streamového videa a audia poskytovaného prostřednictvím Internetu.

křemík (silikon) - jeden z polovodičů, na zemi poměrně hojný a relativně lehce
zpracovatelný.

MMX - první větší rozšíření instrukční sady x86. Dnes je obsahují všechny nové
procesory.

MPEG - Motion Pictures Expert Group ztrátový způsob komprese videa, tedy
pohyblivých obrázků stejně jako zvuku. Dnes už je součástí norem ISO.

procesor (CPU) - základní prvek počítače.

operand - zpracovávaná hodnota.

RAM - operační paměť paměť počítače sloužící k dočasnému ukládání dat a
programů. Při vypnutí se kompletně smaže.

registr - malý kousek paměti uvnitř procesoru. Je extrémně využívaný, a proto
musí být také extrémně rychlý. Procesor obsahuje registrů několik desítek.

RISC - Reduced Instruction Set Code redukovaná instrukční sada obsahující pouze
malý počet stejně dlouhých instrukcí. Rychleji se zpracovávají, ale k
reprezentaci jedné instrukce x86 je jich třeba několik.

řadič - jakékoliv zařízení, které sice přímo data či instrukce nezpracovává,
ale zajišťuje koordinaci mezi bloky, jež se na zpracovávání přímo podílejí.

strojový kód - programovací jazyk, kterému rozumí procesor.

tranzistor - základní polovodičový prvek. Spojení tří částí křemíku s nestejnou
vodivostí. Principem funkce tranzistoru je to, že přivedením napětí na jednu
jeho část je možné ovládat, zda bude proud moci protékat mezi dvěma zbylými
částmi.

x86 - instrukční sada původních procesorů 8086, 80286 a dalších. Vyznačuje se
nestejně dlouhými a komplikovanými instrukcemi.

Multitasking a úloha procesoru
Veškeré dnešní operační systémy pracují na principu multitaskingu, tedy
zpracovávání více programů současně. Jak je ale vidět z hlavního článku,
procesor žádnou přirozenou podporu pro takovou funkci nemá. Je sice schopen
paralelně zpracovávat instrukce, ale jen ty, které přísluší jedinému programu.
V praxi se proto multitasking realizuje velmi rychlým přepínáním mezi několika
programy. Každý program dostává od systému určitý kousek času (timeslice), po
který má možnost aplikace pracovat. Po jeho vypršení systém poskytne timeslice
dalšímu programu, a tak postupuje stále dokola a obsluhuje všechny běžící
aplikace.

V instrukčním souboru už od procesoru 386 je k dispozici několik funkcí, které
multitasking sice nezajišťují, ale velmi usnadňují. Především jde o podporu
tzv. chráněného režimu. V něm pracují programy odděleně, ve vlastních oblastech
paměti, které do sebe nezasahují. Navíc procesor podporuje i několik tzv.
úrovní oprávnění (ringů), pomocí nichž lze relativně snadno určit, který z
programů je jádro systému (kernel), který je důležitý ovladač (servis) nebo co
je pouhá spuštěná aplikace.

Na nejvyšší úrovni oprávnění pracuje jádro systému spolu s klíčovou součástí,
kterou je manažer procesů (process manager). Manažer procesů zajišťuje právě
zmíněné rozdělování času procesoru mezi jednotlivé programy a procesy. Moderní
operační systémy už netrpí neduhem například Windows 3.1, který byl známý jako
kooperativní multitasking. V něm musí aplikace, jež obdržela od manažeru
procesů timeslice, sama požádat o jeho ukončení a předání času dalšímu procesu.
Zcela nevyhnutelně se tak často stávalo, že aplikace, která přestala reagovat
či se zhroutila, obdržela timeslice, ale nebyla schopna zajistit jeho předání
zpátky process manageru. To v praxi znamená samozřejmě zhroucení celého systému
multitaskingu, a co je nehorší, také procesů, které nebyly s tímto problémem v
žádné souvislosti.

Dnes je situace o poznání lepší, neboť kooperativní multitasking byl zcela
vytlačen preemptivním multitaskingem. Klíčový rozdíl mezi kooperativním a
preemptivním multitaskingem je v tom, že process manager v preemptivním
multitaskingu běží na vyšším ringu (v této souvislosti je samozřejmě myšleno na
systémovější úrovni), než jednotlivé aplikace, a proto nemusí čekat, až mu
proces vrátí řízení, ale sám si jej po uběhnutí timeslice přebere bez jakékoliv
spolupráce s aplikací. Je pochopitelné, že takový systém je mnohokrát
stabilnější, neboť ani špatně napsaná aplikace, která způsobuje chybu, nemůže
ohrozit běh kernelu ani process manageru. Procesor má k dispozici nástroje,
kterými je možné uložit současný stav rozpracování příslušící jednotlivému
programu a naopak načíst stav rozpracovanosti jiného.
Zároveň procesor obsahuje obsluhu tzv. výjimek (exeptions), což jsou v podstatě
chyby způsobené běžícím programem. Dobře napsaný operační systém je schopen se
tedy z jakékoliv chyby běžící aplikace plně zotavit na takové úrovni, že
ostatní procesy ani uživatel nemusejí poznat, že došlo k nějakému problému.
Samozřejmě je třeba, aby jádro systému obsluhující výjimky bylo naprogramováno
tak kvalitně, aby v něm samotném k problémům nedocházelo.

Procesory pro notebooky
Na procesory používané v mobilních počítačích jsou kladeny kromě obvyklých
požadavků na výkon i další nároky související s největším problémem notebooků,
jímž je nedostatek energie. Notebookové procesory jsou vyráběny s ohledem na
nízký příkon, který se ale samozřejmě projevuje na snížení výpočetního výkonu.
To je také jeden z důvodů, proč formálně stejné počítače, jeden notebook a
druhý běžné stolní PC, mají odlišný výkon, logicky v neprospěch právě notebooku.

Zároveň stěsnaná montáž na základní desce mobilního počítače nedovoluje
zajistit odpovídající chlazení procesoru, což s sebou přináší další problémy.
Naštěstí je snížení příkonu realizováno především prostřednictvím snížení
produkce zbytkového tepla, což samo o sobě částečně řeší i zmíněnou obtíž s
nedostatečným chlazením.

Z důvodu šetření elektrickou energií napájecích článků notebooku musí být
procesor schopen reagovat na různé požadavky tzv. power managementu. Ať už jde
o prosté uspání procesoru v režimu sleep, při kterém neustává napájení, nebo o
uložení rozpracovaného stavu paměti i procesoru na disk do stavu hibernace,
notebookový procesor musí být za všech okolností plně podřízen požadavkům
uživatele.

Zajímavým postupem pro šetření energie je snižování frekvence procesoru. U
běžného čipu ve stolním počítači se změna frekvence neobejde bez restartu,
avšak v notebooku se to vše musí dít zcela transparentně, bez zásahu uživatele
a dokonce za plného chodu operačního systému. Běžnou metodou je snížení
frekvence procesoru a úrovně podsvícení displeje při přechodu z napájení
prostřednictvím síťového zdroje na chod z akumulátorů. Vše je vyřešeno tak
čistě, že si uživatel povšimne jen nepatrného snížení jasu displeje, ale chod
operačního systému včetně všech aplikací zůstává neovlivněn.

Je logické, že tyto vymoženosti jsou vykoupeny vyšší cenou procesorů pro
notebooky, která se také odráží na celkově vyšší ceně mobilních počítačů oproti
stolním variantám vůbec.

Přetaktování procesoru
Přetaktování nebo též "přetáčení" procesorů je postup, při kterém je čip
nainstalován a spuštěn na vyšší hodinové frekvenci, než která je pro něj
nominální. Jak bylo řečeno, frekvence, na níž procesor pracuje, určuje rychlost
předávání dat a instrukcí mezi procesorem a vyrovnávacími paměťmi, rychlost
předávání rozpracovaných instrukcí uvnitř procesoru a také rychlost komunikace
se sběrnicemi. Zvýšením hodinové frekvence se zároveň zvyšuje i rychlost
procesoru, a tedy i jeho výkon.

Při přetaktování se využívá toho, že procesory, stejně jako všechny ostatní
výrobky, jsou vyráběny s určitou rezervou. Procesor originálně určený pro
frekvenci 333 MHz je tedy schopen pracovat většinou bez problémů na 366 MHz a
více, samozřejmě s výkonem, který odpovídá procesoru originálně taktovanému na
366 MHz či více.

Je pochopitelné, že takto nejde postupovat donekonečna. Při zvýšení frekvence
nad určitou mez začne docházet k tomu, že chlazení procesoru není schopno
odvádět reziduální teplo, které je vedlejším produktem činnosti procesoru. V
běžném provozu zajišťuje chladič či větrák na procesoru dostatečnou cirkulaci
vzduchu odvádějícího teplo, ale při zvýšení produkce tepla, což je nevyhnutelné
při přetaktování, už konstrukce procesoru nedovolí zajistit jeho dostatečné
chlazení. Procesor se začne rychle zahřívat. Při překročení určité teploty se
elektrické vlastnosti křemíku, resp. polovodičových přechodů v křemíkovém
plátku procesoru, začnou radikálně měnit. Omezuje se spínací funkce
tranzistorů, neboť přechody zůstávají trvale otevřené. To se okamžitě projeví
na obrovském generování chyb, na špatném dekódování instrukcí, na jejich
chybném provádění. Vadná práce cache začne do procesoru posílat stovky a tisíce
fiktivních instrukcí, vzniklých v útrobách křemíkového pekla. Není-li přehřátí
ještě příliš vysoké, vyvolá chyby v běžící aplikaci, které někdy stačí kernel
zachytit, a tak se "jen" drasticky sníží stabilita systému. V případě většího
přehřátí procesoru se počítač sám restartuje nebo přestane zcela reagovat a
zastaví se.

Ošemetné je to, že při dalším spuštění po několika minutách může počítač zcela
normálně pracovat. Až poté, co je od procesoru požadován vyšší výkon, dojde
opět k přehřívání a k vyvolávání chyb a následně k definitivnímu zastavení
systému.

Přetaktování nelze rozhodně doporučit pro počítače, od kterých je vyžadována
stabilní a stoprocentní funkce za všech okolností. Zároveň není v žádném
případě podporováno samotnými výrobci procesorů. Na druhou stranu jsou za
běžných okolností všechny výše popsané změny pouze dočasné a úprava frekvence
na původní hodnotu spojená s dostatečným ochlazením procesoru je většinou zcela
odstraní.

Ale ani dostatečné chlazení procesoru není vždy výhrou. Zvýšení hodinové
frekvence má vliv také na frekvenci sběrnic, na které jsou připojeny
rozšiřující karty. A právě karty nemusejí být schopné snést vyšší než nominální
frekvenci sběrnice. Není tedy možné napsat nějaká obecná pravidla přetaktování,
neboť situace vždy závisí na konkrétním počítači, na jeho konfiguraci,
komponentech a fyzickém umístění procesoru na základní desce.
Každopádně by se do přetaktování měl pouštět jen ten, kdo má velmi dobrý
přehled o konstrukci počítače a dostatečnou důvěru ve své zkušenosti.