Harvard-architektúra

A Wikipédiából, a szabad enciklopédiából
(Harvard architektúra szócikkből átirányítva)
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

Ezt az elvet eredetileg a Harvard Mark I (1944) számítógéphez dolgozták ki. 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 és utána a betöltött program megfelelő belépési pontjára ráindította a processzort. Nem volt mai értelemben vett operációs rendszer, amitől a programok betöltését és megfelelő indítását kérni lehetett volna.

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 eredményez, 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. kártékony kódok í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 Harvard-architektúrát napjainkban leginkább digitális jelfeldolgozó processzorokban (DSP) és mikrovezérlőkben 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. 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.

Jellemzők[szerkesztés]

Memória[szerkesztés]

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]

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 sínen (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]

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óriasínhez 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]

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 gyorsítótár (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 gyorsítótárat használnak: egyet az utasítások és egyet az adatok számára.

Belső és külső felépítés[szerkesztés]

A modern, nagy teljesítményű CPU-csip 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 gyorsítótára általában két részre van osztva: utasítás- és adat-cache. A CPU és a gyorsítótár közötti kapcsolathoz gyakran a Harvard-architektúra szerinti megoldást alkalmaznak, azaz a CPU külön átmeneti tárakból, külön síneken 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 vannak ilyen megoldások).

Í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-) gyorsítótárak é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]

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 adatsínje van (kettő írásra, három olvasásra) az egy utasítássín mellett.
  • A mikrovezérlőeket (főleg) a kisméretű program-memória (általában flash memória), szintén kisméretű adatmemória (SRAM) jellemzi, a gyorsítótár 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]

Fordítás[szerkesztés]

  • 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. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

További információk[szerkesztés]

Kapcsolódó szócikkek[szerkesztés]