Busz (informatika)

kommunikációs rendszer, amely adatot továbbít a számítógépen belüli komponensek között

A busz vagy sín (hosszabb elnevezéssel buszrendszer vagy sínrendszer) a számítógép-architektúrákban a számítógép olyan, jól definiált része, alrendszere, amely lehetővé teszi adatok vagy tápfeszültségek továbbítását a számítógépen belül vagy számítógépek, illetve a számítógép és a perifériák között. Eltérően a pont-pont kapcsolattól, a busz logikailag összekapcsol több perifériát ugyanazt a vezetékrendszert használva. Minden buszhoz számos csatlakozó tartozik, amelyek lehetővé teszik a kártyák, egységek vagy kábelek elektromos csatlakoztatását.

A korai számítógépek buszrendszerei betű szerinti értelemben párhuzamos elektromos buszok voltak, több csatlakozóval, de fizikai kiépítésükben eltértek attól, funkcionálisan viszont azonosak voltak. A mai modern számítógépek buszai már párhuzamos és bit-soros kapcsolatokat is meg tudnak valósítani, vagy (elektromosan) párhuzamos huzalozásúak sokcsatlakozósak (multidrop), vagy pedig lánc topológiával rendelkezők, illetve egy kapcsoló hubhoz csatlakozók, mint például az USB (univerzális soros busz).

Története szerkesztés

A korai számítógép buszok huzalkötegek voltak, amelyek összekötötték a memóriákat és a perifériákat. Ezeket a huzalkötegeket nevezték később elektromos buszoknak vagy buszvonalaknak. Majdnem mindig volt egy memória busz és egy periféria busz, és mivel ezek eltérő funkciókat valósítottak meg, ezért különböző utasítások, teljesen más időzítések, és protokollok tartoztak hozzájuk.

Az első problémát a megszakítások használata okozta. A korai számítógépek a ki/be műveletek végrehajtása alatt hurokban várakoztak a perifériális művelet végére. Ez időveszteséggel járt, a gép tulajdonképpen állt, az egyéb feladatok is fel voltak függesztve. Ha viszont a program valamilyen egyéb feladatot végzett, ami esetleg túl sok időt igényelt, és nem tudta időben figyelni a perifériális műveletet, akkor előfordulhatott ki/beviteli adatvesztés. A mérnökök kidolgozták a perifériák megszakítási rendszerét, amely biztosította a CPU által végzett művelet megszakítását. A megszakításokat prioritási csoportokba rendezték, mivel a CPU egyszerre csak egy feladatot tudott végrehajtani, így az időkritikus perifériális műveletek kapták a legmagasabb prioritást. A megszakításhoz rendelt program végrehajtása utána CPU visszatért a következő, alacsonyabb szintű megszakítási programhoz, vagy ha az nem volt, a főprogram végrehajtásához.

Nem sokkal később felmerült az igény arra, hogy a központi memóriát megosztva használja több CPU. Ezeknél a számítógépeknél a memória-hozzáférések is priorizálva voltak.

A klasszikus, egyszerű megoldás a megszakítások és memória-hozzáférések kezelésére a lánc kapcsolás volt.

DEC úgy döntött, hogy felesleges és drága két buszrendszert megvalósítani a kisméretű, nagy sorozatban készülő számítógépeknél, és kialakítottak egy olyan memória buszt, amelyre a perifériák is csatlakozni tudtak, így a memória műveletek egyszerűbbé váltak, a busz pedig bonyolultabbá. Abban az időben, ez egy igen merész tervezési lépés volt, az ellenzők biztosak voltak abban, hogy a megoldás életképtelen.

Az első mikroszámítógépek busz rendszerei tulajdonképpen egy passzív [hátlap]ra épített, és egymással összekötött csatlakozókból álltak. Az egyes egységeket, a CPU-t, a memóriát vagy memóriákat, a periféria vezérlőket stb. a csatlakozókba dugva automatikusan létrejött a kapcsolat az egységek között. Az egységek párhuzamosan voltak összekötve. Egyes megvalósítások esetében, mint például az IBM PC, külön utasítások szolgáltak arra, hogy a CPU használni tudja az így megvalósított ki/bemeneti buszt.

Néhány mikroprogramozott vezérlőben és beágyazott rendszerekben ki/beviteli busz gyakorlatilag nem is létezett. A kommunikációt a CPU vezérelte, a periféria vezérlők felé az adatok írása és olvasása előre meghatározott memóriaterületeken keresztül történt (legtöbb esetben), a központi órajeleknek megfelelő sebesség mellett. A külső egységek a CPU egy csatlakozójára adott jellel jelezték, hogy kiszolgálási igényük van, amihez általában valamilyen megszakítás (interrupt) is hozzá volt rendelve.

Például, a diszk vezérlő jelezni tudta a CPU-nak, hogy az adatok olvasásra készek a kijelölt memóriaterületen (mivel előzőleg betöltötte oda a lemezről leolvasott adatokat), a CPU ezután már hozzáfért a kért adatokhoz. A CPU és a diszk vezérlő között a kapcsolatot a memória biztosította. Az első gépek túlnyomó többsége ilyen elven működött, kezdve az Altair az S-100 buszával, és folytatva az 1980-as évek IBM PC-jével.

Ezek az egyszerű buszok voltak a legfontosabbak az általános célú számítógépek számára. Minden, a buszhoz csatlakozó berendezés azonos sebességgel tudott a buszon kommunikálni, amit a központi órajel határozott meg.

A CPU-k sebességének növekedése komoly problémát jelentett, mivel az előzőek értelmében a periféria vezérlők sebességét is azonos mértékben növelni kellett volna. Ez nem minden esetben sikerült, így előfordult, hogy egy gyors CPU-nak alkalmazkodnia kellett a leglassabb perifériavezérlő sebességéhez, a CPU sebesség növekedését nem lehetett kihasználni. Amíg ezt megoldást a beágyazott rendszerek esetében elfogadták, a kereskedelmi célú számítógépek esetében a piac már nem tolerálta.

Ugyancsak problémát jelentett, hogy majdnem minden művelethez a CPU-t kellett igénybe venni, így más feladatok végzésére már esetleg nem ért rá, tehát a CPU valódi áteresztőképessége drasztikusan leesett.

Néhány buszrendszer konfigurálása nagyon bonyolulttá vált, ha minden „polcról levett” berendezéssel együtt kellett működnie. Tipikus ilyen megoldás volt az alaplapokon és a csatolókártyákon lévő kisméretű kapcsolók (jumper) megjelenése, amelyek megfelelő helyre dugásával a memória címek, az I/O címek, megszakítási címek és prioritások bizonyos határok között, de megváltoztathatók voltak.

A „második generációs” buszrendszerek, mint a NuBus már kezelték a fenti problémák egy részét. Ezek a buszok mereven két részre osztották a "világot": az egyikbe a CPU és a memória tartozott, a másikba pedig a számos vezérlőegység, a két világ közötti kapcsolatot a busz vezérlő (bus controller) biztosította. Ez a megoldás megengedte a CPU sebességének növelését anélkül, hogy buszra hatással lett volna. Ez a megoldás a terhelést a CPU-ról a csatolókártyák felé mozdította, a csatolókártyáknak egymással és a buszvezérlővel kellett kommunikálniuk, és ehhez nem volt szükség a CPU igénybevételére. Sikerül ilyen módon a jobb teljesítményt elérni, cserébe viszont a csatolókártyák sokkal bonyolultabbak lettek. Ezek a buszok gyakran "nagyobb" sebességűek voltak az adatutak szempontjából, kezdetben 8 bites párhuzamos buszok voltak ez első generációkban, aztán jöttek a 16 bites, majd a 32 bites adatutak, szoftver segítségével történő konfigurálás (most ezt szabványosították, mint Plug-n-play) a manuális jumper dugdosás kiváltására.

Egy tulajdonságukban a mai, korszerű buszok megegyeznek elődeikkel: a buszon lévő egységek azonos sebességgel kommunikálnak egymással. Ahogyan a CPU és memória függetlenné vált az egyéb berendezésektől, a CPU és memória sebességét addig lehetett emelni, amíg a technikai lehetőségek azt lehetővé tették (de CPU és a memória kommunikációjának szinkronban kell lennie). E folyamat eredményeként a busz (periféria) sebessége esetleg kisebb, mint a korai gépeknél, és az adat ki-bevitel továbbra is szűk keresztmetszetet jelent. Különsen jól megfigyelhető ez a hatás a videó kártyák esetében: az új buszok, mint a PCI már nem elég gyorsak, a PC-kben megjelentek az AGP buszok. 2004-től az AGP-t is kinőtték, és nagy teljesítményű (high-end) videó kártyák már az új PCI Express buszokat igénylik.

A külső egységek számának növekedésével a perifériák elkezdtek saját buszokat használni. Amikor az első (hard) diszk egységek egy külön kártyával csatlakoztak a buszhoz, elfoglalva ezzel egy szabad busz csatlakozókat. Az 1980-as és 1990-es évek között az új rendszerek, mint a SCSI és a IDE már szakítottak ezzel a megoldással, és nem foglaltak minden diszk egységhez egy-egy busz csatlakozót. Mára ezek a saját buszrendszerek már bevett gyakorlatnak számítanak, és egyre több több perifériát támogatnak.

Egyre népszerűbb lett az a koncepció, amely különbséget tesz helyi busz a külső busz között. A régi szemlélet szerint a buszokat úgy tervezték, hogy a belső egységek kiszolgálását biztosítsák (grafikus kártyák), később ezek a buszok már külső egységeket (szkenner)eket is támogattak. Meg kell jegyezni, hogy a "helyi" kifejezés gyakran a processzorhoz nagyon közeli (VL és PCI) buszt jelenti, nem pedig az ISA-t. Az IDE ugyan a használata szempontjából külső busznak tekinthető, de legtöbbször a gépen belül valósítják meg.

A buszok "harmadik generációja" piaci megjelenés előtt áll, ideértve a HyperTransport és a InfiniBand megoldásokat is. Ezek a buszok rendelkeznek azzal a tulajdonsággal, hogy a képesek nagysebességű kommunikációra a CPU, memória, videó kártyák irányába, de ugyanakkor a sokkal lassabb perifériákkal (lemezegység) is együtt tudnak működni. A fizikai kapcsolódást sokféle formában engedik meg, és használhatók belső busznak éppen úgy, mint külső egységek csatlakoztatására. A legkülönbözőbb igényeket támogatják, a harmadik generációs buszok már sokkal jobban hasonlítanak a magas szintű protokollokkal dolgozó számítógépes-hálózatokhoz, mint az eredeti busz elképzeléshez, képesek a nagy számú, különböző egységet, perifériát kezelni, összekapcsolni. A kezelésük is lassan már inkább szoftveres megoldásokat igényel, mint hardveres beavatkozásokat.

Egy másik ágon, az integrált áramkörök "testreszabásával" olyan logikák alakíthatók ki, amelyeket már intelligens vezérlőknek is nevezhetünk. Buszok, mint a Wishbone úgy vannak megtervezve, hogy megengedik a különböző integrált áramkörök egymás közötti kommunikációját.

Megvalósítások szerkesztés

Régen a „busz” egy elektromosan párhuzamos rendszert jelentett, az elektromos vezetők, vezetékek megfeleltek a CPU kivezetéseinek. Ez a megoldás nem sokáig működött így, a mai modern rendszerekben már összemosódnak a buszok és a hálózatok közötti különbségek.

A buszok lehetnek párhuzamos buszok (paralel), amelyek egyidőben általában egy szót visznek át a vezetékeken, vagy lehetnek soros buszok (serial), amelyek bit-soros formában továbbítják az adatokat. A különböző kiegészítő tápfeszültség, vezérlő jel(ek) a különböző meghajtók számára további kapcsolódási pontok (csatlakozó pontok) kialakítását teszik szükségessé mindkét irányban. Általában minden soros busz legalább két csatlakozó ponttal többet valósít meg a szükségesnél a fentiek miatt (legalább 2-t biztosan használ), mint az I²C soros busz. Ahogyan az adatráta növekszik, főleg a párhuzamos buszok esetén, az időzítéssel és az áthallással kapcsolatos problémák és azok elhárítása egyre nehezebb lesz. Részleges megoldás erre a problémára, a double pump the bus. Gyakran a soros buszok jóval gyorsabban dolgoznak, mint a párhuzamos buszok, annak ellenére kevesebb kapcsolódási ponttal rendelkeznek, viszont a soros buszoknál sem az áthallás, sem az időzítési problémák nem jelentkeznek. Erre jó példák az USB, a FireWire, és a Serial ATA. A több csatlakozós gyors soros buszok nem működőképesek, ezért inkább a lánc, vagy a hub felépítésű buszokat alkalmaznak.

A legtöbb számítógépben belső és külső buszok is vannak. Egy belső busz a gépen belüli egységek összekapcsolását végzi, főleg a CPU-t és a központi memóriá(ka)t kapcsolja össze, vagy kapcsolja az alaplaphoz. Ezeket buszokat szokták még helyi buszoknak is nevezni, mivel a helyi egységeket kapcsolják össze, nem pedig a gépen kívüli egységeket, vagy másik számítógépeket. A külső buszok csatlakoztatják a perifériákat az alaplaphoz.

A hálózatok összekapcsolása általában az Ethernet segítségével történik, azonban ez valójában nem busz, bár a különbség inkább koncepcionális, mintsem gyakorlati jellegű. A jelentkező új technológiák, mint az InfiniBand és a HyperTransport a jövőben még jobban összemossák a buszok és a hálózatok közötti különbségeket. Még a belső és külső közötti határvonal is bizonytalan, az I²C használható egyaránt belső-, és külső busznak (ekkor már ACCESS.bus néven ismert), és az InfiniBand is képes helyettesíteni egy belső buszt, mint a PCI, vagy mint a külső Fibre Channel buszt.

A személyi számítógépek mai trendjei, főként a laptopok esetén, elmozdulnak a külső kapcsoló felületek számának csökkentése felé (Cat5, USB, fülhallgató-mikrofon csatlakozó), és opcionálisan VGA vagy FireWire .

A párhuzamos (elektromos) busz és a lánc közötti különbség szerkesztés

Mindkét busz típus lineáris elrendezésű, azonban mégis vannak lényeges különbségek.

Az elektromos busz alatt olyan, elektromos szempontból párhuzamos vezetékrendszert értünk, amelyeken két vagy több csatlakozó van elhelyezve, a csatlakozók közötti távolság változhat, de az elektromos összeköttetés a csatlakozók között állandóan megvan. Az, hogy a busz hány párhuzamos vezetékből áll, lényegtelen, de az lényeges, hogy minden csatlakozóhoz ugyanannyi vezeték csatlakozik. A legegyszerűbb példa egy ilyen buszra a mindenki által jól ismert hálózati hosszabbító (a 230 V-os hálózatról van most szó). Az erősáramú berendezések esetében ezek a „vezetékek” gyakran 5–10 cm széles, 1–2 cm magas vezető (alumínium) sínek, ezért a párhuzamos buszok vezetékeit gyakran nevezik sínrendszernek.

A lánc felépítésű busz abban különbözik az előbb leírt megoldástól, hogy a csatlakozók a párhuzamos vezetékek (a számuk itt sem lényeges) végein helyezkednek csak el. Az A, B, C, D egységek láncba kapcsolása (daisy chain) valójában azt jelenti, hogy az A berendezés küldő oldala egy „kábellel” össze van kötve a B berendezés fogadó oldalával, míg a B berendezés küldő oldala a C berendezés fogadó oldalával van összekötve, és így tovább. A fogadó és a küldő csatlakozók ugyanannyi csatlakozót tartalmaznak, esetleg más mechanikai kivitelben, azaz: minden bejövő vezetéknek van egy kimenő párja. A bemenet és kimenet között – a berendezésen belül – esetleg egy úgynevezett belső logika van, amely lehetőséget ad arra, hogy a bejövő jel tovább kerüljön (esetleg erősítve, formázva) a kimenetre, de lehetséges, hogy a bejövő jel helyett a saját kibocsátott jele folytatja az utat a következő egység felé. Ez azonban azt jelenti, hogy nincs meg a párhuzamos buszra jellemző állandó fizikai összeköttetés a csatlakozók között, itt csak logikai szintű összeköttetés van.

Példák belső számítógép buszokra szerkesztés

Párhuzamos szerkesztés

Soros szerkesztés

Cím, adat- és vezérlősínek szerkesztés

A sínrendszer felépítése szerint (tartalmilag) három részre osztható:

  • címsín, amely az eszközök címzését szolgálja, azok címét továbbítja rajta a processzor, szélessége 32 (esetleg 64) bitnek megfelelően ugyanennyi vezeték;
  • adatsín, amelyen keresztül a továbbítandó adatot küldi, vagy fogadja a processzor. Az adatsín szélessége többnyire 32 (vagy 64) bit, illetve ugyanennyi vezeték;
  • vezérlősín, amelynek vezetékeit a processzor a vezérlőjelek kiküldésére, vagy azok fogadására használja fel. A vezérlőjelek száma változó, általában 10-15 körül van minimálisan.

Elválasztó sínvezérlő: a sínrendszerhez szorosan hozzátartozik a helyi sínt a rendszersíntől elválasztó sínvezérlő (sínmeghajtó) egység (bus interface), amely szabályozza a sínfoglalásokat.

Példák külső számítógép buszokra szerkesztés

Párhuzamos szerkesztés

  • Advanced Technology Attachment vagy ATA (megfelel a PATA, az IDE, az EIDE, az ATAPI stb. megnevezéseknek) lemez/szalag periféria csatolásához kialakított busz
    (az eredeti ATA párhuzamos, de létezik a soros ATA vagy Serial ATA busz is, lásd később)
  • Centronics párhuzamos (általában egy berendezés csatolására, esetleg láncban 2 egységre)
  • HIPPI HIgh Performance Parallel Interface (nagy teljesítményű párhuzamos interfész)
  • IEEE-488 (megfelel a GPIB, General-Purpose Instrumentation Bus (általános célú eszköz busznak), és a HPIB, Hewlett-Packard Instrumentation Bus-nak)
  • PCMCIA, úgy is ismert, mint a PC kártya, leggyakrabban a hordozható és laptop gépekben használják, de egyre inkább háttérbe szorul a USB és beépített hálózati és modem kapcsolódási lehetőségek miatt.
  • SCSI Small Computer System Interface, lemez/szalag egység csatlakoztatására szolgáló busz

Soros szerkesztés

Szabadalmaztatott szerkesztés

  • Floppy egység csatlakozója

Sínfoglalás (buszfoglalás – bus arbitration) szerkesztés

Az adatátvitelek lebonyolításához egyidőben több aktív eszköz (master) is igényelheti a busz használatát. Ilyenkor valamilyen eljárással el kell dönteni, hogy melyik eszköz kapja meg először a buszhasználat jogát. A buszhasználat jogának eldöntésére szolgál folyamatot nevezik buszfoglalásnak, busz arbitrációnak (bus arbitration).

A sínfoglalás iránti igények kiszolgálása két módon történhet:

  • párhuzamos kiszolgálási mód: alkalmazásakor minden eszköz önálló buszkérő és buszengedélyező vezetékkel rendelkezik. A beérkező igényeket a vezérlő logika sorolja, dekódolja és a legmagasabb prioritású eszköz számára engedélyezi a busz használatát.
  • soros kiszolgálási mód alkalmazásakor az eszközök sorba vannak kötve és a lánc mentén az elhelyezkedésük szabja meg, hogy mikor kaphatják meg a sín használatát. Amelyik eszköz a legközelebb van a vezérlőhöz, annak a prioritása a legmagasabb.
  • lekérdezéses kiszolgálási mód (polling)

Mindkét esetben a jogosultság megállapítása történhet:

  • centralizált módon, amely esetben egy központi prioritásvezérlő logika szabja meg a hozzáférés sorrendjét
  • decentralizált módon, amely esetben a priorizáló logika elosztott formában valósul meg, az egyes eszközök vezérlői által

A PCI (Peripheral Component Interconnect) sínrendszer szerkesztés

A PCI-t megelőzőleg a 16 bites ISA buszok voltak az elterjedtek. Ez a maga 8 MHz-es frekvenciájával a gyakorlatban közel 5 MB/s-os (elméletileg 8MB/s) csúcssebességre volt képes. Az idő múlásával azonban szükségessé vált egy jóval nagyobb sebességű buszrendszer kifejlesztése, így hát 1991-ben az Intel munkatársai nekiálltak kifejleszteni a PCI-t. Az ISA 8 MHz-es órajelét 33 MHz-re emelve, a sávszélességet pedig 32 bitre növelve a PCI maximális sebessége közel 132 MB/s lett. Ez a 3D grafikus kártyákat leszámítva (AGP) minden korszerű perifériát ki tud szolgálni. 'Dupla PCI', a PCI busz 66 MHz-es, 64 bites változata, mely elméletben 264 MB/s-os csúcssebességre képes. A PCI másik előnye, hogy nem a jól bevált ISA buszrendszer leváltására tervezték, hanem annak kiegészítésére, 'patchelésére'. Így a PCI minden további nélkül alkalmazható bármely régebbi rendszerrel együtt. Külön chipkészlet, az ún. 'PCI bridge' felelős a CPU és a PCI perifériák közötti forgalom bonyolításáért. Speciális pufferrel rendelkezik, melynek segítségével a CPU a transzfer befejezése előtt már más feladattal foglalkozhat: a puffer és a perifériák közötti tényleges adatátvitelt a CPU helyett a PCI bridge vezérli. Erről az ötletes megoldásról nevezik a PCI-t 'lokális busz'-nak, bár valójában csak egy átmenet a valódi lokális busz (CPU+cache+memória) és a perifériabuszok (például ISA busz) között. Továbbá a PCI buszon megvalósítható az ún. 'bus mastering' is, mely az intelligens perifériák működésének támogatását jelenti. Bus mastering tulajdonsággal rendelkező perifériák képesek a PCI buszon keresztül egymással kommunikálni: működést összehangolni, információt cserélni, akár nagy mennyiségű adatot is mozgatni. S ami a lényeg: mindezt a CPU teljes kikerülésével.

Példák külső/belső buszokra szerkesztés

Kapcsolódó szócikkek szerkesztés

Egyéb angol nyelvű linkek szerkesztés