Tuesday, June 14, 2011

HW: Typy zbernic, rezimi cinnosti a pridelovanie

Zbernica je dvojbodovy spoj, ktory tvori interface k I/O zariadeniam. Je to subor vodicov a pravidiel urcenych k prepojeniu jednotiek pocitaca. Zbernicu budeme delit na  

  • adresovu, Address Bus 
  • datovu, Data Bus 
  • riadiacu (riadiace a datove signaly), Control Bus 
V niektorych pripadoch moze byt adresova a datova zbernica casovo multiplexovana. To znamena, ze pre prenos adries a dat staci jedna zbernica a je potreba riadiaci signal urcujuci vyuzitie pre adresy/data.

Interface je (v pripade informatiky) konceptualny pojem, ktory "popisuje" komunikaciu medzi komponentami a zahrnuje aj stycne body. Komponenty mozu fungovat nezavisle na sebe a pouzivata interface na komunikaciu s ostatnymi komponentami za pouzitia prislusneho protokolu. Inymi slovami, interface je spolocna cast zdielana dvoma systemami, zariadeniami, alebo programami. Zahrnuje aj prvky tejto hranice a doplnkove obvody urcene k ich prepojeniu.

Komponenty zbernice 

  • adresova komponenta
    pre adresy I/O zariadeni, adresy pamati 
  • datova komponenta 
  • riadiaca / stavova komponenta
    tu patri prerusenie, DMA ...
Kedysi, procesory boli take pomale, ze stacila jedna zbernica sychronizovana s procesorom. To uz je (nastastie) davno minulostou a preto najdeme v dnesnych PC viacero zbernic. Najdeme 
  • procesorovu zbernicu
    Frontside a Back Side Bus z obrazku 
  • systemovu zbernicu
    Front Side Bus 
  • I/O zbernicu 
    PCI, ISA
  • Lokalne zbernice
    Front Side Bus




Iny priklad s roznymi typmi zbernic. Okrem tohto delenia mozme zbernice rozdelit aj na pararelne zbernice a seriove zbernice. Seriove zbernice sa vacsinou pouzivaju pre systemove ucely a ako zalozne zbernice, napr. pri poruche pararelnej zbernice. 




Prenos udajov po zbernici
  • Synchronny prenos 
    • Pseudosynchronny prenos 
  • Asynchronny prenos 
  • Izochronny prenos 

Priklady prenosu po PCI zbernici.

Napravo je vidno synchronny prenos. Synchronizacia je zabezpecena hodinovym signalom. Na obrazku je vidno aktivny WAIT signal, kedy sa caka na povolenie k zapisu. Takato zbernica je jednosmerne riadena - riadiace jednotka necaka na potvrdenie prikazu. 

 Obojsmerne riadeny prenos. Asynchronny prenos nie je riadeny hodinami.
Pseudosynchronny prenos. Vsimnite si stavovych signalov IRDY a TRDY, ktorymi Iniciator alebo Target ziada o vlozenie wait taktov. Okrem toho tu mame este CLK signal. Inak, vsimnite si burst mode na multiplexovanej adresovej zbernici.








Medzi typicke operacie zbernic patri 
  • citanie 
  • zapis 
  • citanie - zmena - zapis 
  • zapis - citanie 
  • prenos bloku
  • broadcast, teda prikaz vsetkym jednotkam 
  • broadcall, teda vyziadanie urcitych informacii od vsetkych jednotiek, pripadne od urcenych jednotiek 

Korenspondency rezim (hand shake) cinnosti zbernic

Vyuziva sa pri asynchronnych zberniciach. Moze byt 
    • Jenoducho viazany (1)
    • Stredne viazany (2)
    • Plne viazany (3)

V jednoducho viazanom rezime su operacie ukoncene po prijati odozvy od druhej jednotky. Prikaz a potvrdenie prikazu trva stanovenu dobu. V pripade stredne viazaneho rezimu je viazanost na druhu jednotku rozsirene aj na prikaz a v pripade plne viazaneho je vyzadovane potvrdenie v kazdom pripade. 

Z toho vyplyva aj sposob zapisu dat. 

 V 1. pripade sme vyslali write prikaz a po nom prislo potvrdenie. Operacia vyzaduje potvrdenie, takze write sa ukonci po prijati potvrdenia. Potvrdenie prikazu a prikaz nevyzaduje potvrdenie druhej jednotky.
 V 2. pripade sme vyslali prikaz zapis. Ten vyzaduje potvrdenie od druhej jednotky. Potvrdenie trva urcitu stanovenu dobu a nemusi byt aktivne po celu dobu. Po potvrdeni je mozne ukoncit operaciu a takisto aj prikaz zapisu.
V poslednom pripade hand shake-u je potvrdenie druhej stranny vyzadovane vzdy. To znamena, ze signal prikazu write je aktivny po celu dobu zapisu. Po potvrdeni je mozne ukoncit operaciu aj prikaz write. Signal potvrdenia moze "spadnut" az po ukonceni prikazu "zapis". 



Pridelovanie zbernice 
Zbernicu musime nejako pridelovat medzi jednotlive komponenty, ktore ju mozu chciet vyuzivat. Problem je, ako sa rozhodnut, ze kedy a komu? 

Pridelovat mozme centralne pomocou arbitra, alebo distribuovane, teda bez arbitra. 

Centralizovane pridelovanie 

Centralizovane pridelovanie, ktore pouziva jednu centralizovanu zbernicu na ktoru vysielaju poziadavky vsetky zariadenia sa nazvya One Level Bus Arbiter. Ak sa pouzije zbernica pre poziadavky a zbernica pre ACK-y pre kazdy level, tak dostaneme Two Level Bus Arbiter. Arbiter nemusi byt separatne zariadenie. Tuto ulohu moze zastavat aj procesor. 
  • Pooling alebo "cyklicke vyzvy" 
    Pri poolingu ponuka arbiter postupne a adresne zbernicu jednotlivym jednotkam. Deje sa tak po prijati ziadosti. 
  • Paralelne alebo nezavisle (independent request and grants) 
    System poziadaj a potvrdim 
  • Seriove (daisy chain)
  • Kombinovane - teda paralelne + seriove 

 V pripade pararelneho pridelovania je arbitrom prijata ziadost, po ktorej nasleduje ACK a jednotka moze zbernicu zacat pouzivat. ACK pride, ak "nie je obsadene".  Arbiter je prideleny ku kazdej jednotke. Oproti daisy chainingu to ma svoje vyhody. Je fault tolerant a je arbitration time je nizsi. Bohuzial je komplexnejsie na implementaciu a mnozstvo kontrolnych signalov je priamo umerne pripojenym jednotkam. Vyuzivane v PCI.
Daisy Chain je one level bus arbitration. Arbiter obdrzi ziadost, ale nevie, od akeho zariadenia. Preto posle ACK na vsetky zariadenia. Prve zariadenie prijme ACK a pokial vyslalo ziadost, tak potvrdi prijatie vyberu. Ak nie, tak posle ACK dalej. Z tohto vyplyva, ze ak dve zariadenia spravia ziadost v rovnakom case, tak prve na ceste dostane zbernicu. Akurat mi teraz neda, ze co robi signal "Vyber" v nasom obrazku a asi pojde o nejaky upgrade? Takato implementacia ne je fault-tolerant, aribtration time je priamo umerny mnozstvu jednotiek (dobra somal byt posledny). Priorita je dana poradim na zbernici.
Riesi problemy daisy-chainingu a je lacnejsie ako nezavisle pridelovanie. Jednotky su pridelene (bus masters) su rozdelene do N tried. Nezavisle pridelovanie funguje na urovni triedy a v ramci triedy je implemntovany daisy chaining. Vyuziva sa vo VME zberniciach. 






Distribuovane pridelovanie 
Zbernice s tymto rezimom pridelovania nepotrebuju arbitra. Tym odpadaju naklady spojene s arbitrom (cas).

Round Robin 
Jednotky si mozu cyklicky pridelovat pravo pristupu na zbernicu, hovorime o Round Robin metode. Mozme ju porovnat s Token Ring algoritmom. 

Prioritne pridelovanie 
Jednotkam mozme pridelit na zaklade ich priority (vyssia adresa == vyssia priorita). Jednotky nasledne bojuju o pristup na zbernicu. Ak nie je zbernica vyuzivana ziadnou jednotkou, tak jednotka, ktora zbernicu potrebuje vysiela negovane bity svojej adresy na riadiaci (pod)zbernicu. Jednotka, ktorej sa podari vyslat vsetky bity adresy vyhrala a zbernica je jej. Pravidlo vysielanie je, ze sa vysiela (negovane) od address_bitk ... address_bit0. Ak je vyslany bit s poradovym cislom i rovny 0 a vysiela ina jednotka bit s poradovym cislom i, tak nevysiela dana jednotka ziadne bity v radoch nizsich ako i ... takze vlastne ak jednotka c.1 vysle napriklad 1110 a zaroven jednotka c.2 vysiela 1111, tak jednotka c.1 dalej dookola vysiela 0-u a c.2 veselo pokracuje dalej. Tym je zabezpecena priorita jednotky s vyssou adresou. 



V tomto priklade vyhrala posledna jednotka. 



Problemy, ku ktoremu tu dochadza je tzv. "starvation" sposobeny velkym zatazenim zbernice. Jednotky s nizkou prioritou nemaju sancu. Kazda jednotka, ktora ziska zbernicu, si to zapamata a prestane vysielat 0-u na zbernicu. Neuspokojene jednotky zatial vysielaju 0-u. Nazyvame to "fairness" :). Fairness je implementovana pomocou R-S klopneho obvodu.