2011. május 27., péntek

A mai számítógépek (IBM PC) felépítése (3. CPU, azaz a processzor)

Miután kellőképpen felvezettük a témát (sőt talán túlságosan is :D), nézzük meg elsőként az egyik legfontosabb hardverelemét a számítógépünknek, magát a processzort!



Az IBM PC számítógépek eredetét taglaló bejegyzésekben már bizony sok processzorral találkoztunk, egyes típusok nevei is talán már ismerősen csengenek (mint pl. Pentium, Celeron, Core 2 Duo, Athlon, Duron stb.) Mit is kell ezekről tudni?

CPU fogalma

A rövidítés a "Central Processing Unit"-ból ered, azaz központi feldolgozó- vagy számítóegység. Nevéből nem nehéz kitalálni, hogy minden szál ennek az egységnek a "kezében" fut össze. Vezérli a többi hardvereszközt, felügyeli a kommunikációt közöttük, ő vezérli a memória elérését is és elvégzi a szükséges számítási műveleteket. Fizikailag egy magas integráltságú (több millió tranzisztor pár négyzetcentiméteren) elektronikus chipről van szó, amely az alaplapra csatlakozik. Enélkül abszolút használhatatlan lenne a gépünk (persze ez nem csak a CPU-ra igaz :) ).

Részegységei

Láthattuk, hogy elég sok feladat hárul egy processzorra. Fontos tudni, hogy minden feladatkörhöz külön részegysége is van, a főbbeket nézzük most meg.
  • ALU
Kibontva "Arithmetic Logic Unit", azaz aritmetikai-logikai egység. Ez végzi el a logikai és matematikai számításokat. Tekintve hogy a számítógép minden utasítást ilyen műveletekre fordít le kettes számrendszerben, elég sok munkája van :) A régebbi típusok egyszerű ALU-k voltak, más részegység nélkül, és működési elvüket Neumann János írta le az EDVAC fejlesztésének idején. Amikor a gép egész számokkal dolgozik, egyszerű bitműveleteket (ÉS, VAGY, stb.) végez, akkor ezt a részegységet használja leginkább.
  • FPU
"Floating-Point Unit", azaz lebegőpontos (műveletvégző) egység. Lebegőpontos számokkal dolgozik, ami kb. annyit jelent, hogy törtekkel, tizedesekkel kell számolnia, ami az ALU számára nagyon bonyolult és megterhelő feladat lenne, ezért erre ez a speciális egység ügyel. Kezdetben nem volt része a CPU-nak, majd kiegészítő (társ) processzorként jelent meg, később pedig egy tokba integrálták az ALU-val. Leggyakoribb műveletei az összeadás, kivonás, szorzás, osztás, négyzetgyök-számítás, trigonometriai függvények kiértékelése és egyéb bonyolultabb matematikai műveletek. Az egyszerűbb egész számos műveleteket továbbra is az ALU végzi.
  • CU
"Control Unit", azaz vezérlőegység. Ő felel az ALU, FPU, memória és az egyéb hardverelemek közti kommunikációért. Utasításokat tölt be a memóriából, dekódolja azokat, majd végrehajtja az ALU / FPU segítségével. Vezérlőjelek segítségével kommunikál a többi eszközzel. Ha egy megszakítás következik be (olyan esemény, amelynek kezeléséhez a processzornak az adott feladatot félbe kell hagynia, ilyen lehet egy egyszerű billentyű-lenyomás is. IRQ azonosítókkal jelöljük őket), akkor ezt is a vezérlőegység kezeli majd le.
  • Regiszterek
A regiszterek nagyon hasonlítanak a memóriákhoz (amiket persze még nem tárgyaltunk :D Ez a szép benne, hogy összefüggnek a dolgok, másként nem is lenne értelme ugyebár). Ezek olyan kis tárolók (2-4 bájt körüli méret), amelyek a processzorba vannak integrálva, nagyon gyorsan elérhetőek és írhatóak, de véges számú áll csak belőle rendelkezésre (mai processzoroknál ez úgy néhány tíz, de akár száz körüli is lehet). Ez a processzor "pillanatnyi emlékezete", ide teszi be az utasításokat, az eredményeket és részeredményeket, hogy éppen hányadik utasításnál tartott, nagyobb adatok a memóriában maradnak. Ideális esetben csak ezekkel a kis rekeszekkel számolgat, ekkor a leggyorsabb a működése. Ha megszakítás történik (lásd fentebb a CU-nál), akkor a memóriába menti le az összes regiszter értékét, elintézi a kérelmet, majd visszatölti a regiszterek állapotát és folytatja működését.
  • Cache
Becsületes nevén gyorsítótár. Ezt majd több másik eszközben is megtalálhatjuk, általánosságban az a feladata, hogy a különböző sebességű eszközök között egy átmeneti tárat képezzen, csökkentve az elvesztegetett időt. Például, a processzor a leggyorsabb hardverelem, a memória már egy nagyságrenddel lassabb. Ha a memóriából kell olvasnia, a processzor nagyon gyorsan képes lenne rá, ha a memória tudná elég gyorsan szolgáltatni az adatokat. Ha van egy kis cache a processzorban, akkor ez a kettő közötti sebességen működik valahol, előretölti az adatokat, és így kevesebbet kell várakoznia a CPU-nak. A mai processzorokban akár három szintű gyorsítótár is lehet (Level1 azaz L1, L2 és L3 cache). Az L1 a legkisebb és leggyorsabb (~16-128 kilobyte), majd a többiek fokozatosan lassabbak és nagyobbak, az L3 cache már több megabyte-os szokott lenni, és sokszor már nem is a processzoron van, hanem az L2 cache és a memória között. Ezekről annyit kell tudni, hogy az L1 cache mérete nagyban befolyásolja a processzor működési sebességét, az L2 és az L3 már nem olyan kritikus.
  • MCC
"Memory Chip Controller", egyszerűen mondva memóriavezérlő. Azért őt hagytam a végére, mert ezek régebben külön áramkörök voltak az alaplapon, ám az utolsó néhány generáció (AMD Athlon 64, AMD Opteron, Intel Core i7) óta már ezt is a processzorba integrálva találjuk, és itt már IMC-nek, azaz "Integrated Memory Controller"-nek hívjuk. Ha egy tokon belül vannak a CPU-val, kisebb a késleltetés és gyorsabbá válnak a memóriaműveletek, azonban a processzor csak olyan memóriát fog támogatni, amilyenre a memóriavezérlőt felkészítették (új memória típus esetén nem csak az alaplapot, hanem a CPU-t is cserélni kell). Feladata, hogy írja, olvassa és frissítse a memóriát (majd a memóriáknál látni fogjuk, hogy folyamatosan frissítgetni kell a tartalmát, különben "elfelejti" azt).

Cyrix 6x86


Működése

Nézzük meg egy kicsit egyszerűsítve, hogyan is működik egy processzor egy utasítás végrehajtásának példáján keresztül. Először is, a regiszterek állapota alapján beolvassa a következő utasítást. Ezt dekódolni kezdi, felbontja adat részre és utasításra. Az típusonként változó, hogy az adat is benne van az utasításban, vagy esetleg csak annak a címe, vagy nincs is itt adat.

megj.: hogy nincs is adat az utasításban sem annak a címe, úgynevezett stack-architektúrákban alapesetnek számít. Ilyenkor a memóriát úgy látja a processzor mint egy "adathalmaz", amelynek mindig csak a legtetejéhez fér hozzá. Ekkor ha egy műveletet kell értelmezni, az nem tartalmazza az adatokra a hivatkozást, hanem az automatikusan a legfelső elemre / elemekre hajtódik végre.

Az ALU és FPU számára ekkor már kiderül az utasításból, milyen műveleteket kell végrehajtani. Nincs más hátra, mint a memóriából beolvasni a regiszterekbe az adatokat, ha még nincsenek ott (adat alatt itt elemi adatokat, pl. két egész számot kell érteni). Ekkor már elvégezhetjük az utasítást, az eredményét pedig eltároljuk egy regiszterben. Még beállítjuk a következő utasítás címét, hogy a CPU folytatni tudja a működését, és végeztünk is.

Természetesen érkezhetnek megszakítások a művelet közben, ekkor el kell mentenünk a regiszterek értékeit a memóriába és azt is hogy melyik utasításnál tartottunk, le kell reagálni a megszakítást, majd visszatölteni az elmentett adatokat és folytatni a munkát.

Jellemzői
  • Órajel
Kezdetben a processzorok legfontosabb mérőszáma volt, de mára veszített jelentőségéből. MHz-ben (megahertz) vagy ma már inkább GHz-ben (gigahertz) szokták megadni, és azt mutatja meg, hogy egy másodperc alatt a processzor hány elemi utasítást (olyat, amely az utasításkészletében szerepel) képes végrehajtani. Pl. egy 3 GHz-es processzor egy másodperc alatt mintegy 3 milliárd elemi utasítás elvégzésére képes! Órajel azért is létezik, mert a részegységek számára szükség van valamilyen ütemezésre, összehangolt működésre, ezt pedig egy kvarckristály adja meg, amely 100 MHz körüli frekvencián rezeg, ezt "szorozzák" fel a CPU sebességéhez. Minden egyes ilyen kis ütemben tehát egy elemi művelet végrehajtódik. Nyilván ha ez az órajel magasabb, egy másodperc alatt több művelet is elvégezhető (viszont ehhez biztosítani kell, hogy a leglassabb művelet is véget érjen az órajel végére, különben hamis adatokat fogunk kapni). Más limitáció is van, hiszen miután a művelet eredménye megvan, az eredményt vivő elektromos jelnek oda kell érnie a kimenetre.
  • Magok száma
Napjainkban egyre nagyobb jelentősége van annak is, hány processzormagból áll egy processzor. De mit is jelent ez? Mivel az órajelnövelésnek láttuk több limitációját is, nem is beszélve a hőtermelésről és a fogyasztásról, a gyártók más utakat kerestek, így egy processzorba több magot is integráltak. Olyan ez, mintha több kicsi processzor lenne egy tokban. Logikailag ez úgy néz ki, hogy minden mag talál saját L1 cache-t a gyors működés érdekében, de az L2 cache már a magokon kívül, de még a processzoron belül található, működésüket pedig egy szintén magokon kívüli, de még tokon belüli vezérlővel és a magokat összekötő sínnel (adatbusz, ezen kommunikálnak) oldják meg, erről látható itt egy ábra:

Kétmagos CPU logikai vázlata
 Ma már vannak 2,3,4,6,8,16 stb. magos processzorok is, ám azt tudnunk kell, hogy hatékonyan ezt csak akkor lehet kihasználni, ha az alkalmazások készítői erre felkészítik a programot. Napjainkban speciális területeket leszámítva (3D renderelés, tudományos ill. párhuzamos számítások, video kódolás-dekódolás, szerverek) többnyire elegendő két mag is. Ha pedig nem használunk semmilyen multimédiás alkalmazást, többnyire csak netezünk és dokumentumokat nézegetünk, még a két mag is sok: a programok "általános párhuzamosítása" jelenleg is kutatás alatt álló terület.
  • Cache
Már találkoztunk a cache-sel az előző bekezdésekben. Tehát ez egy gyorstár, amely a számítógép részegységei közti sebességkülönbségeket igyekszik áthidalni. A többmagos CPU-knál láttuk, hogy már csak az L1 cache maradt nekünk a magon belül, egy processzor leírásánál ha pl. összesen 64 kilobyte L1 cache-t látunk de négy magos, akkor magonként ez 16 kilobyte cache-t jelent. Az L1 cache a legkritikusabb a sebességre nézve, az L2 cache több mag esetén már közös lesz, míg az L3 még mindig kevésbé jelentős. Durva közelítéssel, egy olyan processzor ami magas órajelen jár, két- vagy többmagos és még pl. L1 cache-ből is egész sokat kapott, már várhatóan elég gyors lesz.
  • FSB órajel
Az FSB nem más, mint a Front Side Bus. Ez köti össze a CPU-t és az északi hidat (az északi hídra kapcsolódik a processzor, a memória és a grafikus busz is, manapság PCI-Express). Ezt úgy kell elképzelni, hogy adatsínek vannak a legfőbb alkatrészek között, és bizony az FSB sebessége mondja meg, hogy milyen gyors lehet ezek között a kommunikáció, ami nagyon lényeges érték és szintén nagyban kihat a CPU teljesítményére. Mára már azonban kezd elavulni a megoldás, és az újabb processzorok és rendszerelemek pont-pont összeköttetésben állnak egymással, így feleslegessé válik egy közös sín használata (ennek a megoldásnak a neve a HyperTransport az AMD-nél és QuickPath Interconnect az Intel-nél.

  • Utasításkészlet
A processzornál amikor azt mondjuk, műveleteket hajt végre, mire is gondolunk? Ezek általában elemi műveletek, mint pl. egy regiszterbe írás, memóriából olvasás, bitműveletek, logikai műveletek, bitléptetés, a négy alapművelet (természetesen bináris számrendszerben értelmezve), megszakítással és vezérléssel kapcsolatos műveletek. A processzor számára értelmezhető utasítások összessége az utasításkészlet. Maga az utasítás pedig a legkisebb kódrészlet, amelyet a processzor még képes értelmezni (utasításrészből és adat- vagy címrészből áll, attól függően hogy az adatot is tartalmazza az utasítás vagy csak annak a címét a memóriában). A ma használt gépeink többnyire az x86-os család tagjai, azaz az x86-os utasításkészlet támogatása a közös nevezőjük, ez köti össze őket. Ettől lehetséges hogy egy 486-oson írt program lefut egy Core 2 Duo-n is, vagy hogy ugyanúgy futnak programjaink egy AMD és egy Intel gépen is. Viszont vannak más utasításkészletek is, mint pl. MMX, 3DNow! vagy SSE, ezek tovább bővítik a processzor tudását amely így még több műveletet megért és multimédiás vagy éppen sok adaton elvégzett, ismételt műveleteknél (attól függ, melyik utasításkészlet mit hivatott segíteni) jelentősen gyorsabban működhet.
  • Gyártó / foglalat
Ha vásárolni szeretnénk processzort, azt tudnunk kell hogy a gyártók általában saját foglalataikat használják, amelyek nem átjárhatóak / nem kompatibilisek egymással. Azért mondom hogy általában, mert a régebbi CPU-knál előfordultak foglalat-kompatibilis klónok is (pl. a Pentium első generációjában, amely után az Intel szépen el is tiltotta a saját foglalatuk használatától a többi gyártót).
Jelenleg az AMD az AM2 és AM3 foglalatokat használja, míg az Intel az LGA775, 1155, 1156 és 1366 foglalatokat.  

Fejlődése nagy vonalakban

Itt már nem is írnám le ezt újra, mivel az IBM PC-k történetéről mesélve részletesen megbeszéltük ezt a témát is, az IBM PC megjelenése után lényegében a processzorokról esik szó.

Remélem nem volt túl unalmas és van aki még ébren van! :D A sorozat következő cikkében egy második, nagyon fontos alkatrészről, a memóriáról esik majd szó.

Forrás:
http://en.wikipedia.org
http://hu.wikipedia.org/wiki/CPU
http://en.wikipedia.org/wiki/CPU_socket 

1 megjegyzés:

Related Posts Plugin for WordPress, Blogger...