Miliony malých robotníkov
Pre pochopenie toho, ako vovnútri pracuje procesor, musíme
najskôr vedieť, z čoho je vlastne vyrobený. CPU sa skladá z
milionov maličkých tranzistorov, nanesených fotografickou
cestou na kremíkovú doštičku veľkosti nechtu na malíčku.
Ono ani slovo nanesených nie je príliš presné, pretože práve
v kremíkovej doštičke sú polovodičové prechody v skutočnosti
vytvorené.
Tieto maličké tranzistory vedia jedno jediné - nastaviť sa do
polohy nuly alebo jednotky ("zapnutý" a "vypnutý"),
alebo inak povedané "otvorené", "zavreté".
Mnohé z nich sú určené k obyčajnému ukladaniu hodnôt,
skupinky tisícov a tisícov tranzistorov zaisťujú vykonávanie
matematických operácií, daľšie tisíce realizujú logické
rozhodovanie atď. Celkom je v procesore použitých až niekoľko
desiatok miliónov tranzistorov. Aj keď počítanie tranzistorov
a porovnávanie procesorov podľa ich množstva je tak trocha ošemetná
záležitosť. Mnoho polovodičových prechodov je v procesore
aj tak použitých na to, aby poslúžili ako vyrovnávacia
pamäť (cache) pre rýchlejšie spracovávanie údajov prichádzajúcich
z pamäti, a v skutočnosti nemajú žiadnu "aktívnu"
funkciu.
Cesta inštrukcie (príkazu)
procesorom
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 súčasnosti sú na trhu procesory vyžadujúce pätice
týchto typov:
Socket 7 - Pôvodne bola určená pre
procesory Pentium. Postupne sa používala aj pre mikroprocesory
Pentium MMX a prevzali ju aj výrobcovia ako AMD, Cyrix, IBM či
IDT. Aj AMD ustupuje od jej využívání a Athlon či nový
Duron ju nepoužívají. Socket 7 bol k dispozícii na doskách
so 66 MHz zbernicou. Modernejšie procesory si vyžiadali zvýšenie
frekvencie zbernice na 100 MHz a tak sa vylepšená pätica pre
tieto procesory nazývá Super 7. Rozdiel nastal aj v podpore
zbernice AGP. Vo fyzickej konštrukcii plastového výlisku špecifikácie
Socket7 a Super7 niet žiadneho rozdielu. Procesory s päticou
Socket 7 majú 321 nožičiek.
Socket 8 - 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 - Pomerne revolučnou päticou bol
vo svojej dobe Slot 1 v tvare prídavnej karty. Prvý procesor,
ktorý ju využíval, bolo Pentium II kapotované do formátu
SECC (single-edge-contact-cartidge), teda vo veľkej čiernej
plastovej krabičke, z ktorej na jednej strane vykukovali len
stovky kontaktných plošiek karty. 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).
Socket 370 - 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.
Byte (bajt) - jedna z dvoch základných
jednotiek kapacity informácií . 1 Byte = 8 bitov.
cache (vyrovnávacia pamäť) - rýchla medzipamäť
využívaná pre zníženie počtu prístupov do operačnej pamäte
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.
kremí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.
register - 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.
radič - 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.
|