Skripta iz Arhitekture i organizacije ra cunara (radna ...nasport.pmf.ni.ac.rs/materijali/1265/Skripta.pdf · Glava 1 Ocena performansi 1.1 Teorija Svi procesori (kao kona cni automati)

  • Upload
    builien

  • View
    264

  • Download
    9

Embed Size (px)

Citation preview

  • Skripta iz Arhitekture i organizacijeracunara (radna verzija)

    Nikola MilosavljevicPrirodno-matematicki fakultet, Univerzitet u Nisu

    Departman za racunarske naukee-mail: [email protected]

    Nis, Novembar 2014.

  • Sadrzaj

    1 Ocena performansi 21.1 Teorija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2 Glavna memorija i kes memorija 92.1 Teorija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3 Resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3 Sekundarna memorija i organizacija ulaza/izlaza 183.1 Teorija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.3 Resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    4 MIPS 254.1 Teorija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3 Resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5 Hazardi, protocnost i adresiranje 365.1 Teorija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.3 Resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    6 Mikroprocesor Intel 8086 416.1 Teorija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426.3 Resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    1

  • Glava 1

    Ocena performansi

    1.1 Teorija

    Svi procesori (kao konacni automati) izvrsavaju instrukcije u diskretnim vremenskim intervalimana osnovu impulsa koje generise specijalno elektronsko kolo - sat. Radni takt (frekvencija)procesora je ucestalost tih impulsa i meri se u Hercima (Hz1). Na primer, ukoliko je radni taktnekog procesora 2.8 GHz, to znaci da njegov sat svake sekunde generise 2.8 109 taktnih intervala(ciklusa) pri cemu svaki od njih traje 1

    2.8109 sekundi. Radni takt procesora R oznacavacemo safR a duzinu njegovog taktnog intervala sa tR. Jasno je da vazi

    tR =1

    fR. (1.1)

    Program (za neki procesor) duzine N je niz od N instrukcija (naredbi) - I1, I2, . . . , IN . Zasvaku instrukciju je karakteristicna mera CPI (cycles per instruction) - broj ciklusa (radnihtaktova) koji su potrebni da bi se data instrukcija izvrsila. CPI za i-tu instrukciju cemo oznacavatisa cpii. Skup svih mogucih instrukcija je konacan i moze se podeliti na klase (tipove) koje sesastoje od srodnih instrukcija. Na primer, klase mogu biti: Load/Store instrukcije, Addi/Subiinstrukcije, logicke instrukcije...

    Pretpostavimo da je dati skup instrukcija podeljen u K klasa. Neka se neki program P sastojiod N instrukcija ovog skupa, pri cemu njih k1 pripada klasi 1, k2 pripada klasi 2, . . ., kK pripadaklasi K (k1 + k2 + . . .+ kK = N). Za i-tu klasu (i {1, 2, . . . ,K}) koristimo sledece oznake:

    CPIi - prosecan broj taktnih intervala (CPI) potreban za izvrsavanje instrukcije iz ove klase.

    IFi (instruction frequency) - procenat instrukcija iz klase i u odnosu na ukupan brojinstrukcija2. Ovaj broj je jednak kiN .

    CPI prosecne instrukcije datog programa P duzine N , u oznaci CPIavg, predstavlja arit-meticku sredinu CPI vrednosti svih instrukcija:

    CPIavg =cpi1 + cpi2 + . . .+ cpiN

    N=

    Ki=1

    IFi CPIi (1.2)

    Oznacimo vreme izvrsavanja prethodnog programa P na nekom fiksiranom procesoru R saTR(P ). Ova vrednost je jednaka prozivodu ukupnog broja taktnih intervala potrebnih za izvrsavanje

    1Podsetimo se da je 1Hz = 1s1 gde je s (sekunda) osnovna jedinica SI sistema.2Obratiti paznju da u nekim literaturama ova oznaka oznacava broj instrukcija (ki) a ne procenat.

    2

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 3

    svih instrukcija programa P i duzine trajanja jednog taktnog intervala3. Koristeci ranije oznake,dobijamo nekoliko razlicitih formula:

    TR(P ) =Ni=1

    cpii tR = N Ki=1

    IFi CPIi tR = N CPIavg tR. (1.3)

    Primetimo da definicija broja CPIavg sluzi za pojednostavljivanje: mozemo zamisliti da se pro-gram P sastoji od N identicnih instrukcija ciji je CPI jednak CPIavg i njegovo vreme izvrsavanjace ostati isto.

    MIPS (million instructions per second) je mera koja se cesto koristi za predstavljanjebrzine racunara i oznacava koliko miliona prosecnih instrukcija dati racunar moze izvrsiti usekundi. Za dati racunar R vazi

    MIPSR =fR

    CPIavg 106 = 1

    CPIavg tR 106. (1.4)

    Primetimo da je za racunanje MIPS-a potrebno imati podatak o CPIavg tj. znati sta je prosecnainstrukcija. Zbog toga ova mera zavisi ili od datog programa (u odnosu na koji definisemo prosecnuinstrukciju) ili od unapred zadate raspodele instrukcija datog skupa.

    Izvrsavanje nekog programa P na masini R se moze ubrzati poboljsanjem nekog dela masine ilipoboljsanjem nekog dela programa. Posmatrajuci poslednji deo jednacine (1.3) ubrzanje mozemopostici optimizovanjem programa (smanjivanjem duzine N), boljom implementacijom seta instruk-cija (smanjivanjem CPIavg) kao i povecanjem radnog takta (tj. smanjivanjem tR). Ukoliko jeTold vreme izvrsavanja programa P na masini R pre poboljsanja a Tnew vreme izvrsavanja poslepoboljsanja (programa i/ili masine), tada ubrzanje definisemo kao

    S =ToldTnew

    . (1.5)

    Vecina programa sadrze delove koji se mogu ubrzati (usavrsiti) i delove koji se ne mogu ubrzati.Oznacimo sa Fupg deo datog programa P koji se moze ubrzati (npr. Fupg = 0.25 oznacava da se25% programa moze ubrzati) a ubrzanje tog dela programa sa Supg. Tada za novo i staro vremeizvrsavanja ovog programa vazi

    Tnew = Told (1 Fupg) +ToldSupg

    Fupg

    odakle dobijamo formulu za ubrzanje programa4:

    S =1

    (1 Fupg) + FupgSupg. (1.6)

    Jako je bitno napomenuti da se u prethodnom razmatranju (poslednje dve jednacine) po-drazumeva da je brzina delova programa proporcionalna njihovoj velicini - npr. 25% programaP trosi 25% od ukupnog vremena (Told). Ukoliko to nije slucaj

    5 tada pod Fupg podrazumevamovremenski deo programa. Primer: instrukcije mnozenja cine 30% programa (npr. 300 od 1000instrukcija su instrukcije mnozenja) ali se na ove instrukcije trosi 80% vremena celog programa;ako se mnozenje moze ubrzati, tada je Fupg = 0.8 a ne 0.3.

    3Ovde podrazumevamo (i podrazumevacemo ukoliko nije drugacije naglaseno) da nema praznih taktnih intervalaizmedu instrukcija, da se instrukcija izvrsava tokom uzastopnih taktnik intervala i da nema nikakve paralelizacije.

    4Ova formula predstavlja specijalan slucaj Amdahl-ovog zakona koji se odnosi na ubrzanje koristeci paralelizaciju.5A cesto nije, npr. ako neki program cini 50% celobrojnih i 50% float-point instrukcija, tada ce se za float-point

    instrukcije potrositi znatno vise od 50% vremena za izvrsavanje celog programa.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 4

    1.2 Zadaci

    Zadatak 1. Za izvrsavanje neke instrukcije potrebno je 5 ciklusa na racunaru R. Ako je njegovradni takt 2 GHz, za koje vreme ce se pomenuta instrukcija izvrsiti?

    Zadatak 2. Data su dva racunara, R1 cija je duzina taktnog intervala t1 = 1ns i R2 cija je duzinataktnog intervala t2 = 2ns. Obe masine poseduju isti skup naredbi ali im je arhitektura razlicita.Poznato je da je za dati program P , CPI prosecne instrukcije na racunaru R1 jednak CPI1 = 2.0a na racunaru R2 je ova vrednost CPI2 = 1.2. Koja masina brze izvrsava program P i za koliko?

    Zadatak 3. Duzina trajanja taktnog intervala nekog racunara je 10 ns, dok je skup njegovihinstrukcija i njihova ucestanost (dobijena na osnovu neke statistkike) data u Tabeli 1.1. OdredititiCPI prosecne instrukcije i MIPS datog racunara.

    Tip (klasa) instrukcije Ucestanost (IF ) uprocentima

    Broj taktnih intervalapo instrukciji (CPI)

    Load i Store 30,4 1,5

    Addi i Subbi 10,0 1

    Muli i Divi 3,8 10

    Addf i Subbf 9,5 7

    Mulf i Divf 6,5 15

    Logicke 3,0 1

    Branch 20,0 1,5

    Compare, Shift 16,8 2

    Tabela 1.1: Skup instrukcija i njihova ucestanost za Zadatak 3.

    Zadatak 4. Neka se program P izvrsava na racunaru R1 za 10 s pri cemu je taktna frekvencija R1jednaka 400 MHz. Projektantima je postavljen cilj da konstruisu racunar R2 koji ce izvrsavati istiprogram za 6 s. Analizom je utvrdeno da je moguce povecati taktnu frekvenciju ali to povecanjeima za posledicu da je novom racunaru R2 potrebno 1,2 puta vise taktnih intervala za izvrsenjeprograma P u odnosu na racunar R1. Odrediti taktnu frekvenciju racunara R2.

    Zadatak 5. Skup instrukcija neke arhitekture se moze podeliti u 3 klase, A, B i C pri cemusu odgovarajuce vrednosti CPI za svaku klasu jednake CPIA = 1, CPIB = 2 i CPIC = 3. Naraspolaganju imamo dve kodne sekvence (programa) P1 i P2. Znamo da se P1 sastoji od 2 instrukcijeiz klase A, 1 instrukcije iz klase B i 2 instrukcije iz klase C, dok se P2 sastoji iz 4 instrukcije izklase A, 1 instrukcije iz klase B i 1 instrukcije iz klase C. Odrediti:

    a) Koji program izvrsava veci broj instrukcija?

    b) Koji program je brzi?

    c) Koliki je CPI prosecne instrukcije za svaki program?

    Zadatak 6. Data su dva racunara, R1 cija je radni takt 500 MHz i R2 ciji je radni takt 750 MHz.Obe masine poseduju isti skup instrukcija ali im je arhitektura razlicita. Dati skup instrukcijase moze podeliti u 4 klase, A, B, C i D; CPI vrednosti za svaku klasu na svakoj od masina suprikazane u Tabeli 1.2. Ako program P sadzi podjednak broj instrukcija iz svake klase, odreditikoja masina (i koliko puta) ce brze izvrsiti program P .

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 5

    Klasa instrukcije CPI na masini R1 CPI na masini R2

    A 1 2

    B 2 2

    C 3 4

    D 4 4

    Tabela 1.2: CPI vrednosti masina R1 i R2 za svaku od klasa A, B, C i D za Zadatak 6.

    Zadatak 7. Duzina trajanja taktnog intervala nekog CPU-a je 20 ns i na njemu se izvrsavaprogram P u kome svaka instrukcija ima isti CPI. Ovom procesoru je moguce redukovati duzinutrajanja taktnog intervala na 18 ns ali po ceni da se broj taktnih intervala potreban za izvrsenjeinstrukcije I, koja cini 2% programa P , poveca 5 puta. Da li ce modifikovani CPU brze izvrsavatiprogram P?

    Zadatak 8. Poznato je da se 40% programa P moze usavrsiti tako da se taj usavrseni deo izvrsava10 puta brze od originalnog. Koliko je ubrzanje posle poboljsanja?

    Zadatak 9. Program P se na nekoj masini izvrsava za 100s, pri cemu se na za operaciju mnozenja(u tom programu) trosi 80s od tog vremena. Koliko puta treba ubrzati mnozenje da bi se ceoprogram P izvrsavao 5 puta brze?

    Zadatak 10. Program P se izvrsava na procesoru cija je taktna frekvencija 300 MHz. Klaseinstrukcije ovog procesora, CPI za svaku od njih i ucestanost svake od njih u programu P date suu Tabeli 1.3.

    Tip (klasa) instrukcije Ucestanost (IF ) uprocentima

    Broj taktnih intervalapo instrukciji (CPI)

    Aritmeticko/logicke 40 1

    Load 20 1

    Store 10 2

    Branches 20 3

    Floating point 10 5

    Tabela 1.3: Skup instrukcija i njihova ucestanost za Zadatak 10.

    a) Odrediti CPI prosecne instrukcije i MIPS datog procesora.

    b) Ako optimizator eliminise 30% aritmeticko/logickih instrukcija (tj. 12% svih instrukcija),30% Load instrukcija i 20% floating-point instrukcija, odrediti ubrzanje koje se moze posticiizvrsavanjem optimizovanog programa na datom procesoru.

    c) Odrediti CPI prosecne instrukcije i MIPS datog procesora za optimizovanu verziju programai uporediti sa vrednostima dobijenim za neoptimizovanu verziju. Koje vrednosti su bolje?

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 6

    1.3 Resenja

    1. Za izvrsenje je potrebno 5 tR = 5fR =5

    2109s1 = 2.5 ns.

    2. Kako je skup naredbi isti, duzina programa na oba racunara je ista - oznacimo je sa n. Tada jevreme izvrsavanja programa P na prvom racunaru jednako T1 = n CPI1 t1 a na drugom racunaruT2 = n CPI2 t2. Kako je

    T2T1

    =n CPI2 t2n CPI1 t1

    =2 1.21 2

    = 1.2

    sledi da je R1 1.2 puta brzi od R2.

    3. CPI prosecne instrukcije odredujemo na osnovu jednacine (1.2), pri cemu imamo K = 8 klasainstrukcija:

    CPIavg = 0.304 1.5 + 0.1 1 + 0.038 10 + 0.095 7 + 0.065 15 + 0.03 1 + 0.2 1.5 + 0.168 2 = 3.242

    Sada brzinu racunamo po formuli (1.4) kao

    MIPS =1

    CPIavg t 106 = 30.845.

    Dakle, ovaj racunar izvrsava 30.845 miliona prosecnih instrukcija (koje traju 3.242 ciklusa) usekundi.

    4. Na racunaru R1 se program izvrsavao T1 = 10s a zahteva se da se na racunaru R2 ovaj programizvrsava za T2 = 6s. Ukoliko sa N1 i N2, oznacimo ukupan broj taktnih intervala potrebnih da seP izvrsi na R1 i R2, redom

    6, a sa f1 i f2 frekvencije racunara R1 i R2, redom, tada imamo:

    T1 =N1f1

    T2 =1.2 N1f2

    Zamenom N1 iz prve jednacine u drugu (ili direktnim izracunavanjem vrednosti N1) dobijamo

    f2 =1.2 N1T2

    =1.2 f1 T1

    T2= 800 MHz

    5. Program P1 izvrsava 2 + 1 + 2 = 5 instrukcija a probram P2 izvrsava 4 + 1 + 1 =6 instrukcija.Dakle, odgovor pod a) je P2.

    Za izvrsavanje P1 je potrebno 2 1 + 1 2 + 2 3 = 10 taktnih intervala dok je za izvrsavanje P2potrebno 4 1+1 2+1 3 = 9 taktnih intervala. Kako je vreme izvrsavanja direktno proporcionalnoukupnom broju taktnih intervala, sledi da je P2 brzi od P1 sto daje odgovor na b).

    Odgovarajuci CPI prosecne instrukcije za ove programe su CPI1 =1+1+2+3+3

    5 =105 = 2 i

    CPI2 =1+1+1+1+2+3

    6 =96 = 1.5, sto daje odgovor pod c).

    Obratiti paznju da je P2 brzi od P1 iako ima veci broj instrukcija - kao sto je pomenuto, brojinstrukcija nije jedina mera brzine programa.

    6Dakle N1 i N2 predstavljaju sumu svih cpi-ova, tj.m

    i=1 cpii gde je m ukupan broj instrukcija programa. Zatoza racunanje vremena mozemo koristiti prvu formulu iz (1.3).

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 7

    6. Kako program P sadrzi podjednak broj instrukcija iz svake klase, sledi da je frekventnost (IF )svake klase jednaka7 0.25. Dakle, CPI prosecne instrukcije za svaku od masina je

    CPIavg(R1) = 0.25 1 + 0.25 2 + 0.25 3 + 0.25 4 = 2.5

    CPIavg(R2) = 0.25 2 + 0.25 2 + 0.25 4 + 0.25 4 = 3

    Ako duzinu programa oznacimo sa N , tada je odnos vremena potreban da se program izvrsi na ovedve masine jednak

    TR1(P )

    TR2(P )=N CPIavg(R1) 1fR1N CPIavg(R2) 1fR2

    =CPIavg(R1) fR2CPIavg(R2) fR1

    = 1.25

    tj. R2 ce 1.25 puta brze izvrsiti program P od R1.

    7. Neka je N duzina programa P , neka su t1 i t2 duzine trajanja taktnog intervala pocetnog imodifikovanog CPU-a, redom i neka je c vrednost CPI-a instrukcija pocetnog CPU-a. Tada je cujedno i CPIavg za P na pocetnom CPU-u (jer je CPI svih instrukcija isti). Medutim, na modi-fikovanom CPI-u, 2% instrukcija uzima 5 puta vise taktnih intervala (5c) pa je na njemu CPIavgza P jednak 0.98 c+ 0.02 5c = 1.08c.

    Dakle, odnos vremena izvrsavanja programa P na modifikovanom i nemodifikovanom racunaruje

    ToldTnew

    =N c t1

    N 1.08c t2=

    t11.08t2

    =20

    19.44

    pa kako je 20 > 19.44, sledi da je (za dati program P ) modifikovani CPU bolji.

    8. Koristeci oznake iz (1.5), imamo da je Fupg = 0.4 i Supg = 10 pa direktnom zamenom u (1.5)dobijamo da je ubrzanje posle poboljsanja jednako 1

    0.6+ 0.410

    = 1.5625.

    Naravno, ovo smo mogli i koristeci postupak kojim smo dobili formulu (1.5): 60% programa cese izvrsavati starom brzinom a 40% ce se izvrsavati 10 puta brze, tj. novo vreme izvrsavanja jejednako

    Tnew = 0.6Told + 0.4Told10

    = 0.64Told

    odnosno, ubrazanje je jednako ToldTnew =1

    0.64 = 1.5625.

    9. Na osnovu podataka iz zadatka, na operaciju koju je moguce usavrsiti (mnozenje) odlazi 80%procesorskog vremena, tj. Fupg = 0.8. Trazi se ubrzanje S = 5 pa nepoznatu vrednost Supgodredujemo iz formule (1.5):

    5 =1

    0.2 + 0.8Supg.

    Posle skracivanja imenioca i prebacivanja na drugu stranu dobijamo 4Supgr = 0 sto je nemoguce (tj.

    potrebno je beskonavcno puta ubrzati operaciju mnozenja da bismo dobili 5 puta brzi kod). Dakle,program P se, pri ovim ogranicenjima, ne moze nikako izvrsavati 5 puta brze8.

    10. Koristeci formule (1.2) i (1.4) jednostavno dobijamo odgovor pod a):

    CPIavg = 0.4 1 + 0.2 1 + 0.1 2 + 0.2 3 + 0.1 5 = 1.97Tj. dovoljno je uzeti obicnu aritmeticku sredinu CPI-a svih klasa.8Nije tesko zakljuciti da ako nismo u mogucnosti da ubrzamo ceo program, tada je konacno ubrzanje koje mozemo

    postici ograniceno odozgo nekom konstantom koja zavisi od Fupg.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 8

    MIPS =300 106

    1.9 106 = 157.9 miliona instrukcija u sekundi

    Neka je N ukupan broj instrukcija. Tada je ukupan broj taktnih intervala jednak N 5

    i=1 IFi CPIi = N CPIavg (imamo 5 klasa instrukcija). Prilikom optimizacije, gubimo odredeni brojtaktnih intervala jer eliminisemo instrukcije. Posle optimizacije gubimo N 0.4 0.3 1 taktnihintervala zbog aritmeticko logickih operacija (izabacujemo 30% od 40% od N instrukcija koje trosepo 1 ciklus), N 0.2 0.3 1 taktnih intervala zbog load instrukcija i N 0.1 0.2 5 taktnih intervalazbog floating-pint instrukcija.

    Prema tome, posle optimizacije ukupno imamo N (CPIavg0.4 0.3 10.2 0.3 10.1 0.2 5)taktnih intervala, ubrzanje je jednako

    ToldTnew

    =N CPIavg t

    N (CPIavg 0.4 0.3 1 0.2 0.3 1 0.1 0.2 5) t= 1.17

    sto daje odgovor pod b).

    Kako se optimizacijom gubi 20% instrukcija (0.3 0.4 + 0.3 0.2 + 0.2 0.1 = 0.2), potrebnoje odrediti nove vrednosti IF -ova9. Ovo radimo tako sto za svaku instrukciju odredujemo noviprocenat prilikom eventualnog uklanjanja i dobijenu vrednost delimo sa 80% preostalih instrukcija,tj. sa 0.8.

    Dakle, nove vrednosti IF -a su: za aritmeticko/logicke instrukcije 0.4(10.3)0.8 = 0.35, za Load

    instrukcije 0.2(10.3)0.8 = 0.175, za Store instrukcije0.10.8 = 0.125, za Branches instrukcije

    0.20.8 = 0.25

    i za Floating-point instrukcije 0.1(10.2)0.8 = 0.1. Kako (naravno) ne dolazi do promene ciklusa poinstrukciji, lako dobijamo vrednosti CPIavg i MIPS za optimizovani program kao sto se i trazi udelu c).

    CPI avg = 0.35 1 + 0.175 1 + 0.125 2 + 0.25 3 + 0.1 5 = 2.025

    MIPS =300 106

    2.025 106 = 148.1 miliona instrukcija u sekundi

    Komentar: Obratiti paznju da je MIPS optimizovanog programa manji od MIPS-a pocetnog(neoptimizovanog) sto naizgled zvuci malo cudno. Medutim, podsetimo se da nam program uracunanju brzine samo predstavlja uzorak instrukcija na osnovu kojih mi odredujemo sta je toprosecna instrukcija; MIPS jednostavno predstavlja koliko se tih prosecnih instrukcija izvrsava usekudni. Mi smo iz pocetnog programa izbacili puno instrukcija koje traju mali broj ciklusa iznatno manje instrukcija koje trose veci broj ciklusa pa se zbog toga CPIavg povecao, odnosnoMIPS smanjio. Kako smo onda u delu b) dobili da nam ova promena daje ubrzanje? Zato sto seubrzanje definise preko vremena izvrsavanja programa koje je, uz oznake iz formule (1.2), jednakoN CPIavg t; mi jesmo povecali CPIavg ali smo skratili cak 20% programa (smanjili N) i rezultujucevreme je na kraju ispalo bolje (krace).

    9Npr. ako se neki program sastoji od 50% instrukcija tipa Load i 50% instrukcija tipa Store, ako uklonimo 30%Load instrukcija tada novi program ima vise Store instrukcija, tj. odnos vise nije 50-50.

  • Glava 2

    Glavna memorija i kes memorija

    2.1 Teorija

    Memorija je deo racunarskog sistema u kome se cuvaju programi i podaci. Sastoji se od nizamemorijskih lokacija koje se sastoje od istog broja celija - bitova; ukupan broj celija pred-stavlja kapacitet memorije. Velicina (obim, duzina) memorijske lokacije zavisi od arhitektureracunara i uglavnom je 1 bajt (byte-addressable racunari) ili je jednaka duzini procesorske reci(word-addressable racunari) sto je uglavnom 2, 4 ili 8 bajtova1. Svakoj memorijskoj lokaciji jepridruzen jedinstven broj koji predstavlja njenu adresu - ukoliko imamo N memorijskih lokacija,njihove adrese su 0, 1, . . . , N 1 gde uzastopni brojevi odgovaraju uzastopnim lokacijama u nizu.Kako se brojevi u racunaru predstavljaju u binarnom obliku, za adresiranje N lokacija je potrebnobar dlog2Ne bitova.

    Napomena: Kod svih modernih racunara su velicine poput broja memorijskih lokacija, duzine reciitd. stepeni broja 2; zbog toga cemo takve velicine oznacavati velikim slovom engleskog alfabeta apodrazumevacemo da im je logaritam za osnovu 2 odgovarajuce malo slovo. Npr. ukoliko imamoN memorijskih lokacija, podrazumevamo da je N = 2n, tj. n = log2N .

    Sama memorija moze biti podeljena u nekoliko blokova od kojih se svaki sastoji od jednakogbroja uzastopnih memorijskih lokacija. U daljem tekstu pretpostavljamo da se memorija sastojiod N = 2n memorijskih lokacija, pri cemu je velicina jedne memorijske lokacije X = 2x bajtova.Ova memorija je podeljena na M = 2m blokova od koji svaki sadrzi W = 2w memorijskih lokacija(M W = N odnosno m+ w = n). Blokove cemo oznacavati sa B0, B1, . . . , BM1; velicina svakogod njih je W X bajtova. Visih m bitova n-tobitne adrese neke memorijske lokacije oznacavajuredni broj bloka u kome se ova lokacija nalazi (0, 1, . . . ,M1) dok nizih w bitova oznacavajuredni broj u okviru bloka ove memorijske lokacije (0, 1, . . . ,W 1).

    Slika

    Kes memorija je brza memorija koja se nalazi izmedu procesora i glavne (sporije) memorije.Ova memorija je relativno mala (u odnosu na glavnu) i sadrzi kopiju nekog dela glavne memorije.Kes se sastoji od R = 2r linija C1, C2, . . . , CR, od kojih je svaka velicine jednog bloka glavnememorije. Kada procesor pokusava da procita sadrzaj neke memorijske lokacije, on prvo proveravada li se ta lokacija (i podatak u njoj) nalazi u kesu. Ukoliko se nalazi (kes pogodak) trazenipodatak se cita iz kesa; u suprotnom (kes promasaj), ceo blok iz glavne memorije koji sadrzitrazenu memorijsku lokaciju se ucitava u kes (u neku od kes linija) a zatim se cita podatak.

    1Skoro svi moderni racunari su bajt-adresibilni dok im je velicina procesorske reci 4 ili 8 bajta (32-bitni ili 64-bitni).

    9

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 10

    Kako je uglavnom broj kes linija R mnogo manji od broja blokova M , potrebno je odrediti u kojukes liniju ce se ucitati (preslikati) dati blok Bi. Ova pravila nazivaju se funkcije preslikavanja;razlikujemo tri tipa ovih funkcija:

    Asocijativno preslikavanje: Blok Bi moze da se preslika u bilo koju kes liniju (zavisi odalgoritma zamene). Velicina TAG polja je m = n w bitova.

    Direktno preslikavanje: Blok Bi se slika u liniju i mod R (broj dobijen citanjem r bitovakoji su odmah ispred poslednjih w bitova). Velicina TAG polja je m r = n w r bitova.

    Skupno-asocijativno preslikavanje: Neka imamo V = 2v skupova sa po K = 2k linija(K-tostruko skupno asocijativno preslikavanje). Blok Bi se slika u bilo koju kes liniju skupai mod V (broj dobijen citanjem v bitova koji su odmah ispred poslednjih w bitova) - zavisiod algoritma zamene. Veliina TAG polaj je m v = n w v bitova.

    Asocijativno i skupno-asocijativno preslikavanje zahtevaju dodatna pravila/kriterijume na os-novu kojih se odreduje gde se slika blok Bi, tj. koji blok iz trenutno punog kesa (ili skupa kes linija)ce biti izbacen. Ova pravila se nazivaju algoritmi zamene; ovo su najstandardniji:

    LRU (Least Recently Used): Iz kesa (ili skupa u kesu) se izbacuje blok kome je zadnji putpristupano najranije od svih blokova u kesu.

    MRU (Most Recently Used): Iz kesa (ili skupa u kesu) se izbacuje blok kome je zadnji putpristupano najkasnije od svih blokova u kesu.

    FIFO (First In First Out): Iz kesa (ili skupa u kesu) se izbacuje blok koji je ubacen u kesnajranije od svih blokova u kesu.

    LFU (Least Frequently Used): Iz kesa (ili skupa u kesu) se izbacuje blok kome se najmanjepristupalo od svih blokova u kesu. Ako imamo vise blokova kojima se najmanje pristupalo,postupa se po nekom dodatnom kriterijumu.

    OPT (Optimal Algorithm): Iz kesa (ili skupa u kesu) se izbacuje blok kome kome ce se naredniput pristupati najdalje u buducnosti od svih blokova. Ovo je samo teoretksi algoritam jerzahteva poznavanje svih obracanja kesu unapred.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 11

    2.2 Zadaci

    Zadatak 1. Glavnu memoriju, ciji je ukupni kapacitet 256 MB potrebno je organizovati tako da jevelicina memorijske lokacije sto manja. Kako to postici ukoliko za adresiranje ovih lokacija imamona raspolaganju 25 bitova?

    Zadatak 2. Kapacitet glavne memorije je 16 MB.

    a) Ukoliko je velicina bloka 4 bajta, koliko ukupno ima blokova?

    b) Ukoliko je duzina memorijske lokacije 2 bajta i imamo 218 blokova, koliko memorijskih lokacijasadrzi jedan blok?

    Zadatak 3. Na sistemu gde se adresira svaki bajt, obim bloka iznosi 64 bajta. Ukoliko blok sadrzipodatak cija je adresa 0xBEE3DE72, odrediti adresu prvog bajta tog bloka.

    Zadatak 4. Koliko ima linija u kesu ciji je kapacitet 32KB ako je obim linije 128 bajta?

    Zadatak 5. Obim kes linije iznosi 64 bajta. Velicina memorijske lokacije je

    a) 1 bajt.

    b) 4 bajta.

    Koliko se bitova koristi za odredivanje memorijske lokacije u okviru kes linije?

    Zadatak 6. Ako je kapacitet kes memorije 32KB a obim linije 128 bajtova (adresira se svaki bajt),koliko skupova postoji kod dvostruko, cetvorostruko i osmostruko skupno asocijativnog kesa?

    Zadatak 7. Kapacitet glavne memorije je 4 GB, duzina memorijskih lokacija koje se adresiraju 2bajta a velicina bloka 128 bajta. Kolika je velicina TAG polja kes memorije ako

    a) kes koristi tehniku direktnog preslikavanja i ima 1024 linije?

    b) kes koristi tehniku asocijativnog preslikavanja?

    c) kes koristi tehniku 4-skupno-asocijativnog preslikavanja i ima 1024 linije?

    Zadatak 8. Cetvorostruko skupno-asocijativni kes ima kapacitet od 64 KB a obim svake linijeje 128 bajtova (adresira se svaki bajt). Sistem koji ima implementiran ovaj kes koristi 32-bitneadrese. Ako se svaka od navedenih adresa nalazi u kesu, odrediti redne brojeve skupova u kome cese pretrazivati kao i redne brojeve adresiranih bajtova u okviru kes linije.

    a) 0xABC89987

    b) 0x32651987

    c) 0x228945DB

    d) 0x48569CAC

    Zadatak 9. Kes memorija ima stopu pogodaka od 75%. Memorijski zahtev, kada se javi kespogodak, se kompletira za 12 ns, dok se promasaj kompletira za 100 ns. Koliko iznosi prosecnovreme pristupa kes memoriji?

    Zadatak 10. Memorijski sistem cini kes, glavna memorija i virtuelna memorija. Vreme pristupakesu je 5 ns a stopa pogodaka 80%. Ukoliko se ne javi pogodak, pristupa se glavnoj memoriji cije

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 12

    je vreme pristupa 100 ns a stopa pogodaka 99.5%. U slucaju da ni ovde nema pogodka, sistem seobraca virtuelnoj memoriji cije je vreme pristupa 10 ms. Koliko je prosecno vreme pristupa kodove hijerarhije?

    Zadatak 11. Vreme pristupa kesu kod kes pogodka je 10 ns, dok je stopa kes promasaja 5%.Odredena modifikacija kesa rezultirace stopi kes promasaja od 3%, alii ce povecati latenciju kesakod pogodka na 15 ns. Za koje vrednosti latencije kod kes promasaja ce ova modifikacija rezultiratiboljim performansama (nize prosecno vreme pristupa kesu)?

    Zadatak 12. Asocijativni kes se sastoji od 4 kes linija. CPU pristupa blokovima u sledecemredosledu:

    A,B,A,C,D,E,A,C, F,A,D,E

    Vreme pristupa kesu je 10 ns a vreme pristupa glavnoj memoriji je 100 ns. Odrediti procenat kespogodaka i prosecno vreme pristupa memoriji ako kes koristi

    a) LRU politiku zamene

    b) FIFO politiku zamene

    c) LFU politiku zamene (a u slucaju jednakosti FIFO)

    Zadatak 13. Racunski sistem na kome se adresira svaki bajt ima dvostruko-skupno asocijativnikes (LRU politika zamene). Kes se sastoji od 8 kes linija a obim kes linije je

    a) 1 bajt. b) 2 bajta.

    CPU pristupa memorijskim lokacijama u sledecem redosledu:

    A0 B0 C2 A0 B1 B0 E4 F5 C2 C3 F3 F4 C1 B0

    Indeks kod svake vrednosti predstavlja tri poslednja (LS) bita adrese memorijske lokacije. Odreditiprocenat kes pogodaka i prosecno vreme pristupa memoriji ako je vreme pristupa kesu 10 ns avreme pristupa glavnoj memoriji 60 ns.

    Zadatak 14. Racunar ima 256 bajta glavne memorije i 8 bajta kes memorije (adresira se svakibajt). Svaku kes liniju cine 2 bajta a kes je

    a) asocijativan (LRU politiku zamene)

    b) direktno preslikani kes.

    CPU pristupa sledecim meorijskim lokacijama

    4, 9, 82, 255, 8, 2, 5, 164, 1, 3, 254, 0

    Odrediti procenat kes pogodaka.

    Zadatak 15. Kes se sastoji od 4 kes linija. Odrediti procenat kes pogodaka ako se koristi optimalnialgoritam (OPT) za sledcu sekvencu blokova kojima pristupa CPU:

    A,B,A,C,D,E,A,C, F,A,D,E

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 13

    2.3 Resenja

    1. Kapacitet memorije je N X, gde je N broj memorijskih lokacija a X velicina memorijskelokacije. Da bi X bilo minimalno, N mora biti sto vece. Na raspolaganju imamo 25 bitova pamozemo adresirati najvise 225 memorijskih lokacija. Dakle, najmanja moguca velicina memorijskelokacije pri datim ogranicenjima je 256 MB / 225 = 8 bajta.

    2. a) Imamo ukupno N/W = 224/4 = 222 blokova.

    b) Velicina bloka je N/M = 224/218 = 26 bajtova. Kako svaka lokacija sadrzi po 2 bajta, sledida svaki blok sadrzi 26/2 = 25 memorijskih lokacija.

    3. Kako se adresira svaki bajt, sledi da se blok sastoji od 64 memorijskih lokacija. Kako je adresa32-bitna2, poslednjih log 64 = 6 bitova predstavljaju redni broj memorijske lokacije u okviru blokaa prvih 32 6 = 26 bitova predstavljaju redni broj bloka koji sadrzi datu memorijsku lokaciju.Dakle, adresa prvog bajta (lokacije) tog bloka je ona cijih je prvih 26 bitova jednako datoj adresi aposlednjih 6 su nule. 6 bitova obuhvataju jednu i po heksa cifri pa cemo umesto zadnje dve cifre72 = 0111 0010 imati 0100 0000 tj. 40 u heksa zapisu. Trazena adresa je dakle 0xBEE3DE40

    4. Broj kes linija je 32 KB / 128 bajta = 28.

    5. Broj memorijskih lokacija u okviru kes linije u delu a) iznosi 64/1 = 64 = 26 a u delu b)64/4 = 16 = 24. Prema tome, za odredivanje memorijske lokacije je potrebno a) log 26 = 6 bitova;b) log2 2

    4 = 4 bita.

    6. Broj kes linija u kesu je R = 32 210/128 = 256. k-tostruki asocijativni kes koji se sastoji odR linija sadrzi R/k skupova. Prema tome, dvostruko, cetvorostruko i osmostruko asocijativni kesimaju, redom, 256/2 = 128, 256/4 = 64 i 256/8 = 32 skupova.

    7. Kako je kapacitet glavne memorije 4 GB a velicina memorijske lokacije 2 bajta, imamo 232/2 =231 memorijskih lokacija, pa se svaka adresa sastoji od 31 bita (n = 31). Slicno, kako je velicina bloka128 bajta, jedan blok sadrzi 128/2 = 64 memorijskih lokacija. Dakle poslednjih w = log2 64 = 6bitova odreduju redni broj lokacije u okviru bloka a prvih m = n w = 25 bitova odreduju rednibroj bloka.

    a) Za adresiranje linije kesa potrebno je r = log2 1024 = 10 bitova. Prema tome TAG polje uovom sluccaju cini prvih n w r = 31 6 10 = 15 bitova adrese (velicina je 15).

    b) Kod asocijativnog preslikavanja TAG polje cini prvih n w = 31 6 = 25 bitova adrese.

    c) Kako imamo R = 1024 linija, kod 4-skupno-asocijativnog preslikavanja imamo R/4 = 256skupova. Za indeksiranje svakog skupa koristimo v = log2 256 = 8 bitova, pa se sada TAG poljesastoji od prvih n w v = 31 6 8 = 17 bitova adrese.

    8. Ukupno imamo 64 KB / 128 bajtova = 512 kes linija, pri cemu se svaka kes linija sastoji od 128memorijskih lokacija (adresira se svaki bajt). Dakle, za indeksiranje memorijske lokacije u okvirubloka/kes linije potrebno je w = log2 128 = 7 bitova. Kes je podeljen na 512 / 4 = 128 skupova;za indeksiranje ovih skupova je potrebno log2 128 = 7. Dakle poslednjih 7 bitova adrese odredujuredni broj memorijske lokacije (bajta) u okviru bloka/kes linije (boldovani su) a narednih 7 bitova

    2Adresa je data u heksadecimalnom obliku (zakljucujemo na osnovu oznake 0x koja nije deo adrese). Svakaheksa cifra (0, 1, . . . , 9, A,B, . . . F ) na prirodan nacin predstavlja prirodan broj iz [0, 24] i mozemo je zamisliti kao nizod 4 bita. Npr. 0xBEE3DE72 = 1101 1110 1110 0011 1101 1110 0111 0010

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 14

    odreduju redni broj skupa u kome se nalazi memorijska lokacija sa datom adresom (podvuceni su).Kako je 7 + 7 = 14 dovoljno je posmatrati zadnjih tri i po heksa cifri.

    a) 0xABC89987 = A B C 8 1001 1001 1000 0111. Redni broj skupa je (0110011)2 = 51 a rednibroj lokacije u okviru kes linije je (0000111)2 = 7.

    b) 0x32651987 = 3 2 6 5 0001 1001 1000 0111. Redni broj skupa je (0110011)2 = 51 a rednibroj lokacije u okviru kes linije je (0000111)2 = 7.

    c) 0x228945DB = 2 2 8 9 0100 0101 1101 1011. Redni broj skupa je (0001011)2 = 11 a rednibroj lokacije u okviru kes linije je (1011011)2 = 91.

    d) 0x48569CAC = 4 8 5 6 1001 1100 1010 1100. Redni broj skupa je (0111001)2 = 57 a rednibroj lokacije u okviru kes linije je (0101100)2 = 44.

    9. Prosecno vreme pristupa kes memoriji iznosi 0.75 12 ns + 0.25 100 ns = 34 ns.

    10. Neka su vremena pristupa za kes, glavnu i virtuelnu mermoriju, redom, tk, tg i tv a stopepogodatak za kes i glavnu memoriju, redom pk i pg. Ukoliko zanemarimo kes i posmatramo samosistem glavna-virtuelna memorija, prosecno vreme pristupa ovog sistema je pg tg + (1 pg) tv.Dakle, ovo je prosecno vreme pristupa kada nema kes-pogotka pa je prosecno vreme pristupa zaceo sistem jednak

    tavg = pk tk + (1 pk) (pg tg + (1 pg) tv) = 10.024 ns

    11. Oznacimo sa t1 i t2, redom, vreme pristupa kesu kod kes pogodka pre i posle modifikacije a sap1 i p2, redom, stopu kes pogodaka pre i posle modifikacije. Neka je latencija kod kes promasaja(u oba slucaja) jednaka T . Prosecno vreme pristupa pre modifikacije je p1 t1 + (1 p1) T a poslemodifikacije je p2 t2 + (1 p2) T . Da bi drugo prosecno vreme bilo bolje, mora vaziti

    p1 t1 + (1 p1) T > p2 t2 + (1 p2) T.

    Sredivanjem dobijamo da je prethodna nejednacina ekvivalentna sa

    T >p2 t2 p1 t1

    p2 p1= 252.5 ns

    Prema tome, dok vazi da je vrednost latencije kod kes promasaja veca od 252.5 ns, ova modifikacijavodi poboljsanju.

    12. Resenja su data u Tabelama 2.1, 2.2 i 2.3. Kada dode do kes promasaja, trenutni blok uvekstavljamo na vrh kesa (linija 1) da bismo lakse pratili koji element treba izbaciti. Kod LRUalgoritma, prilikom kes pogodka, pogodeni element takode stavljamo na vrh kesa dok kod FIFOalgoritma to ne radimo. Brojevi kod blokova u delu pod c) predstavljaju koliko puta smo pristupalidatom bloku (potrebno za LFU algoritam). Na osnovu tabela zakljucujemo:

    a) Procenat kes pogodaka je 4/12 = 0.33 dok je prosecno vreme pristupa 0.33 10 ns + 0.67 100ns = 70.3 ns.

    b) Procenat kes pogodaka je 5/12 = 0.42 dok je prosecno vreme pristupa 0.42 10 ns + 0.58 100ns = 62.2 ns.

    c) Procenat kes pogodaka je 4/12 = 0.33 dok je prosecno vreme pristupa 0.33 10 ns + 0.67 100ns = 70.3 ns.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 15

    Kes linija A B A C D E A C F A D E

    0 A B A C D E A C F A D E

    1 A B A C D E A C F A D

    2 B A C D E A C F A

    3 B A C D E E C F

    Pogodak? X X X X

    Tabela 2.1: Zadatka 12 a) Stanje kesa posle svakog upita

    Kes linija A B A C D E A C F A D E

    0 A B B C D E A A F F F F

    1 A A B C D E E A A A A

    2 A B C D D E E E E

    3 A B C C D D D D

    Pogodak? X X X X X

    Tabela 2.2: Zadatka 12 b) Stanje kesa posle svakog upita

    Kes linija A B A C D E A C F A D E

    0 A1 B1 B1 C1 D1 E1 E1 E1 F1 F1 D1 E1

    1 A1 A2 B1 C1 D1 D1 D1 E1 E1 F1 D1

    2 A2 B1 C1 C1 C2 C2 C2 C2 C2

    3 A2 A2 A3 A3 A3 A4 A4 A4

    Pogodak? X X X X

    Tabela 2.3: Zadatka 12 c) Stanje kesa posle svakog upita

    13. Opis dogadaja prilikom pristupa je dat u Tabelama 2.4 i 2.5. Kes linije koje pripadaju istomskupu su, radi bolje preglednosti, numerisane istim brojem (broj skupa), iako, naravno, u pravomkesu svaka kes linija ima poseban broj. Imamo 4 skupa od po 2 kes linije.

    a) Kako je velicina kes linije = jedna memorijska lokacija, sledi da se jedan blok sastoji od samojedne memorijske lokacije (w = 0). Prema tome vrsimo ubacivanje/izbacivanje pojedinihmemorijskih lokacija i poslednja dva bita odreduju kom skupu ide memorijska lokacija(ostatak pri deljenju sa 4). Procenat kes pogodaka je 3/14 = 0.21 dok je prosecno vremepristupa 0.21 10 ns + 0.79 60 ns = 49.5 ns.

    b) Svaka kes linija sadrzi 2 memorijske lokacije pa prilikom kes promasaja moramo u kes ubaciticeo blok koji sadrzi datu memorijsku lokaciju (tj. datu memorijsku lokaciju i njoj susednu).Poslenji bit odreduje redni broj memorijske lokacije u okviru kesa a pretposlednja dva bitaodreduju kom skupu ide memorijska lokacija. Procenat kes pogodaka je 7/14 = 0.5 dok jeprosecno vreme pristupa 0.5 10 ns + 0.5 60 ns = 35 ns.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 16

    Kes linija A0 B0 C2 A0 B1 B0 E4 F5 C2 C3 F3 F4 C1 B0

    0 A0 B0 B0 A0 A0 B0 E4 E4 E4 E4 E4 F4 F4 B0

    0 A0 A0 B0 B0 A0 B0 B0 B0 B0 B0 E4 E4 F4

    1 B1 B1 B1 F5 F5 F5 F5 F5 C1 C1

    1 B1 B1 B1 B1 B1 F5 F5

    2 C2 C2 C2 C2 C2 C2 C2 C2 C2 C2 C2 C2

    2

    3 C3 F3 F3 F3 F3

    3 C3 C3 C3 C3

    Pogodak? X X X

    Tabela 2.4: Zadatka 13 a) Stanje kesa posle svakog upita

    Kes linija A0 B0 C2 A0 B1 B0 E4 F5 C2 C3 F3 F4 C1 B0

    0 A0A1

    B0B1

    B0B1

    A0A1

    B0B1

    B0B1

    B0B1

    B0B1

    B0B1

    B0B1

    B0B1

    B0B1

    C0C1

    B0B1

    0 A0A1

    A0A1

    B0B1

    A0A1

    A0A1

    A0A1

    A0A1

    A0A1

    A0A1

    A0A1

    A0A1

    B0B1

    C0C1

    1 C2C3

    C2C3

    C2C3

    C2C3

    C2C3

    C2C3

    C2C3

    C2C3

    F2F3

    F2F3

    F2F3

    F2F3

    1 C2C3

    C2C3

    C2C2

    C2C3

    2 E4E5

    F4F5

    F4F5

    F4F5

    F4F5

    F4F5

    F4F5

    F4F5

    2 E4E5

    E4E5

    E4E5

    E4E5

    E4E5

    E4E5

    E4E5

    3

    3

    Pogodak? X X X X X X X

    Tabela 2.5: Zadatka 13 b) Stanje kesa posle svakog upita

    14. Broj kes linija u kesu je 8 / 2 = 4. Velicina kes linije, odnosno bloka, jednaka je 2 memorijskelokacije (adresira se svaki bajt) sto znaci da uvek prenosimo po 2 uzastopne memorijske lokacije.Kod direktno preslikanog kesa, redni broj linije odreduju 2 pretposlednja bita adrese (jer je w = 1,r = 2). Opis dogadaja prilikom pristupa je dat u Tabelama 2.6 i 2.7.

    a) Procenat kes pogodaka je 3/12 = 0.25

    b) Procenat kes pogodaka je 5/12 = 0.42

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 17

    Kes linija 4 9 82 255 8 2 5 164 1 3 254 0

    045

    89

    8283

    254255

    89

    23

    45

    164165

    01

    23

    254255

    01

    145

    89

    8283

    254255

    89

    23

    45

    164165

    01

    23

    254255

    245

    89

    8283

    254255

    89

    23

    45

    164165

    01

    23

    345

    45

    8283

    254255

    89

    23

    45

    164165

    164165

    Pogodak? X X X

    Tabela 2.6: Zadatka 14 a) Stanje kesa posle svakog upita

    Kes linija 4 9 82 255 8 2 5 164 1 3 254 0

    089

    89

    89

    89

    89

    89

    89

    01

    01

    01

    01

    18283

    8283

    8283

    23

    23

    23

    23

    23

    23

    23

    245

    45

    45

    45

    45

    45

    45

    164165

    164165

    164165

    164165

    164165

    3254255

    254255

    254255

    254255

    254255

    254255

    254255

    254255

    254255

    Pogodak? X X X X X

    Tabela 2.7: Zadatka 14 b) Stanje kesa posle svakog upita

    15. Kes se ponasa kao obicni asocijativni kes pri cemu uvek izbacujemo element koji ce nam trebatinajkasnije od svih trenutnih. Opis dogadaja prilikom pristupa je dat u Tabeli 2.8. U svakomkoraku smo (radi lakseg pracenja) u kesu od cuvali elemente po vremenu sledeceg pristupa, odnajskorijeg do najkasnijeg. Na taj nacin uvek treba izbaciti onaj koji je na poziciji 4. Stopa kespogodaka je 6/12 = 0.5.

    Kes linija A B A C D E A C F A D E

    0 A A A A A A C A A D E E

    1 B B C C C A D D E D D

    2 B D D D E E A A A

    3 B E E C F F F F

    Pogodak? X X X X X X

    Tabela 2.8: Zadatka 15. Stanje kesa posle svakog upita

  • Glava 3

    Sekundarna memorija i organizacijaulaza/izlaza

    3.1 Teorija

    Sekundarne memorije:

    Pod sekundarnom memorijom racunara podrazumeva se skup memorijskih medijuma na kojimase cuvaju podaci van glavne memorije i koje karakterisu osobine poput: nisu direktno adresibilni,ne gube informacije nakon iskljucenja napona, niza cena po bitu i relativno spori pristup. Uredajiza ovakav nacin memorisanja se dele na magnetne (hard diskovi), opticke (CD) i elektricne (flashmemorije1).

    Hard disk pripada klasi magnetnih sekundarnih memorija i sastoji se od nekoliko (N) jednakihdiskova (ploca, tanjira) poredanih jedan iznad drugog na zajednickoj osovini. Svaki disk sesastoji od 2 povrsine na kojima je moguc upis podataka. Povrsine su podeljene koncentricnimkruznicama na nekoliko (M) pisti a svaka pista je podeljena na konstantan broj (K) sektora pricemu su svi sektori istog obima (tj. u svaki je moguce upisati isti broj bajtova). Numeracija sektorau okviru piste i pisti u okviru povrsine je sukcesivna. Ukoliko je obim sektora X bajtova, tada jekapacitet hard diska

    Size = 2 N M K X bajtova. (3.1)

    Skup svih pisti na istom rastojanju od osovine (tj. sa jednakim rednim brojevima u okvirupovrsina) naziva se cilindar. Sam upis podataka se vrsi po cilindrima, tj. krece se od odredenogsektora, zatim se ide po pisti koja ga sadrzi, zatim se prelazi na sledecu pistu u okviru cilindra svedok se ne popuni ceo cilindar. Ukoliko ima jos podataka, prelazi se na naredni cilindar.

    Upis citanje podataka se vrsi preko glave (igle). Seek time tS je prosecno vreme potrebnoda se glava pozicionira na zadatu pistu; track-to-track access time tTT predstavlja vreme dase glava pomeri sa neke piste na njoj susednu pistu. Rotational latency tR je prosecno vremepotrebno da se glava pozicionira na pocetni sektor u okviru piste. Ovo predstavlja vreme potrebnoda se izvrsi pola rotacije diska; ako je brzina rotacije diska r tada vazi

    tR =1

    2r(3.2)

    Vreme pristupa (access time) t je vreme potrebno da se dode do zadatog sektora i vazi

    t = tS + tR (3.3)

    1Koje koriste drugaciju tehnologiju od standardnih RAM memorija da im se podaci ne bi izgubili prilikomiskljucenja napona.

    18

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 19

    Brzina prenosa (Burst/data transfer rate) v predstavlja brzinu citanja podataka sa jednepiste (bajt/sekunda):

    v = r K X. (3.4)

    Organizacija ulaza/izlaza:

    Treci kljucni element racunarskog sistema, pored procesora i memorije, cini ulazno-izlazni(U/I) podsistem. Ovaj podsistem sluzi kao veza izmedu sistemske magistrale i U/I uredaja(ekran, tastarua, mis, stampac itd.).

    Postoje tri tehnike za komunikaciju CPUU/I uredaji:

    Programirana U/I tehnika: U/I uredaj samo postavlja odgovarajuce bitove u svom sta-tusnom registru dok je posao CPU-a da periodicno proverava (pool-uje) U/I uredaje. Naosnovu trenutnih naredbi u programu i statusnih registara U/I uredaja, CPU odreduje da lije potrebno da se pocne/prekine opsluzivanje nekog U/I uredaja. Ukoliko CPU pool-uje nekiU/I uredaj sa frekvencijom (npr. = 50Hz znaci da CPU proverava status uredaja 50 putau sekundi), dok mu je za proveru statusa potrebno Cp taktnih intervala, tada CPU trosi Cptaktnih intervala u sekundi za pooling datog U/I uredaja.

    Prekidna U/I tehnika: Kada je U/I uredaju potrebno opsluzivanje od strane CPU-a,uredaj sam generise zahtev za prekid i salje ga CPU-u. Kada CPU primi i obradi zahtev,on prekida trenutni program (za sta mu npr. treba Ci1 taktnih intervala), opsluzi uredaj, azatim se vraca u prekinuti program (za sta mu npr. treba Ci2 taktnih intervala) - obradaprekida traje ukupno Ci = Ci1 + Ci2 taktnih intervala.

    Direktan memorijski pristup (DMA):

    Pretpostavimo da imamo U/I uredaj koji je potrebno opsluziti x puta u sekundi (kod programi-rane U/I tehnike, taj uredaj postavlja status spreman x puta u sekundi dok kod prekidne U/Itehnike on generise zahtev za prekid x puta u sekundi) i da je za opsluzivanje tog uredaja potrebnoN taktnih intervala. Tada,

    Ukoliko koristimo programiranu U/I tehniku sa parametrima i Cp, procesor za opsluzivanjeovog uredaja trosi

    Op = Cp + x N taktnih intervala u sekundi. (3.5)

    Ukoliko koristimo prekidnu U/I tehniku sa parametrom Ci, procesor za opsluzivanje ovoguredaja trosi

    Oi = x (Ci +N) taktnih intervala u sekundi (3.6)

    Ukoliko vise uredaja istovremeno salje zahtev za opsluzivanje, tada treba odrediti kojim redosle-dom ce CPU opsluziti ove uredaje. Jedno od najjednostavnijih resenja je dodeliti svakom uredajuprioritet (npr. ceo broj) a zatim se prilikom primanja zahteva za prekid odreduje da li uredaj kojije poslao zahtev ima visi prioritet od uredaja koji se trenutno opsluzuje. Ako je odgovor potvrdan,prekida se opsluzivanje starog uredaja sve dok se ne opsluzi novi; u suprtonom, novi uredaj ostajena cekanju dok se ne opsluzi stari.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 20

    3.2 Zadaci

    Zadatak 1. Hard disk se sastoji od 8 ploca, svaka povrsina ploce se sastoji od 200 pisti, svakapista od 64 sektora, dok je obim sektora 4 bajta. Ovaj hard disk je modifikovan tako sto su mudodate jos 2 ploce, ali mu je zato broj pisti po povrsini smanjen na 128. Koji hard disk je imaoveci kapacitet?

    Zadatak 2. Ploca hard diska se sastoji od 100 pisti. Vreme pristupa pista-ka-pisti (track-to-trackaccess time) je 0.1 ms a brzina rotacije diska je 3600 obrtaja/minuti. Prosecno vreme pozicioniranja(seek time) se racuna kao trecina vremena potrebnog da se dode od prve do poslednje piste. Da lice se prosecno vreme pristupa (access time) smanjiti ako povecamo brzinu rotacije za 20% i dodamojos 10 pisti?

    Zadatak 3. Hard disk ima 8 povrsina, 521 pistu po povrsini i 64 sektora po pisti. Obim sektora je1 KB. Prosecno vreme pozicioniranja (seek time) je 8 ms, vreme pristupa pista-ka-pisti (track-to-track access time) je 1.5ms a drajv se okrece brzinom od 3600 obrtaja u minuti. Sukcesivne pistena istom cilindru se mogu citati bez pomeranja glave. Pretpostaviti da je 1MB = 103 KB = 106 B.

    a) Koliki je kapacitet drajva?

    b) Koliko je prosecno vreme pristupa drajvu?

    c) Koliko je vremena potrebno da se prenese fajl velicine 5MB?

    d) Kolika je brzina prenosa paketa (burst transfer rate)?

    Zadatak 4. Hard disk kapaciteta 300 MB ima 815 cilindara, 19 glava (to znaci da ima 10 plocaali da se jedna od 20 povrsina ne koristi), brzinu prelaska sa piste na pistu od 17.5 m/s i rotacionubrzinu od 3600 obrtaja/minuti. Brzina prenosa izmedu diska i CPU-a je 300 KB/s. Razmak izmedupisti je 0.25mm. Koliko je vremena potrebno da se procita ceo disk i smesti u glavnu memorijuracunara? Na poceku je glava pozicionirana na pocetku prvog sektora prve piste i citanje se vrsicilindar po cilindar. Takode, odjednom se moze baferovati sadrzaj jednog cilindra ali ne i vise;to znaci da se prvo puni bafer, zatim se prazni ka memoriji racunara a tek nakon toga se citajunaredni podaci sa diska. Pretpostaviti da je 1MB = 103 KB = 106 B.

    Zadatak 5. Hard disk ima n pisti a vreme pristupa pista-ka-pisti (tTT ) je jedinicno. Ukoliko sena pocetku igla nalazi na pisti i i treba da ode na pistu j, gde su indeksi i i j izabrani sa jednakomverovatnocom, dokazati da je ocekivano vreme pristupa (seek time) jednako n3 kada n.

    Zadatak 6. U/I uredaj koji je povezan na procesor izdaje 150 zahteva za opsluzivanje svakesekunde, pri cemu je za opsluzivanje ovog uredaja potrebno 10 000 taktnih intervala. Ukolikoprocesor koristi prekidnu U/I tehniku, njemu je potrebno 1000 taktnih intervala da bi poceo saizvrsenje rutine za obradu prekida i jos 1000 taktnih intervala da se vrati iz prekidnog programa uprekinuti. Sa druge strane, ako koristi programiranu U/I tehniku, njemu je potrebno 500 taktnihintervala za ispitivanje statusa U/I uredaja pri cemu on ispituje status svakih 0.5 ms.

    a) Koliko taktnih intervala u sekundi trosi procesor opsluzujuci U/I uredaj ako koristi prekidnuU/I tehniku?

    b) Koliko taktnih intervala u sekundi trosi procesor opsluzujuci U/I uredaj ako koristi programi-ranu U/I tehniku?

    c) Koliko cesto treba procesor da ispituje status U/I uredaja (programiranom U/I tehnikom)da bi trosio isti broj taktnih intervala po sekundi kao i kod prekidne U/I tehnike?

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 21

    Zadatak 7. CPU radi na frekvenciji od 50 MHz i poznato je da mu je potrebno 100 taktnihintervala da obavi jednu operaciju pooling (periodicna provera U/I uredaja). Odrediti deo vremenakoji CPU trosi poll-ovanje sledeca tri uredaja:

    a) Mis mora da se pool-uje 30 puta u sekundi kako bi se obezbedili da ce biti prihvacen svakipomeraj koji je ucinio korisnik.

    b) Flopi-disk prenosi podatke procesoru u 16-bitnim jedinicama a karakterise ga brzina prenosaod 50 KB/s. U toku prenosa se ne sme izgubiti nijedan podaka.

    c) Hard disk prenosi podatke kao jedinicne blokove obima 32 bita a brzina prenosa je 2 MB/s.U toku prenosa se ne sme izgubiti nijedan podatak.

    Zadatak 8. Kod nekog mikroracunara se U/I prenos podataka vrsi prekidnom U/I tehnikom.Brzina prenosa podataka je 8 KB/s (podaci se prenose bajt-po-bajt). Za obradu prekida potrebnoje vreme od 100 s. Koji se deo CPU-ovog vremena trosi na obradu prekida U/I uredaja?

    Zadatak 9. Neka U/I uredaj iz prethodnog zadatka ima ugradena dva 16-bitna bafera i zahtev zaprekid se generise onog trenutka kada se jedan od bafera napuni. Sada obrada prekida traje duzejer se vrsi prenos od 16 bajtova - vreme obrade je 100 s za pocetak obrade i inicijalni bajt + 8 sza svaki dodatni bajt. Koji deo CPU-ovog vremena se sada trosi na obradu prekida U/I uredaja?

    Zadatak 10. Na racunarski sistem povezana su 3 U/I uredaja, stampac, disk i RS 232 linijaciji su prioriteti 2, 4 i 5, respektivno (veci broj = veci prioritet). Inicijalno (t = 0) se izvrsavaprogram korisnika, zatim u trenutku t = 10 stampac generise zahtev za prekid. U trenutku t = 15linija RS 232 zahtev opsluzivanje i generise zahtev za prekid. Kasnije, u trenutku t = 20 disk zeliopsluzivanje. Ako izvrsenje svake od prekidnih rutina traje 10 vremenskih jedinica, skicirati grafikopsluzivanja i za svaki uredaj odrediti trenutak kada je zavrseno njegovo opsluzivanje.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 22

    3.3 Resenja

    1. Kapacitet prvog hard diska je 2 8 200 64 4 bajta = 819200 bajta, dok je kapacitet drugogdiska 2 10 128 64 4 bajta = 655360 bajta. Dakle, prvi hard disk ima veci kapacitet.

    2. Neka je tTT vreme pristupa pista-ka-pisti r brzina rotacije. Ako imamo M pisti, tada je, premauslovima zadatka, prosecno vreme pozicioniranja (seek time) jednako tS =

    (M1)tTT3 . Prema tome,

    nase pocetno vreme pristupa jednako je

    t = tS + tR =(M 1)tTT

    3+

    1

    2r= 3.3 ms + 8.3 ms = 11.6 ms

    Kada povecamo brzinu rotacije za 20% smanjujemo tR ali kada dodamo jos 10 pisti povecavamotS . Novo vreme pristupa je jednako

    t = tS + tR =

    (M + 10 1)tTT3

    +1

    2 1.2r= 3.6 ms + 6.9 ms = 10.5 ms

    Dakle, prosecno vreme pristupa se smanjuje.

    3. a) Kapacited drajva je 8 521 64 1 KB = 266.752 MB.

    b) Rotaciona latentnost je tR =12r = 8.3 ms. Prosecno vreme pristupa je t = tS + tR = 8 ms +

    8.3 ms = 16.3 ms.

    c) Pretpostavimo da je fajl smesten na uzastopnim cilindrima (a u okviru njih na uzastopnimpistama i sektorima) kao i da pocinje od cilindra #0, piste #0, sektora #0.2 Kapacitet cilindra je2N K X = 512 KB, a kapacitet jedne piste je K X = 64 KB, pa dati fajl od 5 MB zauzima 9celih cilindara i 6 celih pisti, 8 sektora sedme piste (narednog, desetog, cilindra); tj. fajl se zavrsavau cilindru #9, pisti #6, sektoru #7 (indeksiranje od 0).

    Prilikom ucitavanja fajla iz hard diska (prenosa) desava se sledece: na pocetku je disku potrebnot = tS (pozicioniranje na cilindar #0) + tR (pozicioniranje na sektor #0) vremena. Zatim 9 putaponavlja sledecu operaciju: ocita ceo trenutni cilindar za sta mu je potrebno 2N 1r vremena (vremeza koje se disk okrene 2N puta da bi ocitao svih 2N pisti trenutnog cilindra), pomeri se na sledecicilindar (tTT vremena) i pozicionira glavu na sektor #0 (tR vremena). Kada glava dode do desetogcilindra (#9), potrebno je da ocita 6 pisti (61r vremena) i konacno da ocita 8 sektora tj. napravi8K -ti deo kruga (

    8K

    1r vremena). Prema tome, ukupno vreme za prenos datog fajla je:

    T = t+ 9(2N 1r

    + tTT + tR) + 6 1

    r+

    8

    K

    1

    r= 1406.9 ms

    d) Na osnovu formule (3.4) imamo da je trazena brzina prenosa jednaka r K X = 3600/60641KB = 34.8 MB/s.

    4. Po uslovima zadatka, vreme pristupa pista-ka-pisti je tTT =0.25103 m17.5 m/s = 0.014 ms. Vreme

    za citanje celog cilindra je tc = 19 1r = 317 ms, gde je r brzina rotacije. Zatim se, pre citanjanarednog cilindra, bafer mora isprazniti ka memoriji. Uzimajuci u obzir velicinu jednog cilindrai brzinu prenosa, na ovo odlazi tmem =

    300 MB/815300 KB/s = 1.23s. Zatim se igla prebacuje na narednu

    pistu-cilindar (tTT ) i pozicionira se na pocetni sektor (sektore) na sta odlazi tR =12r = 8.3 ms

    vremena.

    2Kada god je moguce (ima mesta) fajlovi se pamte na ovakav nacin. Pretpostavku o numeraciji cemo uvek koristitijer ona samo utice na laksi racun.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 23

    Citanje i baferovanje se vrsi za svaki cilindar (815 puta) a pomeranje na naredni i pozcioniranjena pocetni sektor se vrsi 814 puta pa je trazeno vreme

    T = 815(tc + tmem) + 814(tTT + tR) = 1267.58 s.

    Primetimo da smo u prethodnom zadatku implicitno pretpostavljali da je kapacitet baferaizmedu memorije i hard diska beskonacan, tj. da se bilo koja kolicina podataka moze direktnopreneti iz memorije na disk i obratno - zato tada nismo uzimali dodatno vreme tmem u obzir. Sadruge strane, u ovom zadatku se pretpostavlja da se glava na pocetku nalazi na pravom mestu izato se u obzir ne uzima seek time (tS + tR).

    5. Vreme pristupa od piste i do piste j je |i j|. Kako nas interesuje ocekivana vrednost, a oviindeksi su izabrani sa jednakom verovatnocom, treba sabratati sve izraze |i j| i rezultat podelitisa ukupnim brojem mogucnosti (n2). Kako je

    ni=1

    nj=1

    |i j| = 2ni=1

    i1j=1

    (i j)

    = 2

    ni=1

    i(i 1)2

    =ni=1

    i2 ni=1

    i

    =n(n+ 1)(2n+ 1)

    6 n(n+ 1)

    2

    =n3 n

    3

    dobijamo

    E[seek time] =

    ni=1

    nj=1 |i j|n2

    =n3n

    3

    n2=n

    3 1

    3n

    odakle direktno sledi da E[seek time] = n3 kada n. Zbog toga se cesto prosecna vrednost seektime-a uzima kao n3 tTT .

    6. Koristeci oznake iz jednacina (3.5) i (3.6), imamo da je x = 150, N = 10000, Cp = 500, = 10.5 ms = 2000

    1s , Ci = Ci1 + Ci2 = 1000 + 1000 = 2000.

    a) Kod prekidne tehnike, procesor trosi x (Ci +N) = 1 800 000 taktnih intervala u sekundi.

    b) Kod programirane tehnike, procesor trosi Cp+xN = 2 500 000 taktnih intervala u sekundi.

    c) Potrebno je odrediti novo tako da vazi

    x (Ci +N) = Cp + x N.

    Iz prethodne jednacine sledi da je = xCiCp = 600 ispitivanja statusa U/I uredaja u sekundi,

    odnosno ispitivanje statusa na svakih 1 = 1.67 ms.

    7. Potrebno je odrediti koji procenat od 50 106 taktnih intervala u sekundi odlazi na pooling, pricemu je Cp = 100.

    a) Na pooling se trosi Cp = 30 100 = 3000 taktnih intervala u sekundi. Prema tome, CPUna pooling misa trosi 3000

    50106 = 0.006% svog vremena.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 24

    b) Da se ne bi nijedan podatak izgubio u prenosu, CPU mora da proverava status bar onolikoputa u sekundi koliko ima prenosa 16-bitnih jedinica3. Kako se ukupno prenese 50 KB usekundi, a 16 bita = 2 bajta, u sekundi se prenese = 50 KB/s2 bajta = 25 2

    10 16-bitnih jedinica.

    Dakle, procesor proverava status puta u sekundi pa na pooling trosi 25210100

    50106 = 5% svogvremena.

    c) Potpuno analgono prethodnom zadatku. Ukoliko pretpostavimo da je 1 MB = 106 B, procesor

    ispituje status = 2 MB/s4 bajta = 500 000 puta u sekundi, pa na pooling trosi500000100

    50106 = 100%svog vremena. Ocigledno je u ovom slucaju programirana U/I tehnika neprihvatljiva - trebakoristiti neku drugu tehniku.

    8. Kako se podaci prenose bajt-po-bajt, prilikom prenosa svakog bajta se generise zahtev za prekid.Pri brzini prenosa od v =8 KB/s to je 8 000 prekida u sekundi (pretpostavka 1 KB = 1000 B) pase na prekid svake sekunde trosi 8000 100 s = 0.8 s. Prema tome, CPU trosi 0.8 s1 s = 80% svogvremena za obradu prekida (sto je mnogo).

    Analogni nacin razmisljanja je sledeci: zahtev za prekid se desava jednom u svakih 1v = 125 sa obrada zahteva traje 100 s. Prema tome, procesor trosi 100125 = 80% svog vremena za obraduprekida.

    9. Mozemo zamisliti da se podaci prenose u paketu od 16 bajtova pa se pri istoj brzini od v =8KB/s generise 8000/16 = 500 prekida u sekundi. Obrada svakog prekida traje 100 s + 15 8 s= 220 s. Dakle, procesor svake sekunde trosi 500 220 s = 110 ms za obradu prekida, odnosno110 ms1 s = 11% svog vremena.

    10. Uredaji se opsluzuju prema prioritetu - to znaci da ako uredaj A ima veci prioritet od uredajaB, tada ce uredaj A biti prvi opsluzen. Ako A salje zahtev za prekid dok je u toku opsluzivanjeuredaja B, doci ce do prekida opsluzivanja uredaja B koje ce se kasnije nastaviti. Opis dogadajadat je u Tabeli 3.1 pri cemu su stampac, disk i RS 232 linija oznaceni sa U1, U2 i U3, redom.

    Vreme 0 10 15 20 25 35 40

    Dogadaj Pocetak Start U1Stop U1,Start U3

    U2 nacekanju

    Kraj U3,Start U2

    Kraj U2,nastavak

    U1

    Kraj U1

    Tabela 3.1: Zadatak 10. Tok opsluzivanja uredaja

    Vidimo da je za stampac (U1) opsluzivanje pocelo u trenutku 10 a zavrsilo se u trenutku 40; zadisk (U2) je opsluzivanje pocelo u trenutku 25 a zavrsilo se u trenutku 35; za RS 232 liniju (U3) jeopsluzivanje pocelo u trenutku 15 a zavrsilo se u trenutku 25.

    3U ovakvim situacijama podrazumevamo da CPU proverava tacno toliko puta (umesto bar toliko puta), tj. daradi najoptimalnije pri datim uslovima.

  • Glava 4

    MIPS

    4.1 Teorija

    25

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 26

    4.2 Zadaci

    Zadatak 1. Sabrati cetiri broja koja se nalaze u registrima $s1-$s4 i rezultat smestiti u registar$s0.

    Zadatak 2. Prebaciti vrednost registra $s1 u registar $s2 a zatim u registar $s3 ubaciti konstantu2014.

    Zadatak 3. Neka je a vektor koga cine 32-bitni brojevi. G, H i I su, redom, adrese memorijskihlokacija u kojima se cuvaju promenljive g, h i i, dok je A bazna adresa vektora a (G, H, I i A suneke konstante). Prevesti sledece C++ iskaze na asemblerski jezik mikroprocesora MIPS:

    a) g = h+ a[8]

    b) a[10] = h+ a[8]

    c) g = h+ a[i]

    Sve promenjene vrednosti treba update-ovati na odgovarajucim memorijskim lokacijama (u ovomslucaju promenljivu g i element a[10]).

    Zadatak 4. Pomnoziti vrednost iz registra $s0 sa 4 i rezultat smestiti u registar $s1 koristeci samojednu instrukciju.

    Zadatak 5. Napisati asemblerski MIPS kod koji odgovara sledecem C++ kodu (promenljive i, j,f , g i h su, redom, u registrima $s0 - $s4):

    a) if (i == j)f = g + h;

    b) if (i == j)f = g + h;

    else

    f = g - h;

    Zadatak 6. U registrima $a0 i $a1 se nalaze, redom, brojevi n i m. Ukoliko broj m deli broj n uregistar $v0 upisati 1 a u suprotnom u $v0 upisati 0.

    Zadatak 7. U registrima $a1, $a2 i $a3 se nalaze 3 cela broja (mogu biti i negativni). Ispitatida li ova tri broja mogu biti stranice nekog trougla i u slucaju potvrdnog odgovora u registar $v0upisati 1 a u suprotnom u $v0 upisati 0.

    Zadatak 8. Napisati asemblerski MIPS kod koji odgovara sledecem C++ kodu (promenljive i, j ik su, redom, u $s0, $s1 i $s2, dok je bazna adresa niza x u $a0):

    while (x[i] == k) {i = i + j;

    }

    Zadatak 9. Napisati asemblerski MIPS kod koji odgovara sledecem C++ kodu (promenljive i, j, gi h su, redom, u $s0, $s1, $s2 i $s3, dok je bazna adresa niza a u $a0):

    do {g = g + a[i];

    i = i + j;

    } while (i != h);

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 27

    Zadatak 10. Data su dva 32-bitna niza a i b duzine n (indeksirana od 0 do n 1). Iskopirativrednosti niza a, uvecane za vrednost c, u niz b (b[i] = a[i] + c). Bazne adrese nizova a i b, redom,nalaze se u memorijskim lokacijama A i B, broj n se nalazi u registru $s0 a broj c u registru $s1.

    Zadatak 11. Niz a sadrzi n 32-bitnih celih brojeva a[0], a[1], . . . , a[n1]. Odrediti najveci od ovihbrojeva. Broj n se nalazi u registru $s0 a bazna adresa niza a (koji se cuva u memoriji) se nalaziu registru $s1. Resenje upisati u registar $v0.

    Zadatak 12. U registru $a0 se nalazi prirodan broj n. Ispitati da li je broj n prost i odgovor (0 -ne, 1 - da) upisati u registar $v0.

    Zadatak 13. U registru $a0 se nalazi prirodan broj n. Odrediti koliko ima savrsenih prirodnihbrojeva u segmentu [1, n] i odgovor upisati u $v0. Broj je savrsen ako je jednak zbiru svojihpozitivnih delilaca ne racunajuci njega samog (npr. 28 je savrsen jer je 28 = 1 + 2 + 4 + 7 + 14).

    Zadatak 14. Niz a sadrzi n 32-bitnih celih brojeva a[0], a[1], . . . , a[n1]. Broj n se nalazi u registru$s0 a bazna adresa niza a (koji se cuva u memoriji) u registru $s1. Odrediti koja se vrednost u nizua pojavljuje najvise puta. Trazenu vrednost upisati u registar $v0 a broj ponavljanja u registar$v1 (ukoliko ima vise resenja, ispisati bilo koje).

    Zadatak 15. Izracunati koliko ima Pitagorinih trojki (a, b, c) za koje vazi 1 a < b < c n.Broj n se nalazi u registru $a0 a rezultat treba upisati u registar $v0. Pitagorina trojka je uredenatrojka (a, b, c) prirodnih brojeva za koje vazi a2 + b2 = c2.

    Napomena: U zadacima u kojima se trazi implementacija funkcija, podrazumeva se da poslepoziva funkcije vrednosti svih registara (osim onih u koje funkcija vraca rezultat) moraju biti istekao pre poziva funkcije.

    Zadatak 16. Napisati funkciju Min2(x, y) koja racuna minimum dva cela (32-bitna) broja. Ulazniparametari funkcije se nalaze u registrima $a0 i $a1 a rezultat treba smestiti u registar $v0.

    Zadatak 17. Napisati funkciju Min3(x, y, z) koja racuna minimum tri cela (32-bitna) brojakoristeci funkciju Min2 iz prethodnog zadatka. Ulazni parametari funkcije se nalaze u registrima$a0, $a1 i $a2, a rezultat treba smestiti u registar $v0.

    Zadatak 18. Realizovati sledecu C++ rekurzivnu funkciju (racunanje faktorijela) na asembleruMIPS-a (ulazni parametar je u $a0, a rezultat staviti u $v0):

    int Fact(int n)

    {if (n == 0) return 1;

    else return n * Fact(n - 1);

    }

    Zadatak 19. Napisati rekurzivnu funkciju za racunanje NZD-a dva prirodna broja. Ulazni param-etari funkcije se nalaze u registrima $a0 i $a1, a rezultat treba smestiti u registar $v0.

    Zadatak 20. Implementirati binarnu pretragu BinSearch(a, l, r, x) koja za dati strogo rastuciniz a ispituje da li se broj x nalazi medu brojevima a[l], a[l+ 1], . . . , a[r]. Parametri (bazna adresaniza, granice, broj x) se nalaze u $a0-$a3 a rezultat (indeks elementa jednakog x ili -1) smestiti u$v0. Implementirati i nerekurzivnu i rekurzivnu verziju ove funkcije.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 28

    4.3 Resenja

    1. Potrebno je vise puta sabrati po dva broja koristeci instrukciju add (mozemo uraditi na visenacina):

    add $s1, $s1, $s2add $s3, $s3, $s4add $s0, $s1, $s3

    2. Ovo mozemo odraditi uz pomoc funkcija Add, Addi i konstantnog registra $zero:

    add $s2, $s1, $zeroaddi $s3, $zero, 2014

    3. Obratiti paznju da su elementi niza 32-bitni; to znaci da ako je potrebno da pristupimo elementua[i], njegova adresa je A+ 4 i. Za deo pod a) imamo

    lw $t0, H($zero) # $t0 haddi $s0, $zero, A # $s0 A tj. $s0 a[0]lw $t1, 32($s0) # $t1 a[8]add $s1, $t0, $t1 # $s1 h + a[8]sw $s1, G($zero) # g $s1

    Deo pod b) se jedino razlikuje u smestanju rezultata:

    lw $t0, H($zero)addi $s0, $zero, Alw $t1, 32($s0)add $s1, $t0, $t1sw $s1, 40($s0)

    U delu c) adresa niza je zadata promenljiva i (a ne konstanta) - da bismo pristupili lokaciji A[i]potrebno je u neki registar (recimo s1) smestiti vrednost A+4i a zatim ce trazena adresa biti 0($s1).

    lw $t0, H($zero) # $t0 haddi $s0, $zero, A # $s0 Alw $t1, I($zero) # $t1 iadd $t1, $t1, $t1 # $t1 i+ i = 2iadd $t1, $t1, $t1 # $t1 2i+ 2i = 4iadd $s1, $s0, $t1 # $s1 A+ 4ilw $t2, 0($s1) # $t2 A[i]add $s2, $t0, $t2 # $s2 h+A[i]sw $s2, G($zero) # g $s2

    4. Ideja je koristiti operaciju logickog pomeranja u levo (shift left logical - sll). Naime, kako subrojevi predstavljeni u binarnom zapisu, dodavanje jedne nule na kraju je ekvivalentno mozenju sa2 a dodavanje dve nule - mnozenju sa 22. Trazena instrukcija je

    sll $s1, $s0, 2

    Ovo je jako korisno u radu sa 32-bitnim nizovima gde nam je za pristup i-toj lokaciji potrebnavrednost 4 i; koristeci jednu sll instrukciju mozemo izbeci koriscenje 2 add instrukcije.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 29

    5. Posmatrajmo prvo deo a). U MIPS-u je if-then strukturu najlakse implementirati tako stoproveravamo negaciju uslova (u ovom slucaju bne umesto beq) i preskacemo then naredbukoju treba izvrsiti ukoliko uslov nije ispunjen:

    bne $s0, $s1, L # ukoliko je i 6= j idi na Ladd $s2, $s3, $s4 # inace izvrsi then naredbu

    L: . . . # sledeca naredba

    Deo pod b) radimo slicno, s tim sto nam treba jedan bezuslovni skok:

    bne $s0, $s1, ELSE # ukoliko je i 6= j idi na ELSEadd $s2, $s3, $s4 # inace izvrsi then naredbuj L # preskociti else naredbu

    ELSE: sub $s2, $s3, $s4 # else naredbaL: . . . # sledeca naredba

    6. Koristimo cinjenicu da se u registru Hi cuva ostatak deljenja nakon instrukcije div.

    add $v0, $zero, $zero # v0 0div $a0, $a1mfhi $t0 # t0 n mod mbne $t0, $zero, L # if (m ne deli n) goto Laddi $v0, $zero, 1 # inace v0 1

    L: . . . # sledeca naredba

    7. Zadatak se svodi na proveru istinitosti logickog izraza

    (a1 > 0) && (a2 > 0) && (a3 > 0) && (a1 + a2 > a3) && (a1 + a3 > a2) && (a2 + a3 > a1)

    gde je && oznaka za logicko and (iz C++-a). Za proveravanje vise uslova povezanih logickimoperacijama mozemo koristiti MIPS-ove logicke naredbe; u tom slucaju nam cesto nisu potrebnauslovna grananja i labele:

    addi $v0, $zero, 1 # v0 1slt $t0, $zero $a1and $v0, $v0, $to # v0 v0 and (0 < a1)slt $t0, $zero $a2and $v0, $v0, $to # v0 v0 and (0 < a2)slt $t0, $zero $a3and $v0, $v0, $to # v0 v0 and (0 < a3)add $t1, $a1, $a2slt $t0, $a3, $t1and $v0, $v0, $to # v0 v0 and (a3 < a1 + a2)add $t1, $a1, $a3slt $t0, $a2, $t1and $v0, $v0, $to # v0 v0 and (a2 < a1 + a3)add $t1, $a2, $a3slt $t0, $a1, $t1and $v0, $v0, $to # v0 v0 and (a1 < a2 + a3)

    Zadatak mozemo uraditi i na drugi nacin: posmatramo svaki od 6 uslova i ukoliko neki nijeispunjen, skacemo na kraj; u suprotnom (ako su svi ispunjeni) postavljamo $v0 na 1.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 30

    addi $v0, $zero, 0 # v0 0slt $t0, $zero $a1beq $t0, $zero, END # if (0 a1) goto ENDslt $t0, $zero $a2beq $t0, $zero, END # if (0 a2) goto ENDslt $t0, $zero $a3beq $t0, $zero, END # if (0 a3) goto ENDadd $t1, $a1, $a2slt $t0, $a3, $t1beq $t0, $zero, END # if (a3 a1 + a2) goto ENDadd $t1, $a1, $a3slt $t0, $a2, $t1beq $t0, $zero, END # if (a2 a1 + a3) goto ENDadd $t1, $a2, $a3slt $t0, $a1, $t1beq $t0, $zero, END # if (a1 a2 + a3) goto ENDaddi $v0, $zero, 1 # ako je sve ok, v0 1

    END: . . . # sledeca naredba

    8. U petlji tipa while, uslov proveravamo na pocetku i ukoliko nije zadovoljen, napustamo petlju.

    LOOP: sll $t0, $s0, 2 # t0 4iadd $t0, $t0, $a0 # t0 a+ 4ilw $t1, 0($t0) # t1 a[i]bne $t1, $s2, OUT # if (a[i] 6= k) goto OUTadd $s0, $s0, $s1 # i i+ jj LOOP

    OUT: . . . # sledeca naredba

    9. U petlji tipa repeat, uslov proveravamo na kraju i, ukoliko je potrebno, vracamo se na pocetakpetlje (petlja se izvrsava bar jednom).

    LOOP: sll $t0, $s0, 2 # t0 4iadd $t0, $t0, $a0 # t0 a+ 4ilw $t1, 0($t0) # t1 a[i]add $s2, $s2, $t1 # g g + a[i]add $s0, $s0, $s1 # i i+ jbne $s0, $s3, LOOP # if (i 6= h) goto LOOP. . . # sledeca naredba

    10. Koristicemo $t0 kao brojac improvizovane for petlje (zapravo while petlja).

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 31

    lw $a1, A($zero) # a1 Alw $a2, B($zero) # a2 Badd $t0, $zero, $zero # i 0

    LOOP: beq $t0, $s0, OUTsll $t1, $t0, 2 # t1 4iadd $t2, $a1, $t1 # t2 a+ 4ilw $t3, 0($t2) # t3 a[i]add $t3, $t3, $s1 # t3 a[i] + cadd $t2, $a2, $t1 # t2 b+ 4isw $t3, 0($t2) # b[i] a[i] + caddi $t0, $t0, 1 # i i+ 1j LOOP

    OUT: . . . # sledeca naredba

    11. Na pocektu cemo u $v0 smestiti broj 231 (najmanji oznaceni 32-bitni broj) a zatim cemo usvakom od n koraka vrsiti dodelu v0 min(v0, a[i]).

    addi $v0, $zero, 231 # v0 MIN INTadd $t0, $zero, $zero # i 0

    LOOP: beq $t0, $s0, OUT # if (i = n) goto OUTsll $t1, $t0, 2 # t1 4iadd $t1, $s1, $t1 # t1 a+ 4ilw $t1, 0($t1) # t1 a[i]slt $t2, $v0, $t1 # t2 (v0 < a[i] ? 1 : 0)beq $t2, $zero, L # if (v0 a[i]) goto Ladd $v0, $zero, $t2 # else v0 a[i]

    L: addi $t0, $t0, 1 # i i+ 1j LOOP

    OUT: . . . # sledeca naredba

    12. Na pocektu stavimo u $v0 vrednost 1 (pretpostavimo da je n prost) a zatim, redom, za svakoi [2, n1] ispitujemo da li i deli n; u slucaju potvrdnog odgovora upisujemo 0 u $v0 i zavrsavamo.

    addi $v0, $zero, 1 # v0 1addi $t0, $zero, 2 # i 2

    LOOP: beq $t0, $a0, OUT # if (i = n) goto OUTdiv $a0, $t0 # Hi (n mod i)mfhi $s0 # s0 (n mod i)bne $s0, $zero, L # if (i ne deli n) goto Laddi $v0, $zero, 0 # else n nije prostj OUT # nije neophodno ali skracuje vreme

    L: addi $t0, $t0, 1 # i i+ 1j LOOP

    OUT: . . . # sledeca naredba

    13. Za svaki broj x iz segmenta [1, n], idemo po brojevima od 1 do x 1 i sabiramo one koji delex. Ukoliko je trazena suma jednaka x (tj. x je savrsen), povecavamo sadrzaj registra $v0. Za ovosu potrebne dve ugnjezdene petlje:

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 32

    addi $v0, $zero, 0 # v0 0addi $a0, $zero, 1 # lakse za proveru u petljiaddi $s0, $zero, 1 # x 1

    LOOP1: beq $s0, $a0, OUT1 # if (x = n+ 1) goto OUT1addi $s1, $zero, 0 # suma 0addi $t0, $zero, 1 # i 1

    LOOP2: beq $t0, $s0, OUT2 # if (i = x) goto OUTdiv $s0, $t0 # Hi (x mod i)mfhi $t1 # t1 (x mod i)bne $t1, $zero, L # if (i ne deli x) goto L1add $s1, $s1, $t0 # else suma suma + i

    L1: addi $t0, $t0, 1 # i i+ 1j LOOP2

    OUT2: bne $s0, $s1, L2 # if (suma 6= x) goto L2addi $v0, $v0, 1 # else v0 v0 + 1

    L2: addi $s0, $s0, 1 # x x+ 1j LOOP1

    OUT1: . . . # sledeca naredba

    14. Idemo redom po elementima niza i za svaki brojimo koliko puta se on pojavljuje u nizu. Akose pojavljuje vise puta od trenutnog maksimuma, update-ujemo $v0 i $v1 registre.

    addi $v1, $zero, 0 # v1 0addi $t0, $zero, 0 # i 0

    LOOP1: beq $t0, $s0, OUT1 # if (i = n) goto OUT1sll $t2, $t0, 2 # t2 4iadd $t2, $t2, $s1 # t2 a+ 4ilw $a0, 0($t2) # a0 a[i] (vrednost)addi $a1, $zero, 0 # a1 0 (koliko puta se javlja)addi $t1, $zero, 0 # j 0

    LOOP2: beq $t1, $s0, OUT2 # if (j = n) goto OUT2sll $t2, $t1, 2 # t2 4jadd $t2, $t2, $s1 # t2 a+ 4jlw $t2, 0($t2) # t2 a[j]bne $t2, $a0, L # if (a[j] 6= a[i]) goto L1addi $a1, $a1, 1 # else a1 a1 + 1

    L1: addi $t1, $t1, 1 # j j + 1j LOOP2

    OUT2: slt $t2, $v1, $a1beq $t2, $zero, L2 # if (nije bolje resenje) goto L2addi $v1, $a1, 0 # else update v1addi $v0, $a0, 0 # and update v0

    L2: addi $t0, $t0, 1 # i i+ 1j LOOP1

    OUT1: . . . # sledeca naredba

    15. Pravimo tri ugnjezdene petlje - za a, b i c. Da bismo obezbedili poredak a < b < c, petlja za b

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 33

    ce pocinjati od a+ 1 a petlja za c od b+ 1.

    addi $v0, $zero, 0 # v0 0addi $a0, $zero, 1 # lakse za proveru u petljiaddi $t1, $zero, 1 # a 1

    LOOP1: beq $t1, $a0, OUT1 # if (a = n+ 1) goto OUT1addi $t2, $t1, 1 # b a+ 1

    LOOP2: beq $t2, $a0, OUT2 # if (b = n+ 1) goto OUT2addi $t3, $t2, 1 # c b+ 1

    LOOP3: beq $t3, $a0, OUT2 # if (c = n+ 1) goto OUT3mult $t1, $t1mflo $s1 # s1 a2mult $t2, $t2mflo $s2 # s2 b2mult $t3, $t3mflo $s3 # s3 b2sub $s3, $s3, $s2 # c2 b2sub $s3, $s3, $s1 # c2 b2 a2bne $s3, $zero, L # if (c2 6= a2 + b2) goto Laddi $v0, $v0, 1 # else v0 v0 + 1

    L: addi $t3, $t3, 1 # c c+ 1j LOOP3

    OUT3: addi $t2, $t2, 1 # b b+ 1j LOOP2

    OUT2: addi $t1, $t1, 1 # a a+ 1j LOOP1

    OUT1: . . . # sledeca naredba

    16. U stack (magacin) treba smestiti samo jednu promenljivu - $t0 koju cemo koristiti u slt naredbi.

    Min2: addi $sp, $sp, -4sw $t0, 0($sp)

    slt $t0, $a0, $a1beq $t0, $zero, L1add $v0, $zero, $a0j L2

    L1: add $v0, $zero, $a1

    L2: lw $t0, 0($sp)addi $sp, $sp, 4

    jr $ra

    17. Kako je potrebno koristiti Min2, koristimo formulu Min3(x, y, z) = Min2(Min2(x, y), z).Prilikom prvog poziva Min2 u $v0 se nalazi manji od brojeva $a0 i $a1. Da bismo pronasli manjiod brojeva $v0 i $a2, moramo prebaciti $v0 u $a0 i $a2 u $a1 jer funkcija Min2 vidi samo registre$a0 i $a1. Zato cemo na pocetku $a0 i $a1 ubaciti u stack da ne bismo izgubili ove vrednosti.

    Napomenimo da je neophodno pamtiti sadrzaj registra $ra u stack ukoliko nasa

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 34

    funkcija poziva bar jednu drugu funkciju (cest slucaj, npr. u ovom zadatku) zato sto jalnaredba menja sadrzaj ovog registra.

    Min3: addi $sp, $sp, -12sw $a0, 8($sp)sw $a1, 4($sp)sw $ra, 0($sp)

    jal Min2add $a0, $zero, $v0add $a1, $zero, $a3jal Min2

    lw $ra, 0($sp)lw $a1, 4($sp)lw $a0, 8($sp)addi $sp, $sp, 12

    jr $ra

    18. Jedna od mogucih implementacija funkcije je sledeca:

    Fact: addi $sp, $sp, -8sw $a0, 4($sp)sw $ra, 0($sp)

    addi $v0, $zero, 1 # trenutno resenje $v0 = 1beq $a0, $zero, End # if (n = 0) goto Endaddi $a0, $a0, -1 # n n 1jal Fact # Fact(n 1)addi $a0, $a0, 1 # staro n, mogli smo i lw $a0, 4($sp)mul $v0, $a0mflo $v0 # $v0 Fact(n 1) n

    End: lw $ra, 0($sp)lw $a0, 4($sp)addi $sp, $sp, 8

    jr $ra

    19. Koristimo Euklidov algoritam: NZD(a, b) = NZD(b, a mod b), za b 6= 0.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 35

    NZD: addi $sp, $sp, -12sw $a0, 8($sp) # asw $a1, 4($sp) # bsw $ra, 0($sp)

    add $v0, $a0, $zero # trenutno resenje $v0 = abeq $a1, $zero, End # if (b = 0) goto Enddiv $a0, $a1add $a0, $a1, $zero # a bmfhi $a1 # b a mod bjal NZD # NZD(b, a mod b)

    End: lw $ra, 0($sp)lw $a1, 4($sp)lw $a0, 8($sp)addi $sp, $sp, 12

    jr $ra

    20. TODO

  • Glava 5

    Hazardi, protocnost i adresiranje

    5.1 Teorija

    Hazardi i protocnost:

    Pod hazardima podataka (za dati kod) podrazumevamo uredene parove instrukcija kojima nemozemo medusobno zameniti mesta a da smisao koda ostane isti. Razlikujemo 3 vrste hazardapodataka:

    1) RAW (Read after Write): U nekoj instrukciji I1 pisemo (W) u neki registar R a u nekojod narednih instrukcija I2 citamo (R) iz pomenutog registra R. Par (I1, I2) cini hazard jerzamenom mesta ovih instrukcija iz registra R citamo podatak pre upisivanja sto nije isto kaou originalu.

    2) WAR (Write after Read): U nekoj instrukciji I1 citamo (R) iz nekog registra R a u nekojod narednih instrukcija I2 pisemo (W) u pomenuti registar R. Par (I1, I2) cini hazard jerzamenom mesta ovih instrukcija iz registra R citamo podatak posle upisivanja sto nije istokao u originalu.

    3) WAW (Write after Write): U nekoj instrukciji I1 pisemo (W) u neki registar R a u nekojod narednih instrukcija I2 ponovo pisemo (W) u pomenuti registar R. Par (I1, I2) cini hazardjer zamenom mesta ovih instrukcija i posle njihovog izvrsenja u registru R stoji potencijalnodrugacija vrednost od one u originalu.

    Najjednostavniji nacin uocavanja hazarda u kodu je fiksiranje svakog registra R koji ucestvujeu instrukcijama a zatim u odnosu na R potraziti sve parove instrukcija gde dolazi do gore opisanihhazarda.

    Adresiranje:

    Posmatrajmo (racunarske) masine koje izracunavaju izraze sastavljene od promenljivih (regis-tara) i osnovnih aritmetickih operacija (+,, , /). Prema broju operanada u ovim aritmetickimoperacijama koji se eksplicitno navode (adresiraju) mozemo razlikovati 4 vrste masina:

    1) Troadresne: Navode se 3 operanda, oblik aritmeticke operacije je

    Add X, Y, Z

    i odgovara naredbi X := Y + Z; analogno za ostale 3 operacije.

    36

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 37

    2) Dvoadresne: Navode se 2 operanda, oblik aritmeticke operacije je

    Add X, Y

    i odgovara naredbi X := X + Y ; analogno za ostale 3 operacije. Dodatno se uvodi operacija

    Mov X, Y

    sa znacenjem X := Y .

    3) Jednoadresne: Navodi se samo 1 operand. Postoji implicitni registar Akumulator (Acc) ioblik aritmeticke operacije je

    Add X

    sa znacenjem Acc := Acc+X; analogno za ostale 3 operacije. Koriste se i operacije

    Load X i Store Y

    koje redom oznacavaju Acc := X i Y := Acc.

    4) Nultoadresne: Ne navode se operandi. Imamo samo jedan stack i prilikom navodjenjaneke operacije (bez operanada) sa vrha stack-a se skidaju dva elementa, nad njima se izvodioperacija i rezultat se ponovo smesta na stack. Dodatne operacije su

    Push X i Pop Y

    koje redom oznacavaju stavljanje vrednosti registra X na vrh stack-a, odnosno skidanje ele-menta sa vrha stack-a i njegovo smestanje u registar Y . Za efikasno predstavljanje izraza naovoj masini, potrebno je izraz prevesti u postfiksnu (inverznu poljsku) notaciju.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 38

    5.2 Zadaci

    Zadatak 1. Uociti sve RAW, WAR i WAW hazarde u sledecem MIPS kodu (registri su oznacenisa Ri):

    addi R3, R7, 0lw R8, 0(R3)addi R3, R3, 4lw R9, 0(R3)beq R8, R9, Lab

    Zadatak 2. Dat je kod koji se sastoji od devet instrukcija od kojih svaka ima dva izvorna i jedanodredisni registar kao parametre. Registri su oznaceni sa Ri, i = 1, 6 a instrukcije sa Fi, i = 1, 3.Odrediti sve RAW, WAR i WAW hazarde u datom kodu.

    I1 R1 F1(R2, R3)

    I2 R5 F3(R1, R2)

    I3 R4 F2(R2, R2)

    I4 R3 F1(R1, R4)

    I5 R6 F1(R5, R6)

    I6 R1 F1(R2, R3)

    I7 R4 F2(R2, R5)

    I8 R3 F1(R1, R4)

    I9 R5 F3(R5, R5)

    Zadatak 3. Prevesti sledece izraze iz infiksnog u postfiksni (inverzna poljska notacija) oblik:

    a) A B + C

    b) A+B C

    c) A/(B + C A) C +D

    d) ((A+B) C +D)/(E + F +G)

    Zadatak 4. Prevesti sledece izraze iz postfiksnog (inverzna poljska notacija) u infiksni oblik:

    a) ABCDE + /

    b) AB + CD /

    c) ABC + /DE +

    d) AB/C +D E

    Zadatak 5. Napisati program za izracunavanje izraza

    a) X = A+B C +D

    b) Y = A/(B + C) +D Eza troadresnu, dvoadresnu, jednoadresnu i nultoadresnu masinu (slova oznacavaju registre). Koris-titi sto manje pomocnih registara. Sadrzaji registara (osim X, Y i pomocnih registara) se ne smejumenjati.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 39

    5.3 Resenja

    1. Uredeni parovi instrukcija koji predstavljaju hazarde su dati u narednoj tabeli:

    registar RAW WAR WAW

    R3 (I1,I2), (I1,I3), (I1,I4), (I3,I4) (I2,I3) (I1,I3)

    R7

    R8 (I2,I5)

    R9 (I4,I5)

    2. Uredeni parovi instrukcija koji predstavljaju hazarde su dati u narednoj tabeli:

    registar RAW WAR WAW

    R1 (I1,I2), (I1,I4), (I1,I8), (I6,I8) (I2,I6), (I4,I6) (I1,I6)

    R2

    R3 (I4,I6) (I1,I4), (I1,I8), (I6,I8) (I4,I8)

    R4 (I3,I4), (I3,I8), (I7,I8) (I4,I7) (I3,I7)

    R5 (I2,I5), (I2,I7), (I2,I9) (I5,I9), (I7, I9) (I2,I9)

    R6

    3. Trazeni izrazi su:

    a) AB C+

    b) ABC +

    c) ABCA +/C D+

    d) AB + C D + EF +G+ /

    4. Trazeni izrazi su:

    a) A/(B (C (D + E)))

    b) (A+B)/(C D)

    c) A/(B + C) +D E

    d) (A/B + C D) E

    5. U delu pod a) nam nisu potrebni pomocni registri:

    troadresna masina

    Mul X, B, CAdd X, X, AAdd X, X, D

    dvoadresna masina

    Mov X, BMul X, CAdd X, AAdd X, D

    jednoadresna masina

    Load CMul BAdd AAdd DStore X

    nultoadresna masina

    Push BPush CMulPush AAddPush DAddPop X

    U delu pod b) nam je dovoljan (i potreban) jedan pomocni registar (npr T ):

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 40

    troadresna masina

    Add Y, B, CDiv Y, A, YMul T, D, EAdd Y, Y, T

    dvoadresna masina

    Mov Y, AMov T, BAdd T, CDiv Y, TMov T, DMul T, EAdd Y, T

    jednoadresna masina

    Load BAdd CStore YLoad ADiv YStore YLoad DMul EAdd YStore Y

    nultoadresna masina

    Push APush BPush CAddDivPush DPush EMulAddPop Y

  • Glava 6

    Mikroprocesor Intel 8086

    6.1 Teorija

    TODO

    Koristiti spisak instrukcija www.jegerlehner.ch/intel/IntelCodeTable.pdf

    U instrukciji svi operandi moraju biti istog obima!

    U jednoj instrukciji ne mogu oba operanda biti u memoriji!

    Kod MUL i DIV instrkucije operandi ne mogu biti konstante.

    Registri koji se koriste za adresiranje su iskljucivo BX, BP, SI i DI (npr. nije dozvoljenokoristiti [AX]).

    Po dogovoru, za DATASEGMENT koristimo samo .DATA a za CODESEGMENT - .CODE;nije potrebno podesavati segmentne registre i pozivati INT za izlaz iz koda.

    41

    www.jegerlehner.ch/intel/IntelCodeTable.pdf

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 42

    6.2 Zadaci

    Zadatak 1. Sabrati dve promenljve x i y tipa bajt (zadate u segmentu podataka) koje sadrzepozitivne cele brojeve i rezultat smestiti u registar DX.

    Zadatak 2. Napisati asemblerski Intel 8086 kod koji u registar DI upisuje 1 ako zadata 3 prirodnabroja a, b i c (1 a, b, c 181) koji se nalaze u registrima BL, CL i DL mogu (u nekom redosledu)biti stranice pravouglog trougla, a u suprotnom u registar DI upisuje 0.

    Zadatak 3. Napisati asemblerski Intel 8086 kod koji racuna zbir onih elemenata niza a[0], a[1], . . . ,a[n 1] koji su veci od low a manji od high i rezultat smesta u registar DX. Niz a (koji sadrzibajtove) i promenljive n (2 bajta), high (1 bajt) i low (1 bajt) treba zadati u .DATA delu koda.Pretpostaviti da trazena suma staje u 2 bajta i da su svi elementi niza i promenljive pozitivnibrojevi.

    Zadatak 4. Napisati asemblerski Intel 8086 kod koji u niz b[0], b[1], . . . , b[n 1] kopira elementeniza a[0], a[1], . . . , a[n 1] uvecane za broj 10. Oba niza, kao i promenljiva n su 16-bitni. Smatratida a[i] + 10 uvek staje u 16 bita.

    Zadatak 5. Napisati program na asembleru Intel 8086 koji racuna zbir cifara prirodnog broja kojise nalazi u registru BX i rezultat smesta u memorijsku lokaciju cija je adresa u registru CX.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 43

    6.3 Resenja

    1. Zbir dva 8-bitna broja u opstem slucaju ne mora stati u 8 bitova - zato se i rezultat smesta u16-bitni registar DX. Obratiti paznju da instrukcije MOV i ADD rade sa operandima istog obima(oba 8-bitna ili oba 16-bitna).

    .DATAx DB 23 ; npr x = 23y DB 32 ; npr y = 32

    .CODEMOV DX, 0 ; DX 0MOV DL, x ; DL xADD DL, y ; DL DL + yJNC DALJE ; ako nema prenosa, nistaINC DH ; inace DH DH + 1

    DALJE: . . .

    Sabiranje smo mogli da obavimo i bez prenosa ako 8-bitne brojeve smestimo u nizi bajt nekog16-bitnog registra (a u visi bajt upisemo nule1):

    .CODEMOV DH, 0 ; DH 0 (mogli smo i MOV DX, 0)MOV DL, x ; DL x (vazi DX = x jer DH = 0)MOV AH, 0 ;MOV AL, y ; AL y (vazi AX = y jer AH = 0)ADD DX, AX ; DX x+ y

    Napomenimo jos jednom da nismo mogli da koristimo naredbe tipa MOV DX, x i ADD DX,x jer je DX 16-bitan a x 8-bitna promenljiva.2

    2. Potrebno je proveriti da li vazi (a2+b2 = c2 b2+c2 = a2 c2+a2 = b2). Kako je 2 1812 < 216,svi medu-rezultati ce stati u 16-bitne registre.

    .CODEMOV AL, BL ; AL aMUL BL ; AX AL BL = a2MOV BX, AX ; BX a2 (16-bitna vrednost u opstem slucaju)MOV AL, CL ; . . .MUL CL ; . . .MOV CX, AX ; CX b2MOV AL, DL ; . . .MUL DL ; . . .MOV DX, AX ; DX c2

    1Ovo radi kod pozitivnih (neoznacenih brojeva) - kod oznacenih u visi bajt upisujemo nule za pozitivne brojeve ajedinice (tj. oznaceni broj -1) za negativne brojeve.

    2Asembler ne bi prijavio gresku ali bi ucitao 2 bajta sa memorijske lokacije x umesto jednog a samim tim ipogresnu vrednost promenljive x.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 44

    MOV DI, 0 ; pretpostavimo da nije pravougli

    MOV AX, BX ; AX a2ADD AX, CX ; AX a2 + b2CMP AX, DXJE OK ; if (a2 + b2 = c2) goto OK

    MOV AX, CX ; AX b2ADD AX, DX ; AX b2 + c2CMP AX, BXJE OK ; if (b2 + c2 = a2) goto OK

    MOV AX, DX ; AX c2ADD AX, BX ; AX c2 + a2CMP AX, CXJE OK ; if (c2 + a2 = b2) goto OK

    JMP KRAJ ; ako nije pravougliOK: MOV DI, 1 ; ako je pravougli

    KRAJ: . . .

    3. Samo se krecemo kroz niz i poredimo elemente sa odgovarajucim vrednostima:

    .DATAa DB 100 DUP(?) ; npr. rezervisemo 100 lokacijan DW 100 ; npr n = 100 (ali u dva bajta!)low DB 50 ; npr low = 50high DB 150 ; npr high = 150

    .CODEMOV CX, 0 ; brojac i 0MOV SI, OFFSET a ; SI bazna adresa niza aMOV DX, 0 ; suma 0MOV AH, 0 ; U AL cemo smestati elemente niza a

    PETLJA: CMP CX, nJE KRAJ ; if (CX = n) goto KRAJMOV AL, [SI] ; AL a[i]CMP low, ALJAE DALJE ; if (low a[i]) goto DALJECMP AL, highJAE DALJE ; if (a[i] high) goto DALJE

    ADD DX, AX ; suma suma + a[i] (jer AH = 0)3

    DALJE: INC CX ; i+ +INC SI ; predi na sledeci elementJMP PETLJA

    KRAJ: . . .

    3A mogli smo i ADD DL, AL i da proverimo da li je doslo do prenosa.

  • Nikola Milosavljevic - Skripta iz arhitekture i organizacije racunara 45

    4. Krecemo se kroz nizove kao u prethodnom zadatku - SI za niz a i DI za niz b pri cemu se oviregistri u svakom koraku povecavaju za 2 jer su nizovi 16-bitni. Koristicemo malo drugaciji nacinadresnog rada radi demonstracije (naravno, moze se koristiti isti nacin kao i u prethodnomzadatku). Obratiti paznju da se u Intelu 8086 moze pristupati memorijskim lokacijama na razlicitenacine kombinacijom konstanti, promenljivih, operatora [], + i registara BX, BP, SI i DI (inijednog drugog registra!).

    .DATAa DW 100 DUP(?) ; npr. rezervisemo 100 lokacijab DW 100 DUP(?) ; npr. rezervisemo 100 lokacijan DW 100 ; npr n = 100

    .CODEMOV CX, 0 ; brojac i 0MOV SI, 0 ; umesto MOV SI, OFFSET aMOV DI, 0 ; umesto MOV DI, OFFSET b

    PETLJA: CMP CX, nJE KRAJ ; if (CX = n) goto KRAJMOV AX, a[SI] ; AX a[i], umesto MOV AX, [SI]ADD AX, 10 ; AX AX + 10MOV b[DI], AX ; b[i] AX, umesto MOV [DI], AX

    I