Informatika | Számítógép-architektúrák » Architektúrák II. Koschek-felvonás

Alapadatok

Év, oldalszám:2004, 21 oldal

Nyelv:magyar

Letöltések száma:1304

Feltöltve:2004. június 08.

Méret:321 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

-1- Megszakítási rendszer Váratlan esemény aszinkron (teljesen reprodukálhatatlan) várható pl. DMA szinkron (bármikor reprodukálható, a program minden futásakor ugyanott következik be) nem várható pl. hardver hiba paritás hiba, áramkimaradás A megszakítást kiválthatja: Illegális gépi kód: Ha egy program futása 1. program futása közbeni hiba végén nem adja vissza a vezérlést az • nullával való osztás operációs rendszernek, így az nem talál a • overflow memóriában végrehajtható utasítást. • illegális gépi kód (A kivételek kezelésére egy kiszolgáló eljárást (trap) indít el a processzor.) 2. valamilyen hardver • pl. soros port kezelése, billentyűzet-kezelés • pl. valamelyik periféria, az adatátvitel lebonyolításának idejére a program futásának felfüggesztését kezdeményezi Program fut Megszakítási okok: Eredeti cél: I/O műveletek és a számítási műveletek szinkronizálása n A B Jött-e

megszakítás? Elfogadja? t ∆t n más művelet Megszakításkérő jel generálódott megszakítás Állapot mentése Elindítja azt a rutint, amely kiszolgálja a megszakítást Visszaállítás Visszatérés I/O művelet vége Az, hogy elfogad-e egy megszakítást, azt jelenti, hogy az éppen zajló folyamat megszakítható-e egy új kedvéért. Ha igen, menti az aktuális állapotot, majd elvégzi a feladatot, tehát megszünteti a kiváltó okot. -2A megszakítások forrásai 1. Géphibák: • az egyes eszközök valamilyen hibajavító kód segítségével ismerik fel a hibákat o A CPU regiszterei o Operatív tár o Adatátvitel • Energiaellátás hibái • Klimatizáció 2. I/O források: a perifériák megszakítás-kérő jelzései (CPU dobozon belül) 3. Külső források másik számítógép 4. Programozói források Utasítások végrehajtásakor keletkező INT-ek: • Hiba (arch. specifikusak) o Memóriavédelem megsértése o Tárkapacitás

túlcímzés (tényleges) o Címzési előírások megsértése o Aritmetikai és logikai műveletek miatti megszakítás (kivételek:tömbindex-túlcímzés, 0-val való osztás, overflow) • Szándékos o Rendszerhívások (pl. az Intel CPU-k overflow flag-je jelzi, ha túlcsordulás lépett fel Az INTO utasítással egy megszakítás kérhető: korrekció.) Megszakítások csoportosítása • Szinkron/aszinkron • Utasítások végrehajtása között (az előző utasítás eredményeképpen) vagy közben (külső) történő megszakítások Ellenélda: REP mov SB DS:SI ES DI SI++ DI++ Flag: Overflow 1 0 1 0 0 1 1 0 CX 0 1 0 • Felhasználó által explicit módon kért ill. nem kért megszakítások o Kért (az OPrendszer szolgáltatásai): Pl. INTO vagy INT3 (a programban való töréspont elhelyezésére használható, a hibakeresés érdekében (debug)) o Nem Kért: magától a gép • Felhasználó által maszkolható (letiltható) vagy nem maszkolható

megszakítások Megszakítás-kiszolgálás 1. egy egység aktiválja az INTR bemenetet 2. a CPU elfogadja ezt az INT kérést, ha  megszakítható állapotban van  megfelelő a prioritás nagysága  a beérkezett megszakítás nincs maszkolva  A 3 felt. teljesülése esetén INT elfogadva UT1 UT2 . a megszakítás vizsgálása (két ut. között nem fogadóképes) Megszakítási flagregiszter: a még nem teljesített INT kérések vannak benne 3. CPU elmenti a verembe az aktuális állapot információkat (PC, flag) -34. a megszakított program adatterének mentése (regiszterkészlet) 5. a megszakítást igénylő azonosítása (ha egy INT-hez több egység is tartozik) 6. megszakítás kiszolgálása 7. az adattér visszaállítása 8. A CPU a kiszolgálás végeztével visszaküld egy nyugtát az egységnek, az pedig deaktiválja a jelet A megszakítás kiszolgálása után a megszakított program folytatódik, vagy nem (reset). Mindegyik INT-hez tarozik egy bit:

a CPU ezeket vizsgálja, amikor fogadóképes. A megszakítást kérő azonosítása A legegyszerűbb lehetőség a megszakítások egyenkénti kiszolgálása, azok beérkezési sorrendjében. Hátránya, hogy a megszakítások kiszolgálása közben érkező megszakítást nem tudja kiszolgálni, így a halaszthatatlan kérelmek elveszhetnek. 1. Lekérdezéses (polling): Valamilyen sorrendben lekérdezzük az egységeket • Hardveres úton: daisy chain • Szoftveres úton: az operációs rendszer 2. Vektoros: A megszakítást kérő eszköz a kiszolgáló rutin kezdőcímét határozza meg a megszakítási vezérlő és a processzor számára. Több megszakítási vonal esetén minden eszköz saját megszakítást kérő vezetékkel rendelkezik, így a kérelem helye egyértelműen megállapítható. Megszakítások maszkolása • NMI: Non Maskable Interrupt (nem maszkolható megszakítás) • INTR: maszkolható megszakítás Egyes eszközök esetén a megszakítás lehetősége

engedélyezhető vagy tiltható. Ez a maszkolás, ami egy regiszter bitjeinek a beállításával történik. Így az NMI kérelmek kiszolgálása nem tiltható le, azok mindig érvényre jutnak. Parancs az elemzésre Aktuális prioritás Kiválasztó logika Elfogadta a prioritást Elfogadott prioritás maszk regiszter A megszakítási kérelmek kiszolgálási sorrendjének megállapítása történhet megszakítási vezérlővel (centralizált) és decentralizált módon (daisy chain). A memóriavédelem megsértése: Ha az operatív memóriában egy időben több, egymástól független feladat programja tárolódik, szükség van azok védelmének megszervezésére, elsősorban véletlen felülírás ellen. Ha egy program futása során "idegen" címre hivatkozik, az alkalmazott hardveres memória-védelem működésbe lép Pl. ha több program egyszerre akar elérni egy memóriaterületet (Win9x) A címzési mód megsértése: A bájt-szervezésű gépeknél az

utasítások hossza általában 2, 4 vagy 6 bájt lehet. Ez szokásosan együtt jár azzal a címzési előírással, hogy utasítás csak páros című bájttal kezdődhet. Ha például egy ugró utasítás páratlan címre ugrana, ez programhibát jelent és ezért végrehajtás helyett megszakítás történik. Hasonló címzési előírás lehet, például hogy dupla szó csak 8-cal osztható című bájttal kezdődhet. -4Prioritások kezelése Több megszakítás érkezett. Melyik a fontosabb? • Prioritás nélküli: pl. érkezési sorrend alapján időérzékeny megszakítások nem megfelelő kezelése (pl. a soros portra érkező adatot azonnal fogadni kell, különben adatvesztés) • Prioritásos Prioritási csoport: 1. védelmi rendszer megsértése és hardver hibák 2. kritikus időzítések (pl adatátvitel) 3. teljesítményt kell figyelembe venni  magasabb prioritású felhasználó  nagy terheltségű program Prioritás eldöntésének algoritmusa

(programozhatók általában) • Fix prioritás: az egységekhez van hozzárendelve, nem módosítható • Körbeforgó prioritás – több eszköz rendelkezik azonos prioritással először a C hajtódik végre, utána az ilyen típusúnak lesz a legkisebb a prioritása (de csak az azonos prioritásúak között) A B C Azonos prioritás • Speciális maszk (letilthatók a bizonyos egységektől érkező kérések) A prioritásos megszakítás-kezeléshez hasonló módszerek • Hardver lekérdezéses (daisy chain) databus * INTACK CPU 1 1 U1 0 0 1 1 U1 1 0 1 0 U1 0 1 0 0 U1 0 1.U3 0 2.U2 INTR • • Szoftver lekérdezéses: A programban beállított vizsgálati sorrend határozza meg a prioritást. Prioritási csoportok szervezése -5- • Párhuzamos kiszolgálású megszakítási rendszer Megszakítási rendszerek szintek szerint • Egyszintű: Nincs lehetőség a kiszolgáló rutin felfüggesztésére egy újabb megszakítási kérelem által. A

kiválasztó logika a kiszolgálás közben érkezett megszakítások közül a legmagasabb prioritású engedélyezett megszakítás-kérést engedélyezi. Az 1-es forrás szerinti kérés feldolgozása hosszabb ideig is eltarthat, viszont az 0-ás forrás megszakítás-kérése esetleg nem tűrhet ekkora halasztást. 1 INT 0 2 normál felh.-i szint t 1 2 0 0 2 • Többszintű: keresi a pillanatnyi CPU-szintnél magasabb prioritás-szintű engedélyezett megszakításkéréseket. Kiválasztja a legalacsonyabb prioritás-szintűt PSW-csere esetén ez oly módon zajlik le, hogy a megszakított szint PSW-je Old PSW-ként tárolódik, a másik rekesz tartalma pedig New PSW-ként betöltődik a programállapot-regiszterbe. Az elfogadott megszakítás-kérés nyugtázódik Ha nem talál az utolsó szintnél magasabb prioritású engedélyezett kérést, akkor megengedi a legutolsó New PSW-ben megjelölt utasítás végrehajtását. -60 0 1 2 3 1 1 2 1 2 0 t 2 •

Kompromisszum: az előző kettő ötvözése, azaz szinteket rendelnek a megszakítások egy-egy csoportjához Szinten belül egyszintű, szintek között többszintű 0/a 0 1 2 3 1/a 1/a 2/a 2/b 1/a 0/a t 2/a 2/a 2/b 2/b Pentium processzorok megszakítási rendszere Megszakítás (interrupt) maszkolható nem maszkolható eltérülés (exception) programozott processzor által felismert CPU - interrupt exception 1. megszakítás: a program működésével aszinkron (processzoron kívüli esemény) a. maszkolható: a processzor INTR lábára érkező megszakítás 1) INTR kérés 2) INTACK (a visszaigazolás, hogy elfogadva) 3) Vektor beolvasása 4) A vektortáblázat a megszakítást kezelő rutinok kiválasztása b. nem maszkolható: a processzor NMI lábára érkező megszakítás 2. eltérülés: a program működésével szinkron (processzoron belüli események) a. programozott eltérülés: INT N (tetszőleges sorszámú megszakítás) b. processzor által

felismert eltérülés (∆) A vektortáblázat • Valós módban egy bejegyzése 4 byte, a tábla neve megszakítási vektortábla • Védett módban egy bejegyzése 8 byte, a tábla neve megszakítási deszkriptortábla (IDTR – Interrupt Descriptor Table) • A táblából a kiszolgáló rutin kezdőcíme olvasható ki ∆ • • • • -7FAULTS (hibák): minden esetben az utasítás végrehajtása előtt kiderülnek (0-val való osztás) TRAPS (csapdák): utasítás végrehajtás után, azok következményeként fordulnak elő pl. INT 1 vagy túlcsordulás ABORTS (végzetes hibák): a CPU nem tudja meghatározni a hibát Pl. - CPU-n belüli hiba - rendszertábla hibás kitöltése MVE azonosító Megszakítások valós módban • NMI + eltérülések 0.31 0: osztáshiba 1: debug (nyomkövetés: minden utasítás után megáll) 2: NMI 3: töréspont 4: INTO (a túlcsordulás kezelése) 5: BOUND (index-határ) 6: nem megengedett műveleti kód 13: általános védelmi

hiba 14: laphiba 17: illeszkedés ellenőrzés • 32.255 maszkolható megszakítások IRQ0: timer IRQ1: billentyűzet IRQ4: infraport IRQ5: SD memóriakártya IRQ6: floppy IRQ9: videó kártya és hálózati kártya IRQ11: rádió kártya IRQ12: egér Az IF flag jelzi, hogy engedélyezve vannak-e a maszkolható INT-ek (1 esetén igen). Ezen flag beállítására való Assembly utasítások: CLI (Clear INT) és STI (Set INT) Daisy chain: A megszakítási kérelem helyének meghatározása a visszaigazoló IACK vezeték segítségével, sorosan történik. A visszaigazoló jel a kiszolgálást kérő egységtől már nem halad tovább, hasonlóan a sínkérelmek kiszolgálásához. Ez pedig elindítja a kiszolgáló rutint A megszakítás visszaigazolása sorosan halad végig az eszközökön, evvel meghatározva azok prioritását is egyúttal. Címzési módok Címzési mód: ahogy a címet meghatározzuk, pontosabban egy címszámítási algoritmus. MK OP1 OP2 Címzési módok

címszámítás 1. Címszámítás, címmegadás: • abszolút címzés: MK Cím címmódosítás címértelmezés -8- MK után teljes cím van, o Előny: a teljes operatív tár megcímezhető. o Hátrány: a cím hosszú (4-6 byte), így lassú • relatív címzés MK Y=B+D D D: displacement (eltolás) B: base (bázis) A bázis lehet: o dedikált regiszter (Rbi) /i-edik/ o programszámláló (PC) o TOS (Top of Stack – A stack teteje) o Operatív tárbeli mutató (OPT) (Yp) A címszámítás lehet: Rbi PC Y=B TOS +B Yp - Bázisregiszteres A báziscímhez adódik hozzá az előjeles eltolás. Így ’B’ egy környezete érhető el - Bázislapos Mindegyik lap ugyanakkora. Így elérhető pl az x-edik lap ötödik byte-ja Az eltolásnak nincs negatív értelmezése. P D 16 2 PC F8 A8 MK D8 PC F 8 256 lap D8 hossza 256 1 D 0 P: a lapcím lehet: - PC (futólapos címzés) - 0 (0 lapos címzés) - D: lapon belüli eltolás • Közvetlen adatmegadás

(IMMEDIATE) pl. MOV AX , 13 közvetlen adatmegadás MK Közv. ADAT MK OP1 OP2 -9• Rejtett, implicit címzés A műveleti kód utal az adatra: pl. egy flag értéke beállítható (STI/CLI) pl. POP AX (SP=SP+1; (SP)  AX ) MK OP1 OP2 2. Címmódosítás • Indexelés: egy lineáris adatstruktúra egyetlen eleméhez férünk hozzá S Rxi Ye = S + ( Rxi ) + { Rxj }, Ahol Rxj egy indexregiszter (egyszeres indexelés) Ye • Autoinc/Autodec o az egyes elemek egymás utáni elérése: Az index értékét az utasítás automatikusan csökkenti vagy növeli. o mindkettő történhet címzés előtt vagy címzés után - 10 - A valós cím meghatározásának tervezési tere (címdeklaráció) címzés Címszámítás abszolút címmódosítás relatív Rbi PC TOS Yp indexelés auto inc/dec egyszeres dupla többszörös indexelés sorrendje pre- képlettel: (Yabs) (Rbi) (PC) (TOS) (Yp) Y= +D + Rbk + Rxj postindexelés pre post irány + - +1 -1 3.

Címértelmezés • Direkt/indirekt Direkt esetén az Y egyértelműen meghatározza az adat helyét, indirekt esetén egy címre mutat, amely meghatározza az adat helyét. (többszörösen indirekt is lehet) Direkt MK Cím Adat indirekt MK Cím Cím Cím Adat • Valós/virtuális Címtér valós (fizikai-ram) virtuális (logikai) VT virtuális tárkezelés programozó ezt látja - 11 - A 16/32 bites Intel processzorok regiszterei (programozhatóak) Funkciók: • A-D: általános célú regiszterek • • (E)AX: szorzó, osztó utasítások (E)BX: indirekt periféria-címzés (E)CX: számláló jellegű reg. (léptetés, ciklus) (E)DX: szorzó, osztó utasítások, I/O műveletek (E)BP: bázis pointer, paraméterátadás (a stack-ből ki lehet venni az eljárás paramétereit) (E)SI: index regiszter, stringkezelő utasítások (E)DI: index regiszter, stringkezelő utasítások (E)SP: stack pointer CS: code segment DS: data segment ES: data segment (FS): data

segment (GS): data segment SS: stack segment • • • • • • • • • • • • Újdonságok az i80386-ban: • 32 bites regiszterek (EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP) • két új adatszegmens (FS, GS) • VM: virtuális 8086 mód • RF (Resume): időszakosan letiltja a nyomkövetési hibákat (debug fault), hogy egy ilyen után folytatni lehessen egy utasítást anélkül, hogy újabb hibák keletkeznének • NT: megszakított és meghívott taskok láncolása • IOPL: I/O Privilege Level (védelmi szint): az I/O címtartományhoz való hozzáférés ellenőrzésére Memória-hivatkozási típus Bázis Bázis2 Offset Utasítás lehívás CS IP Stack művelet SS SP Változó DS CS, ES, SS Effektív cím String forrás DS CS, ES, SS SI String cél ES DI BP mint bázisregiszter SS CS, DS, ES Effektív cím Minden egyes szegmens báziscíme tárolva van. Egy szegmensen belüli adat megcímzéséhez a 32 bites offsetet hozzá kell adni a szegmens báziscíméhez

SS – egy eljárás meghívása előtt egy memóriaterületet kell kijelölni a verem számára. Ez a regiszter a verem szegmens azonosítására való (kívülről is hozzáférhető) DS-GS – biztosítják a különböző adatstruktúrákhoz való megfelelő hozzáférést (az alkalmazói program futása közben is feltölthetők) CS - a végrehajtandó utasítások szegmens-szelektorát alkalmazza AH – felső bájtok, LH – alsó bájtok (a regiszter-táblázatban) - 12 Flag regiszterek (a FLAGS részei): • Státusz flagek: CFCarry: átvitel bit PFParity: hibajavításra használt, páros számú 1-esre javít AFAuxiliary Carry: BCD-nél az értéke 1, ha átvitel van. ZFZ flag: ha a keletkezett eredmény 0, akkor a bit értéke 1 (pl. ha egy csökkenő ciklus elérte a nullát) SFSignum: ha a legfelső bit 1-es, akkor negatív (előjel) OFOverflow: túlcsordulás • Rendszer flagek: AC: illeszkedés ellenőrzés: ha értéke 1, akkor illeszkedési hibás az operandus

 kivétel keletkezik. Pl páratlan címen 2 bájtos utasításra hivatkozás vagy néggyel nem osztható címen DWORD-re hivatkozás (4 bájt) VM: ha 1, virtuális 8086 mód TFTrap: ha 1, akkor minden utasítást követően egy hibakereső kivételt generál IFInterrupt: megszakítás (INTR), maszkolása (CLI, STI) • Vezérlő flag: DFDirection: 8086, stringkezelő utasítások (SI, DI) 2 regiszter memória. kezeli a növelést, csökkenést az autoinc/dec esetén. Utasítások általános formája Az utasítás hossza legfeljebb 6 byte lehet: Az 1.byte: • OP. KOD (6): Az első 6 bit a műveleti kód • D (1): 0 esetén regiszterből, 1 esetén regiszterbe irányul a művelet. műveleteknek így két gépi kódja is lehet. • W (1): 0 esetén byte-os (8 bit), 1 esetén word-ös (16 bit) a művelet Egyes A 2. byte határozza meg a maximálisan két operandus elérési módját: MOD (2): címzési mód. REG (3): Regiszter kiválasztás. • R/M (3): Regiszter vagy memória.

• • A 3. byte az első operandus, cím vagy adat alacsony byte-ja: • LOW DISP vagy DATA (8) A 4. byte az első operandus, cím vagy adat magas byte-ja: • HIGH DISP vagy DATA (8) Az 5. byte a második operandus, az adat alacsony byte-ja: • LOW DATA (8) A 6. byte a második operandus, az adat magas byte-ja: • HIGH DATA (8) Általánosan igaz, hogy ha egy kétoperandusú utasítás egyike a memóriában van, akkora másik csak regiszterben lehet. - 13 - Ha minden igaz, akkor ezt nem kéri vissza, de sose lehet tudni REG 000 001 010 011 100 101 110 111 W=1 AX CX DX BX SP BP SI DI W=0 AL CL DL BL AH CH DH BH MOD 00 01 10 11 11 R/M 000 BX +SI D=8 BX + SI + D D = 16 BX + SI + D W=0 AL W=1 AX 001 BX + DI BX + DI + D BX + DI + D CL CX 010 BP + SI BP + SI + D BP + SI + D DL DX 011 BP + DI BP + DI + D BP + DI + D BL BX 100 SI SI + D SI + D AH SP 101 DI DI + D DI + D CH BP 110 Direkt Address BX BP + D BP + D DH SI BX + D BX + D

BH DI 111 A memóriák típusai Szervezés: Egy bitnyi információ tárolása (DRAM vagy SRAM) CS: Chip Select WE: Write Enable (felülvonás0-ra aktívak) Két bit egy bemenetet aktivál (4 eset). Minden esetben mátrix elrendezésű. 16*1 bit szervezésű vagy 44 szó szervezésű 1024*1024=220=1 Mbit-es cella Az első tíz bit az első dekóderbe, a másik 10 bit a második dekóderbe kerül, így nem kell 20 bemenetet készíteni. RAS: Row Address Strobe CAS: Column Address Strobe. - 14 - DRAM W – kiválasztó vezeték. 1) olvasás: kisütjük a kondit, így a töltések eltávoznak. Vissza kell írni. (R+W) 2) írás: a kondi feltöltése A kapacitás nagyon kicsi, ezért a töltése könnyen elszivárog: frissíteni kell. (~ 2ms-ként egy olvasás művelet szükséges) Pl.: 16 K * 1tár 128 128-as mátrix A frissítés történhet: a. Régebben: a DMA vezérlő egy látszólagos olvasás segítségével frissített; az eredményt nem használta fel b. ma: egységen

belüli megoldás 2ms Frissítési módszerek C • BURST Refresh (a teljes memória frissül) 2ms • DISTRIBUTED Refresh (folyamatosan frissül) 2ms . 2ms/128 idő cellánként MK Dek Op1 (frissítés, ha a processzor nem használja az adott területet) • Transparent Refresh • Részei: fetch (előkészít) és execute (végrehajt) Fetch: Pl. itt Fetch o A műveleti kód kiolvasása a memóriából (használja a memóriát) o Dekódolás (nem használjra – regiszterművelet) o A két operandus kiolvasása (általában használja a memóriát) 1 CLK RAS 2 4 5 t1 t2 t * SOR OSZLOP t t R/W D 6 t CAS A 3 Op2 t Érvényes adat t - 15 CLK: buszfrekvencia A: címvezeték D: adatvezeték 4, 5: lehet akár 1 ciklus is olvasás: t1: sor -és oszlopcím kiolvasása t2: adat megjelenítéséhez és a jel visszavétele t1 + t2 ~ 60ns (6+6+6+6+) ns egy ciklus (5+5+5+5+) ns, ha gyorsabb a busz A hozzáférés gyorsítása 1, Cím-folytonos olvasás:

egyszerre több bitet olvasunk a mátrixból, így a RAS jelet elég csak egyszer kiadni. (6+4+4+4 ns) – Fast Page Mode DRAM Nibble Mode FPM DRAM: 4 rekeszes RAM 1. az első olvasásnál rákerülnek a címek, a RAS és a vezérlőjel 2. a címek növelése az IC-n belül történik, nincs külső címzés Mindez a CAS-hez szinkronizálva; (6+4+4+4 ciklus) Ez akkor előny, ha a CPU 4 bájtos egységekben hívja le az adatot OPT-ból, és folyamatosan tudja fogadni az adatokat. Extended Data Out DRAM = EDORAM +1 kimenet bevezetése (tároló) a nCAS visszabillenésének tárolására. A kimeneti adat érzékelését ehhez kötik: előbb indulhat a kiolvasás (egy ciklus megspórolása) 6+3+3+3ciklus – Output Enable nOE // nX = X negáltja Burst Extended Data Out DRAM = BEDO RAM Nincs szükség az oszlop vezérlőjelre, a címeket az IC-n belül generálja. Saját címszámlálóval és belső pipeline-nal rendelkezik. A bemenetén már megjelenik az új adat, amikor a kimenetére

kerül az előző adat (6+2+2+2ciklus) Synchronous DRAM = SDRAM Az olvasás a CPU vezérlőjeléhez van szinkronizálva, nem pedig a CAS-RAS-hoz. 5+1+1+1 ciklus 1 SDRAM lapra 4db Bank (4*8 bit) 8 8 8 8 Memory Interleaving ( 32 bites 4 GB 4*1) 14 84 0 4 8 12 1 5 9 13 0 nCS - 16 - 2 6 10 14 1 nCS 3 7 11 15 2 nCS 3 nCS A1 A2 8 8 8 8 LOW ORDER HIGH ORDER 14 84 0 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 1 LOW ( - ) HIGH ( | ) 0 MEMORY INTERLEAVING: 8db SDRAM Dual Inline Memory Module (DIMM) 0 1 2 7 32 byte-os DIMM kimeneti Buffer és 64 bit a CPU felé DRAM olvasása: R+W TC: ciklusidő Hozzáférési idő RECOVERY TIME: a következő olvasásig eltelő idő CPU - 17 Adat ki Tárhozzáférési idő: a kereséstől a megjelenítésig. Ciklusidő: kéréstől az új kérésig Az Interleave Addressing technikával az adat megjelenése után egy másik modulból rögtön indulhat a kiolvasás, nincs recovery time. Külön szegmensben

helyezkedik el az adat, a kód és a stack. Rambus DRAM • teljesen új architektúra, több egymástól független memóriamodult tartalmaz • rendkívül nagy belső cache-tárja van (1M-hoz 2K cache), • NINCS nRAS, nCAS helyette 1 lépésben kapja meg a címet • Blokkos az adatátvitel; blokk: 8db 256 bájt terjedelmű, adatszélesség: 8bit • Gyors blokkmozgatás, speciális illesztő-áramkör szükséges (rambus) • Nagyon drága, mert az eltérő technológia miatt más gyártósort igényel DDR SDRAM SDRAM esetén a művelet a felfutó élre van szinkronizálva, míg a DDR SDRAM esetén a lefutóra is. • A belső memória lapokra van bontva: az egyik rekeszben adatforgalom, a másikba beolvasás • Nagyon gyors belső órajelgenerátor és pipeline • Kompatibilis a jelenlegi gyártási technikával Összefoglalva: DRAM [ns] [Mb/s] 60 100 FPM EDO Aszinkron burst 40 25 200 266 BEDO SDRAM RDRAM DDR szinkron 15 532 15/10/7,5 4/3,3 1600 7,5/6/5 DDR: PC

2100: 2100 Mb/s PC 2700: 2700 Mb/s PC 3200: 3200 Mb/s / / / 266MHz 333MHz 400MHz / / / 7,5ns 6ns 5ns Cache memóriák A CPU és az OPT közötti sebességkülönbség: 8MHz 125ns, 500MHz 20ns, 1GHz 1ns • Wait State: Azon állapot, amikor a CPU az olvasási kérelem kiadása után várakozni kénytelen a memóriára • Megoldás: Gyors memória a CPU lapkájára (nem kell a lassú buszon át komm.) o A CPU így drága lesz o A lapkák nem lehetnek tetszőleges méretűek  Nagyméretű, de lassú tár (OPT)  Kisméretű, de gyors tár (Cache)  Cache: speciális gyorsító tár PC-ben (L = Level): • L1 – CPU-ban • L2 – dedikált buszon kapcsolódik a CPU-val • L3 – alaplap • Grafikus kártya - 18 • HDD Méretek: L1: 16K ~ 64K; n*10K L2: 512K ~ 1M; n*100K L3: n*1M Lokalitási elv: egy rövid időintervallum alatt a memóriahivatkozások csak a memória egy kis részét érintik. 1. térbeli: azokra a memóriahelyekre, amelyeknek a címe

számszerűen hasonló a nemrégiben elért memóriahely címéhez, valószínűleg hamar szükség lesz. Ezért a cache-be több adatot hozunk be, mint éppen szükséges. 2. időbeli: sokszor ugyanazon adatokra van szükség (ciklusok belsejének ismétlődése miatt) Átlagos hozzáférési idő: c + m – h * m = c + ( 1 - h) m ahol: Cache: ~1ns (c) OPT: ~5ns (m) találati arány: ~ 90% (h) (ilyen arányban lesz a szükséges adat a cache-ben) A Főtár és a cache tár aktualizálása: • átíró (Write Through): amikor a cache-be ír, akkor az OPT-be is: lassú (486 CPU) • visszaíró (Write Back): A cache tár mérete kisebb, mint az OPT, így az adatátvitel blokkokban történik. Ha a cache telítve van, kimentjük a tartalmát az OPT-be, majd a bejövő adattal felülírjuk (Pentium-tól) CPU Ha a C betelik algoritmus kiválaszt egy blokkot, amelyet visszaír az OPT-ba és helyére érkezik az újabb adat OPT C new old • késleltetett írás (Burst Write): akkor

írja vissza az adatot az OPT-ba, amikor az nincs használatban (Pl. a CPU belső műveletet végez, nem használja az OPT-t) A memória-hierarchia lehetséges alternatívái az adat cache szempontjából Gyorsul, a mérete pedig csökken L1 M CPU rendszermemória 1. variáció (486) adat L2 M L2 L3 2. variáció (Pentium) utasítás M 3. variáció (Itanium) Külön L1: az adatnak és az utasításnak Tendencia: Az L2 már a CPU-n belül, az L3 pedig dedikált buszon. A gyorsítótárak általában egyre bővülők: az L1 teljes tartalma benne az L2-ben, és így tovább. Minden gyorsítótár a következő modellt használja. A főmemória fel van osztva rögzített méretű blokkokra (cache line = 4-64 byte) Amikor memóriahivatkozás történik, a gyorsítótár vezérlő áramköre megvizsgálja, hogy a kért adat megvan-e gyorsítótárban. Ha nincs ott az adat, akkor valamelyik vonalbejegyzést kivesszük a cache-ből, és helyette a szükséges adatot betöltjük a

memóriából vagy a magasabb szintű gyorsítótárból. - 19 Cél: minél több szükséges adat legyen a cache-ben, hogy ne kelljen a lassú memóriához fordulni. Az adat cache tervezési terének alapkomponensei Az adat cache tervezési tere Adat cache (makro)architektúra A cache funkcionális leírása (Black Box) • írási és olvasási eljárások • hibavédelem Adat cache mikroarchitektúra Belső struktúra (LAYOUT) • Cache-szervezés • „Tagging Scheme” • Cache Line (egy sor a cache-ben egy blokk) • PORT a CPU és a cache hány porton keresztül csatlakozik (1-3) • BANK single, multibank; 2, 4, 8 (A portok számának megfelelő bankot tud egyszerre elérni a CPU) Műveletek (operational) • A CPU és a cache összekapcsolása o On-Chip o Off-Chip • A Cache line mérete (32-64-128 byte) • Adatszélesség – hány bájtos • A CPU és a cache szinkronizálása (párhuzamosság) • A cache tár órajele Szervezés • Közvetlen leképzésű

(DIRECT MAPPED) A gyorsítótárban minden sor pontosan egy gyorsítótárvonalat tartalmazhat a főmemóriából. Egy 32 bájtos vonalmérettel a gyorsítótár 64KB-ot tartalmazhat. Minden sor három részből áll: - 20 V (Valid): egy bit jelzi, hogy van-e a sorban érvényes adat. Amikor a rendszer indul, minden sort érvénytelennek jelölünk meg. Tag: egy egyedi, 16 bites értékből áll, amely a megfelelő memóriavonalat azonosítja, ahonnan az adat jött. D (Data): a memóriában lévő adat másolatát tartalmazza. Ez a mező egy 32 bájtos gyorsítótárvonalat tartalmaz. Egy adott memóriaszó pontosan egy helyen lehet tárolva a gyorsítótáron belül. Az adatok tárolásához és kinyeréséhez négy alkotóelemre tagoljuk a címet, amit a CPU állít elő: TAG: a cache-ben tárolt Tag bitek megfelelője LINE: megmutatja, hogy melyik sor tartalmazza a szükséges adatokat, ha azok jelen vannak. WORD: azt mondja meg, hogy egy vonalon belül melyik szóra történt

hivatkozás. BYTE: ha csak egy bájtra érkezik kérés, ez mondja meg, hogy a szón belül melyik bájtra van szükség. Egy olyan cache-nél, amely csak 32 bites szavakat szolgáltat, ez a mező mindig 0. Amikor a CPU előállít egy memóriacímet, a hardver kiveszi a címből a 11 LINE bitet, és indexelésre használja a cache-ben. Ha a vizsgált sor érvényes, akkor a memóriacím TAG mezője összehasonlítódik a cache sorának Tag mezejével. Ha megegyeznek, és a sor tartalmazza a keresett szót, az a cache-hit (találat) Az éppen szükséges szót kivesszük, a sor többi részével nem foglalkozunk. Ha a sor érvénytelen, vagy a címkék nem egyeznek meg, az a cache-miss (hiány). Ekkor a 32 bájtos vonal betöltődik a memóriából a cache-be. Ha a felülírandó sor a betöltés óta módosult, akkor vissza kell írni a memóriába, mielőtt eldobnánk. Mivel legfeljebb 64KB (211 x 8 x 4) egymás mellett lévő adatot tárolhatunk a cache-ben, ezért két olyan vonal,

amelyek között a különbség 64KB egész számú többszöröse, nem lehet egy időben a cache-ben tárolva (ugyanaz a címzésre használt LINE értékük). Például, ha egymás után ilyen helyen lévő adatokra van szükség, akkor a cache bejegyzése kénytelen újratöltődni, az ott lévő sort pedig ki kell írni a memóriába. Ebben a legrosszabb esetben az egész rendszer lassabb, mintha nem lenne gyorsítótár. (ritkán fordul elő) Ez az összeütközés nem fordul elő, ha külön van választva az utasítás –és adatcache, mivel a különböző kéréseket más gyorsítótárak fogják kiszolgálni. Előnye, hogy a szó kiolvasása a cache-ből, és továbbítása a CPU-hoz ugyanabban az időben történhet, amikor eldől, hogy a vizsgált a megfelelő szó. Így a CPU valójában párhuzamosan, vagy akár még előbb megkap egy szót a cache-ből, mielőtt megtudná, hogy az a kívánt szó. Pl Alpha 21064(A), UltraSparc 1-2 Összeütközés: 0. 0.31 1. 32.63 2.

64.85 2047 65504-65535 65536-65567 65568-65599 Ezekből csak egy 32 byteos része kerülhet a cache-be, mivel a line részük többféle is lehet • Csoportos asszociatív cache (n-way set associative) CL 16 byte Az összeütközés feloldására ennek a cache-nek minden címhez n lehetséges bejegyzése van. Ekkor a hivatkozott memóriacímből kiszámítható a bejegyzés helye, de egy n elemű halmazban kell megkeresni a megfelelő sort. Amikor egy új bejegyzést hozunk be a cache-be, el kell döntenünk, hogy melyiket dobjuk el. Elég jó algoritmus a legtöbb esetre az LRU (Least Recently used). Ez egy sorrendet tart fenn a helyek minden olyan halmazáról, amely elérhető egy adott memóriahelyről. Ha a vonalak valamelyikéhez hozzáférünk, ez frissíti a listát. Így mindig a lista végén lévő, tehát legutolsóként használt lesz az, amit eldobunk A 4 utas feletti cache szokatlan, mivel gyakran rosszabb a teljesítményük. - 21 2 utas: Pentium, Pentium Pro,

AMD Athlon; 4 utas: UltraSparc 3, Pentium II-III-IV; 8 utas: Power PC 602 TAG 168 0 110 133 A négyes csoport, amit az index megcímez LRU: HB Sz 4 utas cache 26 *16 4 = 4K Sz: számláló HB: használati bit Ha használjuk HB=1 I  Sz := 0 N  Sz += 1 HB=0;