MAGISTRALE
==========

U nastavku sledi kratak podsetnik sa predavanja. Za vise informacija
student treba da konsultuje literaturu (Dandamudi, strane 147-165,
Tanenbaum, strane 176-187, Hamacher, strane 228-259).

MAGISTRALA je skup linija koje povezuju dva ili vise uredjaja. Preko
magistrale se prenose podaci i/ili instrukcije izmedju dva uredjaja.
Tipicno, magistrala ima sledeci izgled:

                     MAGISTRALA
  <----------------------------------------------------------->
     |            |           |                   |
   __|___       __|___      __|___              __|___
  |      |     |      |    |      |            |      | 
  |  U1  |     |  U2  |    |  U3  |   .....    |  Un  |
  |______|     |______|    |______|            |______|

Dakle, svi uredjaji se povezuju na isti komunikacioni kanal. Vrednost
koju neki od uredjaja propusti na svoj izlaz se prenosi preko
magistrale do ostalih uradjaja. Kako ne bi doslo do kolizije signala,
uslov je da u svakom trenutku najvise jedan uredjaj svoju vrednost
pusta na magistralu. Ovo se postize upotrebom bafera sa tri stanja na
izlazima uredjaja.

Pod TRANSAKCIJOM na magistrali podrazumevamo bilo koju zaokruzenu
aktivnost na magistrali. Svaka transakcija moze ukljucivati jednu ili
vise OPERACIJA na magistrali (citanje, pisanje, ...). U svakom
trenutku se putem magistrale moze obavljati najvise jedna
transakcija. U svakoj transakciji ucestvuju dva uredjaja: jedan koji
inicira transakciju (aktivni uredjaj, engl. master) i jedan koji
odgovara na zahtev (pasivni uredjaj, engl. slave). Tipican aktivni
uredjaj je procesor, dok je tipican pasivni uredjaj
memorija. Komunikacija izmedju uredjaja pri svakoj transakciji
regulisana je skupom pravila koja nazivamo PROTOKOL MAGISTRALE.


U ovom tekstu razmatramo PARALELNE MAGISTRALE. Kod ovih magistrala,
podaci se prenose rec po rec, tako sto postoji n paralelnih linija
koje omogucavaju prenos svih bitova reci odjednom. O serijskim
magistralama (kod kojih se podaci prenose bit po bit putem jedne
linije) bice reci kasnije. Paralelna magistrala se danas tipicno
koristi za komunikaciju izmedju procesora i memorije (pa je nazivamo
MEMORIJSKA MAGISTRALA), ali se ranije koristila i za komunikaciju
izmedju procesora i drugih uredjaja u racunarskom sistemu, poput
ulazno izlaznih uredjaja (u tom kontekstu je koriscen termin SISTEMSKA
MAGISTRALA). Takodje, u racunarskom sistemu mozemo imati i vise
procesora koji komuniciraju sa istom memorijom putem iste
magistrale. Otuda je razumno pretpostaviti da mozemo imati vise master
uredjaja koji se takmice za pristup magistrali.

Paralelna magistrala, pored linija za prenos podataka (tzv. magistrale
podataka) obicno sadrzi i posebne linije za prenos adrese od aktivnog
ka pasivnom uredjaju (tzv. adresna magistrala). Pored toga, magistrala
sadrzi i razlicite kontrolne signale kojima se uskladjuje komunikacija
izmedju aktivnog i pasivnog uredjaja i obezbedjuje realizacija
definisanog protokola.

Napomenimo da kod nekih tipova paralelnih magistrala, zbog ustede u
broju linija, ne postoje posebno magistrala podataka i adresna
magistrala, vec se iste linije koriste i za prenos podataka i za
prenos adresa (naravno, u razlicitim ciklusima). Takve magistrale
nazivamo MULTIPLEKSIRANE MAGISTRALE (tipican predstavnik ovakvih
magistrala bila je PCI magistrala koja se koristila za komunikaciju
procesora za ulazno izlaznim uredjajima). 

Magistrale su danas obicno sinhrone, sto znaci da se komunikacija
izmedju aktivnog i pasivnog uredjaja sinhronizuje sa casovnikom, tj.
signali se izmedju uredjaja prenose na rubovima casovnika. Otuda se
i sam protokol magistrale definise u odnosu na rubove casovnika. 

*) SIRINA PARALELNE MAGISTRALE

   -- Broj bitova adresne magistrale odredjuje velicinu adresibilnog
      prostora (npr. 32-bitna adresna magistrala moze da adresira 2^32
      bajtova, tj. 4GB; moderni Intel-ovi i AMD-ovi procesori koriste
      i do 48 adresnih linija, sto omogucava adresiranje 256TB fizicke
      memorije).
      
   -- Broj bitova magistrale podataka odredjuje velicinu podatka koji
      se moze preneti u jednom transferu (moderni Intel-ovi procesori
      imaju 64-bitnu magistralu podataka).
      
*) VRSTE TRANSAKCIJA NA PARALELNOJ MAGISTRALI

   -- CITANJE: podrazumeva citanje jedne reci iz memorije.
   
   -- UPIS: podrazumeva upis jedne reci u memoriju.
   
   -- CITANJE BLOKA PODATAKA: podrazumeva citanje vise uzastopnih reci
      iz memorije. Na primer, kod Intel-ovih procesora koristi se
      64-bitna magistrala podataka. Citanje bloka podrazumeva citanje
      4 susedne 64-bitne reci (32 susedna bajta) iz memorije. Ova
      operacija zahteva vise ciklusa.  Medjutim, obicno je brze
      procitati vise susednih reci u jednoj blok operaciji nego u vise
      uzastopnih operacija pojedinacnog citanja. Razlog se sastoji u
      kasnjenju memorije (engl. memory latency) -- kada procesor
      kontaktira memoriju, potrebno je najpre neko vreme da memorija
      odgovori na njegov zahtev, tj. da se zapocne sa transferom
      podataka.  Obicno je ovo kasnjenje znatno vece od vremena
      transfera, pa je zato efikasnije da se pri istoj transakciji
      prenese vise podataka, nego da se svi ti podaci prenose u
      posebnim transakcijama.

   -- DMA PRISTUP: podrazumeva direktan pristup memoriji (engl. Direct
      Memory Access). Kada je potrebno procitati vecu kolicinu
      podataka iz nekog ulaznog uredjaja, tada procesor to obicno
      prepusta posebnom kontroleru direktnog pristupa (engl. DMA
      controller) koji igra ulogu mastera u takvoj transakciji. On
      kontaktira ulazni uredjaj, kao i memoriju i upravlja transferom
      podataka iz ulaznog uredjaja u memoriju preko magistrale.
   
   -- READ-MODIFY-WRITE: Ovaj tip operacije omogucava atomicko citanje
      i upis nekog podatka u memoriju. Iako ova operacija objedinjuje
      citanje i pisanje, tokom njenog trajanja nije moguce da neko
      drugi pristupi magistrali. Na taj nacin se obezbedjuje
      atomicnost.  Ova operacija se obicno koristi prilikom
      implementacije operativnih sistema za realizaciju ekskluzivnog
      pristupa.
   
*) ARBITRAZA MAGISTRALE 

  -- Ako postoji vise mastera koji zele da u isto vreme koriste
     magistralu, potrebno je odrediti kojim ce redosledom da je
     koriste (jer se u svakom trenutku najvise jedna transakcija moze
     obavljati preko magistrale).

  -- Arbitraza podrazumeva razresavanje konflikata pri istovremenim
     zahtevima za pristup magistrali. Arbitraza se obicno obavlja
     dinamicki, tj. magistrala se uredjaju dodeljuje na zahtev. Dakle,
     master uredjaj salje signal za zahtev (engl. request), a
     odgovarajuci sistem za arbitrazu mu vraca signal dozvole
     (engl. grant). Tek kada dobije grant signal, moze pristupiti
     magistrali. Arbitraza moze biti:

     -- CENTRALIZOVANA: postoji posebno kolo za arbitrazu (ARBITAR
        MAGISTRALE) koje u slucaju vise simultanih zahteva odredjuje
        kome ce magistrala biti dodeljena, u skladu sa nekom
        politikom.

     -- DISTRIBUIRANA: ne postoji posaban arbitar, vec se masteri sami
        dogovaraju o redosledu (tako sto izmedju njih postoje
        odgovarajuce komunikacione linije, a unutar njih odgovarajuca
        logika koja donosi odluke).

  -- POLITIKE DODELE MAGISTRALE:

     Mogu se podeliti u dve grupe:

     -) Politike fiksiranih prioriteta: svaki master uredjaj ima
        fiksirani prioritet i u skladu sa tim fiksiranim prioritetima
        se odredjuje koji ce uredjaj dobiti magistralu.

     -) Politike rotirajucih prioriteta: u ovom slucaju prioriteti
        nisu fiksirani, vec se dinamicki menjaju. Ovim se izbegava
        "izgladnjivanje" uredjaja koje moze da nastupi u slucaju
        fiksiranih prioriteta, kada uredjaj sa visokim prioritetom
        stalno zahteva pristup magistrali.  Jedna varijanta je da se
        prioritet uredjaja uvecava srazmerno vremenu koje je proveo u
        cekanju na magistralu. Time se garantuje da ce u nekom
        trenutku njegov prioritet postati dovoljno visok da dobije
        magistralu. Druga varijanta ove politike je tzv. kruzna
        politika (round-robin), kod koje se uredjaju koji je upravo
        koristio magistralu dodeljuje najmanji moguci prioritet, cime
        se efektivno stavlja na kraj reda (ovim se postize
        dodeljivanje magistrale masterima u krug).

     Jedan od zahteva koji se postavlja je da politika bude fer,
     tj. da omoguci da svi uredjaji koji zahtevaju magistralu na kraju
     i dobiju pristup magistrali, tj. da nema izgladnjivanja. Politika
     rotirajucih prioriteta to jeste, dok politika fiksiranih
     prioriteta to nije.  Postoje i druge fer politike koje nisu
     zasnovane na prioritetima.  Na primer, moze se definisati
     maksimalno vreme koje sme da prodje od trenutka postavljanja
     zahteva za pristup magistrali do trenutka kada uredjaj dobije
     pristup magistrali. U tom slucaju, garantovano je da ce svaki
     uredjaj koji zahteva magistralu dobiti pristup u nekom fiksiranom
     unapred definisanom roku.

     U praksi se cesto koriste hibridne politike koje kombinuju
     prioritete kao i tehnike za postizanje ravnopravnosti
     (tj. sprecavanje izgladnjivanja).


  -- POLITIKE OSLOBADJANJA MAGISTRALE:

     Dele se u dve grupe:

     -) politike bez preuzimanja (non-preemptive): ove politike
     podrazumevaju da kada neki uredjaj dobije pristup magistrali,
     tada mu taj pristup ne moze biti oduzet dok on sam dobrovoljno ne
     oslobodi magistralu. Jedna varijanta je da uredjaj automatski
     oslobadja magistralu po zavrsetku transakcije. Drugi pristup je
     da uredjaj oslobadja magistralu po zavrsetku transakcije jedino u
     slucaju da postoji zahtev nekog drugog uredjaja za pristup
     magistrali. Ovaj pristup se koristi kada neki uredjaj dominantno
     koristi magistralu (npr. procesor) dok ostali uredjaji tek
     povremeno zahtevaju pristup magistrali.  Tada nema smisla stalno
     oslobadjati i ponovo zahtevati pristup magistrali od strane istog
     uredjaja.

     -) politike sa preuzimanjem (preemptive): ove politike
     podrazumevaju da se uredjaju moze prekinuti transakcija i oduzeti
     magistrala u slucaju da neki drugi uredjaj viseg prioriteta
     zahteva pristup magistrali. Ovo je korisno u slucaju veoma dugih
     transakcija koje mogu dovesti da drugi uredjaji ne mogu dobiti
     magistralu kada im je hitno potrebna.

  -- IMPLEMENTACIJA ARBITRAZE:

     Bez obzira na to da li je arbitraza centralizovana ili
     distribuirana, mozemo razlikovati sledece varijante
     implementacije:

     -) JEDINSTVENI SIGNALI ZA ZAHTEV I DODELU MAGISTRALE: Signal za
     zahtev se formira kao disjunkcija signala za zahtev pojedinacnih
     uredjaja (tj. bice 1 akko bar jedan od njih trazi pristup
     magistrali). Sa druge strane, signal za dodelu magistrale
     (tzv. grant signal) se prosledjuje od jednog do drugog
     uredjaja. Ako neki uredjaj nije poslao signal za zahtev, on ce
     prosto proslediti grant signal sledecem uredjaju u nizu. Sa druge
     strane, ako je taj uredjaj zahtevao pristup magistrali, on nece
     dalje prosledjivati grant signal, vec ce pristupiti
     magistrali. Ova jednostavna implementacija se obicno naziva
     ULANCAVANJE (engl. daisy-chaining). Jednostavna je za
     implemantaciju, ali obezbedjuje fiksni prioritet (uredjaji koji
     su na pocetku lanca imaju visi prioritet u odnosu na one koji
     slede iza).

     -) NEZAVISNI SIGNALI ZA ZAHTEV I DODELU MAGISTRALE: Svaki uredjaj
     salje poseban signal za zahtev koji se prosledjuje arbitru (u
     slucaju centralizovane arbitraze) odnosno svim drugim uredjajima
     (u slucaju distribuirane arbitraze). Takodje, svaki uredjaj ima
     sopstveni grant signal. Ovaj pristup omogucava implementaciju
     slozenijih politika dodela magistrale. Problem je u slozenijoj
     implementaciji.

     -) HIBRIDNI PRISTUP: kompromis izmedju gornja dva. Uredjaji se
     dele u grupe. Svaka grupa ima svoj jedinstven signal za zahtev
     kao i grant signal. Uredjaji u svakoj grupi se povezuju
     ulancavanjem.

*) PRIMER PROTOKOLA SINHRONE PARALELNE MAGISTRALE

  -) Pretpostavimo da imamo sinhronu paralelnu razdvojenu magistralu
     sa 32-bitnom magistralom podataka i 32-bitnom adresnom
     magistralom. Magistrala omogucava dve vrste transakcija: citanje
     i upis pojedinacne 32-bitne reci. Arbitraza magistrale je
     centralizovana sa nezavisnim zahtevima [nije precizirana politika
     dodeljivanja, jer je to ostavljeno arbitru]. Politika
     oslobadjanja je bez preuzimanja, zasnovana na transakcijama.

  -) Postoje sledeci kontrolni signali:

     *) bus_request: ovaj signal master uredjaj (u nasem primeru
     	procesor) salje kolu za arbitrazu magistrale, zahtevajuci
     	pristup magistrali. Podrazumevano je 0 (nema zahteva za
     	magistralom), a postavlja se na 1 kada zelimo da dobijemo
     	pristup magistrali. Ovaj signal se po protokolu postavlja na
     	uzlaznoj ivici casovnika. Iskljucuje se kada master dobije
    	pristup magistrali (tj. kada stigne bus_grant signal).

     *) bus_grant: ovaj signal kolo za arbitrazu magistrale salje
        master uredjaju, kako bi ga obavestio da mu je dodeljena
        magistrala. Podrazumevano je 0, a dobija vrednost 1 kada je
        magistrala dodeljena procesoru. Kolo za arbitrazu ne sme
        dodeliti magistralu drugom uredjaju dokle god je transakcija u
        toku (sto se vidi na osnovu bus_in_use signala). Dakle, u
        pitanju je politika oslobadjanja magistrale bez preuzimanja
        (non-preemptive), pri cemu master oslobadja magistralu cim
        zavrsi transakciju. bus_grant signal se ukljucuje na silaznoj
        ivici casovnika, a iskljucuje se na sledecoj silaznoj ivici (u
        tom trenutku je transakcija vec zapocela).

     *) bus_in_use: ovaj signal master postavlja na magistralu da bi
        ostalim uredjajima (i arbitru) naznacio da je zapoceo
        transakciju. Ovaj signal ostaje ukljucen dokle god se ne
        zavrsi transakcija. Ukljucuje se na uzlaznoj ivici casovnika
        (na prvoj sledecoj uzlaznoj ivici nakon sto arbitar ukljuci
        bus_grant signal). [negde se ovaj signal zove bus_busy].

     *) bus_command: ovaj signal master salje slave-u da naznaci da li
     	je u pitanju operacija citanja ili pisanja (0 za citanje, 1 za
     	pisanje). Podrazumevano ima vrednost z. Ukljucuje se kad i
     	bus_in_use signal, na uzlaznoj ivici casovnika i ukljucen je
     	dokle god traje transakcija. [u slucaju da magistrala podrzava
     	vise tipova transakcija, umesto jednog bus_command signala
     	bismo imali vise signala cijom kombinacijom bismo odredili
     	zeljenu operaciju.]

     *) bus_wait: ovaj signal slave salje masteru preko magistrale
        ukoliko nije u stanju da izvrsi trazenu operaciju na prvoj
        sledecoj silaznoj ivici nakon zapocetka transakcije (sto je
        podrazumevano ponasanje). bus_wait = 1 znaci da se mora cekati
        jos jedan ciklus (ubacivanjem stanja cekanja u konacni automat
        mastera) da bi se tek na sledecoj silaznoj ivici ponovo
        proverio status bus_wait signala. bus_wait = 0 znaci da je
        operacija uspesno izvrsena i da mozemo da zavrsimo
        transakciju. [negde se ovaj signal zove i ready, i ukljucuje
        se kada je operacija zavrsena.].

  -) Adresne linije se postavljaju od strane mastera nakon dobijanja
     pristupa magistrali od strane arbitraze na prvoj sledecoj
     uzlaznoj ivici casovnika (u isto vreme kad i bus_in_use i
     bus_command signali). U slucaju operacije pisanja, podatak se
     postavlja od strane mastera u istom trenutku. U slucaju citanja,
     podatak se na magistralu podataka postavlja od strane pasivnog
     uredjaja na prvoj sledecoj silaznoj ivici nakon sto master
     postavi adresu i komandu (osim u slucaju da pasivni uredjaj nije
     u mogucnosti tako brzo da odgovori, u kom slucaju se ukljucuje
     bus_wait signal, a postavljanje podatka se odlaze za neku sledecu
     uzlaznu ivicu casovnika).

     U nastavku slede detaljni dijagrami signala za operacije citanja
     i pisanja. Oznaka "zzzz" znaci da je u pitanju vrednost visoke
     impedanse (iskljucena zica), dok oznaka "----" znaci "neka
     proizvoljna visebitna vrednost". Oznaka "____" znaci vrednost 0,
          ______
     dok "      " oznacava vrednost 1. Prva i poslednja linija u
     dijagramu oznacavaju stanja konacnih automata aktivnog i
     pasivnog uredjaja u toku realizacije odgovarajuce transakcije.
     

DIAGRAM SIGNALA ZA OPERACIJU CITANJA:

MASTER:    Start  GrantWait  Command   End
                 T1        T2        T3        T4        T5
                  ____      ____      ____      ____      ____
 clk:          __|    |____|    |____|    |____|    |____|    |_

                  _________
bus_request:   __|         |___________________________________
      
                       _________
bus_grant:     _______|         |______________________________
                            _________
bus_in_use:    ____________|         |_________________________

bus_command:   zzzzzzzzzzzzz_________zzzzzzzzzzzzzzzzzzzzzzzzzz

addr:          zzzzzzzzzzzzz---------zzzzzzzzzzzzzzzzzzzzzzzzzz

data:          zzzzzzzzzzzzzzzzzz---------zzzzzzzzzzzzzzzzzzzzz
                                      
bus_wait:      ________________________________________________

SLAVE:                      Idle   Done    Idle


DIAGRAM SIGNALA ZA OPERACIJU CITANJA SA STANJEM CEKANJA:

MASTER:    Start  GrantWait  Command    Wait   End
                 T1        T2        T3        T4        T5
                  ____      ____      ____      ____      ____
 clk:          __|    |____|    |____|    |____|    |____|    |

                  _________
bus_request:   __|         |___________________________________
      
                       _________
bus_grant:     _______|         |______________________________
                            ___________________
bus_in_use:    ____________|                   |_______________

bus_command:   zzzzzzzzzzzzz___________________zzzzzzzzzzzzzzzz

addr:          zzzzzzzzzzzzz-------------------zzzzzzzzzzzzzzzz

data:          zzzzzzzzzzzzzzzzzzzzzzzzzzzz---------zzzzzzzzzzz
                                 _________
bus_wait:      _________________|         |____________________

SLAVE:                      Idle   Work     Done      Idle



DIAGRAM SIGNALA ZA OPERACIJU PISANJA:

MASTER:    Start  GrantWait  Command    End
                 T1        T2        T3        T4        T5
                  ____      ____      ____      ____      ____
 clk:          __|    |____|    |____|    |____|    |____|    |

                  _________
bus_request:   __|         |___________________________________
      
                       _________
bus_grant:     _______|         |______________________________
                            _________
bus_in_use:    ____________|         |_________________________
                            _________
bus_command:   zzzzzzzzzzzzz         zzzzzzzzzzzzzzzzzzzzzzzzzz

addr:          zzzzzzzzzzzzz---------zzzzzzzzzzzzzzzzzzzzzzzzzz

data:          zzzzzzzzzzzzz---------zzzzzzzzzzzzzzzzzzzzzzzzzz
                
bus_wait:      ________________________________________________

SLAVE:                      Idle   Done     Idle



DIAGRAM SIGNALA ZA OPERACIJU PISANJA SA STANJEM CEKANJA:

MASTER:    Start  GrantWait Command   Wait   End
                 T1        T2        T3        T4        T5
                  ____      ____      ____      ____      ____
 clk:          __|    |____|    |____|    |____|    |____|    |

                  _________
bus_request:   __|         |___________________________________
      
                       _________
bus_grant:     _______|         |______________________________
                            ___________________
bus_in_use:    ____________|                   |_______________
                            ___________________
bus_command:   zzzzzzzzzzzzz                   zzzzzzzzzzzzzzzz

addr:          zzzzzzzzzzzzz-------------------zzzzzzzzzzzzzzzz

data:          zzzzzzzzzzzzz-------------------zzzzzzzzzzzzzzzz
                                 _________
bus_wait:      _________________|         |____________________

SLAVE:                      Idle     Work   Done     Idle


NAPOMENA: U slucaju da magistrala podrzava i operaciju citanja/pisanja
bloka od npr. 4 podatka, tada bismo imali jos jedan kontrolni signal
koji bismo zvali npr. "burst" koji bi bio 0 podrazumevano, a bio bi
postavljan na 1 (u kombinaciji sa bus_command = 0/1) kada zelimo da
vrsimo citanje/pisanje bloka podataka. U tom slucaju bi prilikom
citanja pasivni uredjaj u cetiri uzastopna ciklusa (cetiri uzastopne
silazne ivice pocev od ciklusa T2) slao sledeci podatak, a na
odgovarajucim uzlaznim ivicama koje slede bi master prihvatao poslate
podatke. Slicno vazi za upis, s tim sto bi sada master na uzlaznim
ivicama (pocev od T2) postavljao sledeci podatak, a na silaznim bi
pasivni uredjaj prihvatao poslate podatke. Student za vezbu moze
da nacrta dijagrame signala u tim slucajevima. 
