Harvard-architektúra

A Wikipédiából, a szabad enciklopédiából
Mark I, részlet

A Harvard-architektúra egy számítógép-felépítési elv, amelyben a programkód és az adatok külön, fizikailag elkülönített útvonalakon közlekednek a processzor felé.

A Harvard architektúra elméleti felépítése

Ez az elv eredetileg a Harvard Mark I (1944) számítógéphez lett kidolgozva. A Mark I az utasításokat 24 bit széles lyukszalagon, az adatokat elektromechanikus regiszterekben tárolta. Ezek a korai gépek korlátozott adattárral rendelkeztek és a központi egység nem adott lehetőséget a programtároló adatként való elérésére. A programokat egy operátor töltötte be, a processzor nem volt képes magától indulni (nem volt bootolás).

A korszerű harvard architektúra alapú számítógépek az adatokat és a programutasításokat elkülönítve tárolják, ami a párhuzamos adatutak miatt teljesítménynövekedést okoz, illetve az adatok és a programkód elkülönülése miatt különféle egyéb járulékos előnyöket biztosít, pl. vírusok írása nehezebb – ez is egy ok, ami miatt a beágyazott rendszerekben előszeretettel használják ezt a felépítést.

A modern processzorok valójában a módosított Harvard-architektúrát valósítják meg, tehát képesek olyan feladatokat is végrehajtani, mint pl. programok adatként való betöltése külső tárolóról, a programkód megváltoztatása (!) és annak elindítása.

A Harvard-architektúrát napjainkban leginkább digitális jelfeldolgozó processzorokban (DSP) és mikrokontrollerekben alkalmazzák.

A modern processzorok tervezésénél felhasználják mind a Harvard-, mind a Neumann-féle architektúra elveit; a modern általános processzorok igyekeznek mindkét elv előnyeit kihasználni; ezenkívül a processzorok belső felépítésében a különböző felépítésű részegységek egymáshoz illeszthetők.

Jellemzők[szerkesztés | forrásszöveg szerkesztése]

Memória[szerkesztés | forrásszöveg szerkesztése]

A Harvard-architektúrában a különböző memóriáknak nem kell közös jellemzőkkel rendelkezniük: a szóhossz, időzítés, sebesség, a kivitelezési technológia, címstruktúra mind más és más lehet. Egyes rendszerekben a program tárolódhat csak olvasható memóriában, miközben az adatok írható-olvasható memóriában helyezkednek el. Más rendszerekben a programmemória nagyságrendekkel nagyobb lehet, mint az adatmemória, ezért az utasításcímek jóval szélesebbek lehetnek (több bitet foglalhatnak), mint az adatcímek.

A Harvard architektúra vezérlési vázlata

Eltérések a Neumann architektúrától[szerkesztés | forrásszöveg szerkesztése]

A tiszta Neumann-architektúrában a CPU bármely időpontban vagy egy utasítást olvas be, vagy írja/olvassa a memóriát; mindkét feladatot nem tudja egyszerre végezni, mivel a programkódot és az adatokat ugyanazon a buszon keresztül éri el. Egy Harvard architektúrájú számítógépben a CPU az adatmemória-hozzáféréssel egyidőben képes egy utasítás beolvasására és végrehajtására, még gyorsítótár nélkül is. A Harvard-felépítésű számítógép ezért gyorsabb lehet ugyanazon áramköri komplexitás mellett, mert az utasításbeolvasásnak és az adathozzáférésnek nem kell egyetlen szűk memória-útvonalon osztoznia.

Ezen kívül a Harvard felépítésű gépek különálló kód- és adat-címtartománnyal rendelkeznek: az utasítás- és adat-címek hiába lehetnek látszólag egyenlők, más fizikailag elkülönülő memóriaterületeket címeznek, amelyekben az értékek akár eltérő bithosszúságúak is lehetnek, pl. 24 bites utasítások és 8 bites adatok.

Eltérések a módosított Harvard-architektúrától[szerkesztés | forrásszöveg szerkesztése]

A módosított Harvard-architektúra felépítése hasonlít a Harvard-architektúrához, de az utasítások és adatok elválasztása nem annyira szigorú, miközben a CPU egyidejű hozzáférése két – vagy több – memóriabuszhoz megmarad. A leggyakoribb módosításban külön adat- és utasítás-cache található, miközben mindkettő ugyanazt a címteret ill. memóriát használja. Amíg a CPU a gyorsítótárakat használja, tiszta Harvard-architektúrájú gépként működik. Mikor ugyanez a gép közvetlenül fordul a memóriához, már Neumann architektúrájú gépként viselkedik, mivel a programkódot adatként vagy fordítva, az adatokat programkódként kezelheti. Ez a módosítás széles körben elterjedt a modern processzorok, mint pl. az ARM vagy akár az x86-os architektúra körében. Erre is gyakran felületesen Harvard-architektúraként hivatkoznak, elhagyva a „módosított” jelzőt.

Egy másik változtatás adatutat nyit a programmemória (ami általában ROM vagy flash) és a CPU között, ami lehetővé teszi a programmemória szavainak csak-olvasható adatként való kezelését. Ezt a technikát különféle mikrovezérlőkben alkalmazzák, pl. az Atmel AVR kontrollerekben. Ezzel lehetővé válik konstans adatok, pl. szöveg, funkció(hívási) táblázatok hozzáférése anélkül, hogy azt előzetesen az adatmemóriába kellene másolni, így meghagyva a gyakran szűkös és energiaéhes adatmemóriát a programváltozók számára. Az adatok olvasására a programmemóriából ekkor speciális processzorutasítások szolgálnak; ez nem ugyanaz, mint amikor maga az utasítás állandókat tartalmaz a programkódban (bár bizonyos esetekben az eredmény hasonló lehet).

Sebességi kérdések[szerkesztés | forrásszöveg szerkesztése]

Az utóbbi években a processzorok sebessége sokkal gyorsabban nőtt, mint a memóriák hozzáférési sebessége, ezért a teljesítmény fenntartása érdekében valahogy redukálni kell a fő memóriához való hozzáférés idejét, ill. összeegyeztetni a processzor sebességével. Ha például a CPU által végzett minden utasítás memória-hozzáférést igényel, akkor a számítógép semmit sem nyer a megnövelt processzorsebességgel – a lassú memória visszafogja, fékezi a processzor teljesítményét („memory-bound” probléma).

(Be)építhető extrém gyors memória, de ez csak kis méreteknél (pl. regiszterek esetén) éri meg, a költségek, fogyasztási és tervezési megfontolások miatt. A jelen állapot szerinti gyakorlati megoldást a gyorsítótárak használata jelenti: a cache egy kisméretű, de nagyon gyors memória, ami a legfrissebb és leggyakrabban hivatkozott adatokat tárolja. Amíg az adat, amire a processzornak szüksége van, a gyorsítótárban van, addig gyorsan elérhető, így nincs akkora lassulás, mint amikor a gyorsítótár a fő memóriából kénytelen olvasni az adatokat.

A Harvard-architektúrájú processzorok legalább két cache-et használnak: az utasítások és az adatok számára.

Belső és külső felépítés[szerkesztés | forrásszöveg szerkesztése]

A modern, nagy teljesítményű CPU-chip kialakítások magukban foglalják mind a Harvard-, mind a Neumann-elvű architektúrák megoldásait. Különösen a Módosított Harvard-architektúra az elterjedt. A CPU cache általában két részre van osztva: utasítás- és adat-cache. A CPU és a cache közötti kapcsolathoz gyakran a Harvard-architektúra szerinti megoldást alkalmaznak, azaz a CPU külön cache-ekből, külön buszokon keresztül olvassa az utasításokat és az adatokat. Tévesztés (cache-miss) esetén azonban az adatot a fő memóriából kell kiolvasni, amely formálisan nincs különálló utasítás- és adatszegmensekre felosztva, bár ez lehetséges, pl. a RAM, ROM és (NOR) flash típusú memóriákat, amelyekből több is lehet, külön memóriavezérlők kezelhetik (pl. játékkonzoloknál).

Így miközben a hardver bizonyos szempontokból a Neumann-architektúrának megfelelően viselkedik, tehát mikor az adat és a kód ugyanazon a memóriavezérlőn keresztül közlekedik, a hardvermegvalósítás mégis kihasználja a Harvard-architektúra előnyeit a gyorsítótárakhoz való hozzáférésnél és a memóriaelérések egy részénél is.

Emellett a CPU-k gyakran rendelkeznek (akár több) írási pufferrel is, ami lehetővé teszi a nem gyorsítótárazott memóriaterületek késleltetett írását; ekkor a memória Neumann-féle tulajdonságai csak akkor kerülnek előtérbe, mikor a CPU utasításokat ír a memóriába adatként és a szoftvernek ellenőriznie kell, hogy az (adat- és utasítás-) cache-ek és az írási puffer szinkronban van-e az éppen kiírt utasítások végrehajtása előtt.

A Harvard-architektúra modern felhasználása[szerkesztés | forrásszöveg szerkesztése]

A tiszta Harvard architektúra alapvető előnye – a több memóriarendszerhez való egyidejű, szimultán hozzáférés – nem érvényesül teljes mértékben a módosított Harvard-architektúrájú processzorokban, a modern cache-megvalósítások miatt. Viszonylag tiszta Harvard-megvalósításokat csak olyan alkalmazásokban használnak, ahol az ár és a fogyasztás csökkenése indokolttá teszi ill. ellensúlyozza a gyorsítótárak elhagyását és a külön adat- és kódterület kezelésének programozási vonzatait.

  • A digitális jelfeldolgozó processzorok (DSP) általában kicsi, rendkívül optimalizált audio- és videojel-feldolgozó algoritmusokat hajtanak végre. Ezekben kerülik a gyorsítótárak használatát, a működés, feladatvégzés állandósága miatt. Elsődleges a végrehajtás sebessége, a többszörös címterek kezelési nehézségei kevésbé számítanak. Emiatt néhány DSP több, külön címterű adatmemória-területtel is rendelkezik, hogy ki tudja használni a SIMD és VLIW utasításfeldolgozás előnyeit is. A Texas Instruments TMS320 C55x processzorainak például több párhuzamos adatbusza van (kettő írásra, három olvasásra) az egy utasításbusz mellett.
  • A mikrokontrollereket (főleg) a kisméretű program-memória (általában flash memória), szintén kisméretű adatmemória (SRAM) jellemzi, a cache hiányzik. Ezek igyekeznek a Harvard-architektúra gyors párhuzamos/konkurens program- és adatfeldolgozási lehetőségét kihasználni. A külön program- és adattárolók különböző bitszámúak lehetnek, ez jelenthet pl. 16 bites utasításhosszt 8 bites adatméret mellett. Ezen kívül kihasználható az egyéb tevékenységtől független utasítás-előbetöltés (instruction prefetch) is. Példák: Atmel AVR, Microchip PIC és az ARM Cortex-M3 processzor (mikrokontroller; nem minden ARM csip Harvard architektúrájú).

Még ezeknél a felhasználásoknál is gyakori, hogy a processzorokban speciális utasításokat helyeznek el a programmemória adatként való kezeléséhez, pl. csak olvasható táblák beolvasására vagy átprogramozáshoz.

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

Források[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a Harvard architecture című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.

További információk[szerkesztés | forrásszöveg szerkesztése]

Lásd még[szerkesztés | forrásszöveg szerkesztése]