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 3× 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.