|
Arbitrarea magistralelor
Pana acum, am stabilit tacit ca avem de a face doar cu un singur master pentru magistrala, CPU-ul. In realitate, chipurile I/O trebuie sa treaca in regim de master de magistrala pentru a scrie si a citi memoria si, de asemenea, sa produca intreruperi. De asemenea, este posibil ca si coprocesoarele sa aiba nevoie de a lucra in regim de master de magistrala..Mecanismele de arbitrare a magistralelor pot fi centralizate sau descentralizate. Sa studiem intai problema arbitrajului centralizat.O forma simpla de arbitraj centralizat este prezentata in figura 14a. In aceasta schema, un arbitru de magistrala hotaraste cine va trece in regim master de magistrala. Multe CPU-uri au posibilitatea de arbitrare integrata in chip, dar uneori este nevoie de un chip separat.Magistrala contine o singura linie pentru cererea SAU - cablat (wired - OR) care poate fi ntransmisa oricand de catre unul sau mai multe componente. Nu este posibil pentru arbitru sa stie cate componenete solicita magistrala la un moment dat. Singurele categorii pe care le poate distinge sunt cateva cereri sau nici o cerere.
Cand arbitrul vede o cerere de utilizare a magistralei, permite accesarea ei activand linia magistralei de acceptare. Aceasta linie este conectata in serie prin toate componentele I/O.
Cand componenta cea mai apropiata fizic de arbitru primeste aprobarea, verifica daca a facut o cerere. Daca a facut-o, preia controlul magistralei, dar nu trimite aprobarea in continuare pe linie. Daca nu a facut nici o cerere, trimite in continuare pe linie aprobarea, la urmatoarea componenta, care se comporta lafel, si tot asa pana cand o componenta accepta si preia controlul magistralei. Aceasta schema este numita inlantuire de tip "daisy chain" si are proprietatea ca toate componentele au fixate un anumit nivel de prioritate depinzand de cat de aproape sunt de arbitru. Cea mai apropiata componenta castiga.
Pentru a eluda prioritatile implicite bazate pe distanta de la arbitru, multe magistrale au nivele de prioritate multiple. Pentru fiecare nivel de prioritate apar cate o linie de cerere si o linie de acceptare. Figura 14b are 2 nivele, 1 si 2 (magistralele adevarate au adeseori 4, 8 sau 16 nivele). Fiecare componenta este atasata la unul din nivelele de cerere ale magistralei, componentele care au nevoie de accesarea mai rapida a magistralei avand o prioritate mai mare. In figura 14b componentele 1, 2 si 4 folosesc prioritatea 1 in timp ce componentele 3 si 5 folosesc prioritatea 2. Daca nivelele de prioritate multiple sunt cerute simultan, arbitrul permite accesarea numai celui cu prioriatea cea mai mare. Intre componente de aceeasi prioritate, se foloseste inlantuirea de tip daisy. In figura 14b, in cazul conflictelor,componenta 2 castiga asupra componentei cu numarul 4, care castiga asupra celei cu numarul 3. Componenta 5 are cea mai mica prioritate din cauza faptului ca este la sfarsitul lantului daisy cu cea mai mica prioritate.
Ca o observatie, nu este tehnic necesara legarea liniei de acceptare a nivelului 2 a magistralei serial prin componentele 1 si 2 avand in vedere faptul ca ele nu pot emite cereri pe ea.
Oricum, ca o conventie de implementare, este mai usor sa se lege toate liniile de acceptare prin toate componentele decat sa se faca legaturi speciale care depind de prioritatea componentelor.
Unele circuite de arbitrare au o a treia linie, pe care componenta o activeaza cand aceasta a acceptat cererea si preia controlul magistralei. Indata ce aceasta a trimis acest semnal de confirmare (acknowledge), liniile de cerere si acceptare pot fi dezactivate. Ca rezultat, alte componente pot cere accesul asupra magistralei in timp ce prima componenta foloseste magistrala. Pana cand transferul curent este terminat, urmatorul master de magistrala va fi deja selectat si poate porni imediat ce linia de confirmare a fost dezactivata. Este momentul in care urmatoarea runda de arbitrare poate incepe. Aceasta schema impune inca o linie de magistrala si mai multa capacitate logica pentru fiecare componenta, dar foloseste mai bine ciclurile magistralei.
In sistemele in care memoria este pe magistrala principala, CPU-ul trebuie sa concureze impreuna cu celelalte componente I/O pentru magistrala la aproape fiecare ciclu. O solutie comuna pentru aceasta situatie este alocarea celei mai mici prioritati pentru CPU, astfel el primeste acces la magistrala numai cand nimeni altcineva nu cere accesul. Ideea aici este cuCPU-ul poate astepta oricand, dar componentele I/O trebuie sa primeasca controlul magistralei rapid, altfel pierzandu-se datele. Discurile rotindu-se la viteze mari nu pot astepta.
Aceasta problema este evitata in multe sisteme moderne punand memoria pe o magistrala separata de celelalte componente I/O, pentru a nu mai concura pentru accesul la magistrala.
Arbitrajul descentralizat al magistralei este, de asemenea, posibil.
De exemplu, un computer ar putea avea 16 linii de cerere pentru prioritati. Cand o
componenta vrea sa foloseasca magistrala, trimite un semnal de cerere. Toate componentele monitorizeaza toate liniile de cerere, astfel ca la sfarsitul fiecarui ciclu fiecare componenta stie daca a fost aceea cu cea mai mare prioritate astfel stiind daca ii este permis sa foloseasca magistrala in timpul urmatorului ciclu. In comparatie cu arbitrajul centralizat, aceasta metoda de arbitrare are nevoie de mai multe linii de magistrala, dar evita potentialul cost al arbitrului.
De asemenea, limiteaza numarul de componente la numarul de linii de cerere.
Alt tip de arbitrare descentralizata a magistralei, prezentata in figura 15, foloseste doar 3 linii, oricate componente ar fi prezente. Prima linie de magistrala este o linie SAU - cablata pentru cereri la magistrala. A doua linie este numita BUSY si este activata de masterul de magistrala curent. A treia linie este folosita pentru a arbitra magistrala. Ea este legata de toate componentele folosind metoda daisy chain. Capul acestui lant este tinut in regim de activare legandu-l la sursa de energie de 5 volti, de exemplu.
Cand nici o componenta nu doreste accesul la magistrala, linia de arbitrare este propagata la toate componentele. Pentru a primi controlul la magistrala, o componenta verifica intai daca magistrala nu este ocupata si semnalul de control pe care il primeste, pe IN, este activ. Daca IN este dezactivat, nu poate deveni master pe magistrala si dezactiveaza OUT. Daca IN este activ, componenta dezactiveaza OUT, ceea ce cauzeaza ca vecinul sa vada IN inactiv si sa furnizeze OUT inactiv. Astfel, vecinii din amonte vad IN inactiv si inactiveaza OUT. Cand se termina procesul, numai o componenta va primi IN activ si va dezactiva OUT. Aceasta componenta devine master de magistrala, transmite BUSY si OUT, si incepe transferul.
Simpla analiza a problemei va scoate la lumina faptul ca, componenta cea mai din stanga care vrea accesul la magistrala il primeste. Astfel, aceasta schema este similara cu cea a inlantuirii daisy chain, exceptand prezenta arbitrului, astfel este mai ieftina, mai rapida si nu poate fi afectata de defectarea arbitrului.