Princip funkce počítače
Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů
pokyny pro zpracování dat (program) a vstupní data si operátor nejprve zapíše (vstup) do poznámek (paměti) nyní operátor (řadič) může po malých částech (instrukcích) číst postup, vyhledávat potřebná vstupní data a pomocí kalkulátoru (ALU) s nimi provádět požadované operace do poznámek (paměti) si operátor může zapsat i jakékoliv mezivýsledky, které pak lze použít opakovaně konečné výsledky operátor zapíše do výstupního protokolu (výstup)
Instrukční soubor instrukce je elementární operace, kterou počítač dokáže provést instrukční soubor (Instruction Set) je množina všech instrukcí, kterým počítač rozumí a dokáže je provádět program může obsahovat pouze instrukce, kterým daný počítač rozumí jedná se vlastně o formu jazyka, který musí programátor ovládat, aby se s počítačem dokázal domluvit What is your name?
půl šesté!
proveditelný program (ve strojovém kódu) je zápis postupu řešení úlohy ve formě posloupnosti instrukcí, dostupných v instrukčním souboru daného počítače na počítači s jiným instrukčním souborem tento program není použitelný !
Instrukce instrukce se obvykle skládá z několika částí (polí) 28
1234
ADD
m[1234]
operační kód=součet
1235
+
m[1235]
odkud
1287
m[1287] kam
operační kód určuje, jaká operace s daty se má provést specifikace operandu určuje, odkud se mají číst data, kam se má uložit výsledek … … nebo jak má program pokračovat (skoky)
Provádění instrukce
(1)
dobu provádění instrukce obvykle dělíme na dvě základní fáze: fázi načtení a dekódování instrukce – FETCH Cycle fázi provedení instrukce – EXECUTE Cycle anglické označení (FETCH, EXECUTE) souvisí s činností paměti během provádění instrukce jedna úplná operace s pamětí (čtení nebo zápis) se obvykle označuje jako paměťový cyklus během provádění jednooperandové instrukce proběhnou obvykle dva přístupy k paměti – v prvním se načte instrukce, ve druhém se načte operand nebo uloží výsledek
po načtení instrukce řadič převede operační kód na posloupnost řídících signálů pro ostatní části počítače registry, multiplexory, ALU, operační paměť
Provádění instrukce
(2)
řadič generuje dva typy signálů: hladinové výběr funkce multiplexoru, ALU, paměti ...
impulsní časově přesně vymezené akce – zápis do registru, inkrementace registru, zápis do paměti ...
vlastní operace s operandy se provádí v ALU výsledek operace se ukládá do operační paměti ... … nebo zůstává v registrech procesoru mezivýsledky uložené v registrech jsou v případě potřeby snadněji dostupné
při provádění operace se získávají také další informace, umožňující pozdější vyhodnocení nulový nebo záporný výsledek, přetečení, dělení nulou …
Počet operandů obecně může být v instrukci specifikován libovolný počet operandů … v našem příkladu jsou tři
… jenže adresa slova paměti zabírá v instrukci hodně místa! ... instrukce musí být rozdělena do několika slov a proto je její zpracování složitější a pomalejší
... nebo je nutné použít velkou šířku slova paměti což vyžaduje více hardware a proto stoupne cena, rozměry a spotřeba energie
Formát instrukce Řešení: jednooperandové instrukce (další operandy implicitní) nebo registrově orientované instrukce (specifikace registru je mnohem kratší) A
B
operand ALU
A
B
ALU
výběr registru A registry
implicitní operand
výběr registru B
Specifikace operandu operand může být specifikován různým způsobem přímý (bezprostřední, immediate) operand operand je uveden přímo v instrukci obvykle jen malá celá čísla (např. +127 až -128)
operand v registru operandy se čtou z (ukládají do) pole registrů v instrukci jsou adresy registrů (např. pro výběr jednoho z 8 registrů stačí 3 bity)
operand v operační paměti operandy se čtou z (ukládají do) operační paměti v instrukci je adresa paměťového místa
implicitní operand Např. při provádění jednooperandové instrukce ADD 1234 se druhý (implicitní) operand čte z pomocného registru a výsledek se ukládá opět do tohoto registru
nepřímé adresování, relativní adresování ....
Ukázky instrukcí Níže uvedené instrukce jsou uvedeny v instrukčním kódu procesoru Siemens SAB 80C166. add r0, r2; – sčítání - přičte do registru r0 hodnotu uloženou v registru r2 addc r1, r3; – sčítání s přenosem - přičte do registru r0 hodnotu registru r1 a příznaku přenosu C mov 1234h, r0; – přesun - uloží do paměti na adresu 1234h hodnotu z registru r0 mov 1236h, r1; – přesun - uloží do paměti na adresu 1236h hodnotu z registru r1 mov [r7], r0; – přesun - uloží na adresu určenou registrem r7 hodnotu z registru r0 cmp r4, r5; – porovnání - porovná hodnoty registrů r4 a r5
Nepřímé adresování nepřímé adresování (indirect addressing) paměťové místo adresované instrukcí neobsahuje data, ale opět adresu operandu nepřímé adresování může být víceúrovňové (řetězené) instrukce: op
oa if=1 if
oa if=1 if
oa
if=0 if = Indirect Flag (1 bit) 1 ... oa = nepřímá adresa 0 ... oa = adresa operandu
if
oa
operand
Relativní adresování relativní adresování adresa se vypočítává jako součet několika složek, např. báze (obsah registru BP nebo BX) a indexu (obsah registru SI nebo DI) :
oa = báze + index umožňuje realizaci virtuální paměti kvůli rychlosti jsou složky adresy obvykle uloženy v registrech a pro výpočet adresy se používá samostatná ALU báze
index
ALU
adresa operandu
Pořadí provádění instrukcí pořadí provádění instrukcí není libovolné algoritmus není komutativní
teoreticky lze v každé instrukci pomocí dalšího operandu určit, odkud se má číst následující instrukce … ... tak byl navržen např. počítač prof. Svobody (5-operandové instrukce) … ale takové instrukce by byly neúnosně dlouhé
instrukce programu se obvykle provádějí v pevném pořadí sekvenčně, tj. v pořadí, ve kterém jsou za sebou uloženy v operační paměti …
… takže adresu příští instrukce lze získat velmi jednoduše inkrementací registru PC (programového čítače), obsahujícího adresu právě provedené instrukce
PC+1—>PC
… někdy je ale nutné pořadí provádění instrukcí změnit !
Skok někdy je nutné pořadí provádění instrukcí změnit při výběru více variant pokračování … při volání podprogramu a návratu z něj … při obsluze přerušení …
k tomuto účelu slouží skokové instrukce operandem skokové instrukce je adresa příští instrukce tj. instrukce, která se má provést místo instrukce bezprostředně následující za skokem
provedení skoku může být podmíněné
tj. závisí na výsledku některé z předchozích operace ALU nebo stavu některé jiné části počítače
podmíněné skoky umožňují větvení programu v závislosti na mezivýsledcích rozhodovací operace typu:
jestliže platí C, proveď P1, jinak P2
Operační paměť
(1)
počítač potřebuje rychlý přístup k instrukcím programu a operandům … … data v operační paměti jsou uložena tak, aby vyhledávání dat probíhalo co nejrychleji používá se náhodný přístup (Random Access) paměť je rozdělena na velký počet paměťových míst všechna paměťová místa paměti jsou stejně velká každému paměťovému místu je přiřazena unikátní adresa operační paměť můžeme považovat za jednorozměrné pole paměťových míst, kde adresa je indexem paměťového místa v tomto poli
s požadavkem na čtení nebo zápis se paměti předává adresa paměťového místa, se kterým má být operace provedena
Operační paměť
(2)
velikost jednoho adresovatelného paměťového místa je dnes nejčastěji 1 byte (slabika, 1B) s informační kapacitou 8 bitů vyhovuje pro ukládání binárních čísel a instrukcí (v případě potřeby lze použít více slabik za sebou), textu (1 slabika = 1 znak) i dekadických čísel (1 slabika = 2 dekadické řády)
s daty se často pracuje po větších celcích po slovech, blocích, stránkách, sektorech, segmentech … dosahuje se tím vyšší rychlosti zpracování termínem slovo (word) se obvykle označuje dvojice slabik … … ale někdy se tímto termínem označuje plná šířka toku dat (např. sběrnice) bez ohledu na počet slabik !!
velikost instrukcí a čísel je obvykle mocninou čísla 2 (16, 32, 64 či 128 bitů = 2, 4, 8 či 16 byte)
Operační paměť
(3)
Operační paměť
(4)
Kromě vstupu adresy, vstupu dat a výstupu dat má operační paměť ještě řídící vstupy a stavové výstupy Řídící vstupy umožňují: určit typ operace (čtení, zápis) určit šířku toku dat (byte, slovo, dvojslovo …) aktivaci (start) paměťové operace
Stavové výstupy umožňují řadiči zjistit aktuální stav paměti dokončení operace, chyba parity, chyba zápisu, pokus o přístup k neexistujícímu paměťovému místu, pokus o přístup do zakázané oblasti …
Časování paměti paměť obvykle pracuje v cyklech délka cyklu je určena časem, který uplyne od okamžiku zahájení operace do okamžiku, kdy lze zahájit další operaci
Cyklus čtení (READ) před zahájením a po dobu provádění operace musí byt na vstupy paměti přivedena adresa čtení nějakou dobu trvá; dokončení operace čtení (tj. okamžik, kdy jsou na výstupu platná data) hlásí signál hotovo (Ready) přístupová doba paměti je čas, který uplyne od okamžiku zahájení operace do okamžiku, kdy se objeví signál hotovo
Cyklus zápisu (WRITE) před zahájením a po dobu provádění operace musí byt na vstupy paměti přivedena adresa a data zápis nějakou dobu trvá; dokončení operace zápisu (tj. okamžik, kdy adresu a data na vstupech již lze změnit a zahájit novou operaci) hlásí signál hotovo (Ready)
Rozhraní paměti celé soustavě propojovacích vodičů se říká rozhraní (interface) termín rozhraní označuje jednak vlastní adresní, datové, řídící a stavové vodiče, např. paměť
adresa (24 bitů) adresa
vstup dat (16 bitů)
výstup dat (16 bitů)
data
R/W STR RDY řízení/stav
... ale také specifikaci, tj. podrobný popis funkce všech vodičů včetně logických úrovní, časování signálů, napájecích napětí, zapojení konektorů …
z rozhraní mezi pamětí a procesorem se později vyvinuly systémové sběrnice - zobecněná rozhraní pro vzájemné propojení jednotlivých částí počítače (bus)