Kocsis Ilona
Győri László
Számítógép Architektúrák Előadás jegyzet
SZÁMÍTÓGÉP ARCHITEKTÚRÁK A számítógép architektúra szintjei A digitális számítógép olyan gép, amely a neki szóló utasítások alapján problémákat old meg. Azt az utasítássorozatot, amely leírja, hogyan oldjunk meg egy feladatot, programnak nevezzük. A legtöbb gépi utasítás ritkán bonyolultabb mint: • Adj össze két számot! • Ellenőrizz egy számot, vajon nulla-e! • Egy adatot másolj a számítógép memóriájában egyik helyről a másikra! Egy számítógép utasításainak együttese egy olyan nyelvet alkot, amelyen az ember a számítógéppel képes kommunikálni. Az ilyen nyelvet gépi nyelvnek nevezzük. Legyen L0 a gépi nyelv, és L1 egy az ember számára kényelmesebb nyelv. Hogy hajtható végre az L1 nyelven írt program? Kellene olyan gép, amelynek gépi nyelve az L1 nyelv.
Fordítás és értelmezés Fordítás: Először az L1 nyelvű program minden utasítását helyettesítjük az L0 nyelv utasításainak egy vele ekvivalens sorozatával. Az így nyert program teljes egészében az L0 utasításaiból áll. Ezután az eredeti L1 nyelvű program helyett a számítógép ezt az L0 nyelvű programot hajtja végre. Értelmezés: Az L1 nyelvű program következő utasítását elemezzük, és a vele ekvivalens L0 nyelvű utasítássorozatot azonnal végrehajtatjuk a számítógéppel. A fordítás és az értelmezés is elvégezhető az L0 nyelvű számítógéppel. Olyan, mintha lenne olyan gépünk, amely végre tudja hajtani az L1 nyelven írt programot: az ilyen gépet virtuális gépnek nevezzük. A gépi és az ember számára kényelmes nyelv között oly nagy az eltérés, hogy annak áthidalásához nyelvek és virtuális számítógépek hierarchiája alakult ki. Strukturált számítógép-felépítés: Az Ln nyelvű programokat vagy az alsóbb szinten futó értelmező hajtja végre, vagy az alsóbb szinten futó fordítóprogram fordítja alsóbb szintre.
Gépi, nyelvi szintek Digitális logika szintje (0. szint) - kapu (gate), AND, OR, … - egy és több bites memória, regiszter Mikroarchitektúra szintje (1. szint) - mikroutasítások, mikroprogram - nem minden gépen létezik, de a gépi utasítások végrehajtását gyakran mikroprogram végzi, ekkor ez a szint értelmezi a 2. szintet - regiszterek, aritmetikai-logikai egység, adatfolyam – adatút Gépi utasítás szintje (2. szint) - itt dől el a kompatibilitás kérdése Operációs rendszer szintje (3. szint) - speciális kiegészítők (memóriakezelés, párhuzamos futtatás, …) - átalában értelmezés - a szint utasításait az operációs rendszer vagy közvetlenül a gépi utasítás szintje hajtja végre - az eddigi szintek programjai hosszú számsorozatok
Assembly nyelv szintje (4. szint) - szimbolikus leírás Probléma orientált nyelv szintje (5. szint) - pascal, C, C++, - adatbázis kezelők, … - ezek tényleges nyelvek, fordítás
Gépi utasítás szintje Az utasítások a memóriában vannak tárolva.
4 címes utasítás cím) command dest, source1, source2, next - cím: az utasítást tartalmazó memóriarekesz címe - command (utasítás): az utasítás kódja - dest (cél): itt képződik az eredmény - source1 (forrás1): a művelet 1. operandusa - source2 (forrás2): a művelet 2. operandusa - next: a következő végrehajtandó utasítás címe. Ez legtöbbször az utasítás utáni első rekesz címe, ezért általában nem kell megadni, csak akkor, ha más utasítással folytatódik a program (ugró utasítás). A next implicit operandus.
3 címes utasítás cím) add, dest, source1, source2 - hatására dest fölveszi a source1 + source2 értéket. Ilyenkor persze elvész dest régi értéke
2 címes utasítás cím) add, op1, op2 - hatására op1 fölveszi az op1 + op2 értéket
1 címes utasítás cím) add, op - hatására A fölveszi az A + op értéket, ahol A egy kitüntetett regiszter (accumulator)
Az elektronikus számítógépek fejlődése, generációi, általános felépítése 1. generáció: elektroncső (1945-1955) − COLOSSUS (Turing, 1943): titkosírások megfejtése - 30 évre titkosítva. − ENIAC (Electronic Numerical Integrator and Computer - Mauchley, Eckert, 1943): 18000 cső, 140 KW, 30 tonna, 20 darab 10 decimális jegyes regiszter. 10 cső egy decimális számjegyhez! Dugaszolással programozható. − 1946-ig nem sikerült befejezni. − Neumann János megismerte az ENIAC-ot, és új gépet tervezett (IAS): bináris aritmetika, tárolt program. − A vezérlő egység határozza meg a működést a tárból kiolvasott adatok alapján − EDSAC: 2-es számrendszer, 4096 szavas memória. 40 bites szavak: előjeles egész, vagy két utasítás. Tárolt program: 8 bites utasításkód, 12 bites cím. Akkumulátor. Nem volt lebegőpontos aritmetika! − IBM 701 (1953) 2K 36 bites memória. − Legnagyobb 1. generációs: IBM 709 (1958).
2. generáció: tranzisztor (1955-1965). Tranzisztor feltalálása: 1948, Nobel díj: 1956. − Első jelentős tranzisztoros gép: DEC PDP-1 (1961). Ciklusideje fele az IBM 7090-nek (az IBM 709 tranzisztoros változata): • 4K 18 bites szó, • 5 ms ciklusidő, • 512x512 display! • Ára csak töredéke: 120 000 US$. Több tucat eladott gép. − Néhány évvel később: PDP-8: omnibusz (általános sín) – 15 000 US$, 50 000 eladott gép. − Magyarországon: KFKI, TPAi. − IBM 7090, 7094. − Első üzlet-orientált gép (1961): IBM 1401 byte-szervezésű memória. − Burroughs B5000 (1963), Cél: hatékony ALGOL fordítót lehessen írni! − Első szuper-gyors gép (1964): CDC 6600 Tervező: Seymour Cray. Párhuzamos működésre képes egységek, külön egység az összeadásra, szorzásra, osztásra. Párhuzamos utasítás-végrehajtás. 3. generáció: integrált áramkör (1965-1980) − Robert Noyce (1958): szilícium alapú integrált áramkör IBM problémája: 7094 és 1401 nem kompatibilis. − (1964): IBM 360-as sorozat Később a szocialista országokban R-sorozat. − Emuláció: a sorozat gépein futtathatók az előző 7094 és 1401 típusok programjai is. (mikroprogramozás). − Multiprogramozás (DOS, POWER, OS). 24 bites címtartomány (16 Mbyte). A nyolcvanas évek közepéig elég, akkor áttérés a 32 bites címre. − DEC: PDP-11 (1970): 16 bites Magyarországon: TPA70. Nem kompatibilis a PDP-11 -gyel. 4. generáció: VLSI (Very Large Scale Integration) (1980- napjainkig) − Néhány millió elem egy lapkán (chipen). − Személyi számítógépek. Kezdetben zacskóban: nyomtatott áramköri lap, IC-k, köztük általában INTEL 8080, kábelek, tápegység, hajlékony lemez − CP/M operációsrendszer (Gary Kildall), − Commodore, Apple, Spectrum-80. − IBM PC (I-8088 alapú) a terveket publikálták - klónok. − Microsoft: MS-DOS, OS/2, Windows. Technológiai fejlődés − Moore törvény (1965): Az egy lapkán elhelyezhető elemek száma másfél évenként duplázódik (1.8. ábra). Azt várják, hogy 2020-ig teljesülni fog. Minden más területen (lemezek, adatátvitel, ...) hasonló sebességű a fejlődés. A szoftverek mérete, bonyolultsága is követi ezt: − Nathan első törvénye: A szoftver gáz: kitölti a rendelkezésére álló teret.
A Neumann-elv A modern számítógépekkel szembeni követelmények: − Fő funkcionális részek: • Vezérlő egység (control unit) • Arithmetikai és logikai egység (ALU) • Tár (memory), ami címezhető és újraírható • Ezek elektronikusak és bináris számrendszert használnak − Tárol program elvén működik − A vezérlő egység határozza meg a működést a tárból kiolvasott adatok alapján
Numerikus adatok gépi ábrázolása Fixpontos számok Pl.: előjeles kétjegyű decimális számok : − Ábrázolási tartomány: [-99, +99]. − Pontosság (két „szomszédos” szám különbsége): 1. − Maximális hiba: (az ábrázolási tartományba eső) tetszőleges valós szám, és a hozzá legközelebb lévő ábrázolható szám különbsége: 1/2. Számolási pontatlanságok: a = 70, b = 40, c = - 30 esetén a + (b + c) = 80, (a+b) + c = -20 - túlcsordulás Helyértékes ábrázolás Pl.: 521,2510 = 5 * 102 + 2 * 101 + 1 * 100 +2 * 10-1 + 5 * 10-2. Általában (q alapú számrendszer esetén): an an-1 …a0,b1b2 …bm = an*qn +an-1*qn-1 + …+a0+b1*q-1 +b2*q-2 + …+bm*q-m
0 £ ai, bj < q
Átszámolás számrendszerek között Pl. 10-esből 2-esbe: egész rész osztással, tört rész szorzással. Véges tizedes tört azonban nem biztos, hogy binárisan is véges! Átszámítás 10-es számrendszerbe q alapú számrendszerből Legegyszerűbben a Horner elrendezéssel alakíthatunk át: an*qn +an-1*qn-1 + …+a0+b1*q-1 +b2*q-2 + …+bm*q-m = (…(an*q + an-1) * q +… + a1)* q+ a0 (…(bm/q + bm-1)/q + …+ b1 )/q Pl.: $a_5f67=(((10*16+5)*16+15)*16+6)*16+7 %1_0110_0101=(((((((1*2+0)*2+1)*2+1)*2+0)*2+0)*2+1)*2+0)*2+1 A számítógép kettes számrendszerben dolgozik, 10-es számrendszerből a Horner elrendezéssel alakítja át a számokat. A formulában ai -t, bj -t és q -t kettes számrendszerben kell megadni. Kettes számrendszerből 10-es számrendszerbe 10-zel való ismételt osztással állítja elő az egész részt, és 10zel való ismételt szorzással állítja elő a tört részt – hasonlóan ahhoz, ahogy korábban bemutattuk a 10-es számrendszerből 2-esbe való átszámítást.
Lebegőpontos számok Sok ekvivalens ábrázolási lehetőség, a leggyakrabban a törtrész első számjegye az adott szám első, nullától különböző számjegye (normalizált alak). Példa: 254 = 0,0254x104 = 0,254x103 (= 2,54x102). - A nulla ábrázolásához külön megállapodásra van szükség (általában csupa nulla számjegyből áll) - A lebegőpontos ábrázolásoknál is meghatározható a legkisebb és a legnagyobb ábrázolható szám, továbbá a legkisebb és legnagyobb hiba. Előjeles fixpontos számok 28 = 256 különböző 8 bites szám lehetséges. Melyek jelentsenek negatív értékeket? Előjeles számok szokásos ábrázolásai: − előjeles abszolút érték, − egyes komplemens, − kettes komplemens, − többletes. Előjeles abszolút érték Az első bit (balról) az előjel: 0: +, 1: Pl.: +2510 = 000110012, -2510 = 100110012. Jellemzők (8 bites szám esetén): − a legkisebb szám -127, a legnagyobb 127, − a nulla kétféleképpen ábrázolható.
Negatív számok ábrázolásai Egyes komplemens Az első bit az előjel (0: pozitív, 1: negatív). Egy szám -1-szerese (negáltja) úgy kapható meg, hogy a szám minden bitjét negáljuk (ellenkezőjére változtatjuk). 000110012, Pl.: +2510 = - 2510 = 111001102. Jellemzők (8 bites szám esetén): − a legkisebb szám -127, a legnagyobb 127, − a nulla kétféleképpen ábrázolható. Kettes komplemens Az első bit az előjel (0: pozitív, 1: negatív). Egy szám negáltja úgy kapható meg, hogy az egyes komplemenshez egyet hozzáadunk. Pl.: +2510 = 000110012, -2510 = 111001102 egyes komplemens, -2510 = 111001112 kettes komplemens. Jellemzők (8 bites szám esetén): − a legkisebb szám -128, a legnagyobb 127, − a nulla egyértelműen ábrázolható. − Képzése: Egyes komlemens +1 − előjel, 0 = pozitív, 1 = negatív − Ha pozitív, ugyanaz az érték, mint a „normál” számok esetén
− −
Ha negatív, az abszolút érték meghatározásához kettes komplemenst kell képezni. Úgy is megfogalmazható, hogy: A legmagasabb helyiértékű bit +2n-1 helyett -2n-1–et ér
Többletes A szám és a többlet összegét ábrázoljuk előjel nélkül (ez már pozitív!). m bites szám esetén a többlet általában 2m-1 vagy 2m-1 – 1 Pl.: +2510 = 100110012, 128-többletes ábrázolás 011001112 128-25=103 -2510 = Jellemzők (128 többlet esetén): − a legkisebb szám -128, a legnagyobb 127, − a nulla egyértelműen ábrázolható. Megjegyzés: a 2m-1 többletes ábrázolás azonos a kettes komplemenssel fordított előjellel. Használata: a lebegőpontos számok kitevő-részénél. Feladat: Ábrázoljuk nyolcas számrendszerben 25410-et: előjelbittel kezdve, a kitevő legyen 1 jegyű (3 bites), 4-többletes, a törtrész 4 jegyű. Megoldás: 3768, normalizált alak: 0,376x83, a megoldás: 0 111 011 111 110 0002 = 0737608
BCD ábrázolás BCD (Binary Coded Decimal) ábrázolás: minden decimális számjegyet négy biten ábrázolunk. Negatív számok BCD ábrázolása: 9 vagy 10 komplemens kóddal. Pl.: +30110 =0000 0011 0000 0001, -30110 =1001 0110 1001 1000 (9 komplemens), -30110 =1001 0110 1001 1001 (10 komplemens).
Az IEEE 754 szabvány Single 32 bites, double 64 bites (, extended 80 bites). Single 32 bites: − előjel: 1 bit − kitevőrész: 8 bit, 127-többletes − törtrész:23 bit Double 64 bites: − előjel: 1 bit − kitevőrész: 11 bit, 1023 többletes − törtrész: 52 bit Ha 0 < a kitevőrész < 255, a szám normalizált. Normalizált tört vezető 1-es bitje nincs ábrázolva!
Karakter kódolási szabványok ASCII -
American Standard Code for Information Interchanges 7 bites: vezérlőkarakterek az angol abc kis és nagy betűi, szimbólumok,
ISO 8859 - kódlap, ISO 8859-2: magyar betűk is. UNICODE − 32 bites: kódpozíciók (code point)
− − − UTF-8 − − − − −
Kínai, japán, koreai: fonetikus szimbólumok, Han ideogramok (20992 jel, nincsenek szótár szerint rendezve). ... Japán íráshoz kevés (> 50000 kanji jel van). Elvileg 231 különböző karakter, jel „Tárolás” UTF-8 szerint 8 bites Unicode átalakítási formátum bármilyen Unicode karaktert képes reprezentálni visszafelé kompatibilis a 7 bites ASCII szabvánnyal nagyon elterjedt, mivel zökkenőmentes átmenetet biztosít az ASCII vagy ISO alapú rendszerekből a kódolt végeredmény jól tömöríthető
CPU – Central Processor Unit Feladata: a memóriában tárolt program végrehajtása. Részei: − vezérlőegység, feladata: a program • utasításainak beolvasása, • az ALU, a regiszterek vezérlése, − aritmetikai-logikai egység (ALU) , feladata: az utasítások végrehajtása, − regiszter készlet, feladata: részeredmények, vezérlő információk tárolása. A legfontosabbak: • utasításszámláló (Program Counter): PC, • utasításregiszter (Instruction Register): IR,
Adatút (data path) − A regiszter készletből feltöltődik az ALU két bemenő regisztere − ALU − Az eredmény az ALU kimenő regiszterébe kerül − Az ALU kimenő regiszteréből a kijelölt regiszterbe kerül az eredmény Nem biztos, hogy az ALU be- és kimenő regiszterei tényleges (címezhető, hivatkozható) regiszterként vannak kialakítva.
Központi memória, bájt sorrend, hibafelismerés és hibajavítás kérdése Központi memória A programok és adatok tárolására szolgál. − Bit: a memória alapegysége, egy 0-t vagy 1-et tartalmazhat. − Memória rekesz (cella): több bit együttese. Minden rekesz ugyanannyi bitből áll. Minden rekeszhez hozzá van rendelve egy szám, a rekesz címe. Egy rekeszre a címével hivatkozhatunk. A rekesz a legkisebb címezhető egység. − A rekesz hossza manapság legtöbbször 8 bit (byte ~ bájt). Bájtsorrend − A legtöbb processzor több egymás utáni bájttal is tud dolgozni (szó – word, …). − A legmagasabb helyértékű bájt a szóban a legalacsonyabb címen: a legmagasabb címen: nagy (big) endian kis (little) endian MSBfirst LSBfirst
−
Most Significant Byte first Least Significant Byte first Ha egy 32 bites szó bájtjainak értéke rendre: a, b, c, d, akkor a szó értéke: 3 2 a+b*256+c*2562+d*2563 a*256 +b*256 +c*256+d Problémák a gépek közötti kommunikációban!
Hibafelismerés és hibajavítás Kódolás: adat + ellenőrző bitek = kódszó. − 2 kódszó Hamming távolsága: az eltérő bitek száma. Pl.: 11001 és 11011 (Hamming) távolsága = 1. − Hibaérzékelő kód: bármely két kódszó távolsága > 1: paritás bit. − d hibás bit javítása: a kódszavak távolsága > 2d. − Egy hibát javító kód m adat, r ellenőrző bit, összesen n = m + r. 2m „jó” szó + minden „jó” szónak n db „egyhibás” szomszédja van, ezért (1+ n)2m £ 2n = 2m+ r 2m -mel egyszerűsítve: m + r +1 £ 2r, vagy másképp: m + r < 2r szükséges.
Operandusok megadás módjai (címzési módok) Közvetlen operandus (immediate operand) Az operandus megadása az utasításban. Direkt címzés (direct addressing) A memóriacím megadása a címrészen. Az utasítás mindig ugyanazt a címet használja. Az operandus értéke változhat, de a címe nem (fordításkor ismert kell legyen!). Regiszter címzés (register addressing) Mint a direkt címzés, csak nem memóriát, hanem regisztert címez. Regiszter-indirekt címzés (register indirect addresing) A címrészen valamelyik regisztert adjuk meg, de a megadott regiszter nem az operandust tartalmazza, hanem azt a memóriacímet, amely az operandust tartalmazza (mutató - pointer). Rövidebb és a cím változtatható. Önmódosító program (Neumann): Ma már kerülendő (cache problémák!), pl. regiszterindirekt címzéssel kikerülhetjük. Indexelt címzés (indexed addressing) Egy eltolási érték (offset) és egy (index) regiszter tartalmának összege lesz az operandus címe. Bázisindex címzés (based-indexed addressing) Egy eltolási érték (offset) és 2 (egy bázis és egy index) regiszter tartalmának összege lesz az operandus címe. Verem címzés (stack addressing) Az operandus a verem tetején van. Nem kell operandust megadni az utasításban.
Az Intel 8086/88 regiszter készlete, társzervezése, címzési módjai, címzési mód byte Az Intel 80x86 CPU regiszterei − Általános célú regiszterek − Speciális regiszterek • alkalmazások számára hozzáférhető • STATUS/Flag regiszter (SR, Flags, F, EF) • (Utasítás számláló (IP, EIP)) • operációs rendszer (ill. a vezérlő) számára fenntartott
−
szegmens regiszterek • CS: Kód • SS: Verem • DS: Adat • ES, FS, GS: Extra adat
Az Intel 80x86 CPU általános regiszterei − 8 bites regiszeterek : AL, AH, BL, BH, CL, CH, DL, DH − 16 bites regiszterek : AX, BX, CX, DX, SI, DI, BP, SP − 32 bites regiszterek: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP − Átfedés van közöttük: • AX=EAX%65535=256*AH+AL , BX, CX, DX • SI=ESI%65535 , DI, BP, SP − „jelentés” a név mögött: • AX=Accumulator, BX=Base register, CX=Counter_register, DX=Data_register, SI=Source_Index, DI=Destination_Index BP=Base_Pointer, SP=Stack_Pointer (NE HASZNÁLD!) • AL=Accumulator Low, AH=Accumulator High, stb... • EAX=Extended Accumulator, stb... A flag regiszter Egyedi „zászlók” - logikai változók – gyűjteménye − Állapot jelzők • bit-0: CF – Carry – átvitel / előjel nélküli túlcsordulás • bit-2: PF – Parity – párosság • bit-4: AF - Auxiliary carry – közbenső átvitel • bit-6: ZF – Zero – zéró • bit-7: SF – Sign – előjel • bit-B: OF – Overflow – Előjeles Túlcsordulás − Vezérlő bitek • bit-8: TF – Trace – nyomkövető • bit-9: IF – Interrupt enable – Megszakítás engedélyezés • bit-A: DF – Direction – Irány jelző Az Intel 8086/8088 társzervezése − A memória byte szervezésű. Egy byte 8 bitből áll. word, double word. − Byte sorrend: Little Endian (LSBfirst). − A negatív számok 2-es komplemens kódban. − szegmens, szegmens cím a szegmensen belüli „relatív” cím, logikai cím, virtuális cím, OFFSET, displacement, eltolás, Effective Address (EA) − fizikai cím (Address) Címzésmódok (operandusok megadási módjai) − konstans, azonnali: MOV(54,AL); ADD($54,AL); − regiszter: MOV(54,AL); SUB(BH,AL);
Memória címzések − direkt, közvetlen: MOV(AX,[$AF4D]); MOV(valt,AX); − regiszter indirect: MOV([EAX],EAX); ADD(34,[EBX]); − bázis relative:MOV([EBX+23],BL); MUL(valt[ESI]); − indexelt: MOV([$AD34+ECX*2],AX);MUL(v[esi*2]) − bázisrelatív indexelt MUL(v[EBX+ECX*2])
Az Intel 8086/88 utasításai Adatmozgató utasítások (Minden flag változatlan) − MOV(forrás,cél); − MOVSX(forrás,cél_reg);MOVZX(forrás,cél_reg) − XCHG(m/r,m/r); // azonos méret, − XLAT; // MOV([EBX+AL],AL) − LEA(mem,cél_reg32);// “=” MOV(&mem,cél_reg32) − LAHF; SAHF; // Load, Save az AH szempontjából .. − CBW; CWD; CDQ; //movsx(al,ax) Verem műveletek − PUSH(forrás);//mem, reg, 16/32 bit o PUSHW(forrás); // mem16, reg16, konst; ESP-=2 o PUSHD(forrás); // mem32, reg32, konst; ESP-=4 − POP(forrás); //mem, reg, 16/32 bit − PUSHF; PUSHFD; − POPF; POPFD; // Flagek mégis változhatnak!! − PUSHA; PUSHAD; − POPA; POPAD; Aritmetikai utasítások − ADD(forrás,cél);SUB(forrás,cél); − ADC(forrás,cél);SBB(forrás,cél); − INC(m/r); DEC(m/r);NEG(m/r); − CMP(cél,forrás);//mint a SUB(forrás,cél), de nem tárol Feltételes ugrások CMP után − J... címke; • pozitív mennyiségek hasonlítása után JA, JB, JE, JAE, JBE, Above JNA, JNB, JNE, JNAE, JNBE Below • előjeles mennyiségek hasonlítása után JG, JL, JE, JGE, JLE, Greater JNG, JNL, JNE, JNGE, JNLE Less − INTMUL(forrás,cél);intmul(kons,forrás,cél); − MUL(forrás);IMUL(forrás); − DIV(osztó);IDIV(osztó);//kivétel Logikai utasítások − NOT(cél); // Minden flag változatlan
− − − −
OR(forrás, cél); AND(forrás,cél); XOR(forrás,cél); TEST(forrás,cél); // TEST(al,al); TEST(8,AH); forrás: mem/reg/konst cél: mem/reg cél és forrás azonos méretű / 8-16-32 bit, nem lehet mindkettő memória cím OF=CF=0 AF – határozatlan PF, ZF, SF értelemszerűen
Sztringkezelő utasítások − Adatmozgató utasítások • LODSB; LODSW; LODSD; // DS:ESI // direction flag • STOSB; STOSW; STOSD; // ES:EDI // AL, AX, EAX • MOVSB; MOVSW; MOVSD; // ESI, EDI − hasonlító utasítások • SCASB; SCASW; SCASD; // AL-[EDI] • CMPSB; CMPSW; SMPSD; // [ESI]-[EDI] − Ismétlő prefixek // ECX • REP.MOZGATO • REPE.HASONLITO • REPNE.HASONLITO Forgatások, léptetések − SHL(sz,cél);//SHR, SAR − ROL(sz,cél);//ROR, RCL, RCR − SHLD(sz,forrás,cél); // SHL(sz,cél:forrás); 16/32 bit − SHRD(sz,reg,mem/reg);// SHR(sz,forrás:cél); Csak a cél változik meg sz: konstans vagy CL cél és forrás azonos méretű forrás csak regiszter lehet, csak 16-32 bites lehet Csak CF és OF változik meg a forgatásoknál CF az utoljára „kilépő” bit másolata SZ=0 esetén minden változatlan marad SZ=1 esetén OF azt mutatja meg, hogy megváltozott-e az előjelbit értéke SZ>1 esetén OF határozatlan AF határozatlan a léptetéseknél
Két menetes assembler fordító Első menet Legfontosabb feladata a szimbólum tábla felépítése. A szimbólum neve …
értéke …
egyéb információk …
- érték: címke címe, változó címe, szimbolikus konstans értéke. - egyéb információk: pl.: típus, méret, szegmens neve, amelyben a szimbólum definiálva van, Második menet Az első menet célja összegyűjteni, táblázatba foglalni a szimbólum definíciókat, így a második menet idején már minden (a programban definiált) szimbólum ismert, tehát a második menetben már nem jelentkezik az előre hivatkozási probléma. Összeállítás = assemble Az assembler számos hibát ismerhet fel: − használt szimbólum nincs definiálva, − egy szimbólum többször van definiálva, − nem létező operációs kód, − nincs elegendő operandus, − túl sok operandus van, − hibás kifejezés (pl. 3 egy bináris számban), − illegális regiszter használat, − típus hiba, − nincs END utasítás, Számos olyan hibát azonban, melyet a magasabb szintű nyelvek fordítói könnyen felismernek – vagy egyáltalán elő se fordulhatnak – az assembler nem tud felderíteni: − − − −
az eljárás hívás paramétereinek típusa nem megfelelő, (Alacsony szintű eljáráshívás esetén.) a regiszter mentések és helyreállítások nem állnak „párban”, hibás vagy hiányzik a paraméter vagy a lokális változó terület ürítése a veremből, a hívás és a hívott eljárás helyén érvényes ASSUME-ok ellentmondásosak (nem feltétlenül hiba, de az lehet), // Ez MASM-ban fordulhat elő
Kapcsolat szerkesztő. Time sharing (idő osztás) Szerkesztő A következő feladatokat kell megoldania: − az azonos nevű és osztályú szegmens (Kód, Readonly, Static, Storage) szeletek egymáshoz illesztése a szegmens szeletek definíciójában megadott módon, − a GROUP pszeudo utasítással egy csoportba sorolt szegmensek egymás után helyezése, (MASM) − a relokáció elvégzése, − a külső hivatkozások (@EXTERN) feloldása. Az object file nemcsak a lefordított utasításokat tartalmazza, hanem további – a szerkesztőnek szóló – információt is. Lehetővé teszi a program akár különböző nyelveken készített részleteinek összeillesztését. Két menetben dolgozik: − Az első menetben táblázatokat készít (térkép – map és globális szimbólum tábla). − A második menetben a táblázatokban elhelyezett információk alapján elvégzi a szerkesztést. Időosztásos (time sharing) rendszer Egy program elindításakor többek között a következő feladatokat kell végrehajtani: betöltés – indítás – felfüggesztés – kimentés a program folytatásakor: visszamentés – futtatás – felfüggesztés – kimentés
Általában nem biztosítható, hogy a visszamentett program a memóriának ugyanarra a területére kerüljön vissza, ahol korábban futott!
Binding (cím hozzárendelés), dinamikus szerkesztés Cím hozzárendelés (binding) Időosztáshoz kapcsolódóan: Ha pl. a programunk egy JMP L ugró utasítást tartalmaz, akkor L-hez valamikor hozzá kell rendelnünk egy konkrét fizikai címet – binding = (cím) hozzárendelés. Dinamikus szerkesztés (DLL) Nagyméretű programokban bizonyos eljárások csak nagyon ritkán szükségesek. Ezeket nem kell statikusan a programhoz szerkeszteni. Csatoló táblázat (Linkage Segment): minden esetleg szükséges eljáráshoz egy csatoló blokkot (struktúrát) tartalmaz.
Boole-függvények áramköri ekvivalenciája Két Boole-függvény ekvivalens, ha az összes lehetséges bemenetre a két függvény azonos kimenetet ad. Két Boole-függvény ekvivalenciája könnyen ellenőrizhető az igazság táblájuk alapján.
Kapuk, kombinációs áramkörök, multiplexer, demultiplexer, dekódoló, összehasonlító, programozható logikai tömbök Kombinációs áramkörök Definíció: A kimeneteket egyértelműen meghatározzák a pillanatnyi bemenetek. Multiplexer n vezérlő bemenet, 2n adatbemenet, 1 kimenet. Az egyik adatbemenet kapuzott (gated) a kimenetre. n vezérlő bemenetű multiplexerrel tetszés szerinti n változós Boole-függvény megvalósítható az adatbemenetek megfelelő választásával. Demultiplexer Egy egyedi bemenetet irányít az n vezérlő bemenet értékétől függően a 2n kimenet egyikére Dekódoló n bemenet, 2n kimenet. Pontosan egy kimeneten lesz 1. Demultiplexerrel: a bemenetet igazra állítjuk. Összehasonlító (comparator) KIZÁRÓ VAGY kapu Programozható logikai tömbök PLA (Programmable Logic Array) Biztosítékok kiégetése.
Aritmetikai áramkörök, léptető, fél és teljes összeadó, ALU Aritmetikai áramkörök A kombinációs áramkörökön belül külön csoportot alkotnak. Léptető (shifter) Jobbra vagy balra léptet.
Fél összeadó
Teljes összeadó
Aritmetikai-logikai egység bitszelet (bit slice), F0, F1 -től függően ÉS, VAGY, NEGÁCIÓ vagy +
Nem kombinációs áramkörök. Óra, tárolók, flip-flop-ok Óra (clock) – ciklusidő (cycle time) − Pl.: 500 MHz - 2 nsec. − Finomabb felbontás késleltetéssel. − Aszimmetrikus óra. Tároló Szint vezérelt (level triggered). SR tároló (Set Reset latch. − Stabil állapot: a két kimenet 0, 1 vagy 1, 0. − S (set), R (reset) bemenet. Időzített (clocked) SR tároló: − Mindkét SR tároló indeterminisztikussá válna, ha S = R = 1 egyszerre fordulna elő. Flip-flop Élvezérelt (edge triggered) − CK: órajel − CK=1, − CK=0 szint esetén írja be D-t, − CK emelkedő, (d) CK lefelé menő élénél. Sokszor S (set, PR preset), R (reset,CLR clear) be- és Q# kimenet is van.
Gyorsító tár (cache). Találati és hiba arány. Közös és osztott gyorsító tár Gyorsító tár − A processzorok mindig gyorsabbak a memóriáknál. − A CPU lapkára integrálható memória gyors, de kicsi. − Feloldási lehetőség: a központi memória egy kis részét (gyorsító tár) a CPU lapkára helyezni: Amikor egy utasításnak adatra van szüksége, akkor először itt keresi, ha nincs itt, akkor a központi memóriában. − Lokalitási elv: Ha egy hivatkozás a memória A címére történik, akkor a következő valószínűleg valahol A közelében lesz (ciklus, mátrix manipulálás, …). − Ha A nincs a gyorsító tárban, akkor az A-t tartalmazó (adott méretű) blokk (gyorsító sor - cache line) kerül beolvasásra a memóriából a gyorsító tárba.
Találati arány (h) Az összes hivatkozás mekkora hányada szolgálható ki a gyorsító tárból. Hiba arány: 1-h Ha a gyorsító tár elérési ideje: c, a memória elérési ideje: m, akkor az átlagos elérési idő = c + (1- h) m. A gyorsító tár mérete: nagyobb tár – drágább. A gyorsító sor mérete: nagyobb sor – nagyobb a sor betöltési ideje is. Ugyanakkora tárban kevesebb gyorsító sor fér el. Osztott (külön utasítás és adat) gyorsító tár előnyei: − Egyik szállítószalag végzi az utasítás, másik az operandus előolvasást. − Az utasítás gyorsító tárat sohasem kell visszaírni (az utasítások nem módosulnak). Egyesített gyorsító tár nem lehetséges párhuzamosítás.
Direkt leképezésű és halmaz kezelésű gyorsító tár Direkt leképezésű gyorsító tár működése Ha a gyorsító tár Vonal által mutatott sorában V=1 (valid), és a TAG megegyezik a címben lévő TAG-gel, akkor az adat bent van a gyorsító tárban (ebben a sorban). Halmazkezelésű (csoportasszociatív) gyorsító tár Ha egy program gyakran használ olyan szavakat, amelyek távol vannak egymástól, de ugyanoda képződnek le a gyorsító tárban, akkor sűrűn kell cserélni a gyorsító sort. Ha minden címhez n bejegyzés van, akkor n utas halmazkeresésű gyorsító tárról beszélünk. Ritka a több, mint 4 utas kezelés. LRU (Least Recently Used) algoritmus Gyorsító sor betöltése előtt a legrégebben használt bejegyzés kerül ki a gyorsító tárból.
Memóriába írás Memóriába írás Stratégiák: − Írás áteresztés (write through): az írás a memóriába történik. Ha a cím a gyorsítóban van, oda is be kell írni, különben el kellene dobni a gyorsító sort. − Késleltetett írás (write deferred, write back): ha a cím bent van a gyorsító tárban, akkor csak a gyorsító tárba írunk, a memóriába csak gyorsító sor cserénél. − Ha a cím nincs a gyorsító tárban, akkor előtte betölthetjük: írás allokálás (write allocation) – többnyire ezt alkalmazzák késleltetett írás esetén.
Sín. Sín protokolm, mester – szolga, sín vezérlő, vevő, adóvevő, sín szélesség, sáv szélesség Sín (bus) Korai személyi számítógépeknél egyetlen (külső) rendszersín, manapság legalább kettő van: egy belső és egy külső (I/O) Sínprotokoll A sín működésének + a csatlakozások mechanikai, elektronikus definíciója Mesterek (masters) Aktív (kezdeményező) berendezések (CPU, lemez vezérlő).
Szolgák (slaves) Passzív (végrehajtó) berendezések (lemez vezérlő, CPU). Sín vezérlő, sín vevő, sín adóvevő A sínhez kapcsolódó lapkák lényegében erősítők. − Mester – sín vezérlő (bus driver) – sín. − Sín – sín vevő (bus receiver) – szolga. − Mester–szolgáknál: sín adó-vevő (bus transceiver). A csatlakozás gyakran tri-state device vagy open collector – wired-OR segítségével történik. Sávszélesség (továbbítható bitek száma) / sec. − Sávszélesség növelése: Gyorsítás: probléma a sín aszimmetria (skew), kompatibilitás. Sínszélesség: szélesebb sín → drágább, kompatibilitás.
Sokszorozott sín Sokszorozott (multiplexed) sín pl. először a cím van a sínen, majd az adat (ugyanazokon a vezetékeken). Ilyenkor a sín szélesség lényegesen csökken (olcsóbb, kevesebb láb szükséges a sínhez való csatlakozáshoz), csökken a sáv szélesség is, de nem olyan mértékben. Általában bonyolultabb a sín protokoll.
Sín időzítés: szinkron, aszinkron sín, teljes kézfogás, sín ütemezés, sín műveletek Szinkron sín − 5 – 100 MHz-es órajel van a sín egy vezetékén. Minden síntevékenység az órajelhez van igazítva. − Minden sínművelet a ciklusidő (sín ciklus) egész számú többszöröséig tart: pl. 2.1 ciklusidő helyett 3 ciklusidő kell. − A leglassabb eszközhöz kell a sín sebességét igazítani, a gyors eszköz is lassan fog működni. Aszinkron sín − Minden eseményt egy előző esemény okoz! − Nincs órajel, WAIT. − MSYN# (kérés - Master SYNchronization), − SSYN# (kész - Slave SYNchronization). − Az aszinkron sín működése: akkor indulhat újabb tranzakció, ha SSYN# negált. − Ugyanazon a sínen gyors és lassú mester - szolga pár is lehet. Teljes kézfogás (full handshake) Akkor indulhat, ha SSYN# negált! − Mester: kívánságok beállítása, majd MSYN#, vár, − Szolga: látja MSYN#-t: dolgozik, majd SSYN#, vár, − Mester: látja SSYN# -t (kész), dolgozik, ha kell, majd negálja MSYN# -t, − Szolga: látja MSYN# negálását, negálja SSYN# -t. Ugyanazon a sínen gyors és lassú mester - szolga pár is lehet. Sínütemezés (kiosztás) − Ha egyszerre többen is igénylik a sínt (CPU, I/O vezérlő), akkor a sínütemező (bus arbiter) dönt. − Általában I/O elsőbbséget kap (cikluslopás). − Centralizált: (margaréta) láncolás (daisy chaining), egy vagy többszintű lehet. Ha van kérés és a sín szabad: sín foglalási engedély.
−
Néha további vezeték van az engedély fogadásának jelzésére (újabb sín kérés kezdődhet a sín használata közben). Decentralizált pl. 16 prioritású: 16 eszközhöz 16 kérés vonal, minden eszköz minden kérés vonalat figyel, tudja, hogy a saját kérése volt-e a legmagasabb prioritású. ha nem foglalt és be, akkor lefoglalhatja a sínt (ki negálása, foglalt beállítása).
Sín műveletek Az eddigiek közönséges sín műveletek voltak. − Blokkos átvitel: A kezdő memória címen kívül az adat sínre kell tenni a mozgatandó adatok számát. Esetleges várakozó ciklusok után ciklusonként egy adat mozgatása történik. − Megszakítás kezelés: később tárgyaljuk részletesen. − Több processzoros rendszerekben: olvasás – módosítás – visszaírás ciklus: szemafor.
Universal Serial Bus Általános soros sín (USB) Igény: bármikor könnyen lehessen perifériát kapcsolni a géphez, ne kelljen szétszedni a gépet, újra bootolni, ne kelljen áramellátásról gondoskodni, … Plug ’n Play (csatlakoztasd és működik) perifériák. Sokféle perifériát lehessen azonos módon csatlakoztatni, akár a gép működése közben, hardver ismeretek nélkül. − USB (Universal Serial Bus - általános soros sín): Négy vezeték: adatok (2), tápfeszültség (1), föld (1). − USB 1.0 1,5 Mbps (billentyűzet, egér,…) − USB 1.1 12 Mbps (nyomtató, fényképezőgép,…) − USB 2.0 480 Mbps (DVD lejátszó,…) − A központi elosztó (root hub) 1 ms-onként üzenetekkel (frame, 3.54. ábra) kommunikál az eszközökkel. − A frissen csatlakoztatott eszköz címe 0. Ha a központi elosztó tudja fogadni az eszközt, akkor egyedi címet (1-127) ad neki (konfigurálja).
Memória műveletek −
−
− −
Szócímzés: 32 bites adat írása, olvasása. szó cím = 4 * (bájt cím), a túlcsorduló bitek elvesznek MAR (Memory Address Register) MDR (Memory Data Register) Bájtcímzés: gépi szintű utasítás bájt olvasás. PC (Program Counter): bájt cím, MBR (Memory Byte Register): bájt. MBR kétfajta értelmezése (két vezérlőjel): MBR: MBR előjel kiterjesztéssel kerül a B sínre, MBRU: MBR előjel nélküli kiterjesztéssel kerül a B sínre.
ALU és az adatút vezérlése, mikroutasítások Az adatút vezérlése − 9 jel: a B sínre írás a regiszterekből, − 8 jel: 6 az ALU és 2 a léptető vezérlésére, − 9 jel: a C sínről regiszterekbe írás,
− − − − − −
3 jel: a memória eléréshez (nem ábrázoltuk!) 2 jel: szó íráshoz/olvasáshoz 1 jel: bájt olvasáshoz. Összesen 29 jel szükséges A B sínre csak egy regiszter írhat egyszerre, ezért 9 helyett elég 4 jel, összesen 24 vezérlő jelre van szükség.
Mikroutasítások − 24 bit: az adatút vezérléséhez − 9 bit: a következő utasítás címének megadásához, − 3 bit: a következő utasítás kiválasztásának módjára.
Adatút és memória ciklus Adatút ciklus • (MIR feltöltődik a vezérlőtár MPC által mutatott szavával.) • Kialakul a B sín kívánt tartalma, ALU és a léptető megtudja, mit kell csinálnia, • Az ALU és a léptető elvégzi a feladatát, a C sín, N (Negative) és Z (Zero) megkapja az új értékét, • A regiszterek feltöltődnek a C sínről. MBR/MDR megkapja az értékét, ha az előző ciklus adatot kért a memóriából. • Kialakul MPC új értéke. • Memória ciklus kezdete. Memória ciklus • A memória ciklus az adatút végén kezdődik (MAR ill. PC feltöltése után), ezért ha a memória címet módosította ez a mikroutasítás, akkor a memória cím a módosított MAR ill. PC regiszter értéke lesz. • Az olvasás eredménye csak két ciklussal később használható az ALU-ban, mert MDR ill. MBR csak a következő adatút ciklus vége felé töltődik fel a memóriából, addig MDR ill. MBR régi értéke érhető el.
Az A.S. Tanenbaum-féle Mic-1 és működése, az IJVM megvalósítása Mic-1 segítségével Mic-1 512x36 bites vezérlőtár a mikroprogramnak, • MPC (MicroProgram Counter): mikroprogram-utasításszámláló. • MIR (MicroInstruction Register): mikroutasítás-regiszter. Az adatút ciklus (4.6. ábra) elején MIR feltöltődik a vezérlőtár MPC által mutatott szavával. MPC új tartalmának kialakítása • A 9 bites következő cím (Addr) az MPC-be kerül. • JAMN/JAMZ esetén MPC legmagasabb bitjének és az N/Z bitnek logikai vagy kapcsolata képződik MPC legmagasabb helyértékével (elágazás). Pl.: Cím
Addr
JAM
Adatút vezérlő bitek
0x75
0x092
001
...
esetén a mikroprogram a 0x092 címen folytatódik, ha Z = 0,
JAM Z =1
0x192 címen folytatódik, ha Z = 1. Feltételes ugrás – elágazás – a mikroprogramban. • JMPC esetén MPC 8 alacsonyabb helyértékű bitjének és MBR 8 bitjének bitenkénti vagy kapcsolata képződik MPC-ben az adatút ciklus vége felé (MBR megérkezése után). Ilyenkor Addr 8 alacsonyabb helyértékű bitje általában 0 Feltétlen ugrás az MBR –ben tárolt címre – kapcsoló utasítás. Kezdődhet az újabb mikroutasítás végrehajtása. A Mic1 működése • (MPC) ⇒ MIR • regiszter ⇒ B sín, Addr ⇒ MPC • ALU, léptető megtudja, mit kell csináljon, • eredmény ⇒ C, N, Z • C ⇒ regiszterekbe JAMN, JAMZ (N, Z) mem. ⇒ MDR és/vagy alapján módosul MPC mem. ⇒ MBR • Memória ciklus indítása JMPC (MBR) (rd, wr, fetch) alapján módosul MPC. IJVM (Integer Java Virtual Machine): A JVM egész értékű aritmetikát tartalmazó része. Az IJVM utasítások szerkezete: • az első mező az opcode (Operation Code, műveleti kód), • az esetleges második mezőben az operandus meghatározására szolgáló adat van. Mikroprogram: betölti, értelmezi és végrehajtja az IJVM utasításokat: betöltés-végrehajtás ciklus. IJVM megvalósítása Mic-1-en − Előkészület a gép indításakor: PC a végrehajtandó utasítás címét, MBR magát az utasítást tartalmazza. − A főciklus legelső mikroutasítása a Main1, ez:PC=PC+1; fetch; goto(MBR); − PC most a végrehajtandó utasítás utáni bájtra mutat, ez lehet egy újabb utasítás kódja, vagy operandus. − PC új értékének kialakulása után indul a fetch-csel kezdeményezett memória ciklus, ez a program következő bájtját olvassa MBR-be (a következő mikroutasítás végén lesz MBR-ben a bájt). − goto (MBR) elugrik az utasítás feldolgozásához.
Parallel Input/Output (PIO), valódi és memóriára leképezett I/O eszköz Parallel Input/Output 24 B/K vonal, amellyel TTL kompatibilis eszközökhöz (billentyűzet, kapcsolók, nyomtatók) tud kapcsolódni. Konfigurálható. Aszinkron eszközökhöz „kézfogás” logika van beépítve. Beviteli/Kiviteli eszközök használata (chip selection) - Valódi B/K eszköz - Memóriára leképezett B/K (memory-mapped I/O) Cím dekódolás - Teljes dekódolás - Részleges dekódolás A külvilággal történő információ csere port-okon (kapukon) keresztül zajlik. A kapu egy memória cím, az információ csere erre a címre történő írással, vagy erről a címről való olvasással történik. Egy-egy cím vagy cím csoport egy-egy perifériához kötődik. A központi egység oldaláról a folyamat egységesen az IN (input) és az OUT (output) utasítással történik.
A perifériától függ, hogy a hozzá tartozó port 8 vagy 16 bites. A központi egységnek az AL illetve AX regisztere vesz részt a kommunikációban. A port címzése 8 bites közvetlen adattal vagy a DX regiszterrel történik. A periféria oldaláról a helyzet nem ilyen egyszerű. Az input információ „csomagokban” érkezik, az output információt „csomagolva” kell küldeni. A csomagolás (vezérlő információ) mondja meg, hogy hogyan kell kezelni a csomagba rejtett információt (adatot). Éppen ezért az operációs rendszerek olyan egyszerűen használható eljárásokat tartalmaznak (BIOS – Basic Input/Output System – rutinok, stb.), amelyek elvégzik a ki- és becsomagolás munkáját, és ezáltal lényegesen megkönnyítik a külvilággal való kommunikációt.
Programozott és megszakítás vezérelt I/O Programozott I/O Tevékeny várakozás (pollozásos technika). Megszakítás vezérelt I/O Az eszköz megkapja a feladatát, majd ha elkészült, beállítja a „Megszakítás engedélyezett” bitet. DMA (Direct Memory Access A DMA önállóan végzi az eszköz figyelését és az adatok mozgatását.
Csapda, megszakítás, átlátszóság Az I/O utasítás lassú CPU gyors, így a CPU várakozni kényszerül I/O regiszter (port): a port és a központi egység közötti információ átadás gyors, a periféria autonóm módon elvégzi a feladatát. Újabb perifériához fordulás esetén a CPU várakozni kényszerülhet. Pollozásos technika (~tevékeny várakozás): a futó program időről időre megkérdezi a periféria állapotát, és csak akkor ad ki újabb I/O utasítást, amikor a periféria már fogadni tudja. A hatékonyság az éppen futó programtól függ. Csapda (trap) A program által előidézett feltétel (pl. túlcsordulás) hatására automatikus eljárás hívás. Csapda kezelő. Megszakítás (interrupt) Olyan automatikus eljárás hívás, amit általában nem a futó program, hanem valamilyen B/K eszköz idéz elő, pl. a program utasítja a lemezegységet, hogy kezdje el az adatátvitelt, és annak végeztével megszakítást küldjön. Megszakítás kezelő. A csapda a programmal szinkronizált, a megszakítás nem. Átlátszóság Amikor bekövetkezik egy megszakítás, akkor bizonyos utasítások végrehajtódnak, de amikor ennek vége, a CPU ugyanolyan állapotba kerül, mint amilyenben a megszakítás bekövetkezése előtt volt. Ha sok eszköz van a rendszerben, akkor célszerű, ha egy megszakítás kiszolgálása közben másik megszakítás is történhet, ilyenkor a megszakítások hierarchiába vannak rendezve.
Három sínes architektúra. Utasítás betöltő egység. Mic-2 Sok regiszter csatlakozhat az A sínhez, nemcsak H. Előnye: a két sínes architektúrával szemben pl. iload -ban nem kell H = LV ILOAD varnum
// lokális változó a verembe (varnum a lokális változó 8 bites indexe)
A PC-vel kapcsolatos teendők - PC növelése 1-gyel, - fetch, - 2 bájtos operandus olvasás a memóriából. ALU-nál egyszerűbb áramkörrel megvalósíthatók. Utasításbetöltő egység (IFU – Instruction Fetch Unit) Értelmezhet minden kódot, hogy kell-e operandus, de egyszerűbb, ha a kódtól függetlenül előkészíti a következő 8 és 16 bites részt. A Mic-2 adatút idejének összetevői - Az A és B sínek feltöltése a regiszterekből, - az ALU és a léptető munkája, - az eredmények tárolása a C sínről.
Csővonalas terv: Mic-3 A Mic-3 adatút idejének összetevői A, B és C tároló. 3 mikrolépés: - A, B feltöltése, - C feltöltése az ALU és a léptető eredménye alapján, - C tárolása regiszterbe. A 3 mikrolépés egyidejűleg (párhuzamosan) végrehajtható!
Egy hét szakaszú szállítószalag: Mic-4 1. Az IFU a bejövő bájtfolyamot a dekódolóba küldi. 2. A dekódolóban van egy táblázat, amely minden utasításnak tudja a hosszát. A WIDE prefixumot felismeri, pl. WIDE ILOAD –ot átalakítja WIDE_ILOAD –dá: pl. 9 bites utasítás kód. El tudja különíteni az utasítás kódokat és az operandusokat. Az operandusokat a léptető regiszterbe teszi, onnan tölti fel MBR1-et és MBR2-t. A dekódoló egy másik táblázata megmutatja, hogy a sorba állító egységben lévő ROM melyik címén kezdődnek a kódhoz tartozó mikroműveletek. Nincs NEXT_ADDRESS és JAM mező. Nincs feltétlen ugrást végző mikroművelet. Az egyes IJVM utasításokat megvalósító mikroműveletek egymás után vannak a ROM-ban, az utolsónál a Final be van állítva. 3. A sorba állító egység a ROM-ból a RAM-ba másolja a mikroműveleteket, amint van hely a RAM-ban. A kódhoz tartozó utolsó mikroművelet Final bitje jelzi, hogy nincs több átmásolandó mikroművelet. Ha a mikroműveletek között nem volt olyan, amelyik Goto bitje be volt állítva, akkor nyugtázó jelet küld a dekódolónak, hogy folytathatja a munkáját. Néhány IJVM utasítás (pl. IFLT) elágazást kíván. A feltételes mikroutasítások speciális utasítások, ezeket külön mikroműveletként kell megadni. Tartalmazzák a JAM biteket és a Goto bitet. A Goto bit arra szolgál, hogy a sorba állító egység le tudja állítani további utasítások dekódolását. Mindaddig nem lehet tudni, hogy melyik utasítás következik a feltételes utasítás után, amíg a feltétel ki nem értékelődött. -
Ha létrejön az elágazás, akkor a csővezeték nem folytatódhat. „Tiszta lapot” kell csinálni IFU-ban, dekódolóban és a sorba állító egységben, majd az offset-nek megfelelő címtől folytatódik a betöltés.
-
Ha az ugrás feltétele nem teljesül, akkor a dekódoló megkapja a nyugtázó jelet, és a következő utasítással folytatódhat a dekódolás.
Elágazás, eltolási rés. Statikus és dinamikus elágazás jövendölés Legkorábban a dekódoló veheti észre, hogy ugró utasítást kell végrehajtani, de addigra a következő utasítás már a csővezetékben van! Eltolás rés (delay slot) Az ugró utasítás utáni pozíció. Az ugró utasítás végrehajtásakor ez az utasítás már a csővezetékben van! Megoldási lehetőségek Pentium 4: bonyolult hardver gondoskodik a csővezeték helyreállításáról UltraSPARC III: az eltolás résben lévő utasítás végrehajtásra kerül(!). A felhasználóra (fordítóra) bízza a probléma megoldását, a legrosszabb esetben NOP utasítást kell tenni az ugró utasítás után. Feltételes elágazás Sok gép megjövendöli, hogy egy ugrást végre kell hajtani vagy sem. Egy triviális jóslás: - a visszafelé irányulót végre kell hajtani (ilyen van a ciklusok végén), - az előre irányulót nem (jobb, mint a semmi). - Feltételes elágazás esetén a gép tovább futhat a jövendölt ágon, - amíg nem ír regiszterbe, - csak „firkáló” regiszterekbe írhat. Ha a jóslat bejött, akkor minden rendben, ha nem, akkor sincs baj. Több feltételes elágazás egymás után! Dinamikus elágazás jövendölés Elágazás előzmények tábla, hasonló jellegű, mint a gyorsító tár. Lehet több utas is! - Egy jövendölő bit: mi volt legutóbb, - Két jövendölő bit: mi várható és mi volt legutóbb. Ha egy belső ciklus újra indul, akkor az várható, hogy a ciklus végén vissza kell ugrani, pedig legutóbb nem kellett. A várható bitet csak akkor írja át, ha egymás után kétszer téves volt a jóslat. Statikus elágazás jövendölés A feltételes utasításoknak néha olyan változata is van (pl. UltraSPARC III), mely tartalmaz bitet a jóslásra. A fordító ezt a bitet valahogy beállítja. Olyankor is statikus elágazás jövendölés történik, ha a processzor arra számít, hogy a visszafelé ugrások bekövetkeznek, az előre ugrások nem.
Szuperskaláris architektúra, függőségek, sorrendtől eltérő végrehajtás, regiszter átnevezés. feltételezett végrehajtás Szuperskaláris architektúra Szuperskaláris architektúra esetén a dekódoló egység az utasításokat mikroutasításokra darabolhatja. Legegyszerűbb, ha a mikroutasítások végrehajtási sorrendje megegyezik a betöltés sorrendjével, de ez nem mindig optimális. Függőségek Ha egy utasítás írni/olvasni akar egy regisztert, akkor meg kell várja azon korábbi utasítások befejezését, amelyek ezt a regisztert írni/olvasni akarták! Egy utasítás nem hajtható végre az alábbi esetekben: •
RAW (valódi) függőség (Read After Write): Onnan akarunk olvasni (operandus), ahova még nem fejeződött be egy korábbi írás.
•
WAR függőség (Write After Read): Olyan regiszterbe szeretnénk írni az eredményt, ahonnan még nem fejeződött be egy korábbi olvasás.
•
WAW függőség (Write After Write): Olyan regiszterbe szeretnénk írni az eredményt, ahova még nem fejeződött be egy korábbi írás. Ne boruljon föl az írások sorrendje!
Függőségek Nem olvashatjuk, aminek az írása még nem fejeződött be (RAW), és nem írhatjuk felül, amit korábbi utasítás olvasni (WAR) vagy írni akar (WAW). Regiszterenként egy-egy számláló, hogy hány végrehajtás alatt lévő mikroutasítás használja a regisztert olvasásra illetve írásra. Pl. Tegyük fel, hogy az n. ciklusban dekódolt utasítás végrehajtása legkorábban az (n+1). ciklusban kezdődhet, és a következőben fejeződik be, a szorzás csak két ciklussal később, a dekódoló ciklusonként két utasítást tud kiosztani (a valóságban 4-6 utasítást). Az utasítások indítása és befejezése az eredeti sorrendben történjék! C= ciklus, I=indítás, B=befejezés Néhány gép bizonyos utasításokat átugorva függőben hagy, előbb későbbi utasításokat hajt végre, és később tér vissza a függőben hagyott utasítások végrehajtására. Sorrendtől eltérő végrehajtás - I4 nem indulhat RAW függőség (R4) I2 miatt, de adminisztrációt igényel, hogy melyik regisztereket használja (függőséget okozhat). - I5 megelőzheti a I4 –et. - I6 R1=R0-R2 helyett S1=R0-R2. Az S1 segéd regisztert használja R1 helyett (regiszter átnevezés). Az eredményt később átmásolhatja R1 -be, ha R1 fölszabadult. Regiszter átnevezés A modern CPU-k gyakran titkos regiszterek tucatjait használják regiszter átnevezésre, sokszor kiküszöbölhető vele a WAR és WAW függőség. Feltételezett végrehajtás Alap blokk (basic block): lineáris kód sorozat. Sokszor rövid, nincs elegendő párhuzamosság, hogy hatékonyan kihasználjuk. Emelés: egy utasítás előre hozatala egy elágazáson keresztül (lassú műveletek esetén nyerhetünk vele). Pl. evensum és oddsum regiszterbe tölthető az elágazás előtt. Az egyik LOAD – természetesen – fölösleges. Ha valamit nem biztos, hogy meg kell csinálni, de nincs más dolga a gépnek, akkor megteheti, de csak „firkáló” regiszterekbe írhat. Ha később kiderül, hogy kell, akkor átírja az eredményeket a valódi regiszterekbe, ha nem kell, elfelejti. Mellékhatások: - fölösleges gyorsító sor csere, SPECULATIVE_LOAD - csapda (pl. x=0 esetén if(x>0) z=y/x;), mérgezés bit.
RISC és CISC kialakulása RISC: Reduced Instruction Set Computer (csökkentett utasításkészletű számítógép) CISC: Complex Instruction Set Computer (összetett utasításkészletű számítógép)
A 70-es években nagyon sok bonyolult utasítást építettek a gépekbe, mert a ROM-oknak a RAM-okhoz viszonyított nagy sebessége a mikroprogram gyors lefutását – a bonyolult utasítás viszonylag gyors végrehajtását eredményezte → CISC. Nem volt ritka a 200-300 utasítással rendelkező gép. A RISC és a CISC kialakulása - IBM-801 (John Cocke) Seymour Cray ötletei alapján nagy teljesítményű miniszámítógép. - Nem került piacra, csak 1982-ben publikálták. - Berkeley 1980 (David Petterson, Carlo Séquin) RISC I, később RISC II → SPARC - Stanford 1981 (John Hennessy) MIPS - Elv: Csak olyan utasítások legyenek, amelyek az adatút egyszeri bejárásával végrehajthatók. - Tipikusan kb. 50 utasításuk van. - Ha 1 CICS utasítás 4-5 RISC utasítással helyettesíthető, és a RISC 10x gyorsabb, akkor is a RISC nyer. - Időközben a RAM-ok sebessége csaknem elérte a ROM-ok sebességét, ez is a RISC mellett szól.
A Pentium 4, az UltraSPARC III és a 8051 CPU mikroarchitektúrája, ezek rövid összehasonlítása Pentium (2000) -
Felülről kompatibilis az I8088, …, Pentium III-mal. 29.000, …, 42 → 55 M tranzisztor, 1,5 → 3,2 GHz, 63-82W, 478 láb, 32 bites gép, 64 bites adat sín. NetBurst architektúra. 2 fixpontos ALU → többszálúság (hyperthreding): 5% többlet a lapkán ~ két CPU. Mindkét ALU kétszeres órajel sebességgel fut. Gépi utasítások → RISC szerű mikroutasítások, több mikroutasítás futhat egyszerre: szuperskaláris gép, megengedi a sorrenden kívüli végrehajtást is. 2-3 szintű belső gyorsító tár. L1: 8 KB utasítás + nyomkövető akár 12000 dekódolt mikroutasítás tárolására + 16 KB adat. L2: 256 KB – 1 MB, 8 utas halmaz kezelésű, 128 bájtos gyorsító sor. Az Extrem Edition-ban 2 MB (közös) L3 is van. Multiprocesszoros rendszerekhez szimatolás - snoop.
Pentium 4 – memória sín A memóriaigények, tranzakciók 6 állapota: 6 fázisú csővezeték fázisonként külön vezérlő vonalakkal (amint a mester megkap valamit, elengedi a vonalakat): 0. Sín ütemezés (kiosztás, bus arbitration): eldől, hogy melyik sínmester következik, 1. Kérés: cím a sínre, kérés indítása, 2. Hibajelzés: a szolga hibát jelez(het), 3. Szimatolás: a másik CPU gyorsító tárában, 4. Válasz: kész lesz-e az adat a következő ciklusban, 5. Adat: megvan az adat. Pentium 4 mikroarchitektúrája Ha egy mikroművelet minden inputja rendelkezésre áll, akkor az esetleges WAR vagy WAW függőséget a 120 firkáló regiszter segítségével kiküszöböli. RAW függőség esetén a mikroműveletet várakoztatja, és a rákövetkező mikroműveleteket kezdi feldolgozni. Egyszerre akár 126 utasítás feldolgozása is folyamatban lehet, köztük 48 betöltés és 24 tárolás. Az utasítások a programnak megfelelő sorrendben kerülnek az ütemezőbe, eltérő sorrendben kezdődhet a végrehajtásuk, de az előírt sorrendben fejeződnek be. Pontos megszakítás: a megszakítás előtti összes utasítás befejeződött, az utána következőkből egy sem kezdődött el.
A Lefoglaló/átnevező egység a két várakozási sor megfelelőjébe teszi a mikroutasításokat. Az ALU-k az órajel kétszeres sebességével dolgoznak, nehéz folyamatosan munkát adni nekik. Az egyik egész aritmetikájú ALU az összes logikai, aritmetikai, és elágazó, a másik csak az összeadó, kivonó, léptető és forgató utasítás végrehajtására képes. Mindkét regisztergyűjtő 128 regisztert tartalmaz, időben változik, hogy melyikben van EAX, … A befejező egység feladata, hogy az utasítások a programnak megfelelő sorrendben fejeződjenek be. L1 4 utas halmazkezelésű, írás áteresztő gyorsítótár 64 bájtos gyorsító sorral. Nem lehet L1-et módosítani, amíg a tárolást megelőző műveletek be nem fejeződtek (24 bejegyzéses tároló puffer), de ha egy betöltő utasítás onnan akar olvasni, ahova egy korábbi tárolt, akkor a tárolások pufferéből megkaphatja a kért adatot (tárolás utáni betöltés).
UltraSPARC III (2000) - 64 bites RISC gép, felűről kompatibilis a 32 bites SPARC V8 architektúrával és az UltraSPARC I, II-vel. Új a VIS 2.0 utasításkészlet (3D grafikus alkalmazásokhoz, tömörítéshez, hálózat kezeléshez, stb). - Több processzoros alkalmazásokhoz készült. Az összekapcsoláshoz szükséges elemeket is tartalmazza. - 2000-ben 0.6, 2001-ben 0.9, 2002-ben 1.2 GHz, órajel ciklusonként 4 utasítást tud elvégezni. - CPU 29 millió tranzisztor, 4 CPU közös memóriával használható. 1368. - 64 (jelenleg csak 44) bites cím és 128 bites adat lehetséges. - Belső gyorsító tár (32 KB utasítás + 64 KB adat). - 2 KB előre betöltő és tároló gyorsítótár L2 eléréséhez. - A gyorsító sor (cache line) mérete 64 (32?) B. - Külső 1 - 8 MB (? UltraSPARC II-nek 0.5-16 MB). - 8 K - 256 K db 64 B-os gyorsító sor (cache line) lehet. A címzéséhez 13 – 18 bit szükséges. A CPU mindig 18 bites Line címet (Címkeazonosítót) ad át. Csak maximális méret esetén van mind a 18 bit kihasználva. 512 KB-os gyorsító tár esetén a 44 bites cím felosztása Tag: 25 bit, Line: 13 bit, bájt cím: 6 bit = 44 bit. 16 MB-os tár esetén 18 bites Line kell, és 20 bites Tag (Címkeadat) is elég lenne, de ilyekor – hogy a CPU egységesen működhessen – a gyorsító tárban tárolt 20 bites Tag-et a gyorsító tár kiegészíti Line 5 legmagasabb helyértékű bitjével. Az Adat címe a gyorsító sor címén (Címkeazonosító, Line) kívül még 2 bitet tartalmaz, mert egy átvitel során a gyorsító sornak csak negyed része (16 bájt) mozgatható. UltraSPARC III mikroarchitektúrája A SPARC sorozat RISC elgondoláson alapul. A legtöbb utasításnak két forrás és egy cél regisztere van. Előre betöltés speciális utasításokkal, és a visszafelé kompatibilitás miatt hardveresen is. 2 bites elágazás jövendölő + statikus elágazás jövendölés.
I-8051 (1980) Cél: beépített rendszerekben való alkalmazás. Fő szempont: olcsóság (ma már 10-15 ¢), sokoldalú alkalmazhatóság. A memóriával, be- és kivitellel együtt egyetlen lapkára integrált számítógép. 40 multiplexelt lábú standard tokban kerül forgalomba. 60 000 tranzisztor. 4 KB ROM, 128 B RAM, max. 64 KB külső memória. 16 címvezeték. 8 bites adat sín. 32 K/B vonal 4 db 8 bites csoportba rendezve, ezek mindegyike hozzáköthető nyomógombhoz, kapcsolóhoz, LED-hez,… időzítők. Pl. Rádiós óra: nyomógombok, kapcsolók, kijelző.
I-8051 mikroarchitektúrája - RAM 128 bájt - A regiszterek a RAM-ban vannak - RAM ADDRess a RAM címzéséhez - Instruction Register - Stack Pointer - B szorzásnál, osztásnál van szerepe, ideiglenes tárolásra is használható - ACCumulator: fő aritmetikai regiszter, a legtöbb számítás eredménye itt keletkezik - TMP1 – TMP2 az ALU bemenetei, az eredmény a fő sínről akármelyik regiszterbe kerülhet - Program Status Word A legtöbb utasítás egy óraciklust igényel 1. Az utasítás a ROM-ból a fősínre és IR-be kerül. 2. Dekódolás, PC növelése. 3. Operandusok előkészítése. 4. Egyik operandus a fősínre, onnan általában TMP1-be, a másik ACC-ből TMP2-be kerül. 5. Az ALU végrehajtja a műveletet. 6. Az ALU kimenete a fősínre kerül, ROM ADDR felkészül a következő utasítás olvasására.
Összehasonlítás Pentium 4 - CISC gép egy CISC utasítás → több RISC mikroutasítás UltraSPARC III - RISC gép I-8051 inkább RISC, mint CISC gép
Memória modellek, memória szemantika, a Pentium 4 üzemmódjai, a Pentium 4, az UltraSPARC III regiszterei Memória modellek ASCII kód 7 bit + paritás ---> Byte (bájt) Szó: 4 vagy 8 byte. Igazítás (alignment) hatékonyabb, de probléma a kompatibilitás (a Pentium 4-nek két ciklusra is szüksége lehet egy szó beolvasásához). Néha (pl. 8051) külön memória az adatoknak és az utasításoknak (nem ugyanaz, mint az osztott gyorsítótár!). Memória szemantika STORE A -t közvetlenül követő LOAD A mit ad vissza? A memória műveletek végrehajtása - kötött sorrendben, - definiálatlan sorrendben (ez a trend, mert hardver szinten egyszerűbb és gyorsabb). A hardver segítséget nyújthat: – SYNC utasítás: befejeztet minden megkezdett memória műveletet, – függőség esetén a hardver vár. Regiszterek - ISA-szinten a mikroszint nem minden regisztere látszik (TOS, MAR), de van közös is (PC, SP). - Speciális regiszterek: PC, SP, …
-
Általános célú regiszterek: a gyakran használt adatok gyors elérésére. Jó, ha szimmetrikusak: fordítók, konvenciók. RISC gépen általában legalább 32 általános célú. Kernelmódban továbbiak: gyorsítótár vezérlés, memória védelem, … PSW (Program Status Word): az eredmény negatív, nulla, ... mód, prioritásszint, megszakításállapot, ...
Pentium 4 üzemmódjai - Real (valós): az összes 8088 utáni fejlesztést kikapcsolja (valódi 8088-ként viselkedik). Hibánál a gép egyszerűen összeomlik, lefagy. - Virtuális 8086: a 8088-as programok védett módban futnak (ha Windows-ból indítjuk az MS-DOS-t, és abban hiba történik, akkor nem fagy le, hanem visszaadja a vezérlést a Windows-nak). - Védett: valódi Pentium 4. 4 védelmi szint (PSW): o 0: kernelmód (operációs r.), o 1, 2: ritkán használt, o 3: felhasználói mód. Pentium 4 memóriaszervezése • 16 K darab szegmens lehetséges, de a WINDOWS-ok és UNIX/LINUX is csak 1 szegmenst támogatnak, és ennek is egy részét az operációs rendszer foglalja el, • minden szegmensen belül a címtartomány: 0 - 232-1 • Little endian tárolási mód: az alacsonyabb címen van az alacsonyabb helyértékű bájt. Pentium 4 által használt regiszterek - EAX - Accumulator - EBX - Base index - ECX - Count - EDX - Data - ESI, EDI (mutatók tárolására, szöveg kezelésre), - EBP (keretmutató, verem kezelésre), - ESP (verem mutató), - EIP (utasítás számláló), - EFLAGS (PSW), - CS, SS, DS, ES, FS, GS (16 bites regiszterek. A kompatibilitást biztosítják a régebbi gépekkel. Mivel a Windows, Unix csak egy címtartományt használ, ezekre csak a visszafelé kompatibilitás miatt van szükség). UltraSPARC III memóriaszervezése 64 bites címtartomány (jelenleg max. 44 bit használható). Big endian, de little endian is beállítható. UltraSPARC III által használt regiszterek - 32 általános 64 bites, a használatuk részben konvención, részben a hardveren alapul), - 32 lebegőpontos (32 vagy 64 bites, de lehetséges két regiszterben egy 128 bites számot tárolni). - R0-R7 Globális változók: minden eljárás használhatja, G0 huzalozott 0, minden tárolás eredménytelen. - R8-R15: Kimenő paraméterek, de R14 (O6) = SP: verem mutató, O7 csak ideiglenes tárolásra használható. - R16-R23 (L0-L7) Lokális regiszterek - R24-R31 (I0-I7) Bejövő paraméterek, de R30 (I6) = FP az aktuális veremkeret mutatója, R31: visszatérési cím.
Dijkstra algoritmusa Infix jelölés konvertálása postfix-re: - Az infix elemek egy váltóhoz (switch) érkeznek - a változók és konstansok Kaliforniába mennek - A többi esetben a verem tetejétől függően:
Fordított lengyel (postfix) jelölés Pl. (8 + 2 * 5)/(1 + 3 * 2 – 4) // infix 825*+132*+4–/ // postfix Olvassuk a formulát balról jobbra! Ha a következő jel • operandus: rakjuk a verembe, • műveleti jel: hajtsuk végre a műveletet (a verem tetején van a jobb, alatta a bal operandus!).
Ortogonalitási elv Jó architektúrában a műveleti kódok és a címzési módszerek (majdnem) szabadon párosíthatók.
A Pentium 4, az UltraSPARC III és a 8051 utasítás formái Pentium 4 utasításformái -
Több generáción keresztül kialakult architektúra. Csak egy operandus lehet memória cím.
Címzési módok - Nagyon szabálytalan. - Baj: nem minden utasításban használható minden mód, nem minden regiszter használható minden módban (nincs EBP indirekt, ESP relatív címzés).
UltraSPARC utasításformái -
32 bites egyszerű utasítások. Aritmetikai utasítások: 1 cél és 2 forrás regiszter vagy 1 cél, 1 forrás regiszter és 1 közvetlen konstans.
-
LOAD, STORE (csak ezek használják a memóriát): a cím két regiszter összege vagy egy regiszter + 13 bites eltolás. Processzorokat szinkronizáló utasítás.
UltraSPARC címzési módjai Memóriára hivatkozó utasítások: - Betöltő, tároló, multiprocesszor szinkronizáló index + 13 bit eltolás, bázis-index - A többi utasítás általában 5 bites regiszter címzést használ
8051 utasításformátumai 1. 2. 3. 4. 5. 6.
Implicit regiszter általában ACC, … Regiszter és ACC tartalmán végzett művelet, mozgatás, … Operandus: közvetlen, eltolás, bitsorszám Ugrás, szubrutin hívás Ugrás, szubrutin hívás Pl. közvetlen operandus memóriába töltése, …
8051 címzési módjai - Implicit: ACC, - Regiszter: akár forrás, akár cél operandus lehet, - Direkt: 8 bites memóriacím, - Regiszter-indirekt: 8 bites memóriacím, - Indirekt címzés a 16 bites DPTR-rel, - Közvetlen operandus: általában 8 bites, de 11 ill. 16 bites abszolút cím ugráshoz, eljárás híváshoz.
Vezérlési folyamat Szekvenciális vezérlés Az utasítások abban a sorrendben kerülnek végrehajtásra, ahogy a memóriában elhelyezkednek.
Eljárás, rekurzív eljárás, megszakítás, csapda, korutinok Eljárás Az eljáráshívás úgy tekinthető, mint egy magasabb szinten definiált utasítás végrehajtása: sokszor elég, ha azt tudjuk, mit csinál az eljárás, nem hívó eljárás hívott főprogram eljárás lényeges, hogy hogyan. Rekurzív eljárás Egy eljárás rekurzív, ha önmagát hívja közvetlenül, vagy máseljárásokon keresztül. Egy eljárás re-entrant, ha többszöri belépést tesz lehetővé, ami azt jelenti, hogy az eljárás még nem fejeződött be, amikor újra felhívható. A rekurzív eljárással szemben a különbség az, hogy a rekurzív eljárásban „programozott”, hogy mikor történik az eljárás újra hívása, re-entrant eljárás esetén az esetleges újra hívás ideje a véletlentől függ. Ez utóbbi esetben az biztosítja, hogy a munkaterületek ne keveredjenek össze, hogy újabb belépés csak másik processzusból képzelhető el, és minden processzus saját vermet használ. Csapda (trap) A program által előidézett feltétel (pl. túlcsordulás) hatására automatikus eljárás hívás. Csapda kezelő. Megszakítás (interrupt) Olyan automatikus eljárás hívás, amit általában nem a futó program, hanem valamilyen B/K eszköz idéz elő, pl. a program utasítja a lemezegységet, hogy kezdje el az adatátvitelt, és annak végeztével megszakítást küldjön. Megszakítás kezelő. A csapda a programmal szinkronizált, a megszakítás nem. Korutinok Párhuzamos feldolgozás szimulálására alkalmas egy CPU-s gépen.
Overlay technika, virtuális memória Régen nagyon kicsi volt a memória. Sokszor nem fért el az egész program a memóriában. Overlay (átfedés) A program több része fut ugyanazon a memória területen, mindig az aktuálisan futó rész van a memóriában, a többi rész mágneslemezen van. A programozó dolga a feladat átfedő részekre bontása, és a részek mozgatása a memória és a háttér tároló között. Ma már sokkal nagyobb ugyan a memória, de még sokkal nagyobb lehet a címtartomány (address space). Virtuális címtartomány: azok a címek, amelyekre a program hivatkozni tud. Fizikai címtartomány: azok a címek, amelyek tényleges memória cellát címeznek. A virtuális és fizikai címtartomány ugyanolyan méretű lapokra van osztva. A fizikai „lapokat” lapkeretnek (page frame) nevezzük. Lap méret: 512 B – 64 KB (– 4 MB), mindig 2 hatványa.
A virtuális címtartomány sokkal nagyobb, mint a fizikai! Mit kell tenni, ha olyan címre történik hivatkozás, amely nincs a memóriában? 1. Egy lapkeret (pl. a 0-4095) tartalmának lemezre mentése. 2. A kérdéses lap megkeresése a lemezen. 3. A kérdéses lap betöltése a lapkeretbe. 4. A memória térkép megváltoztatása: pl. a 4096 és 8191 közötti címek leképezése a betöltött lapkeret címtartományába. 5. A végrehajtás folytatása. A virtuális címek fizikai címekre történő leképezését az MMU (Memory Management Unit – memória kezelő egység végzi. Memória térkép (memory map) vagy laptábla kapcsolja össze a virtuális címeket a fizikai címekkel. Pl. 4 KB-os lapméret 32 bites virtuális cím esetén 1 millió virtuális lap van, ezért 1 millió bejegyzésű laptáblára van szükség. 32 KB fizikai memória esetén csak 8 lapkeret van, ezért a leképezés megoldható 8 cellás asszociatív memóriával is (a gyakorlatban több ezer lapkeret van, és az asszociatív memória igen drága).
Lapméret, fregmentáció, szegmentálás és megvalósításai Ha egy program k lapon fér el, akkor általában a k-dik lap nincs tele. Ha a lap mérete n, akkor programonként átlagosan n/2 bájt kihasználatlan: belső elaprózódás. A belső elaprózódás ellen a lap méretének csökkentésével lehet védekezni, de ez a laptábla méretének növekedéséhez vezet. A kis lap előnytelen a lemez sávszélességének kihasználása szempontjából is, viszont kisebb a vergődés kialakulásának valószínűsége. Szegmentálás Egy fordítóprogramnak a következő célokra kellhet memória: • szimbólum tábla, • forrás kód, • konstansok, • elemzési fa, • verem. Rögzített memória felosztás esetén ezek egyike kicsinek bizonyulhat, miközben a többi nem használja ki a rendelkezésére álló tartományt. Szegmentált memóriában minden tábla a többitől függetlenül nőhet vagy zsugorodhat. Szegmens A programozó számára látható logikai egység. Minden szegmens címtartománya 0-tól valamilyen maximumig terjed. A szegmens tényleges mérete ennél kisebb lehet. A program számára a címtartomány két dimenziós: (szegmens, offset). Általában egy szegmensben csak egyféle dolgok vannak: vagy kód vagy konstans vagy különböző tárvédelmi lehetőségek: • kód: csak végrehajtható, nem írható, nem olvasható, • konstans: csak olvasható • …
A szegmentálás megvalósítása Lapozással: Minden szegmensnek saját laptáblája van. A szegmens néhány lapja a memóriában van. Cseréléssel: Teljes szegmensek mozognak a memória és a lemez között. Ha olyan szegmensre hivatkozunk, amely nincs a memóriában, akkor betöltődik. Külső elaprózódáshoz (external fragmentation) vezethet. Lyukacsosodásnak (checkerboarding) is nevezik. Összepréselés: idő igényes, de időnként kell.
Mágnes lemez, lemez vezérlés, RAID szintek
I/O fej: vékony légrés választja el a lemeztől. Sáv (track, 5000-10000 sáv/cm), Szektor (tipikusan 512B, 50.000-100.000 bit/cm), pl.:fejléc + 4096 bit (= 512B) adat + hibajavító kód (Hamming vagy Reed-Solomon). Szektor rés: hogy az írás ne rontsa el a szomszédos szektort. Winchester lemez (IBM), légmentesen lezárt. Kezdetben 30 MB fix + 30 MB cserélhető. Az átmérő régen 50 cm, mostanában 3 – 12 cm közötti, sőt, kisebb is lehet. Lemezegység közös tengelyen több (6-12) lemez. Cilinder. Keresési idő: sáv/cilinder keresés (seek) 5-10 ms. Forgási késleltetés: átlagosan egy fél fordulat ideje, 3-6 ms (60-180 fordulat/sec). Átviteli sebesség: 20-40 MB/sec. Maximális <--> átlagos Írás sűrűség: Régen: belül maximális, kifelé egyre kisebb (forgás szög alapján). Jelenleg: 10-30 zóna, a külső zónákban több szektor van egy sávon (2.21. ábra). Lemezvezérlő: - Vezérli a hardvert, nyilvántartja és átcímzi a hibás sávokat. - Szoftver parancsokat hajt végre: kar mozgatás, READ, WRITE, FORMAT, … utasítások. - További feladatai: o hiba felismerés/javítás, o soros – párhuzamos és o párhuzamos – soros átalakítás. Hajlékony (floppy) lemez szerviz célokra (karbantartási információk tárolására) találták ki. Az I/O fej hozzáér a lemezhez: gyorsan kopik, ezért leáll, ha éppen nincs feladata. Kb. 0.5 s, míg a lemez fölpörög.
Lemez vezérlés PC-ken kezdetben CPU regiszterekbe töltött fej, cilinder, szektor címek alapján a BIOS (Basic Input Output System) vezérelt. Seagate - lemezegység: 20 bites szektor cím. - 4 fej (4 bit), 306 cilinder (10 bit) - sávonként 17 db 512 bájtos szektor (6 bit). Később kevés lett 10 bit a cilinder címzésére. IDE (Integrated Drive Electronics, max. 504 MB) - a meghajtóba integrált vezérlő. Seagate kompatibilis! - „Hazudnak” a BIOS-nak. - A címet a vezérlő fej-cilinder-szektor címre fordítja EIDE (Extended IDE) - LBA (Logical Block Addressing). - Cím: 0 – 228-1. - Maximum 128 GB ATA-3 (AT Attachment, AT kiegészítő) ATAPI-4 (ATA Packet Interface, 33 MB/s) ATAPI-5 (66 MB/s) ATAPI-6 (100 MB/s, 48 bites szektor cím) ATAPI-7 - A korábbi 80 vezetékes szalagkábel helyett 7 vezetékes kerek kábelt alkalmaz: jobb a légáramlás. - Kezdetben 150 MB/s soros átvitel, ami várhatóan hamarosan 1,5 GB/s fölé emelkedik. - 5 V helyett 0.5 V: kisebb energia fogyasztás. SCSI (Small Computer System Interface) lemezek (sokkal gyorsabb átvitelt biztosít, drágábbak is) SCSI -
sín, vezérlő + maximum 7 (15) SCSI eszköz (lemez, nyomtató, CD, …) csatolható. A sín „átmegy” az eszközökön: az eszközöknek van egy bemenő és egy kimenő csatlakozója. A visszaverődő jelek kiszűrése miatt az utolsó eszközön a sínt le kell zárni. Minden eszköznek 0-7 (15) közötti azonosítója van. Egyszerre több eszköz is aktív lehet (EIDE: csak egy).
SLED (egyetlen nagy, drága lemez – Single Large Expensive Disk) RAID Olcsó lemezek redundáns tömbje - Redundant Array of Inexpensive Disks. Több lemezt foglal egységbe, és ezeket úgy kezeli, mintha egyetlen nagyobb lemez lenne. A redundancia javítja a megbízhatóságot. RAID szintek - 0. szint: Nagy blokkok mozgatása gyorsabb. - 1. szint: Írás két példányban. Nagyobb biztonság, olvasás gyorsabb - 2. szint: Hamming kód: 4 adat bit + 3 ellenőrző Nagy átviteli sebesség. A diszkeknek szinkronban kell forogni. - 3. szint: Ha egy diszk kiesik, nincs adatvesztés.
bit.
Nagyobb
biztonság.
-
4. szint: Az összetartozó csoportokhoz paritás csoport. Íráshoz olvasni is kell mindegyik diszkről. Nagyon terheli a paritás diszket. 5. szint: Elosztja a paritás diszk terhelését.
Optikai lemezek CD -
1980, Philips, Sony: Red Book. üveg mesterlemez: írás nagy energiájú lézerrel, üreg (pit, Ø=8μ, ¼λ mély) – szint (land), a mesterlemezről negatív öntőforma készül, a negatív öntőformába olvadt polikarbonát gyantát öntenek, megszilárdulás után tükröző alumínium réteget visznek rá, ezt védő lakk réteggel vonják be és erre nyomtatják a címkét, olvasás kis energiájú infravörös lézerrel (λ=0,78μ).
Belűről induló 22188 fordulatú kb. 5,6 km hosszú spirál 35 mm-es sávban, kb. 600 menet/mm. A jel sűrűség a spirál mentén állandó. A fordulatszám 530 és 200 fordulat/perc között változik, hogy a kerületi sebesség állandó legyen (120 cm/s). Ábrázolás - 1: üreg – szint és szint – üreg átmenet, - 0: átmenet hiánya. Nincs redundancia, javítási lehetőség! CD-ROM 1984, Yellow Book. Több szintű hibajavítás: kihasználtság 28%: 650 MB • szimbólum: 14 biten ábrázol 1 bájtot, • keret: 42 szimbólum (588 bit), ebből 24 az adat bájt, • szektor: 98 db keret, ebből 16 bájt fejléc • fejléc: 00FFFFFFFFFFFFFFFFFFFF00 (12 bájt) + • 3 bájt szektor szám + 1 bájt mód: • mód = 1: 2048 adat + 288 ECC bájt, • mód = 2: 2336 adat bájt. ECC: Error Correction Code (Reed-Solomon)
Forgási sebesség: 1-szeres (75 szektor/s) – 32-szeres. Keresési idő: több 100 msec, sebesség < 5 MB/sec. 1986: Green Book, multimédiás alkalmazásokhoz. CD-R (CD Recordable) 1989: Orange Book. - Spirál: 0,6 µm széles vájat mutatja, ezen egy 22,05 kHz frekvenciájú 0,3 µm amplitúdójú szinusz hullám szolgál a pontos forgási frekvencia ellenőrzésére. - Alumínium helyett arany, üreg helyett sötét pont. - Az eredetileg átlátszó festéket a nagyobb energiára kapcsolt lézer sötétre változtatja. - Felírás több részletben történhet, az egyszerre felírt szektorokat CD-ROM sávnak (track) nevezzük. - Minden sávot megszakítás nélkül, folyamatosan kell felírni! - Mindig az utolsó katalógus (VTOC, Volume Table of Contents) az aktuális. - Trükkök az illegális másolat készítés nehezítésére: pl. szándékosan hibás ECC-k. CD-RW (CD-ReWritable) Három különböző energiájú lézer (törlő, író, olvasó). Viszonylag drága, és néha hátrány, hogy újra írható. DVD (Digital Versatile Disk) - precízebb mechanika, - kisebb üreg: 0.4 μ (0.8 μ helyett), - szorosabb spirál: 0.74 μ (1.6 μ helyett), - vörös lézer: λ=0.65 μ (0.78 μ helyett), - Ezek együtt nagyobb jelsűrűséget engednek meg. - Kapacitás: 4.7 Gbyte (133 perces video elfér rajta). - Kétoldalas kétrétegű: 17 GB. - A lézer fókuszálásával választják ki a kívánt réteget. - Az alsó réteg kapacitása kisebb. Blu-Ray - Kék lézert használ a DVD-ben használt piros lézer helyett. - Egyoldalas: 25 GB - Kétoldalas: 50 GB - Átviteli sebesség: 4,5 MB/s - Arra számítanak, hogy le fogja váltani a CD-ROM-ot és a DVD-t.
Egér Az egér mozgatása egy mutató mozgását váltja ki a képernyőn. • Mechanikus: gumi golyó, potenciométerek. • Optikai: LED (Light Emitting Diode), rácsozott „asztal”, fényérzékelő. • Optomechanikus: gumi golyó, résekkel ellátott tárcsák, LED, fényérzékelő. Működése Bizonyos időnként (pl. 0,1 sec) vagy esemény hatására 3 adatos (általában 3 bájtos) üzenetet küld a soros vonalon a számítógépnek: x, y irányú elmozdulás + az egér gombok állapota.
Nyomtatók Mátrixnyomtató - 7-24 tű, olcsó, lassú, zajos, több példányos nyomtatás (pénztár gépek …). - Egy soron többször is végigmehet az írófej, egy picit változtatva a pozíción: vastagított betűk. Tintasugaras nyomtató - Olcsó, lassú, - 1200-4800 dpi. (dpi = dot per inch (pont / 2.54 cm)). - Piezoelektromos hatás: feszültség hatására bizonyos kristályok bizonyos irányban összehúzódnak/kitágulnak. - Hő vezérlésű (bubblejet, festékbuborékos): a fúvókát hevítik/hűtik. Lézernyomtató - A hengert feltöltik 1000 voltra, lézerrel modulálják (ahol fény éri a hengert, ott elveszti a töltését), - a töltött részre rátapad a festék, ezt a papírra égetik, - saját CPU és memória.
Színkeverés Színösszeadás: kibocsátott fény, alapszínek: RGB (Red, Green, Blue – vörös, zöld, kék), színes képernyők. Színkivonás: visszavert fény, a komplementer színek + fekete (jó feketét nehéz előállítani az alapszínekből): CYMK nyomtatók (Cyan, Yellow, Magenta, blacK – cián, sárga, bíborvörös, fekete). Gamut: előállítható színek összessége. A két elv egymásba való átalakítása nehéz lehet.
Színes nyomtatók Tintasugaras (festék alapú: élénk színek, de könnyen fakul, pigment alapú: nem olyan élénk, nem fakul). Szilárd tintás: meg kell olvasztani a tintát, néha a bekapcsolás után 10 percig is eltart. Lézernyomtatók: nagy a memória igénye, pl. egy A4-es 1200*1200 dpi képen 115 millió pixel van. Viasznyomtatók: 4 lapról olvasztja a színes viaszt a papírra. Drága az üzemeltetése. Festék szublimációs: sok fokozatú fűtéssel szublimált CYMK festék kicsapódik a speciális (drága) papírra. Nagyon szép, nem kell half-toning.
Monitorok CRT (Cathode Ray Tube) - Soronként állítja össze a képet (raszteres). - Elektron ágyú: elektronokat bocsát ki. - Eltérítő tekercsek: vízszintes és függőleges. - Rács: szabályozza a képernyőt érő elektronok mennyiségét. - Színes monitorban 3 elektron ágyú. LCD (Liquid Crystal Display – folyadék kristályos) - Többnyire hordozható gépeknél. - TN (csavart molekula elrendeződéses - Twisted Nematic) megjelenítő: o a megvilágító fényt a hátsó polárszűrő vízszintesen polarizálja, o a folyadékkristály függőlegesbe forgatja a polaritást, o az első polárszűrő csak a függőlegesen polarizált fényt engedi át. - Feszültség hatására a forgatás csökken vagy elmarad, következésképpen csökken a fényerő. - Passzív (vízszintes és függőleges elektródák). - Aktív mártix display (pixelenként kapcsolóelem, Thin Film Transistor), drágább, de lényegesen jobb képet ad (TFT megjelenítők).
Kommunikációs vonal Vivőhullám: 1000-2000 Hz. Modulációk: amplitudó, frekvencia, fázis (180 vagy dibit fáziskódolás: 45, 135, 225, 315 fokos fázis váltás,). Kombináltan is alkalmazhatók. Jelzési sebesség (baud): jelváltás/sec (egy jel több bit információt hordozhat). Adat átviteli sebesség: bit/sec. Egy bájt továbbítása: start bit, bájt, stop bit. Tipikus: 9600 baud, 28.800 vagy 57.600 bit/sec A kommunikációs vonal lehet: • full-duplex: egyszerre két irányú forgalom (különböző frekvenciát használva), • half-duplex: két irányú forgalom, de nem egyszerre, • simplex: csak egy irányú forgalom lehetséges. Digitális előfizetői vonalak A hagyományos telefonvonalakat 3000 Hz-es szűrővel korlátozzák. E nélkül elérheti az 1.1 MHz-t. Szélessávú telefovonalak A legnépszerűbb az ADSL (asymmertic Digital Subscriber Line, aszimmetrikus előfizetői vonal). -
256 független kb. 4 kHz-es csatorna. csatorna: Hagyományos telefon 1-5. Nem használják (ne zavarja a telefont). A további 250-ből egy a felmenő, a többi a lemenő jelek továbbítására szolgál. Jel-zaj viszony miatt nem minden csatorna használható!
NID (Network Interface Device, hálózati interfész). DSLAN (Digital Subscriber Line Access Multiplexer, digitális előfizetői vonal hozzáférési multiplexer).
Kábeles internet 54-550 MHz: TV, rádió: lejövő frekvenciák 5-42 MHz: felmenő frekvenciák 54-750 MHz: lejövő frekvenciák -
Fő telephely általában szélessávú üvegszál kábelekkel kapcsolódik a fejállomásokhoz. A fejállomás koaxiális kábellel sok felhasználóhoz csatlakozik. A sok felhasználó zöme nem használ adatfolyamot az adott pillanatban. Megosztott kommunikáció. Részletesen kidolgozott protokollok szerint zajlik az adatforgalom.