Bussystem

**Bussystem**, eller berre **buss**, er eit (del)system som overfører data mellom ulike komponentar i ei datamaskin, til dømes mellom sentralprosessoren og internminnet, mellom sentralprosessoren og ulike ekspansjonskort eller I/O-einingar. Bussar kan vera parallellbussar eller seriebussar. Bussar vert òg nytta internt i mikroprosessorar, ASIC-ar, FPGA-ar etc. 

## Adressering
Alle einingane som er tilknytt bussen har kvar si adresse og mange har fleire adresser. Minnebrikker til dømes har ein adresse for kvart ord i minnet, slik at alle orda kan adresserast separat. Andre einingar, som til dømes I/O-einingar, har òg ofte fleire adresser, slik at einskilde register kan adresserast. Alle einingane har adressedekodarar, som kjenner att sine eigne adresser og vel ut ordet i minne, eller registret, som ein adresse peikar på. Oversynet over fordelinga av adresser mellom dei ulike einingane vert kalla eit *adressekart*.

## Parallellbuss

Ein paralellbuss er sett saman av fleire delbussar: databuss, adressebuss og kontrollbuss. Kvar av desse bussane har fleire leiarar som kvar overfører ein bit. Bussen vert kontrollert av ei eining kalla *bussmeister*. Mikroprosessorar har innebygd busskontroll (bussmeister) både for interne og eksterne bussar. 

### Databuss
Databussen er sett saman av fleire parallelle leiarar, som fysisk er banar på eit kretskort, eller metallbanar internt på ein integrert krins. Talet på parallelle leiarar i databussen vert kalla *bussbreidda*, eller *breidda til bussen*. Di større breidd databussen har di fleire bit kan han overføra samstundes. Breidda er vanlegvis ein 2'er-potens: 8, 16, 32 eller 64. Ein 8-bit buss kan overføra ein byte (8 bit) samstundes, ein 32-bit buss kan overføra fire byte samstundes, og å vidare. 

Om ein prosessor som arbeider med ordlengder på 32 bit har ein 8-bits databuss trengst det fire lese- eller skriveoperasjonar for kvart ord som vert overførst over bussen. Med ein 32-bits databuss er det nok med berre ein lese-/skriveoperasjon. Mykje aritmetikk nyttar flytkommaaritmetikk, som anten er 32 bit (enkelpresisjon) eller 64 bit (dobbelpresisjon). Overføring av dobbelpresisjonsord over ein 32-bits databuss krev to lese-/skriveoperasjonar, men berre ein over ein 64-bit buss. Nokre prosessorar, som til dømes SPARC, har ei bussreidd på 128 bit og kan overføra to 64-bit operandar samstundes. Ulempa med å auka breidda på eksterne databussar (databussar ført ut av ein integrert krets) er at det krev fleire pinnar på komponenten, noko som aukar storleiken. Det aukar òg arealet nytta til bussen på kretskortet. For bussar nytta for ekspansjonskort aukar det òg storleiken på soklane.

### Adressebuss
Når det skal overførast data over bussen plasserer bussmeisteren adressa til ordet som skal lesast eller skrivast på adressebussen. Adressedekodaren i ei av einingane tilknytt bussen ser at adressa høyrer til ein eit ord i minnet eller eit register. Dette ordet vert så lagt ut på databussen og lese inn i eit register i til dømes ein mikroprosessor. For å avlasta den aritmetiske eining er mange mikroprosessorar utstyrte med ein eigen addresse-ALU for å reknar ut neste adresse som skal leggast ut på adressebussen.

Breidda på adressebussen (talet på parallelle linjer) bestemmer for mange ulike ord som kan adresserast. Ein adressebuss med ei breidd på *B* bit kan adressera 2^B ulike ord. Ei buss med ei breidd på 16 bit kan soleis adressera 2^{16}=65536 ord, ein 32-bit addressebuss kan adressera 2^{32}≈4,29·10^9 ord, etc.

### Kontrollbuss
Kontrollbussen er ei samling kontrollinjer, som styrer ymse funksjonar på bussen. Ei av linjene kan til dømes vera ei lese/skrivelinje, som bestemmer om binærordet på databussen skal lesast frå eller skrivast til minne (eller eit register). Ei anna linje kan gje informasjon om kor lenge ein adresse skal ligga på adressebussen og data på databussen, for å ta omsyn til at ulike minnetypar kan ha forskjellig lese-/skrivetid.

### Synkrone og asynkrone bussar
Parallellbussar kan klassifiserast som synkrone eller asynkrone. Synkrone bussar er styrt av eit klokkesignal og adresser og data må skrivast og lesast i løpet av ein klokkeperiode. Føremonene med dette er at logikken som styrer bussen er enkel. Men all einingane tilknytt bussen må arbeida med same hastigheit. PCI til dømes er ein synkron buss.

Asynkrone bussar er ikkje styrte av ei klokke og ulike einingar kan arbeida med ulik hastigheit. Tilgangen til bussen vert styrt av ein busskontroller, eller bussarbitrær. Kontrollogikken er difor meir komplisert enn for synkrone bussar. VME kan tena som døme på ein asynkron buss.

### Multipleksa buss
Nokre parallellbussar har ikkje separate adresse- og databussar, men overfører adressa fyrst og deretter data. Dette krev færre linjer, så ICar treng ikkje ha så mange pinnar. På grunn av at addressar og data vert overførte i separate tidsluker har multipleksa bussar mindre kapasitet enn bussar med separate adresse- og databussar. Dei er òg vanskelegare å feilsøka på.

## Seriebuss
Ein seriebuss overfører kontroll, adresser og data i fråskilde tidsluker (tidsmultileksing). Seriebussar overfører berre ein bit per klokkeperiode, men på grunn av at dei ikkje er utsette for klokkeforskyvning har dei mykje høgare klokkefrekvensar enn parallellbussar. SATA til dømes har ein klokkefrekvens på 6 GHz, medan PCI, som er ein parallellbuss, har ein klokkefrekvens på 33,33 MHz. Ein 6 GHz SATA-buss har ein kapasitet på 600 MByte/s, medan ein 32-bits PCI-buss overfører berre 133 MByte/s. Nyare bussar er difor ofte seriebussar.

## Kjelder