## Version 0.9a Pre-Released 2, First Previewed version

## I. Fejezet

### Under Construction

Írta : Hodosi Szabolcs (PPK)
Dátum : 1998.10.19

Jelen dokumentáció anyaga szabadon felhasználható.

## Mielőtt hozzákezdenénk Introduction - Bevezető Alapfogalmak Általánosságban a processzorokról ## Pentium előtti időkből 80386 processzor 80486 processzor ## Pentium Intel Pentium processzor NexGen processzorokról röviden Cyrix 6x86 (M1) processzor ## MMX MMX technológia,Intel Pentium MMX |  |

# Bevezető

Ez a dokumentáció nem kíván teljes leírást adni az itt szereplő processzorokról,inkább egy összegző, átfogó jellegű szöveget szeretnék írni a ma forgalomban levő processzorokról.Csak a PCs processzorokat említem és közülük természetesen nem mindet, sőt az itt szereplőket is eltérő részletességgel.
Az első fejezetben csak a 80386,80486,Intel Pentium Cyrix M1,NexGen 5x86,Intel MMX processzorokról kívánok beszélni.A második fejezetben - mely jelenleg is intenzív fejlesztések alatt áll - a 3DNow! technológiára szeretném fektetni a legnagyobb hangsúlyt,mivel jómagam nagyon érdeklődöm az ezzel a technológiával készült processzorok iránt, szerintem elég sok jó ötletet tartalmaz ahhoz, hogy a vékonyabb pénztárcájú vásárlók közkedvelt processzora legyen, hisz olcsó ára mellett ez az első Intel klón ami - habár egy orrhosszal mindössze - de megelőzte az Intel fejlesztéseit. Sebességeredményei elég erősnek hatnak a 3Ds alkalmazások terén...
Kicsit részletesebben szólok a Pentium processzorról, a MMX technológiáról, a 3DNow technológáról, a Cyrix M1, AMD K6, AMD K6-2,Pentium MMX,Pentium Pro és Pentium II processzorokról.
Kevésbé részletesen beszélek a Cyrix M2,GX processzorokról, valamint a NexGen fejlesztéseiről.
A második fejezetben terveim szerint a Xeon,Pentium II,Pentium Pro,Katmai,Merced,AMD K6,AMD K6-2 3DNow!,Cyrix M2,GX processzorokról lesz szó.
A leírás során nagyon sokminden kimaradt és leegyszerűsödött az eredeti leírásokhoz képest,ezért szíves elnézésüket kérem.
A leírás a Fazekas Mihály Gimnázium Számítástechnika Fakultáció I-re készült mint 'kis'(?)előadás, megértéséhez a Gimnáziumokban tanított számítástechnikai ismeretek alapos ismerete szükséges.A dokumentáció 14-18 éves korosztályhoz szól, igazodva ehhez nyelvezetében is.Szabadon Felhasználható iskolai tanórák kiegészítőjeként, név illetve honlapscím megemlítése esetén.
Először is szóljunk néhány fontosabb alapfogalomról, ami szükséges lesz a továbbiakban a megértéshez.

### Alapfogalmak

- Órajel : Egy adott ferekvenciájú négyszögimpulzus
- Processzor : CPU (Central Procces Unit), központi feldolgozó egység, feladata a számítógép "vezérlése", az utasítások végrehajtása, számítások elvégzése
- Coprocesszor : Matematika társprocesszor, aminek feladata a matematika számítások alól a processzor tehetmentesítése...
- Pipeline : "csővezeték".az az egység amelynek belsejében az adatok és utasítások végrehajtódnak. kb. 2x gyorsabb processzort tesz lehetővé,mint ami az utasításokat sorban hajtja végre. A párhuzamos működés miatt azok az utasítások, amelyek nem tartalmaznak operandusokat, úgy érzékelhetőek, mintha a processzor zéró idő alatt hajtaná végre őket.
- Szuperskalár : két egész (integer) pipeline,itt képes a proc. két nem lebegőpontos számítást végezni
- Socket 7 foglalat: ez a foglalat a Pentium processzorok foglalata,kifejlesztette az Intel.
- Super 7: Lábkompatibilis a Socket 7 foglalattal (Ami a Pentium processzorok foglalata,amleyet még az Intel fejlesztett ki processzorai számára), amelyet az AMD fejlesztett ki azzal a céllal, hogy ez megoldást fog kínálni az olcsóbb gépekbe a Slot 1 helyett, ebbe a foglalatba kívánja helyezni az AMD K6-2 3DNow! Processzorát.A Socket7-nél jelentősen gyorabb,mivel 100 Mhz/sec -es lokális adatátviteli sebességet biztosít az AGP (Accelerated Graphics Port) között.
- Regiszter : A processzoron belül elhelyezkedő kis (16 és 32 bites) tárolóegységek ("memóriák") amelyekre cím hleyett egy adott névvel hivatkozunk.Pl.: AX (Accumulator)
- Memória cache : általános célú puffer a leggyakrabban hivatkozott memóriarekeszek tárolására

# Általánosságban a processzorokról

## Regiszterek

Az assembly programozóknak már nem kell bemutatni ezeket bemutatni, hiszen tulajdonképpen ezen tanultak meg programozni.
a legősibb műveletek közé tartozik a MOV AX,BX.
Mindenki ezzel kezdte annak idején.

- ### Egyszerű regiszterek

  : 4 db 16 bites regiszter ezek az

- AX : ez a legismertebb, másnéven Accumulator Register.Egyszerű akummulátor, amely általában átvitelkor használunk,kisebb tárolásokra,számításokra
- BX : másnéven Base Register, báziscímek tárolására alkalmatos, számításokkkor
- CX : "lustaság regiszter", ez a kedvencem ;) , Counter Registerléptetésben,loopoláskor,ciklusokban van nagy szerepe
- DX : Szokás Destination Register-nek hívni, ki tudja miért.Szerepe az, hogy csakúgy van és kész,mer' mér' ne ;))
- BP : A jó öreg Base Pointer
- SP : Source Pointer
- SI : Source Index,a forrás indexe, nincs címhivatkozás meg pointerkezelés nélküle.(mint tudjuk ott van a régi jó kis [DS:SI])
- DI : Ez az SI párja Destination Index, azaz a célindex.Ugyanarra kell, mint az SI,csak itt visszafelé csinálunk mindent (ismerős az, hogy [ES:DI] ?? ;)) )
Ezeket fel tudom bontani két egyszerű 8bites regiszterre a következőképpen : AX=AH+AL
Azaz AX = Accumulator High + Accumulator Low
Ez nagyon jó mert sok műveletet le tudsz ezzel egyszerűsíteni.
Vigyázzunk,mert a BP,SP,SI,DI nem bontható fel (mert címzésre használjuk) !
Ezeknek a regisztereknek megvan a 32 Bites megfelelőjük is E+16bitesneve azaz : EAX,EBX,...(az E az az 'Extended' rövidítése)

- ### Általános regiszterek

  : 8 db szabadon felhasználható regiszter (AX,BX,CX,DX...), mind 32 bitesek.Ezek közül néhány (pontosan a fele) az egyszerűek kiterjesztett (E) 32 bites változata,mint azt az előbb említetten is (Ismétlés az unalom atyja :)) )

- EAX,EBX,ECX,EDX,EDI,ESI,EBP,ESP : nem mondom el mégegyszer... (már én is unom..) ;)

- ### Szegmensregiszterek

  ezek a 16 bites szegmens-szelektorokat tartalmazzák, amik egy táblázatot indexelnek.Ez a tábla a szegmens báziscíméttartalmazza valamint a meóriamodellről tárolt aktuális információkat. Ezekből 6 regiszter van

- CS: Code Segment - minden hívás és ugrás a kódszegemnsen belülre vonatkozik.
- DS: Data Segment - adatszegmensregiszter.A legtöbb memóriahivatkozás erre irányul.
- ES: Extra Segment- extra szegmens,csakúgy, ha kevés lenne (címzéskor kell, [ES:DI]).Számos string műveletben célszegmens.
- SS: Stack Segment- Stack Segment. Veremszegmens,veremműveletnél fontos
- FS: Másodlagos adatszegmens
- GS: harmadlagos adatszegmens
Van egy ún. Utasításmutató (EIP), ez közvetlenül nme kezelhető (a CS:EIP alakban használjuk a code helyének meghatározására,illetve a gép.Szokás úgy nevezni,mint a "CS offsetje".Erről is van szó...:)) )

- ### Flagregiszterek

  Ezek állapotregiszterek, ezeken keresztül lehet feltételek, eseményeket meghatározni, lekérdezni.

  > - OF: túlcsordulás flag
  > - SF : előjelflag, szignusflag.Akkor állítódig be, ha ez eredmény (AX) negatív
  > - ZF : Zero Flag, nullflag.Igaz, ha az eredmény nulla
  > - PF : Paritásflag, ha az alsó byte-ban páros számú 1 bitek vannak
  > Stb... (van még kb. 8x ennyi,ezt nem kívánom felsorolni)

- ### Rendszer regiszterek

  Ide tartoznak azok a regiszterek amelyek a felhasználói programok végrehajtó környezetével foglalkoznak,mint például a

  > - EFLAGS: ezek tulajdonképpen a fent említett flagek,persze sokkal több van az itt melítetteknél,de ezek a legfontosabbak... Ezek vezérlik az I/O műveleteket,maszkolható megszakításokat, nyomkövetést, task-cserét, V86 módot (Virtuális 8086-os mód)
  >   Ezek : ID,VIP,VIF,AC,VM,RF,NT,IOPL (privilegizált szint jelzők),IF,TF
  > - Memory Management Registers (memória-szervező regiszterek) :
  > - Control Registers (vezérlőregiszterek) : Ezek a PG,PCD,PWT,CD,NW,AM,WP,NE,ET,TS,EM,MP,PE,VMEPVI,TSD,DE,PSE,MCE
  > - Debug Registers (Nyomkövető regiszterek) : ezek magas nyomkövetési tudással látják el a processzort

  32 bites regiszterekkel csak a 32 bites processzorok rendelkeznek (80386-tól felfele). Az itt felsorolt regiszterek közül nagyon sok, csak a Pentium, illetve a Pentium klónokban, Pentium alapú gépekben található meg.Nem kívántam külön leírni, hogy melyik regiszter melyik processzorban nincsen benne.

# 80386os processzor

### Általános adatai

Géptípus | 386DX
Processzortípus | 80386
Regiszterméret | 32 Bites
Regiszterek száma |
Adatbusz | 32 bites (SX esetén 16)
Címbusz | 32 bites (SX esetén 24)
Órajelfrekvenciák | 20..40 (SX esetén 16..40)
Koprocesszor | Opcionális
Processzor Helye | az alaplapon
Pipeline | 1 db, 1 integer egység

### A 80386-os processzor módjai

- Valós mód : 8086os-t megvalósító (:)) ) mód
- Virtuális valós mód : kifejezetten a 80386osra jellemző mód, mely képes egyszerre több valós módú program futtatására (látszólag)
- Védett mód (PMODE = Protected Mode) : Multitasking képessége, azaz több feladat látszólagosan párhuzamos végrehajtása
- SMM (System Management Mode) : Ez a rendszer teljesítmény managementjét kezeli, valamint biztonsági feladatokban is jelentős a szerepe

### Egységei:

- Busz interfész egység(BIU) (Bus Interface Unit) : Az egységeknek, ha külső adatra van szükségük hozzá fordulnak adatért.Csak fizikai címekkel foglalkozik
- Utasításlehívó egység : Ez az utasításdekódoló egység számára készít elő egy 16 bájtos sort.
- Utasításdekódoló egység : Ez az utasításlehívó egység által előkészített sort dekódolja,felosztja utasításokra,megállapítja, hogy mennyi szükséges a következő utasítás végrehajtásához (emiatt az 80386-os utasításai 1-16 bájtnyiak lehetnek)
- Utasításvégrehajtó egység : Ez az utasításdekódoló által létrehozott utasításokat hajtja végre, azaz bármilyen műveletet elvégez ami egy szükséges egy utasítás végrehajtásához.Itt találhatók a regiszterek.Az utasításvégrehajtó egység logikai része több-bites léptetést tud végrehajtani egy óraciklus alatt. Ezt használja ki a léptetés és a szorzások gyorsításához.
- Szegmentáló egység : A szegmentáló egység alakítja a szegmentált címet lineáris címmé.Az ehhez szükséges idő egy órajel ciklus lehet maximálisan
- Lapozóegység : Ez a szegmentáló egység által szolgáltatott lineáris címeket alakítja fizikai címekké. Ha a lapozás nem engedélyezett, a lineáris cím azonos a fizikai címmel. Ha a lapozás engedélyezett, akkor a lineáris címterületet 4Kb-os lapnak nevezett blokkokra osztja. A lapok különböző fizikai címekre helyezhetők el

# 80486-os processzor

## Eltérés a 80386hoz képest

- Numerikus adatfeldolgozó egység (FPU)
- lebegőpontos utasításvégrehajtó egység
- A BIU csak akkor aktiválódik, ha a feladatot cache nem képes ellátni

## 486-os cache-je

Mindössze 8Kb, ezért igen intelligensen képes ezt kihasználni.Nincs szétosztva külön adat és utasítás részére

### Általános adatai

Géptípus | Pentium
Processzortípus | Pentium
Regiszterméret | 32 Bites
Regiszterek száma |
Adatbusz | 64 bites
Címbusz | 32 bites
Órajelfrekvenciák | 50,60,66,75,83,100
Koprocesszor | A processzorban
Processzor Helye | Socket7
Pipeline | 2 db, 1 integer egység

### Technikai információk

Cache | 2x8Kbyte
Tranzisztorszám | 3.3 millió
CPU Voltage | 2.7V

## Arhitektúra Az Intel ezen processzor működését egyértelműen meghatározza a szuperskalár architektúra, azaz ez a processzor egy órajel ciklus alatt képes több (pontosan 2) utasítás végrehajtására (gyakorlatilag egyszerre). Ezt az úgynevezett Pipeline-jaink keresztül éri el.Ez megkétszerezi az előnyét az Intel 486 processzorokhoz képest, hiszen az integer egység a két integer utasítást egyszerre hajtja végre. ### A Pipelineok 5 végrehajtási szintre tagolódnak : Prefetch (PF) Utasítás dekódolás (D1) (Decode Stage 1) Címgenerálás (D2) (Decode Stage 2) Végrehajtás (E) (Execute) Visszaírás (WB) (Write Back) Ez mindkét Pipelinera érvényes. ### INTEGER egység : U Pipeline : elsődleges pipeline V pipeline : másodlagos pipeline,hasonló az elsőhöz,de itt már megszorítások lépnek fel, ami korlátozhatja az optimalizálás hatásfokát. Ez figyelhető meg az 1.2-es ábrán. Képes az utasítások elő betöltésére (Intruction Prefetch), azaz az utasítások kódjának a magasabb címekről történő előzetes beolvasása a processzorba, még a végrehajtást megelőzően.Célja az utasításvégrehajtás átfedése. Amikor az utasítás a prefetchből átkerül a decoder-be a pipeline készen áll a következő utasítás végrehajtására, ez az "utasítás párosítás",ennek feltétele, hogy mindkét utasításnak egyszerűnek kell lennie, mindkét pipeline tartalmaz saját ALU-t, címgenerátor, adatcache interface-t. Ezt szemlélteti az 1.3-as ábra. |

## Cache és memóriakezelés

8 Kb-os cachekkel rendelkezik, külön az utasításoknak és külön az adatoknak (azaz 2*8K=16K-s a Pentium processzorok L1 Cache-je) ezek kétutas csoport associativ szervezésűek, támogatják a directmap eljárást. A cache vonalak 32 bájtosak, s mivel két ilyen van a pentium 2*32=64 bit széles busszal rendelkezik.
Az adatcachek két interface van, minden pipelinehoz egy-egy, így egy órajel ciklus alatt két külömböző művelet is képes felhasználni ugyanazt az adatot.

- Write Back cache : Ha az adat éppen akikerül a cacheből akkor a processzor az adatot visszaírja a főmemóriába.
- Write Throught cache : Ha a proci az adatot egyidejűleg a főmemóriába is és a cachebe is beírja.

MESI (Modified,Exclusive,Shared,Invalid) protokoll szerint jár el.Ez nagyon fontos a multiprocesszoros rendszerekben.

### MESI protokoll

Mint már említettem a fentiekben leírt cache "konzisztencia" ezen az elven működik, akkor lássuk, hogy mit is takar ez a "misztikus" :)) név.Az alapproblémát az okozta, hogy azokban a rendszerekben, ahol egynél több processzort kapcsolnak össze multiprocesszoros rendszerekké (már itt látszik az Intelnek azon törekvése, mely szerint a Mainframek világába is be kíván törni, kegyetlen erős szervereket létrehozva) gyakran előfordul, hogy több processzornak egyszerre ugyanarra az adatra van szüksége, erre kínál megoldást a MESI. Arról van szó, hogy a cache vonalakon végrehajtott művelet szerint (amit a CPU csinált) 4 féle állapotot definiál, ezek az állapotok :

- Módosított állapot (Modified) (M)
- Kizárólagos állapot (Exclusive) (E)
- Megosztott állapot (Shared) (S)
- Érvénytelen állapot :)(Invalid) (I)

Ekkor viszont el kell dönteni, hogy egy cahce írás során kell-e frissíteni a főmemóriát, és ha igen, akkor mikor és hogyan.Ennek a problémának a megoldására az Intel mérnökei kétféle "stratégiát" dolgoztak ki.

### Főmemória frissítési eljárások :

- Átírás (Write Throught) : A cache vonalba történő írásigény esetén a főmemória és a cache is frissül.Ez grafikus puffernél hasznos.
- Visszaírás (Write Back) : A cahe vonalba történő írásigény esetén a cache memóriát frissíti és a főmemóriát nem, ez csökkenti a buszforgalmat a felesleges memória írások kiküszöbölésével. A cache memóriába történt írások nem íródnak ki rögtön a rendszermemóriába, hanem csak akkor ha legközelebb szükség lesz a cache vonalakra.

A belső kesek együttműködnek a külső cache-kel, mind a Write back mind a Write Trought módban, ez szoftveresen vagy hardveresen vezérelhető.
Lehetőség van arra is, hogy a memória akérmelyik eljárással kezelhatő legyen, ezt az eljárást akár hardver de akár szoftver is vezérelheti.

## Branch Target Buffer (BTB)

Eddig szándékosan nem említettem a pipeline technika egy hátulütőjét, ez pedig az, hogy a CISC (Complex Intruction Set Computer) felépítésből következően (mivel az utasítások változó hosszúságúak és lefutási idejűek, nem képes kiszámolni, hogy hol fog kezdődni a következő utasítás) egy pipeline azt feltételezi (mert nem képes jobbat feltételezni :)) ), hogy a következő utasítás amit neki le kell futtatni, az a következő memóriacímen levő utasítás (sorban...) (így képes az előbetöltésre) ezért nem szereti az olyan utasításokat, amik a maga kis "gondolatmenetéből" kizökkentik (mint pl.:JMP (Jump),feltételes elágazás).Ekkor az fordul elő, hogy nem az az utasítás fog végrehajtódni ami a memóriában a következő, hanem egy - a memóriában teljesen máshol levő utasítás.Ennek ellensúlyozására az Intel mérnökei létrehoztak egy cache-t, amely megpróbálja előrejelezni, hogy a programban feltételes elágazás mely ága fog végrehajtódni (pl.:feltételezi, hogy az 'igaz' ág fog érvényre jutni,mivel a feltételek a legtöbb esetben igaz szokott lenni és a programozó is többnyire erre számít). Ez a Brach Target Buffer (BTB)
Ezért nagy jelentősége van az utasítások előrejelzésénél (Branch Prediction). Def.: az utasítás előrejelzés az a technika mely során az általa biztosított információkkal apipelineokat maximális sebességel lehet használni
Ez a módszer tulajdonképpen azt próbálja meg meghatározni hogy melyik programág (Branch) fog végrehajtódni.Amikor a processzor elér egy elágazáshoz, ekkor a BTB feljegyzi az utasítást és az illető Branch ugrási címét is.Ezalapján jósol a processzor, ha a jóslat bejön akkor mindenképpen időt takarítunk meg a cache által.

## A Pentium lebegőpontos egysége

Pentium igen fejlett, jól megtervezett lebegőpontos számítást végző egységgel rendelkezik, mely igen gyorssá teszi. Órajelenként 1 lebegőpontos számítást képes végezni a 8 szintes Pipeline egység.

### Lebegőpontos pipelineok

Az utasítás először az "egész egység" pipelinjaiban kezdődik,majd innen veszi át a végrehajtást az FPU, amely mint mondtuk 8 szintű. A nyolc szint úgy épül fel, hogy az első 4 szint teljesen megegyezik az INTEGER egység első 4 szintjével (PF,D1,D2,E) A következő 4 pipeline a következőképpen oszlik fel :

### Lebegőpontos végrehajtó egység Kerekítő egység Regiszterbe író egység ## Miért olyan gyors a Pentium ? Szuperskalár felépítés: egyértelmű, hogy miért... A cache-ek (külső és belső) szétválasztottaká váltak Write Back Cache FPU 64 bites adatbusz a memória felé Burst Cache : Egy ciklus alatt 256bit hosszú csomagok tölthetőek be a cacheből Számos ALU utasítás hardveres megvalósítású Támogatja a nagy lapméretekkel történő lapozások (az eddigi 4K helyett mostmár akár 4Mb is lehet) Viszont szólni kell egy kicsi kis "bug"-ról, ez pedig az F0. ## Multiprocesszoros Szerverek A Pentium támogatja a Multiprocesszoros rendszereket olyan szempontból, hogy beléjük építettek egy úgynevezett APIC (Advanced Programmable Interrupt Controller) megszakítás vezérlőt. |

## Adatok védelme

A már említett hibadetektálás 2 szinten hajtódik végre :

- Paritásvizsgálat a külső lábakon
- Paritásvizsgálat a a szilicium lapra integrált memória egységeken (cache-k,bufferek,mocrokód ROM)

Ezt szolgálja még a funkcionális redundancia ellenőrzés (Functional Redundancy Checking (FRC). Ehhez vizsont két chip szükséges, az egyik a Master a másik a Checker.
A checker mikor befejezi a számítását összehasonlítja a saját eredményét, és ha annyi akkor annyi, akkor nincs baj.Ezalapján matek dolgozat közben is FRCzünk,csak nem tudunk róla ... ;). Ennek a hatásfoka 99% felett van,mivel nagyon ritkán fordul elő az az eset, hogy mindkét chip egyszerre ugyanúgy rontsa el a számításait.

## Az Intel Pentium processzor módjai

Tartalmazza a már megismert módokat, azaz azokat amelyek már a 386 SL-nél megismerhettünk.

- Valós mód (RM)
- Védett mód (P-Mode)
- Virtuális Valós Mód (VRM)
- Rendszer menedzselő mód (System Management Mode) (SMM)

# NexGen Nx586 Processzor

Ez a processzor eléggé speciális felépítésű, így nem is lábkompatibilis a Pentium processzorokkal.Használatukhoz speciális alaplapra van szükség, talán ennek köszönhető, hogy nme is terjedt el igazán, így a szaküzletekben sem találkozhatunk vele.Ennek ellenére egy nagyon gyors processzort sikerült alkotniuk a NexGen szakembereinek.Alapjában véve sem a 486osra, sem pedig a Pentiumra nem hasonlít, annál inkább viszont az Alpha processzorokra.Furcsaságai ott kezdődnek, hogy a másodszintű cache-t a processzor lapkára integrálták.
Az Nx586-ban egy 64 bites busz áll rendelkezésre a matematikai processzorral és egy pedig a külső SRAM-okkal való kommunikációra.Létezik még egy harmadik 64 bites busz is, ez pedig az összes többi eszközzel való kapcsoalttartásra hivatott.A cache-busz frekvenciája megegyezik a CPU frekvenciájával.Teljes implementációt biztosít az X86 utasításkészletnek, méghozzá ezt RISC86-os architektúrával teszi valós időben.Ráadásul mindezt hardveresen emulálja (nme úgy mint a pl.: az Alpha processzorok).Ezzel jelentős sebességnövekedést ér el.RISC utasítait felruházták az X86-osok arhitektúrájával.

### Regiszterei

8 db általánok felhasználású regiszere van, amit viszont azon nyomban leképez 32 fizikai regiszterré (mivel az Alphákban is 32 regiszter van).
Ez az eljárás, amit regiszter átnevezésnek nevezünk, biztosítja, hogy a pipelineok ne akadjanak el, így a processzor a BTB által feltételezett ágon fut tovább, az ugrási feltételek után pedig kiértékeli őket.

### Integer egység

Hasonlóan a Pentium processzorokhoz, ez is rendelkezik integer egységgel, méghozzá 2-vel.Az egyik az egész típusú RISC86os utasításokat hajtva végre, a másik ez idő alatt más egyciklusos utasítások hajt végre. A dekóder egység rendelkezik egy "betöltés kiegyenlítő" algoritmussal, és ennek segítségével irányítja az utasításokat valamelyik INTEGER-egységre.A RISC86 betöltő és tároló utasítások a CÍM-egységbe kerülnek, amely kiszámítja a cél címet, és gondoskodik az X86-os szabvány szerinti fordításról. Mivel a chip csak egy egyszerű CÍM-egységet tartalmaz, ciklusonként csak egy betöltő, vagy tároló utasítás hajtódhat végre.
A processzor használja a Brach Target Prediction és az "elméleti futtatás" technológiáját is. Ha a processzor találkozik egy programággal, először megbecsüli a végrehajtásához szükséges időt, és majd később kezdi el az utasítások végrehajtását. Ezt a módszert nevezzük elméleti végrehajtásnak.A BTB elég jól működik : általános jellegű kódok esetén a helyes előrejelzés 90% körüli.A processzor 2x16 Kb cache-t tartalmaz (ez a Pentiuménak kétszerese), az egyik az adatoknak, a másik az utasításoknak, ahogy azt már megszokhattuk.A processzor támogatja Write-back és a Write-Trought eljárásokat, sőt a cache támogatja az önmódósító kódokat is.
Dióhélyban ennyit szerettem volna elmondani erről a processzorról.

# Cyrix M1 processzor

Másnéven ez volt az a bizonyos 6x86os processzor.

## INTEGER egység

Itt is megtalálható a megszokott pipeline egység, viszont itt két pipeline egység szorosabban együttműködik, ezért ezt a technológiát Szuperpipeline technikának nevezzük.
0.5 mikronos technológiát használnak. 32 db általános célú regiszter található benne, így többet tud tárolni, kevesebbszer kell a memóriához nyúlnia adatért.
Emiatt általában csurig tele van adattal ami gyorsabb futást tesz lehetővé. Jó Branch Prediction.
Cache terén marad a 8-8as felosztás,tehát 8Kb az adatnak és 8Kb az utasításoknak szolgál.Rendelkezik egy 16Kbos duálporton cache-el, amibe viszont mindkettő jöhet. Ez a cache alapvetően gyors, így maga a processzor is meglehetősen gyorssá válik. nem megoldott viszont a két szuperskalár pipeline függőségi viszonya, hiszen annyira egymásra vannak utalva, hogy képesek egymást bevárni, ez lassulást eredményezhet.Ezt úgy oldották meg, hogy a 32 regiszterbe letárolják a végeredményeket, és a másik pipeline ha éppen kellene az eredméyn, akkor onnan olvassa ki.
Pipelinejai az X,Y névre hallgatnak.Előfordulhat az az eset, hogy kiegyenlítetlenség lép fel a két pipeline között, így lassul a processzor, hiszen az egyiknek be kell várnia a másikat. Ezt úgy oldották meg, hogyha az egyik pipelineban gyorsabb a műveletvégrehajtás akkor másikból az utasítások kiléphetnek a pipeline végrehajtási sorrendből, és lefuttatják magukat a szabadon levő pipelineval.

### Technikai Információk

Terület | 141 négyzetmiliméter
Gyártási technológia | 0.35 mikronos
Tranzisztorszám | 4.5 millió
Cache méret | 2x16Kb
CPU Voltage | kettős : 2.8V (Internal),3.3V (I/O)
|

Ennek a szintén varázslatos 3 betűnek nagy hatása volt a processzoriparágra.
Jelentése MultiMedia Extension.Azaz multimédia kiterjesztés, azaz arról van mindössze szó, hogy a multimédiás alkalmazások térhódításának következtében az alkalmazásoknak megnövekedett az erőforrásigénye, mégpedig drasztikus mértékben, szükségessé vált egy olyasmi kitalálása ami kicsit meggyorsítja a multimégiás alkalmazásokat( hang - és képfeldolgozás,2Ds és 3D-s számítások, hangszintézis stb...) ez az iparág minden területén érvényessé vált, gondolok itt a nagy teljesítményű és nagykapacitású háttértárolók, gyors SDRAMok (Syncronized Dinamic Random Access memory) megjelenésére.De mindezek közül a processzorok terén bekövetkeződött változások a legjelentősebbek, így itt is erre kívánok kitérni. A már jól ismert módszert alkalmazták.A probléma lefordítva az volt, hogy X műveletet (ami sok) le kell redukálni Yra, így kevesebb utasítással tudjuk elvégezni ugyanazt a műveletet, tehát gépünk gyorsul.De hogy tudjuk elérni azt, hogy kevesebb legyen a műveletek száma ?
Úgy, hogy új utasítások definiálunk, mégpedig olyanokat amik a multimédiás számítások során lehetnek hasznosak, pl.: interpolálások,kerekítések,lebegőpontos számítások, gyors osztások,szorzások...
Ezek az új műveletek nagyon jók, de csak úgy érünk el teljesítménynövekedést (ami az Intel állítása szerint 60%-al haladja meg az azonos órajel-ferekvenciájú Pentiumok teljesítményét a multimédiás és kommunikációs alkalmázokban) , ha ezeket az utasítások használjuk a programfejlesztés során, ehhez viszont át kell írni a meglévő alkalmazásokat, ha azt akarjuk, hogy kihasználják az MMX által nyújtott előnyöket. Ezért jelentek meg ssorran - főleg a játék - fejlesztők site-jaink a multimédiás programokhoz a patch-ek, kiegészítések.
Ez úgy érték el az Intel fejlesztőmérnökei 1997 elején, hogy a Pentium processzorba építettek egy MMX egységet(később egységeket), amik tartalmazzák az új utasításokat.
Az MMXes utasítások 57en vannak és így egy lépésben hajthatók végre azok az utasítások amik eddig egy jó tucatnyi lépésben.
Ennek ellenére a már meglévő nem MMXes alkalmazások körülbelül (az Intel mérései szerint) 20%os teljesítménynövekedést eredményeznek.
a kérdés mindössze annyi, hogy miért ?
Azért, mert a lapkán már 32Kbájtos cache található (pontosan duplája a Pentiuménak), ezzel a processzornak kevesebb gondja van azzal, hogy a lassú háttértárral és főmmeóriával a kapcsolatot fenntartsa.
szintén a gyorsításhoz sorolható az a tény is, hogy csökkentek a várakozások is.

### Szoftveres támogatás DirectX 3.0 : játékok terén és azon alkalmazások terén amik ennek az eljárásait és hívásait használják.A DirectX és benne a Direct3Dvel egy API (Application Protokoll Interface), amit a Microsoft dolgozott ki azzal a céllal, hogy szűnjök meg a hardverspecifikusság a (alkalmazás)fejlesztők oldalán, mert ők ezt elvégzik ezt.Készítettek egy felületet ahova a gyártók integrálják a hardver drivereit, majd a fejlesztőknek mindössze annyi a feladatuk, hogy az onnantól már egységes DirectX-es hívásokat és megszakításokat használják. Windows 95 OSR2 : rendszerszintű támogatás Kettős feszültséget használ, a belső üzemeléshez 2.8V-ot, az I/O műveletekhez 3.3V-ot annak érdekében, hogy külön hűtésre ne legyen szükség. Azonban a gyakorlati tapasztalat az, hogy mégis jobb az MMX processzorrra egy brutális Pentium Turbo hűtőventillátor.Ezért csak olyan alaplapokba helyezhető, ami támogatja a kettős tápfeszültséget (MMX kompatibilitás) (VRE felszültségszabályozó).Ilyen okok miatt készült el az MMXek Overdrive változata, amely már magának állítja elő a kétféle feszültséget. Az új 57 utasítás SIMD (Single Instruction, Multiple Data), azaz egy utasítással több adaton lehet műveletet végezni. |

A hatékonyabb számítás érdekében 4 db új adattípust definiáltak. ### Új adattípusok packed byte (64 bites bájt típus) packed word (64 bites szó típus) packed doubleword (64 bites duplaszó típus) packed quadword (64 bites 4szó típus) Az MMX technológia új, tömörített 64 bites formátumokat definiált... ### Memória adatformátumok 8as tömörített: áll 8 db bájtból (8 bites) 4es tömörített: áll 4 db wordből (16 bites) 2es tömörített: áll 2 db doublewordből (32 bites) duplaszóból (doubleword) ez a 64 bit 0-tól 63ig van számozva.Az alsó bites alul, a felő bitek pedig felül foglalnak helyet, az alsó és felső rendszer ugyanúgy megmarad, mint korábban (pl.: AL+AH=AX) Az új regiszterek szintén 64 bitesek, elérésük ugyanúgy megy, mint a memóriáé, azzal a külömbséggel, hogy itt kétféle módon kezelhetőek, egyrészt 32 bitesen, vagypedig egyben 64 bitesen. Továbbá csináltak 8 db új 64 bites regisztert (MM0 - MM7).Ezek a Float Point Registers néven ismertek

### Arhitektúra

Itt is jelentős módosítássokkal kell számolnunk.
1. Új (F) Fetch pipeline lépcső
2. Külön pipeline az MMX utasításoknak
3. Továbbfejlesztett előrejelző algoritmus (BTB)
4. 16 K-s L1 cache, 4 egyidejű hozzáféréssel
5. 4 db mindkét pipe által közösen használt Write Buffer

## Az Pentium MMX processzor Pipelinejai

### hagyományos Integer pipelineok (U,V)

Az MMX utasítások számára készült egy saját pipeline,ahol csak az MMXes utasítások hajtódnak végre. egység kapott egy Fetch (F) lépcsőt a PreFetch (PF) és a Instruction Decode (ID) közé. A byte-okat a PF lépcső olvassa be és választja szét utasításokra a F lépcső számára.
Az ID oldalán ezek az utasítások ezután párosával kerülnek kiolvasásra.

### Az új MMX Pipeline

Ennek pipelinenak 5 lépcsője van :

- MR/W: MMXel kapcsolatos memória olvasások
- Mex: Itt kezdődik a szorzás (ami 3 órajelet vesz igénybe)
- Wm/M2:egy órajeles utasítások eredményének kiírása történik, vagy ha az utasítás egy többlépcsős szorzás akkor annak a második lépcsője
- M3: itt már csak többlépcsős szorzások vannak
- Wmul: a szorzás befejeződik, itt íródnak ki az eredmények

A processzor magja továbbra is CISC maradt.

## MMX Utasítások

### Az MMX új SIMD utasítások kategóriái

- Új aritmetikai utasítások:szorzás, osztás összeadás, kivonás, szorzás-hozzáadás
- Új konverziós utasítások:adatszavak becsomagolása és kibontása packed formátumba/-ból
- Logikai utasítások:és,vagy,...stb
- Shift utasítások
- összehasonlító utasítások
- Új átviteli utasítások: átvitel a regiszterek között, és a memóriából memóriába
- Üres utasítások(EMMS): ez üres, ez a "nemcsinálok semmit" utasítás

Ezek az új utasítások párhuzamosan akár egyszerre több elemen is végezhetők.

MMX Utasítások
Név | Operandus típusok | Bájt 1 | Bájt 2 | Bájt 3, [4]
EMMS | Nincs | 0F | 77 | mod-rm, [sib]
MOVD | register, memory/iregister | 0F | 6E | mod-rm, [sib]
MOVD | memory/iregister, register | 0F | 7E | mod-rm, [sib]
MOVQ | register, memory/register | 0F | 6F | mod-rm, [sib]
MOVQ | memory/register, register | 0F | 7F | mod-rm, [sib]
PACKSSDW | register, memory/register | 0F | 6B | mod-rm, [sib]
PACKSSWB | register, memory/register | 0F | 63 | mod-rm, [sib]
PACKUSWB | register, memory/register | 0F | 67 | mod-rm, [sib]
PADDB | register, memory/register | 0F | FC | mod-rm, [sib]
PADDD | register, memory/register | 0F | FE | mod-rm, [sib]
PADDSB | register, memory/register | 0F | EC | mod-rm, [sib]
PADDSW | register, memory/register | 0F | ED | mod-rm, [sib]
PADDUSB | register, memory/register | 0F | DC | mod-rm, [sib]
PADDUSW | register, memory/register | 0F | DD | mod-rm, [sib]
PADDW | register, memory/register | 0F | FD | mod-rm, [sib]
PAND | register, memory/register | 0F | DB | mod-rm, [sib]
PANDN | register, memory/register | 0F | DF | mod-rm, [sib]
PCMPEQB | register, memory/register | 0F | 74 | mod-rm, [sib]
PCMPEQD | register, memory/register | 0F | 76 | mod-rm, [sib]
PCMPEQW | register, memory/register | 0F | 75 | mod-rm, [sib]
PCMPGTB | register, memory/register | 0F | 64 | mod-rm, [sib]
PCMPGTD | register, memory/register | 0F | 66 | mod-rm, [sib]
PCMPGTW | register, memory/register | 0F | 65 | mod-rm, [sib]
PMADDWD | register, memory/register | 0F | F5 | mod-rm, [sib]
PMULHW | register, memory/register | 0F | E5 | mod-rm, [sib]
PMULLW | register, memory/register | 0F | D5 | mod-rm, [sib]
POR | register, memory/register | 0F | EB | mod-rm, [sib]
PSHIMD* | register, immediate | 0F | 72 | mod-rm, imm
PSHIMQ* | register, immediate | 0F | 73 | mod-rm, imm
PSHIMW* | register, immediate | 0F | 71 | mod-rm, imm
PSLLD | register, memory/register | 0F | F2 | mod-rm, [sib]
PSLLQ | register, memory/register | 0F | F3 | mod-rm, [sib]
PSLLW | register, memory/register | 0F | F1 | mod-rm, [sib]
PSRAD | register, memory/register | 0F | E2 | mod-rm, [sib]
PSRAW | register, memory/register | 0F | E1 | mod-rm, [sib]
PSRLD | register, memory/register | 0F | D2 | mod-rm, [sib]
PSRLQ | register, memory/register | 0F | D3 | mod-rm, [sib]
PSRLW | register, memory/register | 0F | D1 | mod-rm, [sib]
PSUBB | register, memory/register | 0F | F8 | mod-rm, [sib]
PSUBD | register, memory/register | 0F | FA | mod-rm, [sib]
PSUBSB | register, memory/register | 0F | E8 | mod-rm, [sib]
PSUBSW | register, memory/register | 0F | E9 | mod-rm, [sib]
PSUBUSB | register, memory/register | 0F | D8 | mod-rm, [sib]
PSUBUSW | register, memory/register | 0F | D9 | mod-rm, [sib]
PSUBW | register, memory/register | 0F | F9 | mod-rm, [sib]
PUNPCKHBW | register, memory/register | 0F | 68 | mod-rm, [sib]
PUNPCKHDQ | register, memory/register | 0F | 6A | mod-rm, [sib]
PUNPCKHWD | register, memory/register | 0F | 69 | mod-rm, [sib]
PUNPCKLBW | register, memory/register | 0F | 60 | mod-rm, [sib]
PUNPCKLDQ | register, memory/register | 0F | 62 | mod-rm, [sib]
PUNPCKLWD | register, memory/register | 0F | 61 | mod-rm, [sib]
PXOR | register, memory/register | 0F | EF | mod-rm, [sib]

### Felhasznált irodalom

- Agárdi Gábor&Hadi János : Pentium(tm) - Szakkifejezések,ábrák egy része
- Intel Development's Manual-ok