A számítási modell definíciója
A számításra vonatkozó alapelvek absztrakciója
A számítási modell jellemzői
Min hajtjuk végre a számítást?
Hogyan képezzük le a számítási feladatot?
Mi vezérli a végrehajtás sorrendjét?
Fejlesztői kronológia
Számítási modell
Ennek megfelelő programnyelv
Ennek megfelelő architektúra
Neumann elvű modell esetén a számítási feladat mit enged meg
Változók deklarálása
Adatmanipulációs utasítások deklarálása
Vezérlésátadó utasítások deklarálása
A Neumann modell igényeinek kielégítése az architechtúra részéről
A változókat a memória meghatározott helyén tárolja úgy, hogy biztosítja a változók értékének korlátlan számú változtathatóságát
Az architektúra rendelkezik egy speciális regiszterrel (programszámláló), ami tárolja a következő utasítás címét.
Modellek csoportosítása a műveletek elvégzésének rendje szerint
szekvenciális vagy párhuzamos
Modellek csoportosítása a végrehajtás meghajtása szerint
vezérlés szerint meghajtott, adat szerint meghajtott, igény szerint meghajtott
Modellek csoportosítása a probléma szerint
procedurális vagy deklaratív
Adat alapú számítási modellek
Neumann modell
Adatfolyam modell
Applikatív modell
Modellek csoportosítása aszerint, hogy min hajtjuk végre a számítást
Adat alapú, objektum alapú, predikátum logika, tudás alapú, hibrid
Az adat alapú modellek tulajdonságai
Az adatokat tipikusan változó képviseli. Az adatok típussal rendelkeznek/típust rendelünk hozzá
Az elemi adattípusok tulajdonságai
-értelmezési tartomány
-érték készlet
-műveletek halmaza-Például egy 16 bites előjeles int esetén:
Értelmezési tartomány: -32768 → 32768 Érték készlet: egész számok halmazaMűveletek halmaza: +, −, ∗, /
Neumann modell tulajdonságai aszerint, hogy min végezzük el a számítást
A számítást adatokon hajtjuk végre
Az adatokat tipikusan változók jelentik
Az adat végtelen értékmódosítási lehetőséggel rendelkezik (többszörös értékadás)
Az adatok és utasítások közös memóriaterületen helyezkednek el
A számítási műveleteket az adatokon végrehajtott adatmanipulációs műveletek
sorozatának segítségével végezzük el
Hogyan képezzük le a számítási feladatokat a Neumann modellben?
Szekvenciálisan
Mi vezérli a végrehajtást a Neumann modellben?
Az adatmanipuláló utasítások szekvenciája vezérli. (Vezérlés meghajtott modell)
Vezérlés meghajtott modell:
az adatmanipulálások szekvenciája (implicit: természetes sorrend; add, mul, sub...)
az explicit vezérlésátadó utasítások (pl. goto, if, for...)
A Neumann modell következményei
Előzmény érzékeny (változó értéke menet közben változik)
Alapvetően szekvenciális végrehajtás
Mellékhatások (rossz címzés, 0-val való osztás)
Egyszerű implementáció
Az adatfolyam modell rövid leírása
A számítást itt is adatokon hajtjuk végre, de csak egyszeres értékadás van, és a bemeneti adatokat egy adathalmaz formájában adjuk meg (nincsenek változók). A számítási feladatot egy adatfolyam gráffal képezzük le, amelyhez felhasználjuk az input adatok halmazát.→ input adatok halmaza + adatfolyam gráf = megoldott feladat. A gráf tartalmaz csomópontokat (szakosodott műveletvégző egységek) és éleket (I/O adatok).
Min végzünk számítást az adatolyam modellel?
Adatokon
Az adatolyam modellben az értékadások száma
Egyszeri értékadás
Neumann modell adat és utasítások tárolásának helye
Közös operatív tár
Adatfolyam modell adat és utasítások tárolásának helye
Regiszter
A Neumann modell mi alapján hajtja végre a számítást
Adatmanipulációs utasítás vezérelt
Az adatfolyam modell mi alapján hajtja végre a számítást
Adatfolyam gráf
Neumann utasítások végrehajtásának sorrendje
Szekvenciális
Adatfolyam utasítások végrehajtásának sorrendje
Párhuzamos (sok műveletvégző egység, azonnali műveletvégzés)
A probléma megfogalmazása a Neumann modellben
Procedurális jellegű
A probléma megfogalmazása az adatfolyam modellben
Procedurális jellegű
Előzmény érzékenység a Neumann modellben
Előzmény érzékeny
Előzmény érzékenység az adatfolyam modellben
Nincs előzmény érzékenység
Az adatfolyam modell igénye (hátránya)
Igen magas kommunikációs és szinkronizációs igény
Az applikatív modell min végez számítást
Adatokon
Probléma megfogalmazás az applikatív modellben
Deklaratív (előre meghatározott kapcsolatok a bemenetek között)
Hogy adjuk meg a számítási feladatot az applikatív modellnek
Egy komplex matematikai függvény formájában adjuk meg
Végrehajtás vezérlése az applikatív modellben
igény meghajtottAkkor hajtódik végre, ha kell egy folyamathoz egy másik folyamat eredménye. (Lusta modell)
Architektúra fogalma
Az az ismerethalmaz, amivel a gépi kódú programozóknak rendelkezniük kell, hogy hatékony programot tudjanak írni
Architechtúra szintjei
1. Globális P.M.S. (Processzor, Memória, Switch)
2. Programozási szint (magas, alacsony)3. Logikai/tervezési szint4. Áramköri szint
Architechtúra rétegei
Absztrakciós szint (layer) (L): Külső jellemzők, belső felépítés, és a működés együttes leírása
Számítási modell (M)
Specifikáció (S)
Implementáció (I)
Logikai architektúra tulajdonságai
adott absztrakciós szinten a fizikai architektúra elvonatkoztatása
logikai architektúra az adott absztrakciós szinten = {M, S}L
adott absztrakciós szinten a fekete doboz külseje
Processzor szintű logikai architektúra (Instruction Set Architecture) részei:
adattér
adatmanipulációs fa
állapottér
állapot műveletek
Fizikai architektúra
adott absztrakciós szinten a logikai architektúra megvalósítása
fizikai architektúra az adott absztrakciós szinten = {M, I}L
(nem vagyunk kíváncsiak a specifikációra)
adott absztrakciós szinten a fekete doboz belseje
A processzor-szintű fizikai architektúra (Micro Architecture) részei:
műveletvégző egység (ALU)
vezérlő
I/O rendszer
Megszakítási rendszer
A rendszerszintű fizikai architektúra:
• Memória
• Busz- / Sínrendszer
Adattér fogalma
Olyan tér, ami biztosítja az adattárolást olyan formában, hogy az adattérben található adatok a CPU által közvetlenül manipulálhatók legyenek (címezhető)
Az adattér két részre bontható:
memóriatér, regisztertér
Kétféle címtér:
modell címtere: címbusz szélessége határozza meg a kapacitást pld. 32 bitesnél 4 GB
az adott implementáció címtere: amennyi ténylegesen, fizikailag van
Két külön memória memóriatér létezik
fizikai (CPU által látható, kisebb így gyorsabb + alaplapi lapkán helyezkedik el)
virtuális (programozó által látható, nagyobb + a háttértáron helyezkedik el)
Regisztertér fogalma
Az adattér egy nagyteljesítményű része
Regisztertér osztályozása
Egyszerű regisztertér
Különféle adattípusokhoz különálló regiszterek
Többszörös regiszterkészlet
Egyszerű regiszter négy típusa:
-AC (akkumulátor) regiszter
-AC + Data regiszterek
-Univerzális regiszter készlet
-Stack Architektúra (regiszter)
Különféle adatokhoz különböző regiszterek
Fixpontos és logikai műveletekhez -> univerzális regiszterkészlet
Lebegőpontos (FP) műveletekhez
-SIMD (Single Instruction, Multiple Data stream)
-SSE (Single Stream Extension)
Intel Pentium III (1998)
- 8db FX (32 bit)-
- 8 db FP (80 bit)
- 8 db SSE (128 bit)
A kontextus fogalma
a program végrehajtás során a regiszterek állapotát az állapot információkkal (PC (ez a program counter), flag) együtt kontextusnak nevezzük
A többszörös regiszterkészletek célja
Ciklusok, megszakítások, egymásba ágyazott folyamatok gyorsítása
Mi történik egy megszakításkor
Le kell mentenünk az éppen futó program kontextusát, hogy később onnan lehessen folytatni
Több egymástól független regiszterkészlet előnyei
egyszerű
gyors, olcsó
független folyamatok esetén kiváló (pl.: Megszakítások)
Több egymástól független regiszterkészlet hátránya
paraméter átadásos eljárásnál nem gyorsít, mivel a paraméterátadás a memórián keresztül történik
Több egymástól független regiszterkészlet elve
Az eljárások már nem ugyanazon regiszterkészletet használják, viszont a regiszterkészletek közti kommunikáció még nem volt megoldott, ahhoz a háttértárat kellett használni -> ilyenek pl az egymásba ágyazott eljárások, amik használják a másik készletében lévő adatokat
Az átfedő regiszterkészlet elve
Három részre bontották a regisztereket, ezek az INS, LOCALS, OUTS
Az INS és OUTS részek a különböző regiszterekkészletek között átfedésben vannak, így az adatátvitel megoldott
Az átfedő regiszterkészlet hátrányai
- Merev, hiszen fix a regiszterek száma
- A regiszterkészletek száma is fix
A regiszterkészletek száma és a túlcsordulás előfordulása közötti összefüggés
6-8 regiszterkészlet esetén már csak 4-5%-ban fordul elő túlcsordulás
Nem is javasolt 8 egymásba ágyazott folyamatnál többet írni, hiszen a lassú működés mellett átláthatatlan is lesz a program
A Stack-Cache elve
A Compiler kezeli a regisztereket és nem a programozó
Minden eljáráshoz saját regiszterkészletet hoz létre, ami akkora, amekkorát a program igényel, tehát nem fix számú regiszterrel dolgozik
Ezeket a tartományokat hívjuk aktiválási rekordoknak
A rekordra stack pointer mutat, de az egyes memóriacímek közvetlenül is elérhetőek, így bármelyik adatot lehet használni
Vannak átfedő területek a tartományok között, pont annyi van, amennyi paramétert át kell adnia az egyik folyamat részéről a másiknak
Az adatmanipulációs fa lényege
Megmutatja a potenciális adatmanipulációs lehetőségeket, formákat, valamint egy konkrét implementáció adatmanipulációs lehetőségeit
Az adatmanipulációs fa szintjei
Adattípusok: FX1(byte), FX2, FX4, BCD, FP4, FP8,
boolean (FX = fix pontos, FP = lebegő pontos, BCD = binárisan ábrázolt decimális)
Műveletek: például fix számoknál: +, -, *, /
Operandusok típusai: rrr, rmr, ..., mmm (r = regiszter, m = memória) pl: rrr -> mindhárom regiszter
Címzési módok: memória típusú operandusoknál R+D, PC+D, RI+D (D = displacement, R = register, PC = program counter, RI index register)
Gépi kódok (utasítások): Pl.: 10011110
Az adattípusok fajtái
Elemi, összetett
Az elemi adattípusok fajtái
numerikus, karakteres, logikai, pixel stb
A numerikus adattípus fajtái
fixpontos, lebegőpontos, BCD
Az összetett adattípusok jellemzői
Elemi adattípusokból épülnek fel -> adatszerkezetnek is hívjuk
Különböző adattípusokból épül fel -> rekordnak hívjuk
Azonos adattípusokból felépülő összetett adattípusok fajtái
Tömb -> ha 1D, akkor vektor
szöveg
verem
sor
lista
fa
halmaz
A fixpontos adattípus fajtái
A lebegőpontos adattípus fajtái
A BCD adattípus fajtái
A karakteres adattípus fajtái
A logikai adattípus fajtái
Az adatmanipulációs fa műveleteinek fogalma
Az adatmanipulációs fa minden művelet esetén megállapítja, hogy milyen utasítás típusok, és operandus típusok választhatók.
Az értelmezett műveletek halmaza mindig architektúra függő. Pontosan deklarálni kell nem csak a műveleteket, hanem a kivételek kezelésére szolgáló műveleteket is.
A gépi kódú utasítás részei
MK (műveleti kód), Címrész
Az MK határozza meg, hogy milyen műveletet végzünk el, a címrész pedig azt, hogy min végezzük el (hány darab adaton, hol vannak ezek)
Az utasítás-feldolgozás általános folyamata
A CPU belső egységei
MAR - Memory Address Register
MDR - Memory Data Register
PC - Program Counter
IR - Instruction Register
DEC - Decoder
ALU - Aricmetical-Logical Unit
AC - Accumulator Register
Utasítás lehívás (fetch) folyamata
Minden utasítás esetén ugyan úgy néz ki. A PC a következő végrehajtandó utasítás címét tartalmazza. A program counter-ből átkerül a következő utasítás címe a memória cím regiszterbe. A memória cím regiszterben található memóriacím adat tartalma bekerül a memória adat regiszterbe. Innen az utasítás átkerül az utasítás regiszterbe. Program counter tartalmát megnövelni egy egységgel.
MAR <- PC
MDR <- [MAR]
IR <- MDR
PC <- PC + 1
(A cél, hogy a IR-be belekerüljön az utasítás)
A Load utasítás folyamata
Lehívjuk az utasítást. Az utasítás regiszterből átkerül az utasítás a dekóderbe. A dekóder címrésze átkerül a memória címregiszterbe. Betöltődik az adat a memória adat regiszterbe. A memória adat regiszter tartalma átkerül az akkumulátorba.
DEC <- IR
MAR <- DECcímrész
MDR <- [MAR]
AC <- MDR
(A cél, hogy az AC-ba bekerüljön az adat, hogy utána fel lehessen dolgozni)
Aritmetikai / logikai utasítás folyamata
(A példában egy ADD művelet szerepel→MK határozza meg a műveletet)
DEC <- IRMAR <- DECcímrész
MDR <- [MAR]
AC <- AC + MDR
Store utasítás folyamata
DEC <- IR
MAR <- DECcímrész
MDR <- AC
[MAR] <- MDR
Megszakítás (feltétlen vezérlésátadás) folyamata
DEC <-IR
PC <- DECcímrész
A 4 címes utasítás típus jellemzői
Legyen op – operandus, s – source, d - destination, @ - tetszőleges művelet
opd = opS1 @ opS2, op4 = következő utasítás címe
Hátrányok:
-memóriapazarlás
-további adatrögzítési hibák
-merev program-struktúra→helyette PC használata (+ auto increment)
A 3 címes utasítás típus jellemzői
Legyen op – operandus, s – source, d - destination, @ - tetszőleges művelet
opd = ops1 @ ops2
PC tárolja a következő utasítás címét
Előnye: lehetséges a párhuzamos végrehajtás
Hátránya: hosszú utasítások, nagy mennyiségű adat, sok memóriát igényel, lassú, kevés/nincs elágazás
Ilyenek a RISC processzorok
rrrd minimum 32 regiszter
Az előző utasítás eredményének mentésével párhuzamosan tölthetjük az aktuális utasítás két bemenő operandusát.Olyan helyeken használják, ahol nagy mennyiségű adat van és nincs elágazás.
A 2 címes utasítás típus jellemzői
Legyen op – operandus, s – source, d - destination, @ - tetszőleges művelet
ops1 = ops1 @ ops2
Az első operandus általában csak regiszter lehet, a kettes operandus lehet memóriacím is.
Pl.: ADD [100][102], 100-as és 102-es címet adja össze, az eredmény a 100-as címre megy.→kevesebb tárhelyet igényel, de az egyiket felülírjuk.Mai CISC processzorok általában ezt használják (x86)
Az 1 címes utasítás típus jellemzői
Legyen op – operandus, s – source, d - destination, @ - tetszőleges művelet, AC - akkumulátor regiszter
AC = AC @ op
AC LOAD [100]
ADD [102]STORE [100]
Akkumulátorba betölti a 100-as címet, majd hozzáadja a 102-es címet. végül kiírjuk az akkumulátor tartalmát. Az utasítások halmozhatók. Az utasítások rövidebbek, de több utasításra van szükség.
A 0 címes utasítás típus jellemzői
STACK (push, pop) - verem műveletekNOP – no operationA műveleti kód tartalmazza az eredményt is. (CLEAR D’) Előny: rövid, Hátrány: utasításkezelő műveletek
Az operandusok típusai
Akkumulátor (AC), Memória típus (m), Regiszter (r), Verem (s), Immediate (i)
• Akkumulátor (AC)- Gyors, csak 1 db van
• Memória típus (m)- Nagy, hosszú a cím, lassú
• Regiszter (r)- Gyors, kevés van belőle
• Verem (s)- Gyors, egyszerre csak egy elem érhető el
• Immediate (i)- magában a programban adunk értéket a változónak
(pl. ADD R1, 3)
Architektúrák osztályozása (operandus típusok szerint
Szabályos
---
Akkumulátor
-akkumulátor-regiszter (aar vagy ara)
-akkumulátor-memória (aam vagy ama)
Memória
-2 címes (mm)
-3 címes (mmm)
Regiszter
-2 címes (rr)
-3 címes (rrr) (legjobb teljesítmény)
Stack
- sss (kontextus adatok tárolására)
Kombinált / kompozit: vegyesen helyezkednek el az operandusok
--
Címzési módok
Címszámítás, cím módosítás, tényleges (deklarált) cím interpretálása
A címszámítás jellemzői
Abszolút címzés
-hosszú címek (akár több terrabájtnyi cím is lehet), ezért nem használjuk
Relatív címzés
Y (cím) = S (bázis) + D (eltolás)
Deklarálni kell egy Bázis címet és a Címszámítási algoritmust
Bázis cím lehet: PC, Top of Stack, Index Regiszter stb.
Cím módosítás jellemzői
Auto inkrementálás • Indexelés
Legyen YR (relatív cím), S (bázis), Ri (indexregiszter értéke / eltolás)
- 1 dimenziós adatblokk: YR = S + Ri
- 2 dimenziós adatblokk: YR = S + Ri1 + Ri2
Tényleges (deklarált) cím interpretálásának jellemzői
Lehet direkt vagy indirekt
Felfoghatjuk valós vagy virtuális címként is
Utasítás kód jellemzője
Architechtúránként változik
Az állapottér fogalma
Olyan, programból látható, és programtranszparens tárolókból áll, amelyek az adott programra vonatkozó állapot információkat hordozzák
Olyan rendszerfunkciókhoz szükséges információk, mint pl.
Virtuális memória kezelés
Megszakítás kezelés
Az állapottér felépítése
Állapot indikátorok
Olyan kivételes események kezelésére vannak, amelyek a végrehajtás során általánosan bekövetkeznek (pl.: FP-nél denormalizált szám jelzése).Minden regiszterkészlethez definiálva vannak flag-ek, pl.:
• ZERO• NEG• OVERFLOW • CARRYÁllapotműveletek
Állapotműveletek
Pl.
• Program Counter (PC) esetén: - Inkrementálás
- Dekrementálás- Felülírás (egy utasításból átvett címmel)
• Flag-ek esetén:
- Beállítás (set)→1
- Törlés (clear)→0
- Kezdeti értékre állítás (reset)
- Mentés (save)
- Visszatöltés (load)
A processzor szintű fizikai architektúra részei
Műveletvégző egység (ALU)
Vezérlő egység
I/O rendszer
Megszakítási rendszer
CPU: műveletvégző + vezérlő funckiói
Utasítás lehívás (fetch)
Utasítás végrehajtás (execute)
CPU típusok
Szinkron CPU:
- Órajel generátorral működik
- Hátránya: késleltetés, a következő órajelet mindig meg kell várni, így holtidő
keletkezhet
- Előnye: egyszerű, gyors
Aszinkron CPU:- Nincs órajel → Egyik utasítás vége jelzi a következő utasítás kezdetét
- Hátránya:
extra áramkör kell az utasítás befejezésének érzékeléséhez
drága
az utasítás befejezésének érzékelése is időbe telik
- Előnye: nincs holt idő