8. Bussystemen 8.1 Wat is een bus? In de electronica is een bus een verzamelpunt voor soortgelijke elektronische signalen. Deze centralisering heeft tot doel, het aantal verbindingen tussen diverse schakelingen te reduceren. In beginsel is een bus uitbreidbaar met extra soortgelijke schakelingen. Veel bussen voldoen aan een standaard. In de computertechniek vormt de bus een standaardmethode om verschillende onderdelen met elkaar te verbinden. Dit kan binnenin een geïntegreerde schakeling, op een printplaat, tussen printplaten of tussen systemen zijn.
8.2 Onderverdelingen naar de aard van de signalen 8.2.1 Databus Een databus is een bus of een deel daarvan, dat het transport van digitale data voor zijn rekening neemt. In de computertechniek vormt deze bus in combinatie met een adresbus en een besturingsbus een veelal gestandaardiseerde verbinding tussen de diverse onderdelen. Er zijn parallelle en seriële bussen. Een parallelle bus kan meerdere databits tegelijk versturen (vaak 8, 16, 32, 64, ...) terwijl bij een seriële bus de bits na elkaar verzonden worden. Algemeen kan gesteld worden dat parallelle bussen sneller zijn, doch de afstand tussen de componenten moet klein blijven, bij de seriële bus is dit omgekeerd. Ook is een seriële verbinding gunstiger in prijs door het beperkt aantal geleiders en verbindingen dat nodig is, en bovendien is de seriële bus minder storingsgevoelig. Hierdoor kunnen systemen zoals USB, Firewire en Serial ATA toch een hogere snelheid halen, omdat ze geen last hebben van timing skew en crosstalk. Met timing skew bedoelt men het effect dat wanneer signalen door een parallelle bus worden gestuurd, deze niet allemaal tegelijkertijd aankomen door onvermijdelijke verschillen in draden en transistor afmetingen, hoewel deze wel dicht bij elkaar zullen zitten. Wanneer de
frequentie van zo’n systemen toeneemt, wordt de variatie daarin ook meer en meer foutief. Als dit verschil te groot wordt, is het zelfs mogelijk dat het klok signaal toekomt, terwijl het data signaal nog onderweg is. Als dat gebeurd, hebben we een functionele error. Met crosstalk wordt de interferentie bedoeld waardoor signalen elkaar over de draden gaan beïnvloeden. Vergelijk dit met het horen van andere gespreken over een telefoon. Sinds de telefooncentrales in België digitaal zijn, is dit fenomeen veel minder (tot niet) meer te bespeuren. 8.2.2 Adresbus Een adresbus is een bus dankzij welke de computer kan achterhalen op welke locatie bepaalde data kan worden gevonden. Elk pad bevat een bit. Als er meer paden aanwezig zijn dan kunnen er meer locaties geadresseerd worden. Door de breedte van een adresbus kan worden bepaald hoeveel geheugen er geadresseerd kan worden. Het geheugen van een computer bestaat uit een groot aantal kleine eenheden van dezelfde grootte. Elk van deze eenheden is toegankelijk via een uniek nummer. Dit wordt een geheugenadres (Eng: memory address) genoemd.
Byte De adresseerbare eenheden van het geheugen zijn meestal bytes (8 bits). Alleen voor hele simpele processoren, zoals die in toetsenborden gebruikt worden, worden wel 4-bits processoren gebruikt.
Woord De fysieke geheugeneenheden (woorden) zijn tegenwoordig meestal groter, namelijk 32-bits (4 bytes) of 64-bits (8 bytes). Dit heet de woordbreedte van een computer. Er bestaan computers met woordbreedtes van meer dan 64 bits. Vroeger heeft men wel computers gemaakt met een woordbreedte van 12 en 48 bits, maar dit is tegenwoordig niet meer gebruikelijk.
Adresruimte Zulke adressen worden doorgaans geschreven in hexadecimale vorm. Bijvoorbeeld, een geheugen van 64kB kan geadresseerd worden door met de adressen van 000016 tot en met FFFF16. Dit is een 16-bits adres. De 8bits processoren uit de jaren 80 hadden doorgaans een adresruimte van deze grootte. Tegenwoordig is een adresruimte van gigabytes gebruikelijk,
en dit neemt alsmaar toe. Voor het adresseren van 4 gigabyte is een 32bits adres nodig. Wil je meer dan 4 gigabyte (4.294.967.296 bytes) adresseren, dan heb je een 64-bits adres nodig. Met een 64-bits adres kan je theoretisch een maximum van 18.446.744.073.709.551.616 bytes adresseren (18 exabytes of 18 triljoen). Zie de tabel hieronder voor een uitleg van de verschillende SI-prefixen. 10n Prefix Symbool
Naam
Decimaal equivalent
1024 yotta
Y
quadriljoen
1 000 000 000 000 000 000 000 000
1021 zetta
Z
triljard
1 000 000 000 000 000 000 000
10
18
exa
E
triljoen
1 000 000 000 000 000 000
1015 peta
P
biljard
1 000 000 000 000 000
tera
T
biljoen
1 000 000 000 000
giga
G
miljard
1 000 000 000
10
6
mega
M
miljoen
1 000 000
10
3
10
12
109
kilo
k
duizend
1 000
102
hecto
h
honderd
100
101
deca, deka da
10-1 deci
tien
10
d
een tiende
0,1
een honderdste
0,01
10
-2
centi
c
10
-3
milli
m
een duizendste
0,001
µ
een miljoenste
0,000 001
een miljardste
0,000 000 001
10-6 micro 10
-9
nano
n
10
-12
pico
p
een biljoenste
0,000 000 000 001
f
een biljardste
0,000 000 000 000 001
a
een triljoenste
0,000 000 000 000 000 001
z
een triljardste
0,000 000 000 000 000 000 001
y
een quadriljoenste 0,000 000 000 000 000 000 000 001
10-15 femto 10
-18
atto
10-21 zepto 10
-24
yocto
Kibi (Ki) – mebi (Mi) – gibi (Gi) – tebi (Ti) – pebi (Pi) – exbi (Ei) – zebi (Zi) – yobi (Yi) !
Adresbus De microprocessor heeft aan de buitenkant een aantal verbindingen die de adresbus heten. Op deze verbindingen (32 stuks in het geval van een 32bits adresbus) komt van het adres te staan waarvan de processor de waarde uit het geheugen wil lezen of schijven. De data wordt via de databus uitgewisseld. De grootte hiervan is gelijk aan de woordbreedte van de computer. De adresbus van de processor is tegenwoordig niet rechtstreeks verbonden met de geheugenchips. De memory manager zit hier nog tussen. Deze vertaalt de geheugenadressen zoals de processor ze ziet naar de fysieke adressen zoals die in de geheugenchips staan. Het belangrijkste doel hiervan is dat weinig gebruikt stukken geheugen tijdelijk op de harde schijf bewaard kunnen worden. Dit mechanisme wordt swapping genoemd. Het geheugen dat op deze manier wel te
adresseren is, maar niet echt bestaat (omdat het naar de schijf geswapt is) heet virtueel geheugen.
8.2.3 Besturingsbus of controle bus Een controle bus is een onderdeel van een computer bus, gebruikt door de CPU om te communiceren met andere devices in de computer. Terwijl de adres bus de informatie draagt over welke device met de CPU aan het communiceren is, en de data bus de eigenlijke data zal vervoeren, draagt de controle bus commando’s van de CPU en ook retour status signalen van de devices. 8.3 Geschiedenis 8.3.1 1e generatie In de eerste computers bestonden de bussen uit draden die aan het geheugen en de randapparatuur waren verbonden. Bijna altijd was er een bus voor het geheugen en een bus voor de randapparatuur. Een van de eerste verbeteringen hierop, was het gebruik van Interrupts (zie vorige lessen). DEC (Digital Equipment Corporation) maakte van die 2 bussen 1 bus en zorgde dat de randapparatuur werden aangeschreven zoals geheugen locaties. Een groot nadeel van deze systemen was wel dat alle onderdelen op dezelfde snelheid moesten werken, of ze konden niet met elkaar communiceren : ze deelden dezelfde klok. Als je de snelheid van je processor wilt verhogen, moeten alle onderdelen ook sneller worden. Het gevolg was dat heel snelle CPU’s moesten vertragen om met andere onderdelen in de computer te praten. Een ander nadeel is dat de CPU voor alle soorten operaties nodig is. Op die manier zou de processor dus nodig zijn voor bepaalde taken, zodat de effectieve bandbreedte van de bus dramatisch zou kunnen zakken. 8.3.2 2e generatie 2e generatie bus systemen zoals NuBus losten een aantal van deze problemen op. Deze systemen scheiden de computer in 2 ‘werelden’ : de CPU + geheugen en de verschillende (rand)apparaten aan de andere kant, met een bus controller tussen de beide. Hierdoor kon de processor sneller worden, zonder dat de andere onderdelen van de computer dat moeten doen. Ook werd de last van het verplaatsen van data van de processor naar kaarten en controllers overgeplaatst. Hierdoor konden onderdelen op de bus met elkaar communiceren zonder dat de processor daar tussen moest komen. Hierdoor kwam al een groot stuk snelheidswinst.
Een andere snelheidswinst werd ook geboekt doordat de datapaden van de bussen breder gingen worden : van 8 bit parallelle bussen naar 16 of 32 bit. Ook kwam er nu een software setup bij, nu beter gekend als plug&play. Iedereen op deze bus moet wel nog tegen dezelfde snelheid spreken. CPU & geheugen stijgen nog veel sneller dan de systeembussen. Het gevolg is dat in moderne systemen de bus snelheden veel lager lagen dan wat het systeem nodig had. Een voorbeeld hiervan is dat van de grafische kaarten : die werden al snel sneller dan de nieuwere bussystemen zoals PCI. Daardoor begonnen computers AGP te gebruiken, enkel en alleen voor video kaarten. Tegen 2004 was ook AGP weer te traag voor de high-end grafische kaarten en wordt deze dan ook vervangen door de nieuwe PCI express bus. Veel externe devices begonnen ook hun eigen bussystemen te gebruiken. Toen harde schijven werden geïntroduceerd werden deze elk via een kaart op het bussysteem aangesloten. Dit is ook de reden dat veel computers nog altijd zoveel uitbreidingssloten hebben. Toen systemen zoals SCSI en IDE uitkwamen, werd dit probleem in ieder geval al opgelost. Er werd gebruikelijk ook een onderscheid gemaakt tussen locale bussen en externe bussen. De eerste dient voor systemen die gemaakt zijn voor interne apparaten zoals video kaarten en de tweede dient voor bussen die bedoeld zijn voor externe apparaten zoals bvb scanners. Opgelet, in dit verband bedoelt men ook dat VL-Bus en PCI dichter tegen de processor staan dan ISA. IDE is in deze termen een externe bus, hoewel deze meestal binnen de computer gevonden wordt. 8.3.3 3e generatie Deze ‘3e generatie’ bussen komen nu op de markt. Hieronder zitten HyperTransport en Infiniband. Deze hebben typisch mogelijkheden waardoor deze aan heel hoge snelheden geheugen en video kaarten ondersteund kunnen worden, terwijl ook lagere snelheden gehanteerd kunnen worden wanneer tragere onderdelen zoals disk drives worden aangesproken. Deze systemen zijn ook redelijk flexiebel op het vlak van de fysieke aansluitingen, waardoor ze zowel gebruikt kunnen worden als interne bussen als om verschillende machienes aan elkaar te koppelen. Dit kan tot vrij complexe problemen leiden wanneer verschillende aanvragen moeten behandeld worden. Daardoor gaat veel van het werk op deze systemen meer naar de software dan naar de hardware zelf. In het algemeen hebben deze 3e generatie bussen meer de neiging om op netwerken te lijken dan op het originele concept van een bus, met een
hoger protocol overhead dan de eerdere systemen, terwijl ook meerdere apparaten dezelfde bus tegelijkertijd kunnen gebruiken. 8.4 Enkele bussystemen 8.4.1 ISA Industry Standard Architecture
ISA is begonnen als een 8-bit systeem in de IBM PC in 1981. In 1984 is de 16-bit standaard geïntroduceerd. Dit is ontworpen om uitbreidingskaarten met de moederkaart te verbinden. Enkel de eerste 16MiB van het main memory kan gebruikt worden voor directe toegang. De 8-bit versie draaide op 4,77 Mhz, de 16-bit versie op 8 Mhz. Later zijn er verschillende andere systemen geweest die dit probeerden te vervangen, zoals MCA (Micro Channel Architecture). Dit was een poging van IBM om terug grip op de markt te krijgen. Aangezien MCA veel beter was dan ISA op verschillende vlakken, kwamen computer makers op de proppen met EISA (Extended Industry Standard Architecture) en later VESA Local Bus. DMA : Direct Memory Access : een techniek waardoor gegevens over het bussysteem kunnen worden verplaatst, zonder dat de CPU dat doet. De CPU initieert wel nog het process, maar doet de transfer niet zelf. Dat doet de DMA controller, die typisch een onderdeel is van de moederkaart chipset. Meer geavanceerde systemen zoals PCI maken gebruik van bus mastering DMA, waarbij het device controle neemt van de bus en de transfer zelf uit gaat voeren.
8.4.2 PCI Peripheral Component Interconnect of PCI Standaard.
PCI heeft in de moderne PC’s ISA en VL-bus vervangen. Op dit moment begint PCI zelf ook vervangen te worden door PCI-Express en andere technologieën. Deze standaard is door Intel in 1993 gereleased (PCI 2.0) Bij Apple vervangde PCI de NuBus Systeembus voor professionele Power Mac’s in 1995. Latere versies voegden nieuwe mogelijkheden en performantie toe, waaronder een 66 Mhz 3.3V standaard en 133 Mhz PCI-X.
Sinds de introductie van de PCI-Express in 2004, worden minder en minder PCI sloten op moederkaarten geplaatst, in het voordeel van deze nieuwe standaard. Zowel PCI-X 1.0b en PCI-X 2.0 zijn backwards compatoble met PCI. Hoewel beide standaarden nog naast elkaar voorkomen, zal PCI toch in de komende jaren stilletjes uitsterven. 8.4.3 AGP Accelerated Graphics Port is een hoge snelheid punt-tot-punt kanaal om een grafische kaart aan een moederkaart te verbinden, typisch om 3D applicaties te versnellen. Sommige moederkaarten komen uit met meerdere onafhankelijke AGP poorten. AGP wordt langzaam vervangen door PCI Express.
8.4.4 PCI-Express PCI Express, PCIe of PCI-E is een implementatie van de PCI computer bus die de bestaande PCI programmeer concepten behoudt, maar baseert op een compleet verschillende en veel snellere seriele fysieke-laag communicatie protocol. PCIe kan transfer snelheden aan van 250 MB/s, met een maximum van 16 kanalen, een totaal gecombineerde transfer snelheid van 4 GB/s. PCIe kan ook data in 2 richtingen tegelijk versturen (full-dupplex), wat een effectieve verdubbeling van de transfer-rate tot gevolg heeft (500MB/s) per kanaal, wat een totaal transfer rate van 8GB/s geeft waneer 16 kanalen gebruikt zouden worden. In de toekomst zou versie 2.0 een verdubbeling van de bandbreedte opleveren, wat zou neerkomen op 5Gb/s, maar het blijft compatibel met de huidige generatie.
8.4.5 Infiniband Dit is een technologie die ontworpen is door Intel, waarbij servers verbonden kunnen worden met remote storage, netwerk apparaten en andere servers. Het zal ook in servers gebruikt worden voor interprocessor communicatie in parallel clusters. Deze technologie belooft betere performantie, kleinere wachttijden (latency), gemakkelijker en sneller delen van data, ingebouwde security en quality of service en verbeterde bruikbaarheid (de nieuwe form factor zal veel eenvoudiger zijn om toe te voegen/verwijderen/upgraden dan de huidige gedeelde-bus I/O kaarten. 8.4.6 HyperTransport Hyper transport is een high-speed, low latency, punt-tot-punt link ontworpen om de communicatie snelheid tussen geïntegreerde schakelingen in computers, servers, embedded systems and netwerk – en telecommunicatie apparatuur tot 48 keer sneller dan in sommige bestaande systemen te versnellen. Hypertransport helpt ook om het aantal bussen in een systeem te verminderen, waardoor bottlenecks verminderd kunnen worden en de hedendaagse snellere microprocessors systeem geheugen meer efficiënt te kunnen gebruiken in high-end multiprocessor systemen. Dit is een technologie die door AMD is ontwikkeld in samenwerking met een aantal andere industriële partners. De technologie wordt nu beheerd door het Hypertransport Consortium (www.hypertransport.org) Deze technologie laat ook toe om meerder computers met elkaar te verbinden.