prof. dr. sc. Slobodan Ribarić
Građa računala ARHITEKTURA I ORGANIZACIJA RAČUNARSKIH SUSTAVA I I
prof. dr. sc. Slobodan Ribarić
GRAĐA RAČUNALA ARHITEKTURA I ORGANIZACIJA RAČUNARSKIH SUSTAVA 1. izdanje
2011.
SADRŽAJ Q 1. ARHITEKTURA RAČUNARSKOG SUSTAVA 1.1. Uvod 1.2. Osnovni računski modeli 1.3. Upravljački tok, tok podataka i upravljanje slijedom izvršavanja na temelju zahtjeva 1.3.1 Upravljački tok 1.3.2. Tok podataka 1.3.3 Upravljanje zahtjevom 1.3.4.Turingov stroj 1.3.5. k-ta konfiguracijaTS-a 1.3.6. Von Neumannov model 1.4. Arhitektura, organizacija i građa računarskog sustava 1.4.1. Definicija arhitekture računarskog sustava 1.5 Klasifikacija arhitekture računarskog sustava 1.5.1. Flynnova klasifikacija
1 1 3 4 5 7 9 10 16 18 18 18 23 25
2. VON NEUMANNOV MODEL RAČUNALA : 2.1. Uvod 2.1.1. Nulta generacija - generacija mehaničkih strojeva za računanje (1644. - 1945.) 2.1.2. Prva generacija - elektronička računala s elektronskim cijevima (1945. - 1955.) 2.1.3. Druga generacija računala - tranzistor kao građevna komponenta (1955.-1965.) 2.1.4.Treča generacija - integrirani sklopovi (1965.-1980.) 2.1.5. Četvrta generacija računala - sklopovi vrlo visokog stupnja integracije (1980. - ?) 2.2. Funkcijske jedinice von Neumannovog modela računala 2.2.1. Upravljački tok, instrukcijski tok i tok podataka u Neumannovom modelu računala 2.2.2. Aritmetičko-logička jedinica 2.2.3. Upravljačka jedinica 2.2.4. Memorijska jedinica 2.2.5. Ulazno-izlazna jedinica 2.3. Jednostavno mikroračunalo - von Neumannov model računala 2.4. Von Neumannovo računalo - računalo SISD 2.5. UsporedbaTuringovog stroja i von Neumannovog modela računala
31 31 31 32 32 33 33 35 37 39 41 46 47 48 55 56
3. POJEDNOSTAVLJENI MODELI CISC I RISC PROCESORA 3.1. Uvod 3.2. Pojednostavljeni model CISC procesora 3.3. Primjer izvođenja programa 3.4. Stanje na vanjskim sabirnicama 3.5. Pojednostavljeni model RISC procesora 3.5.1. Aritmetičke i logičke instrukcije 3.5.2. Instrukcije za pristup memoriji 3.5.3. Instrukcije grananja 3.5.4. Mješovite instrukcije
59 59 59 64 70 77 81 85 89 91
4. PERFORMANSA RAČUNALA 4.1. Uvod: performansa, cijena i omjer cijene i performanse 4.2. Mjere performanse 4.2.1 .MIPS - Millions of Instructions per Second 4.2.2. FLOPS - Floating-point Operations per Second 4.2.3. SPEC (System Performance Evaluation Cooperative) mjera 4.2.4 Sintetični ispitni programi 43. Amdahlov zakon
93 93 95 98 100 100 105 106
5. ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK 5.1. Zbirni jezik 5.1.1. Izvršljive instrukcije i pseudoinstrukcije 5.1.2. Makroinstrukcije 5.2. Razlozi uporabe zbirnog jezika 5.3. Dvoprolazni asembler 5.4. Postupak prevođenja zbirnog programa 5.5. Punilac (engl. loader)
107 107 109 112 115 116 120 121
6. UPRAVLJAČKA JEDINICA 6.1. Uvod 6.2. Prijenos upravljanja unutar istog programa 6.3. Prijenos upravljanja između različitih programa 6.3.1. Prijenos upravljana između pozivajućeg i pozvanog programa 6.4. Rekurzivne programske procedure (rekurzivni potprogrami) 6.4.1. Stog 6.4.2. Izvedba stoga 6.5. Prijenos upravljanja između prekinutog i prekidnog programa 6.6. Primjer uporabe stoga - analiza slučaja za MC 68000
123 123 125 125 126 131 134 142 145 147
7. SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE 159 7.1. Put podataka i upravljačka jedinica 159 7.2. Dva osnovna načina oblikovanja upravljačke jedinice 163 7.3. Sklopovska upravljačka jedinica 165 7.3.1. Izvedba upravljačke jedinice uporabom generatora sljedova - analiza slučaja 166 7.3.2. Sklopovske sastavnice upravljačke jedinice ostvarene na temelju generatora sljedova.. 182 7.3.3. Instrukcijski dekoder 182 7.3.4. Generator sljedova po modulu n 183 7.3.5. Generator signala vremenskog vođenja 186 7.4. Mikroprogramirana upravljačka jedinica 187 7.4.1. Signal vremenskog vođenja mikroprogramirane upravljačke jedinice 194 7.5. Nanoprogramirana upravljačka jedinica 201 7.6. Formati mikroinstrukcija - horizontalno i vertikalno mikroprogramiranje 203 7.6.1 Izravno upravljanje 204 7.6.2. Grupiranje bitova - minimalno kodiranje (engl. minimal encoding) 204 7.6.3. Višestruki formati mikroinstrukcija 206 7.6.4. Horizontalno i vertikalno mikroprogramiranje 208 8. ARITMETIČKO-LOGIČKA JEDINICA 8.1. Uvod: bit, riječ, bajt i znakovi 8.2. Prikaz brojeva 8.2.1. Prikaz cijelih brojeva 8.2.2. Prikaz brojeva s pomičnim zarezom (floating-point number) 8.2.3. Binarno kodirani dekadski brojevi 8.3. Binarna aritmetika 8.3.1. Zbrajanje dvaju binarnih brojeva 8.3.2. Paralelno zbrajalo 8.3.3. Serijsko zbrajalo 8.3.4. Oduzimanje dvaju binarnih brojeva 8.3.5. Oduzimanje pomoću komplementa binarnog broja 8.3.6. Paralelno zbrajalo s predviđanjem bita prijenosa (engl. carry lookahead) 8.3.7 Množenje 8.3.7.1. Množenje nepredznačenih brojeva 8.3.7.2. Množenje brojeva predočenih u notaciji dvojnog komplementa 8.3.7.3. Boothov algoritam 8.3.8. Dijeljenje 8.3.9. Posmak 8.3.10 Bačvasti posmačni sklop 8.4. Aritmetičke operacije brojevima s pomičnim zarezom
211 211 212 212 215 219 220 220 224 225 226 228 229 232 232 235 235 240 244 249 252
8.5. Oblikovanje jednostavne aritmetičko-logičke jedinice-analiza slučaja 8.5.1. Aritmetička sekcija 8.5.2. Logička sekcija 8.5.2.1. Logička operacija ISKLJUČIVO ILI 8.5.2.2. Logička operacija NE 8.5.2.3. Logička operacija ILI 8.5.2.4. Logička operacija 1
256 258 260 261 262 262 262
9. MEMORIJSKI SUSTAV 9.1. Uvod 9.2. Memorijska hijerarhija 9.3. Osnovne organizacijske i tehnološke značajke memorijskog sustava 9.4. Glavna ili radna memorija 9.4.1 Projektiranje memorijskog modula 9.5. Porodice DRAM 9.6. Ubrzanje rada memorije 9.7. Kod za ispravljanje pogrešaka 9.8. Sekundarna memorija 9.8.1. Magnetska diskovna memorija 9.8.2 Organizacija podataka na disku 9.8.3. Statički i dinamički parametri diskovne jedinice 9.8.4. Priručna diskovna memorija (engl. disk cache) 9.9. Polje diskova RAID (Redundant Array of Inexpensive Disks) 9.10. Savitljivi disk (engl. floppy disk) 9.11. Magnetska vrpca 9.12. Optičke memorije 9.12.1. CD-ROM 9.12.2. CD-R, CD-RW i DVD
265 265 265 269 271 278 284 285 289 290 291 293 295 297 299 305 305 306 306 307
10. PRIRUČNA MEMORIJA 10.1. Uvod 10.2. Djelovanje priručne memorije 10.3. Performansa priručne memorije 10.4. Organizacija priručne memorije 10.4.1. Način smještanja blokova u bločne priključke priručne memorije 10.4.1.1. Priručna memorija s potpuno asocijativnim preslikavanjem 10.4.1.2. Priručna memorija s izravnim preslikavanjem 10.4.1.3. Priručna memorija sa skupnim asocijativnim preslikavanjem 10.5. Način zamjene blokova 10.5.1. Veličina bloka i kapacitet priručne memorije 10.5.2. Način obnavljanja sadržaja glavne memorije 10.5.2. Način pribavljanja bloka iz glavne memorije 10.6. Koherencija priručne memorije 10.7. Priručna memorija - analiza slučaja procesor MC 68030
311 311 316 319 320 321 321 323 327 329 331 333 333 334 335
11. VIRTUALNA MEMORIJA 337 11.1. Uvod 337 11.2. Fizički i virtualni adresni prostor 338 11.3. Adresno preslikavanje 339 11.3.1. Denningov model virtualne memorije 341 11.4. Straničenje 346 11.4.1 .Translacijski spremnikTLB (engl.Translation Lookaside Buffer) 349 11.5. Segmentacija i segmentacija sa straničenjem 353 11.6. Zamjena i pribavljanje stranica 353 11.7. Virtualna memorija i priručna memorija 354 11.8. Virtualni memorijski sustav - integracija translacijskog spremnika TLB, priručne memorije i virtualne memorije 354 12. SABIRNICE
359
12.1. Uvod 12.2. Vodeći i prateći moduli 12.3. Sabirnički ciklus i sabirnički protokol 12.4. Sabirnička arbitraža 12.5. Sabirnice osobnih računala (PC sabirnice) 12.6. Ulazno-izlazne sabirnice: USB, FireWire i SCSI
359 363 363 371 377 381
13. ULAZNO-IZLAZNI SUSTAV 13.1. Uvod 13.2. Ulazno-izlazni upravljač 13.3. Načini izmjene podataka 13.3.1. Programirani ulazno-izlazni prijenos podataka 13.3.2. Prekidni ulazno-izlazni prijenos podataka 13.4. Analiza slučaja - vektorski prekid procesora MC 68000 13.5. Izravni pristup memoriji DMA - Direct Memory Access
393 393 395 398 398 406 417 425
14. PROTOČNOST 14.1. Uvod 14.2. Protočne strukture u računarskom sustavu 14.3. Instrukcijska protočna struktura 14.3.1. Podrobniji dijagram stanja instfukcijskog ciklusa 14.4. Instrukcijska protočna struktura za RISC procesore 14.4.1. Potrebne sklopovske preinake u protočnom RISC procesoru 14.4.2. Ostvarivanje cilja: jedna instrukcija u jednoj periodi signala vremenskog vođenja 14.5. Instrukcijska protočna struktura za CISC procesore 14.6. Instrukcijska protočna struktura CISC procesora MC 68060 - analiza slučaja 14.7. Hazardi u instrukcijskoj protočnoj strukturi 14.7.1. Strukturni hazard 14.7.2. Podatkovni hazard 14.7.3. Upravljački hazard 14.7.4. Predviđanje grananja 14.7.5. Precizni i neprecizni prekid (iznimka) 14.8. Superskalarni procesori 14.8.1. Načini izdavanja i završavanja instrukcija u superskalarnoj arhitekturi procesora
429 429 433 434 437 439 440 444 445 447 449 449 451 457 461 463 463 468
15. VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGRENII GRAFIČKI PROCESORI 15.1. Oblici i razine paralelizma 15.1.1. Paralelizam na razini instrukcija 15.1.2. Paralelizam na razini dretvi i procesa 15.1.3. Paralelizam na korisničkoj razini 15.1.4. Podatkovni paralelizam 15.2. Paralelne arhitekture: višeprocesorski SIMD, vektorski procesori i MIMD sustavi 15.2.1. Višeprocesorski SIMD sustavi 15.2.2. Vektorski procesori 15.3. Multiprocesorski sustavi - višeprocesorski MIMD sustavi 15.3.1. Koherencija priručne memorije u multiprocesorskom sustavu 15.3.2. Sinkronizacija procesa i dretvi 15.4. Visedretvenost i simultana višedretvenost 15.5 Višejezgreni procesori 15.5.1 IBM POWER4 dvojezgreni procesor 15.5.2. Ultra SPARCT1 i T2 15.5.3. AMD Opteron X4 2356 15.5.4.1MB POWER5 dvojezgreni SMT procesor, POWER6 i POWER7 15.5.5. Ocjena performansi multiprocesora 15.6. Grafički procesori (grafičke procesne jedinice) 15.6.1. NVIDlATesla - unificirana arhitektura za grafiku i računanje
473 473 474 479 483 484 486 486 487 497 500 506 509 512 512 514 517 521 524 524 528
LITERATURA
533
KAZALO POJMOVA
537
PREDGOVOR Knjiga koji se nalazi pred Vama obrađuje važnu temu iz područja računarstva kojoj se u središtu pozornosti nalaze računalo; računarski sustav te građa, arhitektura i organizacija računarskog sustava. Računalo (engl. computer) jest složeni programirljivi stroj koji je oblikovan tako da automatski obavlja slijed ili sljedove aritmetičkih i logičkih operacija. Oni su određeni programom koji se može relativno jednostavno mijenjati i tako stroj čini univerzalnim te se može rabiti u različitim napravama i sustavima - od mobitela, igračaka, sustava za upravljanje industrijskim i proizvodnim procesima pa sve do vrlo složenih primjena na području znanstvenog računanja (engl. computational science, scientific computing). U hrvatskom jeziku rabimo i izraze računalni sustav i računarski sustav (engl. computer system) i često ih razlikujemo po tome što „računalni sustav" smatramo užim pojmom koji se prvenstveno odnosi na građevne komponente samog računala i njihovo međudjelovanje uzpomoč minimalne programske opreme - jezgre operacijskog sustava koja stroj čini uporabnim. Pod izrazom „računarski sustav" često podrazumijevamo računalo kojem su pridruženi različiti periferni uređaji i programska oprema - odjezgre operacijskog sustava pa sve do namjenskih ili aplikacijskih programa kojima se omogučuje djelotvorna obrada i interakcija korisnika ili grupe korisnika sa sustavom, ali i računalnog sustava s okolinom ili pak s drugim računalnim sustavima. S obzirom na potonje jezične nijanse, govorimo o ugrađenom računalnom sustavu (engl. embedded computer system), a ne o ugrađenom računarskom sustavu. Računarstvo (engl. computing) jest znanstvena disciplina koja se bavi oblikovanjem i izgradnjom sklopovskih i programskih sustava te je usmjerena na iskorištavanje prednosti koje nude računarski sustavi: obrada; strukturiranje, pohrana i pretraživanje različitih vrsta informacija, potpora znanstvenim istraživanjima, oblikovanje komunikacijskih i zabavnih multimedijskih okruženja te oblikovanje računarskih sustava koji se inteligentno ponašaju. Znanstveno računanje (engl. computational science, scientific computing) bavi se oblikovanjem matematičkih modela i kvalitativnom analizom metoda i tehnika koje se rabe u računarskom sustavu za analizu i rješavanje složenih znanstvenih problema iz područja kao što su numerička simulacija, dubinska analiza podataka, postupci optimizacije i si. Građa računala, arhitektura i organizacija računarskih sustava bave se digitalnim računalima; računarskim sustavima i sučeljem sklopovske i programske opreme. Knjiga je zamišljena kao udžbenik koji omogučuje sustavni, postupni uvod u to složeno znanstveno područje koje je podvrgnuto vrlo brzim i učestalim tehnološkim promjenama. Uvjeren sam da su zamisli i osnovni koncepti izloženi u knjizi takvi da su uporabni za razumijevanje, oblikovanje i održavanje računarskih sustava, i to od jednostavnih ugrađenih računalnih sustava, osobnih računala pa sve do poslužitelja i računarskih višeprocesorskih SIMD i MIMD sustava. Posebnu pozornost posvetio sam opisu zamisli i temelja arhitekture računarskog sustava koji su vremenski nepromjenjivi i u velikoj mjeri ne ovise o burnom razvoju tehnologije vrlo visokog stupnja integracije (VLSI - Very Large Scale Integration) koja omogučuje integraciju preko milijardu tranzistora na komadiću silicija nešto većem od poštanske marke. Osim temeljnih zamisli i arhitektonskih koncepata, knjiga sadržava podrobne opise višeprocesorskih i paralelnih sustava, superskalarnih procesora, višedretvenih i simultano višedretvenih arhitektura procesora; višejezgrenih procesora te opise multiprocesorskih grafičkih jedinica. Brojni primjeri i analize slučaja kojima se ilustriraju pojedini arhitektonski koncepti, uvjeren sam, omogućit će čitateljima lakše razumijevanje i savladavanje gradiva.
Knjiga je plod mojih dugogodišnjih predavanja o arhitekturi i organizaciji računarskih sustava te građi računala na Fakultetu elektrotehnike i računarstva (FER), Fakultetu organizacije i informatike (FOI), Prirodoslovno-matematičkom fakultetu (PMF) Sveučilišta u Zagrebu, Tehničkom fakultetu Sveučilišta u Rijeci, Elektrotehničkom fakultetu Sveučilišta u Osijeku te Fakultetu elektrotehnike, strojarstva i brodogradnje (FESB) Sveučilišta u Splitu. Udžbenikje prvenstveno namijenjen visokoškolskoj nastavi na tehničkim i njima srodnim fakultetima, međutim, neka poglavlja nude gradivo koje se može obrađivati u srednjim školama informatičkog i elektrotehničkog usmjerenja. Na kraju; želim se zahvaliti svima koji su doprinijeli da ovo djelo bude pred vama. Posebno se zahvaljujem suradnicima sa Zavoda za elektroniku; mikroelektroniku, računalne i inteligentne sustave (ZEMRIS), FER koji su čitali dijelove rukopisa u nastajanju i sudjelovali u raspravi oko nekih bitnih detalja: prof. dr. sc. Urošu Perušku za raspravu u vezi s disipacijom snage procesora, prof. dr. sc. Željki Mihajlovič za pažljivo čitanje dijela teksta koji se odnosi na računalnu grafiku i grafičke procesore i brojne korisne sugestije; prof dr. sc Marinu Golubu za komentare vezane za procese, dretve i višedretvenost te asistentu Branku Samaržiji, dipl. ing., za pažljivo čitanje dijela teksta i niz primjedbi posebno za 2., 3. i 15. poglavlje knjige. Zahvaljujem se i recenzentima akademiku prof dr. sc Leu Budinu, prof. dr. sc. Nikoli Pavešiču, Fakulteta za elektrotehniko, Univerza v Ljubljani, prof dr. sc. Ivi Ipšiču, Tehnički fakultet, Sveučilište u Rijeci i Milanu Koraču, dipl. ing. koji su brojnim primjedbama, komentarima i sugestijama doprinijeli kakvoći rukopisa. Zahvalu dugujem i gđici Ani Rutar, prof. koja je uspješno i s puno razumijevanja koordinirala posao koji se odnosio na tehnički dio nastanka knjige. Zahvaljujem se i lektorici gđici Dijani Stilinovič, prof koja je savjesno ispravila rukopis i odmjerenim intervencijama u potpunosti sačuvala njegov duh. Zahvaljujem se i ilustratoru gospodinu Goranu Obrovcu koji je izradio više od 350 slika na temelju rukom nacrtanih podloga. U Zagrebu 7. ožujka 2011. Autor
S. RIBARIĆ - GRAĐA RAČUNALA
1
1. POGLAVLJE
ARHITEKTURA RAČUNARSKOG SUSTAVA 1.1. UVOD Vrlo pojednostavljeno, obradu podataka (engl. data processing) možemo opisati kao svrsishodnu aktivnost koja ima za cilj dobivanje tražene informacije iz raspoloživih podataka. Obično obrada informacija objedinjuje aktivnosti kao što su pohrana i obrada velikih količina podataka, slanje, odnosno upućivanje tražene informacije prema odredištu te njezino ponovno pohranjivanje. U postupku obrade podataka možemo identificirati tri glavne sastavnice (komponente): • podatke, • algoritam i • izvršitelja. Podaci su objekti u obradi i moraju biti predočeni u obliku koji je prilagođen izvršitelju. Algoritam predstavlja preciznu uputu ili "recept" izvršitelju kojom se opisuje transformacija početnih ili ulaznih podataka u procesu obrade u traženu informaciju. Postupak transformacije grupiran je u korake algoritma. Svaki algoritam ima svojstva određenosti, konačnosti i širinu primjene, odnosno definirano područje uporabe. Izvršitelj može biti čovjek ili stroj. Primjer 1.1. Ilustrirajmo algoritam i njegova svojstva na primjeru Euklidovog algoritma (Euklid, 400. p.n.e) kojim se rješava sljedeći problem: za zadana dva prirodna broja a i b treba naći najveću zajedničku mjeru, odnosno najveći cijeli broj kojim su oba prirodna broja djeljiva bez ostatka. 1. korak: Promotri dva broja: a i b. Prijeđi na sljedeći korak. 2. korak: Usporedi brojeve. Prijeđi na sljedeći korak. 3. korak: Ako su promatrani brojevi jednaki, svaki daje traženi rezultat -obustavi postupak računanja. Ako brojevi nisu jednaki, prijeđi na sljedeći korak. 4. korak: Ako je prvi promatrani broj manji od drugog, zamijeni im mjesta. Prijeđi na sljedeći korak. 5. korak: Oduzmi drugi broj od prvog i promatraj taj drugi broj i ostatak. Prijeđi na korak 2.
2
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Određenost se Euklidovog algoritma ogleda u tome stoje u svakom koraku precizno naznačeno što se mora poduzeti i na koji se sljedeći korak u postupku treba prijeći. Algoritam je tako sročen da jamči da će se za svaka dva prirodna broja a i b u konačnom broju koraka naći najveća zajednička mjera. Područje uporabe Euklidovog algoritma su prirodni brojevi. Možemo uočiti da je algoritam namijenjen i prilagođen čovjeku kao izvršitelju. Čovjek razumije upute u svakom koraku kao što su "promotri" "prijeđi" "usporedi" "obustavi" ali može obaviti i operacije kao što su "zamijeni" ili "oduzmi". Kako bi izgledao algoritam namijenjen računalu kao izvršitelju? Odgovor na to pitanje ostavljam čitatelju. Oblik algoritma u velikoj mjeri ovisi o sposobnosti izvršitelja. Jedan od uobičajenih pristupa obradi podataka je i onaj koji se temelji na transformaciji ulaznih podataka u traženi rezultat na temelju računanja. Takav pristup ima posebno značenje u tzv. intenzivnim postupcima numeričke obrade podataka (engl. numbercrunching). Formalno, postupak računanja može se definirati na sljedeći način: Računanje je proces određivanja izlazne supstitucije, za zadanu određenu ulaznu supstituciju, koja se pokorava svim specifičnim svojstvima, odnosno ograničenjima problema. Da bismo zornije predočili potonju definiciju, trebamo pojasniti značenje "ulazne supstitucije", "izlazne supstitucije" i "ograničenje problema" Njihovo ćemo značenje prikazati na problemu naprtnjače. Primjer 1.2. Pretpostavimo da imamo naprtnjaču nosivosti {ili kapaciteta) C kilograma te da pred sobom imamo N predmeta koje bismo željeli ponijeti u naprtnjači. Svaki od predmeta ima svoju vrijednost v. i svoju težinu w., i = 1 , 2 , N . Budući da sve predmete ne možemo ponijeti zbog ograničenog kapaciteta naprtnjače, potrebno je naći predmete, odnosno udjele predmeta koje ćemo ponijeti tako da u naprtnjači koju nosimo imamo najveću vrijednost, a pritom ne prekoračimo nosivost naprtnjače. (Opaska: predmeti se mogu rastaviti na dijelove čija je vrijednost proporcionalna njihovoj težini.) Parametri i varijable problema su: C - nosivost (kapacitet) naprtnjače [kg], N - ukupan broj predmeta, v; i = 1 , 2 , N - vrijednost svakog predmeta [$], w.; i = 1 , 2 , N - težina svakog od predmeta [kg], F.; i = 1,2,..., N - udio svakog od predmeta koji će se ponijeti u naprtnjači, Pmaks - maksimalna vrijednost predmeta (ili udjela predmeta) u naprtnjači [$]. Ulaznu supstituciju dobivamo tako da za zadane parametre problema unesemo njihove vrijednosti. Pretpostavimo daje naprtnjača nosivosti 14 kg te da imamo tri predmeta za koje znamo težinu i vrijednost. Ulazna supstitucija je sljedeća: C - 14 kg, N = 3, v-} = 3 0 $ , W | =4kg,V2 = 4 8 $ , W2 = 6 kg, V3 = 50 $, VV3 = 7 kg. Rješenje se mora pokoravati specifičnim ograničenjima - ne smije se prekoračiti kapacitet naprtnjače (C = 14 kg) i mora zadovoljavati zahtjev da je vrijednost predmeta u naprtnjači maksimalna (P ).
S. RIBARIĆ - GRAĐA RAČUNALA
3
Rješenje problema jest izlazna supstitucija. U našem slučaju ona glasi: U naprtnjaču stavljamo: Cijeli predmet 1 i cijeli predmet 2 te 4/7 predmeta 3. Ukupna vrijednost u naprtnjači je 106,57 $, stoje ujedno i maksimalna vrijednost koju možemo ponijeti (Pmaks). Algoritam koji će nas dovesti do željenog rješenja, odnosno do izlazne supstitucije je: 1. korak: Razvrstaj objekte na temelju omjera vrijednosti i težine: predmet 2 = 48/6 = 8 $/kg; predmet 1 = 30/4 =7,5 $/kg; predmet 3 = 50/7 = 7,14 $/kg 2. korak: Ponavljaj sve dok se naprtnjača ne prenatrpa: Iz skupa predmeta uzmi predmet s najvećim omjerom vrijednost težina i smjesti ga cijelog u naprtnjaču. 3. korak: Izvadi iz naprtnjače posljednji predmet kojim je prekoračen kapacitet naprtnjače i razdijeli ga tako da upravo njegovi dijelovi popune naprtnjaču. I ovaj je algoritam namijenjen čovjeku kao izvršitelju. Kako bi izgledao stroj koji bi mogao izvoditi algoritam u ovakvom izvornom obliku? To bi trebao biti inteligentan stroj s vidnom percepcijom i drugim senzorima (npr. težine, pritiska, dodira), opremljen mehaničkim hvataljkama, bazom znanja i strojem za zaključivanje te sučeljem za razumijevanje prirodnog jezika.
1.2. OSNOVNI RAČUNSKI MODELI U ovoj ćemo se knjizi baviti samo izvršiteljem - strojem koji se temelji na računskom modelu (engl. computational model) definiranom kao von Neumannovmodel. Računski model predstavlja višu razinu apstrakcije od arhitekture računala i programskog jezika. On se opisuje skupom triju apstrakcija: 1. temeljnim elementima koji sudjeluju u računanju; 2. modelom kojim se opisuje problem i 3. izvršnim modelom. Prva apstrakcija opisuje elemente i operacije koje se na elementima mogu izvoditi. Na primjer, u von Neumannovom modelu temeljni elementi koji sudjeluju u računanju jesu podaci koji su predstavljeni imenima da bi se omogućilo razlikovanje brojnih različitih podataka u postupku računanja. Tako imenovani podaci obično se u programskim jezicima nazivaju varijablama i implementirani su u arhitekturi računala pomoću adresa memorijskih lokacija i adresa (imena) registara. Operacije se izvode nad podacima - svaki definirani tip podataka ima i definirani skup operacija. Model kojim se opisuje problem odnosi se na stil i metode opisa problema. Stilovi su proceduralni i deklarativni. Proceduralnim stilom opisuje se postupak računanja u obliku algoritma. Deklarativnim stilom opisuju se sve činjenice i odnosi koji su relevantni za zadani problem. Dvije se metode koriste za izražavanje odnosa i činjenica. Prva upotrebljava funkcije, a druga primjenjuje opis odnosa i činjenica u obliku predikata.
12 1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Primjer 1.3. Prikažlmo jednostavan primjer proceduralnog i deklarativnog stila opisivanja problema računanja 'n'faktorijela uporabom jezika sličnom Pascalu. Proceduraini stil if
n
0 then f a c := 1 else fac :=1; f o r i : = 1 t o n do fac :=i * fac;
end; Deklarativni stil fac fac
(0) (n >0)
1 n
*fac(n-l);
Izvršni model definiran je trima sastavnicama: tumačenjem kako se izvodi računanje, izvršnom semantikom i upravljanjem slijedom izvršavanja. Na primjer, u von Neumanovom modelu računanja problem je opisan kao slijed instrukcija (uputa) koje rukuju imenovanim podacima i određuju slijed upravljanja. Računanje se u von Neumannovom modelu tumači kao izvršavanje zadanog slijeda instrukcija. Izvršna semantika može se promatrati kao pravilo koje propisuje kako se izvodi pojedini korak računanja. Von Neumannov model temelji se na semantici prijelaza stanja. Ona određuje kako če se za svaku instrukciju promijeniti trenutno stanje stroja. Osim semantike prijelaza stanja, koja se rabi i uTuringovom modelu računanja, koriste se semantika toka podataka (engl. dataflow semantic) i redukcijska semantika (engl. reduction semantic) koje su namijenjene računskom modelu temeljenom na toku podataka (engl dataflow) i redukcijskom računskom modelu. Upravljanje slijedom izvršavanja može se temeljiti na upravljačkom toku (engl. control-driven execution), toku podataka (engl. data-driven) i upravljanju zahtjevom (engl. demand-driven)
1.3. UPRAVLJAČKI TOK, TOK PODATAKA I UPRAVLJANJE SLIJEDOM IZVRŠAVANJA NA TEMELJU ZAHTJEVA Da bismo prikazali osnovne značajke pojedinih načina upravljanja slijedom izvršavanja, poslužit čemo se jednostavnim modelom instrukcije koji je predočen n-torkom argumenata: (arg 1 arg 2... arg n), gdje su argumenti operatori (određuju operaciju na podacima), vrijednosti podataka (operandi i rezultati), adrese operanada, adresa rezultata te adrese koje upućuju na sljedeću instrukciju. Ovakav oblik zapisa instrukcije dopušta nam prikaz izvršavanja slijeda instrukcija i u računskim modelima koji se korjenito razlikuju od von Neumannovog modela. Za tri različita načina upravljanja slijedom izvršavanja prikazat ćemo primjer izvođenja programa koji se može u višem programskom jeziku zapisati samo jednom naredbom: z = (a*5) + (c*d).
S. RIBARIĆ - GRAĐA RAČUNALA
5
1.3.1 UPRAVLJAČKI TOK Upravljanje slijedom izvršavanja na temelju upravljačkog toka zasniva se na pretpostavci da u modelu postoji program koji se sastoji od slijeda instrukcija. Slijed izvršavanja implicitno je zadan slijedom instrukcija. Uz to, dopuštena je uporaba eksplicitnih upravljačkih instrukcija kojima se može specificirati ciljna instrukcija koja je izvan implicitno definiranog slijeda izvršavanja. Program za z = (a *5) + (c *d) u obliku slijeda instrukcija za model računanja koji se temelji na upravljačkom toku sastoji se od slijeda triju instrukcija: (* a 5 z1) (* c d z2) (+z1 z2z), gdje su * i + operatori, 5 vrijednost operanada, a,c\d adrese operanada, z7 i z2 adrese međurezultata iz adresa memorijske lokacije na koju se pohranjuje rezultat. U ovom čemo primjeru pretpostaviti da su na memorijskim lokacijama a, ci d pohranjeni podaci 2,4 i 7. Argument koji upućuje izvođenje na sljedeću instrukciju u ovom modelu računanja nije element instrukcije. Slika 1.1 prikazuje izvršavanje programa. Crtkana linija označava upravljački tok koji je samo jedan i kojim se prenosi upravljanje slijedno s instrukcije na sljedeću instrukciju u slijedu. Pune linije na slici 1.1 označavaju pozivanje (referenciranje) memorijskih lokacija koje sadržavaju vrijednosti operanada ili na koje se pohranjuju među rezultati i rezultati operacija. Slijed izvršavanja implicitno je određen. Kao što je već spomenuto, implicitni slijed izvršavanja može se promijeniti uporabom eksplicitnih upravljačkih instrukcija koje imaju operatore tipa GOTO i JUMP. upravljački
( *
c:(4)
T
a
5
z1 )
d :(7)
z1:( )
z:( )
SI. 1.1 Izvršavanje programa u računskom modelu temeljenom na upravljačkom toku
Slika 1.2 prikazuje izvršavanje programa za paralelan računski model temeljen na upravljačkom toku. U slučaju kada se eksplicitno označavaju instrukcije koje se mogu paralelno izvesti rabe se instrukcije s operatorima tipa FORKl JOIN. Instrukcija s operatorom FORK
14 1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
uvišestručuje upravljački tok. Na primjer, instrukcija (FORKi2 2) formira upravljački tok u dvije grane i omogućuje istodobno izvršavanje instrukcija (*a5z 1) i (*cdz2). Argument /2 u instrukciji FORKi2 2 označava mjesto nastanka novih, dodatnih upravljačkih tokova, a argument 2 predstavlja vrijednost sinkronizacijskog brojila pomoću kojeg se sinkroniziraju upravljački tokovi. Instrukcija s operatorom JOIN sinkronizira upravljačke tokove i nakon izvođenja instrukcija (*a5z1) i (*cdz2) stapa ih u jedinstven upravljački tok. Sinkronizacija se ostvaruje tako da svaka instrukcija s JOIN operatorom umanjuje vrijednost sinkronizacijskog brojila za 1. U trenutku kada vrijednost sinkronizacijskog brojila dostigne vrijednost 0, upravljački tokovi se stapaju. upravljački I tok
t
(
FORK
i2
2 )
c:(4)
L
a:(2)
t
(
*
a
5
d : ( 7)
zl )
I
?
(
*
(JOIN )
*
c
t d
z2 )
Z1 :( )
*
(JOIN )
I (
+
z1
z2
1
z2:( )
tok podataka
z )
I i T
z:( )
SI. 1.2 Izvršavanje programa u paralelnom računskom modelu temeljenom na upravljačkom toku s eksplicitno označenim paralelno izvodljivim instrukcijama
Izvršavanje programa za paralelni računski model temeljen na upravljačkom toku može se ostvariti i uporabom instrukcija koje eksplicitno pomoću posebnog argumenta određuju sljedeću instrukciju. Upravljanje se s instrukcije na instrukciju prenosi upravljačkim značkama (engl. control token). Slika 1.3 prikazuje izvršavanje programa u paralelnom računskom modelu s upravljačkim značkama. Argumenti u instrukcijama oblika in/m (npr. /3//) određuju sljedeću instrukciju in i položaj argumenta m u toj instrukciji koji očekuje upravljačku značku. Argument oblika ( ) označava mjesta koja zahtijevaju upravljačke značke. Instrukcije se izvršavaju u trenutku kada dobiju potreban broj upravljačkih znački. Na primjer, instrukcija /3 izvršit će se kada upravljačke značke upućene iz instrukcija i l i /2 stignu u argumente ( ) i ( ) (slika 1.3).
S. RIBARIĆ - GRAĐA RAČUNALA
iO : ( . . . il/O I _
_ _ _ _ _
i 2/0 ) I
J
L
_ _
_
a : (2)
i l : (( ) * a 5 zl
i3/0 )
1
tt
'
i .u c : (4)
d : (7)
\2 : (( ) * c d z2 13/1 )
zl : ( )
i3 : ( ( ) ( ) +
7
I
z2 : ( )
i
r z1 z2 z )
1-
Z : ( )
SI. 1.3 Izvršavanje programa u paralelnom računskom modelu temeljenom na upravljačkom toku s upravljačkim značkama
Iz prethodnih triju jednostavnih primjera izvođenja programa mogu se izdvojiti neke osnovne značajke računskih modela temeljenih na upravljačkom toku: • tok upravljanja je slijedan. Uporabom posebnih operatora može se upravljati tokom izvođenja programa, • za paralelni se računski model tok upravljanja uvišestručuje uporabom specijalnih operatora ili primjenom upravljačkih znački, • tok ili tokovi upravljanja i tokovi podataka odvojeni su, • podaci (operandi) se prosljeđuju između instrukcija posredno - putem memorijskih lokacija što ih instrukcije međusobno dijele (pohranjuju i čitaju sadržaje memorijskih lokacija), • argumenti instrukcija mogu biti izravno i vrijednosti operanada, tako da se smanjuje broj referenciranja memorije.
1.3.2. TOK PODATAKA Instrukcije za model računanja temeljenom na toku podataka imaju elemente kao što su operator, vrijednost operanda, argumenti oblika ( ) koji predstavljaju tzv. kalupe, odnosno mjesta predviđena za značke podataka te argumente oblika in/m koji upućuju rezultat operacije (značku operanda s vrijednosti) na m-ti položaj argumenta ( ) u instrukciji in. Slika 1.4 prikazuje izvršavanje programa z= (a * 5) + (c*d) u računskom modelu temeljenom na toku podataka. Instrukcija se u tom modelu izvršava u trenutku kada su joj raspoloživi svi operandi, odnosno kada su u instrukciji popunjeni značkama podataka svi kalupi tj. argumenti oblika ( ).
8
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Instrukcije /7 i /2 (slika 1.4) izvršavaju se neovisno jedna o drugoj, odnosno paralelno ako su im operandi (2, odnosno 4 i 7) istodobno raspoloživi. Rezultati njihovih izvršavanja (10, odnosno 28) izravno se prosljeđuju instrukciji /3 koja se aktivira u trenutku kada su popunjena operandima oba njezina argumenta oblika ( ).
i
H
i1 : { * ( ) 5 i 3/0 )
12 : ( * ( ) (
U
13 : ( + ( ) ( )
z/1 )
ii
1
il : ( * ( ) 5 i3/0 )
t
) »3/1 )
12 : { * ( ) (
10
U
13 : ( + < ) ( )
) i3/1 )
i
128
z/1 )
11
I
11 : ( * ( ) 5 13/0 )
i2 : ( * ( ) ( ) i3/1 )
u
13 : { + ( ) ( )
z/1 )
i
38
SI. 1.4 Izvršavanje programa u računskom modelu temeljenom na toku podataka
Primjer izvršavanja programa za taj model pokazuje neke njegove osnove značajke: • upravljački tok stopljen je s tokom podataka, • tok podataka uvjetuje izvršavanje instrukcija: instrukcije se izvršavaju u trenutku kada su im raspoloživi svi potrebni operandi, odnosno kada su popunjeni svi kalupi instrukcije, • međurezultati se izravno prosljeđuju među instrukcijama, • nakon izvršavanja instrukcije, ulazni podaci za instrukciju (oni koji su bili smješteni u kalupima) nisu više raspoloživi za tu niti za bilo koju drugu instrukciju, • vrijednost operanada mogu biti argumenti instrukcije. Na temelju navedenih značajki može se zaključiti da se model s tokom podataka korjenito razlikuje od računskog modela s upravljačkim tokom. Napomenimo još jednom da se von Neumannov model temelji na modelu s upravljačkim tokom.
S. RIBARIĆ - GRAĐA RAČUNALA 17
1.33 UPRAVLJANJE ZAHTJEVOM Osnovna značajka računskog modela upravljanog zahtjevom je ta da zahtjev za rezultatom pobuđuje operacije koje će taj rezultat proizvesti. Na primjer, za naš se program z=fo*5J+fc*dJzahtijevavrijednostzaz(slika1.5).SIika1.5prikazujeizvršavanjeprogramau računskom modelu upravljanom zahtjevom. U nekoj se instrukciji zahtijeva vrijednost za z. To će prouzrokovati izvršavanje instrukcija (u skladu s definicijom za z) koje će generirati zahtijevanu vrijednost. Vrijednost za z dobiva se redukcijom definicije (slika 1.5): (2 * 5) + (4 * 7) 10 + 28 38. To je i razlog zbog kojeg se obično takvi modeli nazivaju i redukcijski modeli, a računala koja se temelje na tom modelu nazivaju se redukcijska računala. a:(2)
c : ( 4 )
d:(7)
r* il : ( * a 5 )
i2 : ( * c d )
( . . . z . . . ) = > ( . . . ( + il \2 )...)=> ^ ( . . . (( * a 5 ) ( * c d ) ) . . . ) => = > ( . . . ( + ( * 2 5 ) ( * 4 7 ) ) . . • )=* = M . . . ( + 10 28 ) . . . ) = > ( . . . 38 . . . ) SI. 1.5 Izvršavanje programa u računskom modelu upravljanom zahtjevom
Osnovne značajke računskog modela upravljanog zahtjevom su: • nema dodatnih ograničenja u pogledu upravljanja slijedom izvršavanja instrukcija osim onih koja su postavljena zahtjevima za rezultatom, • ne rabi se koncept pohranjivanja i obnavljanja vrijednosti (nema varijabli), • dopušteno je gniježđenje zahtjeva za rezultatima. Tri su osnovna računska modela koji se temelje na konceptu podataka: 1. Turingov model, 2. von Neumannov model, 3. model toka podataka. Spomenimo neke računske modele koji se ne temelje na konceptu podataka - to su objektno temeljeni modeli (engl. object-based model] u kojima se manipulira objektima slijedom poruka, aplikativni modeli u kojima su temeljni elementi koji sudjeluju u računanju argumenti, a problem je opisan skupom definicija funkcija koje se vrednuju, i predikatni računski modeli koji koriste elemente skupove predikata (engl. predicate-logic-based) i u kojima se opisi problema predočavaju Hornovim klauzulama kojima se izražavaju pravila i činjenice.
10
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
1.3.4. TURINGOV STROJ Britanski znanstvenik A. M.Turing je 1936. objavio članak "On Computable Numbers, with an Application to the Entscheidungsproblem" u Proc. of the London Math. Society, u kojem je opisao apstraktni stroj - izvršitelj koji se u njegovu čast naziva Turingov stroj a računski model na kojem se temelji stroj Turingov model. Osnovna značajka stroja je da se postupak računanja raščlanjuje na vrlo jednostavne, gotovo nedjeljive elementarne operacije. Formalno, Turingov stroj (TS) može se opisati n-torkom TS = (Q, S,T,P,b,q o , qf ,S), gdje je Q konačan skup unutarnjih stanja stroja, S konačan skup vanjske abecede stroja, T je skup elemenata vanjske abecede kojem je izuzet prazni simbol (engl. blank) b, skup naredbi za pomak glave za čitanje i pisanje P, q0 početno stanje stroja, q f konačno stanje stroja i logička funkcija stroja 6 : S x Q - » S x P x Q , gdje x označava Kartezijev produkt. Da bismo razumjeli formalnu definiciju TS, uvedimo i objasnimo sve sastavnice stroja. TS ima vanjsku memoriju koja se predočava beskonačnom vrpcom, odnosno vrpcom neograničenom s lijeva i desna. Vrpca je podijeljena na polja pri čemu svako polje vrpce može istodobno sadržavati samo jedan znak ili simbol iz skupa vanjske abecede S.TS barata konačnim brojem simbola s^ s2,..., b,..., sk koji su elementi skupa S = {s^ s2, ...,b,..., sk}. U skupu S nalazi se i prazni simbol b koji ima važnu ulogu u radu stroja. Upisivanjem praznog simbola u neko polje vrpce, briše se simbol koji se prethodno nalazio u tom polju. Još jednu značajku ima simbol b - on je neovisan o problemu koji se rješava Turingovim strojem i pojavljuje se kao univerzalni simbol u svim problemima. Jednako tako, ako se vrpca početno promatra kao prazna, ako nema upisanih simbola u poljima - podrazumijeva se da tada svako polje sadržava simbol b. Neki izraz zapisan na vrpci predstavljen je simbolima vanjske abecede koji su različiti od b. Upis simbola u polje na vrpci ili čitanje simbola koji je upisan u polju obavlja se pomičnom glavom za čitanje i pisanje (kraće R/W glava; Read - čitaj; Write - piši) koja se pozicionira na dotičnom polju. Stroj ima i dvije unutarnje memorije: memoriju q koja pohranjuje trenutno unutarnje stanje stroja i memoriju p koja pamti trenutnu naredbu za pomak R/Wglave. Naime, skup naredbi za pomak R/W glave P sastoji se od triju naredbi: pomak ulijevo L, pomak udesno D i nema pomaka N (ili 0). Naredbe za pomak L ili D podrazumijevaju pomak R/W glave za samo jedno polje u odnosu na trenutni položaj glave. Obrada informacije odvija se u logičkom bloku L. U njemu je realizirana tzv. logička funkcija stroja S : S x Q - + S x P x Q , koja preslikava ulaznu dvojku koja se sastoji od trenutno promatranog simbola (simbola koji je upisan u polju nad kojim se nalazi R/W glava) i trenutnog unutarnjeg stanja stroja koje je zapamćeno u unutarnjoj memoriji q, u izlaznu trojku: simbol vanjske abecede koji će se upisati u promatrano polje na vrpci, naredbe za pomak R/W glave koja će se pohraniti u unutarnjoj memoriji p te novog unutarnjeg stanja stroja koje će se pohraniti u unutarnjoj memoriji q. Slika 1.6 prikazuje Turingov stroj.
S. RIBARIĆ - GRAĐA RAČUNALA
11
beskonačna vrpca (vanjska memorija)
Si. 1.6. Turingov stroj
p € {N, L, 0}
RadTS-a odvija se na sljedeći način: • na samom početku rada stroja on se nalazi u unutarnjem stanju q 0 (inicijalno ili početno stanje stroja, stanje stroja na početku prvog takta), a na vrpci je zapisan početni niz simbola iz skupa vanjske abecede.Taj se niz tumači kao ulazna ili početna informacija, odnosno ulazna supstitucija. Definira se i položaj R/W glave, odnosno specificira se nad kojim se poljem na vrpci ona nalazi; • rad stroja odvija se u taktovima, odnosno u diskretnim vremenskim trenucima. Tijekom jednog takta stroj pomoću R/W glave čita simbol s. koji je pohranjen u promatranom polju na vrpci, u logičkom se bloku stroja L dvojka (sj7 qm), gdje je q m trenutno unutarnje stanje stroja, preslikava u trojku (s., p, qk), gdje je s. simbol koji će se upisati u promatrano polje na vrpci, p je naredba za pomak R/W glave koja će se pohraniti u unutarnjoj memoriji p a qk je novo unutarnje stanje stroja koje će se pohraniti u unutarnjoj memoriji q; • na kraju tekućeg takta R/W glava će se pomaknuti ulijevo (naredba L) ili udesno (naredba D), ali samo zajedno polje u odnosu na promatrano polje ili se pak neće pomaknuti (naredba N ili 0) - u skladu s naredbom za pomak glave koja je pohranjena u p; • novi će takt stroj započeti s unutarnjim stanjem stroja qk i promatranjem simbola u polju nad kojim se nalazi R/W glava, • napredovanjem taktova stroj početnu informaciju preoblikuje u (među)informaciju; - na kraju svakog takta znaci zapisani na vrpci stroja predstavljaju odgovarajuću (među)informaciju, • u trenutku kada stroj dostigne konačno stanje q f stroj se zaustavlja (nema više napredovanja taktova), a informacija koja je zapisana na vrpci tumači se kao rezultat obrade, odnosno izlazna supstitucija.
12
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Koje su to jednostavne i skoro nedjeljive operacije koje izvršava TS? Prvo je to operacija zamjene znaka i promjena unutarnjeg stanja stroja: • znak s. mijenja se u s., pri čemu je i * j. Ako je / = j znak se u promatranom polju ne mijenja. Ako je s. = b, podsjetimo se bje prazni simbol, onda se znak u promatranom polju briše. • mijenja se, u skladu s logičkom funkcijom stroja 6: (s., qm) ® (s., p, qk), unutarnje stanje stroja iz qm u qk. Ako je m-k, tada se unutarnje stanje ne mijenja, odnosno q m = qk. Druga je elementarna operacija pomak R/W glave, i to: • ako je naredba L, R/W glava se na kraju tekućeg takta pomiče samo za jedno polje ulijevo, • ako je naredba D, R/W glava se na kraju tekućeg takta pomiče samo za jedno polje udesno, • ako je naredba N (ili 0) R/W glava se ne pomiče - ostaje nad promatranim poljem. Naglasimo još jednom da se obrada informacije odvija u logičkom bloku L i ona je definirana logičkom funkcijom stroja 6. Slika 1.7 prikazuje logički blok L kao "crnu kutiju" koja ulaznu dvojku preslikava u izlaznu trojku.
s.i
q~m
L
s
j
p
qk
SL 1.7 Logički blok L kao "crna kutija"
"Program"za TS predstavlja realizaciju logičke funkcije stroja 6. Logičku funkciju stroja možemo predočiti pomoću tablice preslikavanja (engl. look-up table) koja se naziva funkcionalna shema Turingovog stroja. Slika 1.8 prikazuje organizaciju tablice preslikavanja za TS, odnosno organizaciju funkcionalne sheme stroja. Tablica je organizirana na sljedeći način: u prvom retku tablice navode se sva unutarnja stanja stroja (osim konačnog stanja qf). Prvi stupac tablice čine simboli vanjske abecede (elementi skupa S). (Opaska: polje tablice (1, 1) na sjecištu prvog retka i prvog stupca jest prazno polje (slika 1.8)). Unutarnja polja tablice preslikavanja sadržavaju trojke (s, p, q), gdje je sGS, p G P i q G Q . Pretpostavimo da se na početku nekog takta TS nalazi u stanju q m te da R/W glava čita simbol sjf trojka koja odgovara preslikavanju dvojke (s., qm) u skladu s funkcijom 8, određuje se tako da se potraži sadržaj u polju koje se nalazi na sjecištu retka s. i stupca q m u tablici preslikavanja (slika 1.8).
S. RIBARIĆ - GRAĐA RAČUNALA
elementi vanjske abecede
trojka
13
unutarnja stanja stroja {osim qf)
trojka
Primjer 1.4. Pretpostavimo da je vanjska abeceda TS-a definirana skupom S = {a, tarnjih stanja Q = {qQt q1 q2, q3, q f }.
b} a skup unu-
Slika 1.9 prikazuje funkcionalnu shemu stroja kojom je predočena logička funkcija stroja. Na početku nekog takta, pretpostavimo da R/W glava čita simbol § i da se TS nalazi u stanju q2. Trojku kao izlaz iz logičkog bloka L nalazimo u polju tablice preslikavanja koje se nalazi na sjecištu retka koji odgovara simbolu vanjske abecede p i stupca koji odgovara stanju q2: (a, L, q3). Dakle, stroj će u polju nad kojim se nalazi R/W glava zamijeniti znak p sa znakom a, prijeći će u unutarnje stanje q 3 i pomaknut će glavu za jedno polje ulijevo.
b
aDq,
|Lq,
{5Nq 3
|Dq,
a
PLq 2
|Lq2
aDq,
P L q3
P
|Dq,
|Lq2
aLq3
a L q,
i
bDq,
aDq3
pLq,
|Dqf
SI. 1.9. Funkcionalna shema stroja {Primjer 1.4.)
14
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Primjer 1.5. Pretpostavimo da je na vrpci TS zapisan proizvoljni dekadski broj. Želimo napisati program za TS koji inkrementira (povećava za jedan) taj broj. Početno, stroj se nalazi u stanju q0, a R/W glava se nalazi na nepoznatoj poziciji lijevo od najmanje značajne znamenke broja. Odredimo sastavnice TS-a: Problem određuje skup vanjske abecede - njega uz prazni simbol b čine i sve znamenke dekadskog brojevnog sustava S = {0,1, 2, 3,4, 5,6, 7, 8, 9, b}. Skup unutarnjih stanja TS-a je Q = ^ q 2 ,..., qf}. Vidimo da se u skupu Q nalaze početno stanje stroja q0 i konačno stanje q f i određen broj radnih unutarnjih stanja stroja q , qr.... Broj tih radnih unutarnjih stanja stroja ovisi o algoritmu kojim ćemo riješiti zadani problem. Općenito, podrazumijeva se da "elegantnije" rješenje ima manji broj radnih unutarnjih stanja. Ponudimo rješenje: Dekadski brojevni sustav je pozicijski što znači da operaciju inkrementiranja moramo započeti tako da inkrementiramo najmanje značajnu znamenku broja koji je inicijalno zapisan na vrpci. Budući da nam je jedino poznato da se na samom početku rada stroja R/W glava nalazi negdje lijevo od najmanje značajne znamenke, tj. nad praznim poljima ili nad poljem u kojem je zapisana bilo koja znamenka dekadskog broja, prvo trebamo R/W glavu pozicionirati na polje vrpce stroja koje sadržava najmanje značajnu znamenku broja. Kada stroj pozicionira R/W glavu nad tim poljem, onda je problem skoro riješen: Ako je promatrana znamenka 0, stroj upisuje 1, ne pomiče R/W glavu i zaustavlja se (prelazi u stanje q f ), ako je promatrana znamenka 1, upisuje na to mjesto 2 i zaustavlja se. Za vrijednosti promatrane najmanje značajne znamenke od 0 do 8 vrijedi isto: treba upisati znamenku čija je vrijednost za 1 veća od promatrane znamenke i zaustaviti rad stroja. Ako je najmanje značajna znamenka 9, stroj treba upisati u promatrano polje 0, ali i nastaviti s radom jer se tada jedinica prenosi na značajnije mjesto zapisanog broja.
% 0
0Dq,
0Dq,
1Nqf
1
1Dq,
1Dq,
2Nqf
2
2Dq,
2Dq,
3Nqf
3
3Dq,
3Dq,
4Nqf
4
4Dq,
4Dq,
5Nqf
5
5Dq,
5Dq,
6Nqf
6
6Dq,
6Dq,
7Nqf
7
7Dq,
7Dq,
8Nqf
8
8Dq,
8Dq,
9Nqf
9
9Dq,
9Dq,
0Lq2
b
bDq0
bLq2
1 N qf
Tabltca 1.1. Funkcionalna shema stroja (Primjer 7.5.)
S. RIBARIĆ - GRAĐA RAČUNALA
15
Rješenje problema, tj. program za TS predočen funkcionalnom shemom stroja koja predstavlja logičku funkciju stroja ima oblik (Tablica 1.1.): Prikažimo rad TS za prethodno napisani program. Pretpostavimo da je na vrpci zapisan broj 1269. Slika 1.10 prikazuje vrpcu i položaj R/W glave na početku rada stroja (stroj je u stanju q0).
b
b
b
1
2
6
9
b
b
3
R/W glava stanje: q 0 1.10 Početno stanje TS-a (Primjer /.5.)
Uporabom programa (Tablica 1.1.) obavljaju se sljedeće operacije: 1. takt: (b,q 0 )->(b,D,q 0 ) komentar: R/W glava se pomiče udesno i stroj ostaje u stanju q 0 2. takt: (b, q0) (b, D, q0) komentar: R/W glava se pomiče udesno i stroj ostaje u q 0 3.takt:(1,q)->(1,D,qi)
komentar: stroj i dalje "traži" najmanje značajnu znamenku,
4. takt: (2, (2, D, 5. takt: (6,q,) ->(6, D , ^ ) 6. takt: (9, q,) 7. takt: (b,
(9, D, q,) (b, L, q2); komentar: stroj je našao prazno polje desno od najmanje značajne znamenke i pozicionirao je glavu na najmanje značajnoj znamenci broja,
8. takt: (9, q2) 9. takt: (6, q2)
(0, L, q2); komentar: inkrementira se najmanje značajna znamenka, (7, N, q f ); komentar: stroj "prenosi"jedinicu s najmanje značajnog mjesta, inkrementira znamenku na značajnijoj poziciji i zaustavlja se.
7
o
b
i
R/W glava stanje: q f SI. 1.11 Sadržaj vrpce i položaj glave R/W nakon završetka programa {Primjer 1.5.)
Primjer 1,6. Napišimo program za TS kojim se inkrementira proizvoljni broj predočen u binarnom brojevnom sustavu (postupak će temeljiti na pravilu za zbrajanje binarnih brojeva: 0 + 0 = 0; 0 + 1 = 1; 1 + 0 = 1 i 1 + 1 = 0 uz prijenos 1 na značajnije mjesto). Pretpostavimo da je poznat početni položaj R/W glave - ona se nalazi na poziciji najmanje značajne binarne znamenke broja. Skup simbola vanjske abecede je S = {0,1, b}. Skup unutarnjih stanja stroja je Q = {q0, q f }. (Opaska: u ovom elegantnom rješenju q 0 je ujedno i radno unutarnje stanje stroja).
16
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Funkcionalna shema stroja ima oblik prikazan u Tablici 1.2.:
0
1Nqf
1
OLq 0
b
1Nq f
Tablica 1.2. Funkcionalna shema TS-a (Primjer 1.6.) Prikažimo izvođenje programa za binarni broj početno zapisan na vrpci (Slika 1.12): 100111. b
0
b
0 Z X R/W glava stanje: q0
SI. 1.12 Početno stanje TS-a (Primjer 7.6.)
1 > takt;
(1, q0)
(0, L, q0)
2. takt 3. takt
(1,q 0 )-•((), L,q0)
4. takt
(0, q0)
(1,N, qf)
Rezultat izvođenja programa prikazanje na slici 1.13. s-
1
0
1
0
Z K
0
0
•5 -S
R/W glava stanje: qf SI. 1.13 Rezultat izvođenja programa (Primjer 1.6.) Ovaj primjer inkrementiranja binarnog broja posebno je zanimljiv jer ćemo ga razmotriti i za von Neumanov računski model, odnosno za von Neumannov model računala te ih usporediti.
1.3.5. k-TA KONFIGURACIJA TS-A Tijekom izvođenja programa kažemo da TS prelazi iz konfiguracije u konfiguraciju, gdje se konfiguracija promatra kao potpuni opis stanja stroja na početku nekog (npr. k-tog) takta. k-ta konfiguracija Turingovog stroja sastoji se od slike vrpce s informacijom koja je zapisana na njoj na početku k-tog takta, pri čemu je prikazan i položaj R/W glave te označeno unutarnje stanje stroja (također na početku k-tog takta).
S. RIBARIĆ - GRAĐA RAČUNALA
17
Primjer 1.7. Prikažimo 1.19. konfiguraciju TS za program (Primjer 1.5.) i početnu informaciju zapisanu na vrpci stroja: 1269. 1. konfiguracija (stanje stroja na početku 1. takta; (slika 1.14)): 8-
b
1
z s R/W glava stanje: q 0 SI. 1.14 Prva konfiguracija
9. konfiguracija (stanje stroja na početku 9. takta; (slika 1.15)): »
b
b
1
2
6
0
b
b
b
•s
R/W glava stanje: q 2 SI. 1.15 Deveta konfiguracija
Uočavate da se k-ta konfiguracija, na žalost, ne može izravno odrediti, već je potrebno "odvrtiti" program tako da se odrede slijedno sve k'-konfiguracije, k' < k, počevši od 1. konfiguracije. Uvođenjem koncepta k-konfig u racije možemo kazati da se program TS-a izvodi tako da stroj, započevši od 1. konfiguracije, tijekom napredovanja taktova prelazi iz konfiguracije u konfiguraciju u skladu s funkcionalnom shemom stroja. Način izvođenja programa i konačni ishod (rezultat) za TS možemo klasificirati u dva glavna slučaja. Pretpostavimo daje početna informacija zapisana na vrpci i označimo je sa JL 1. Slučaj: Nakon konačnog broja taktova stroj se zaustavlja (dostiže unutarnje stanje qf) i pritom je na vrpci zapisana informacija Kažemo: Stroj je primjenjiv za početnu informaciju
prerađuje je u informaciju ili rezultat (B.
2. Slučaj: Stroj nikad ne staje (ne dostiže unutarnje stanje qf). Kažemo: Stroj je neprimjenjiv za početnu informaciju Ji. Analogiju s ova dva slučaja možemo naći i za izvođenje programa računalom. Naime, ako je program ispravno napisan, on će obraditi ulazne podatke, pohraniti i prikazati rezultat obrade te se "vratiti" pod upravljanje operacijskog sustava računala. No ako je slučaj-
18
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
no ugrađena neka pogreška (npr. beskonačna programska petlja), program neće završiti i preostaje nam da tzv. "mekim"rešetom (npr. pritiskom na tipke Ctrl - alt-del) iii sklopovskim rešetom (npr. pritiskom na crveni ili crni gumb označen kao RESET) nasilno prekinemo njegovo izvođenje. Navedimo neke bitne značajke Turinovog stroja: 1. TS je apstraktni izvršitelj, 2. rad stroja odvija se u taktovima - diskretnim vremenskim trenucima, 3. stroj ima neograničenu vanjsku memoriju predočenu vrpcom podijeljenom na polja i R/W glavu koja se tijekom jednog takta može pomaknuti samo za jedno polje, 4. stroj ima unutarnju memoriju q i p u kojoj pamti unutarnje stanje stroja i naredbu za pomak R/W glave, 5. obrada informacije odvija se u logičkom bloku L koji predstavlja realizaciju logičke funkcije stroja 6, 4. ovisno o početnoj informaciji J l programa zapisanog u funkcionalnoj shemi stroja moguća su dva slučaja izvođenja, i to kada je stroj primjenjiv za početnu informaciju kada je stroj neprimjenjiv za početnu informaciju JL
1.3.6. VONNEUMANNOV MODEL U ovom ćemo se potpoglavlju osvrnuti samo na osnovne značajke von Neumannovog računskog modela jer ćemo računalu koje se temelji na tom modelu namijeniti posebno poglavlje. Temeljni element koji sudjeluje u računanju, odnosno predstavlja objekt obrade u von Neumannovom računskom modelu je podatak predočen pozicijskim brojevnim sustavom (obično binarnim sustavom). Podacima su dodijeljena imena i promatraju se kao varijable. Operacije se izvode nad podacima. Svakom tipu podataka pridružen je skup operacija. Von Neumannov model računanja rabi za opis problema slijed instrukcija (koje čine program) i koje se slijedno (sekvencijalno) izvršavaju i na taj način ulazne podatke pretvaraju (transformiraju) u traženi rezultat. Izvršna semantika, odnosno pravilo koje propisuje kako se izvode instrukcije temelji se na semantici prijelaza stanja koja određuje za svaku instrukciju promjenu stanja modela. Način prijenosa upravljanja s instrukcije na instrukciju obavlja se na temelju upravljačkog toka. Tokovi podataka i upravljački tokovi odvojeni su.
1.4. ARHITEKTURA, ORGANIZACIJA I GRAĐA RAČUNARSKOG SUSTAVA 1.4.1. DEFINICIJA ARHITEKTURE RAČUNARSKOG SUSTAVA Izraz arhitektura računala (engl. computer architecture) pojavio se šezdesetih godina prošlog stoljeća u jednoj od vodećih svjetskih tvrtki na području IT (informacijske tehnologije), IBM-u (International Business Machines). Upotrebljavao se za opisivanje programskog modela računala iz serije IBM 360 na razini asemblera (engl. assembly language), tj. zbirnog
S. RIBARIĆ - GRAĐA RAČUNALA
19
jezika koji je vrlo blizak strojnom jeziku. Strojni jezik (engl. machine language) sastoji se od instrukcija koje su razumljive sklopovlju računala i koje su kodirane sljedovima 0 i 1. Slijed takvih instrukcija predstavlja program u strojnom jeziku kojim se korak-po-korak specificira postupak računanja. Zbirni jezik (ili asemblerski jezik) je jezik kojim se strojne instrukcije predočavaju obično dvo- ili troslovčanim oznakama, koje se nazivaju mnemonici, te je time omogućen prikaz programa za ljude u čitljivijem obliku. Instrukcije u zbirnom jeziku moraju se prevesti u instrukcije strojnog jezika. Prevođenje je jedan-naprema-jedan, tj. jednoj instrukciji u zbirnom jeziku odgovara jedna instrukcija strojnog jezika. Prevodilac za zbirni jezik obično se naziva asembier, dakle isto kao i zbirni jezik, što može zbunjivati čitatelja. Primjer 1.8. Instrukcija kojom se zbrajaju dva broja bit će u zbirnom jeziku predočena addr3,r2,rl gdje mnemonik add specificira operaciju zbrajanja (troslovčana oznaka nas asocira na zbrajanje; add u engleskom znači zbroji), a rl i r2 određuju dva izvora podataka (registre), a odredište rezultata određeno je kao registar r3. Ova će se instrukcija prevesti, na primjer, u strojnu instrukciju oblika: 00100000110001000001000000000000 U ovom je slučaju strojna instrukcija niz od 32 bita. Dva su računala imala istu arhitekturu ako su imala jednak skup strojnih instrukcija. Na ovaj način opisana arhitektura računala obično se označava kao ISA (Instruction Set Architecture) i sadržava opise elemenata kao što su skup strojnih instrukcija, tipovi podataka koji su izravno podržani sklopovljem procesora, načini adresiranja te registri "vidljivi" programeru na razini instrukcija u zbirnom jeziku. S vremenom se pojam arhitektura računala proširio tako da se ona nešto općenitije može definirati kao slika računarskog sustava kojom se sustav predočava programeru u strojnom jeziku, ali i programeru koji piše prevodioce (engl. compiler) za više programske jezike kojim se naredbe u višim programskim jezicima prevode u strojne instrukcije. Odnosno, program napisan u višem programskom jeziku (npr. u C; C++ ili Pascalu) prevodi se u slijed strojnih instrukcija koji se naziva objektni program (engl. object program). Neki znanstvenici pod arhitekturom računala podrazumijevaju algoritme koji se rabe u osnovnim funkcijskim jedinicama računarskog sustava (upravljačka jedinica, aritmetičkologička jedinica, ulazno-izlazna jedinica, memorija) bez obzira jesu li algoritmi ostvareni sklopovljem ili programima. E. C. Joseph arhitekturu računala promatra funkcionalno usmjerenom, poput arhitekture u modernom građevinarstvu. On definira arhitekturu računarskog sustava kao način uređenja strukture i organizacije sustava nizom postupaka koji su nužni za ostvarenje ciljeva oblikovanja, a to su povećanje:propusnosti (engl. throughput), odnosno povećanje procesne moći ili performanse sustava, prilagodljivosti (engl. flexibility) - mogućnost uporabe sustava na različitim područjima ljudske djelatnosti, pouzdanosti (engl. reliability) - što je moguće veći vremenski razmak između dva ispada iz rada uslijed sklopovske ili programske pogreške i raspoloživosti (engl. availability) - što dulje vrijeme u kojem je sustav raspoloživ korisniku (vrijeme u kojem računarski sustav ispravno djeluje, a ne nalazi se u postupku ispitivanja ili redovitog održavanja). Jedan od vrlo važnih ciljeva arhitekture računala, posebno s gle-
20
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
dišta proizvođača računarskih sustava Jest i postizanje stoje moguće niže cijene sustava. Točnije, postizanje stoje moguće većeg omjera između performanse računarskog sustava i njegove cijene. Naime, računarski sustav sa što većim omjerom performansa/cijena je konkurentniji na tržištu i privlačniji potencijalnom kupcu, a time proizvođaču osigurava profit i sredstva koja ulaže u razvoj novih proizvoda. U posljednje se vrijeme spominje još jedan od ciljeva arhitekture računala, a to je ekološko zbrinjavanje računalnog otpada, odnosno izbor materijala za izgradnju računala koji je ekološki razgradljiv ili se može reciklirati. Ostvarivanje svih ciljeva - od povećanja propusnosti, što niže cijene računarskog sustava pa sve do ekološkog zbrinjavanja računalnog otpada - postiže se zahvatima na trima sastavnim područjima arhitekture: sklopovskoj opremi (engl. hardware), programskoj opremi (engl. software) i na području koje se bavi problemom odnosa čovjeka i računala te načinima uporabe računala (engl. humanware). Arhitektura računarskog sustava može se promatrati kao distribucija funkcija po zadanim razinama višeslojnog modela, gdje svaka razina predstavlja određenu apstraktnu predodžbu računala (slika 1.16).
O ©
TO
namjenski sustav
E
£ Q.
O TO J*.
jezični procesori (prevodioci) ©
upravljanje logičkim resursima
O
upravljanje fizičkim resursima
središnja procesna jedinica (izvršavanje programa) ©
ulazno-izlazni sustav
©
upravljački sklopovi
©
upravljački sklopovi
©
komunikacijski putovi i uređaji
©
memorija
SI. 1.16 Arhitektura računarskog kao distribucija funkcija u višeslojnom modelu
E 03 U) O
S. RIBARIĆ - GRAĐA RAČUNALA
21
Prva, najviša razina naziva se arhitektura sustava i predstavlja sliku sustava s motrišta korisnika koji preko namjenskog sustava (slika 1.16) koristi računalo. Namjenski sustav čine namjenski programi koje obično isporučuje proizvođač zajedno s računalom ili programi koji se mogu nabaviti od nezavisnih isporučitelja ("programskih kuća"). Tipični namjenski programi jesu oni za pretraživanje i sortiranje podataka, pretraživanje teksta, programi kojima se rješavaju problemi s područja matematike, tehnike i poslovanja itd. Na nešto nižoj razini apstrakcije računalo se korisniku predstavlja preko viših programskih jezika. U tom se slučaju komunikacija, odnosno interakcija između korisnika (programera) i računala ostvaruje pomoću jezičnih procesora koji mogu podržavati različite vrste jezika (viši programski jezici kao što su C, C++, Pascal, FORTRAN, Basic, Logo i si., upravljački jezici, jezici za oblikovanje i rukovanje bazama podataka). Razine 1.-4. (slika 1.16) odnose se na funkcije koje su (obično) ostvarene programski s tim da su jezični procesori, upravljanje logičkim resursima i upravljanje fizičkim resursima razine koje odgovaraju funkcijama operacijskog sustava računala. Upravljanje logičkim resursima obuhvaća funkcije kao što su upravljanje virtualnom memorijom, upravljanje bazama podataka, upravljanje postupcima obrade u mrežama računala, dok upravljanje fizičkim resursima podrazumijeva funkcije rukovanja memorijom (glavnom ili radnom, sekundarnom), upravljanje procesorom (njegovo dodjeljivanje, odnosno dodjeljivanje vremena procesora različitim programima) i upravljanje drugim uređajima računarskog sustava. Razine 5 . - 1 0 . odnose se na funkcije koje su ostvarene sklopovski. Razina 5. koja se odnosi na funkciju izvršavanja programa obično se naziva arhitektura procesora ili arhitektura središnje procesne jedinice; dok se razine 6. - 9. odnose na funkcije koje se klasificiraju u arhitekturu ulazno-izlaznog sustava i računalnih mreža. Funkcije u razinama 8. i 10. odnose se na arhitekturu memorijskog sustava. Na slici 1.16 možemo opaziti crtkane vertikalne linije u razinama 5. - 8., koje odgovaraju funkcijama dodijeljenim sklopovskoj opremi. Crtkane linije određuju funkcije koje su zaista realizirane sklopovljem i one koje su ostvarene "programski" odnosno mikroprogramom . Naime, na području arhitekture računala može se govoriti o tzv. dualizmu sklopovske i programske opreme (kao što se u modernoj fizici govori o dualizmu mase i energije). Pojednostavljeno, dualizam sklopovske i programske opreme očituje se u tome da se skoro sve što je realizirano u sklopovlju može ostvariti i programski, i obratno. Na primjer, upravljačka jedinica procesora može se realizirati sklopovski, ali i programski (mikroprogramom), prevodioci za više programske jezike obično su programski izvedeni, ali postoje procesori koji imaju sklopovski ostvarene prevodioce (procesori izravno izvršne arhitekture; engl. direct-execution architecture). Definiciju arhitekture računarskog sustava temeljit ćemo na hijerarhijskom modelu sustava koji je prikazan na slici 1.17. Najnižu razinu, predočenu jezgrom prstenaste strukture, čini sklopovlje, odnosno sklopovska oprema ili hardver. Općenito, pod tim se razumijeva sve materijalno od čega je računalo sastavljeno: svi mehanički dijelovi, električki i elektronički dijelovi. U užem smislu, pod sklopovskom ćemo opremom podrazumijevati elektroničke sastavne dijelove: sklopove realizirane u tehnologiji visokog (LSI - Large Scale Integration) i vrlo visokog stupnja integracije (VLSI - Very Large Scale lntegration).Je tehnologije omogućuju izvedbu vrlo složenih sklopova s nekoliko stotina tisuća ili stotina milijuna tranzistora na čipu (engl. chip) - komadiću silicija nešto većem od poštanske marke. Naglasimo da je ova najniža razina zadužena za izvođenje programa, bez obzira jesu li oni napisani u višem programskom jeziku ili zbirnom jeziku (asembleru).
22
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
Sljedeću razinu u modelu čini jezgra operacijskog sustava. Zadatak je jezgre operacijskog sustava da rukovodi i dodjeljuje osnovne resurse računala (procesor, odnosno vrijeme procesora, memoriju, ulazno-izlazne uređaje, sistemske programe i datoteke) na temelju potreba zadataka, procesa i dretvi (engl. thread) različitih (korisničkih) programa koji se istodobno izvršavaju u računarskom sustavu. Sljedeću višu razinu modela čine preostali dijelovi operacijskog sustava kao što su prevodioci za različite više programske jezike (C, C++, Pascal, FORTRAN, Basic, Prolog, Lisp,...), interpreteri (engl. interpreter), punioci (engl. foader), poveznici (engl. linker), uređivači teksta (editori; engl. editor), programi za otkrivanje pogrešaka (engl. debugger) i već spomenuti namjenski programi. interpreter je program koji analizira naredbu po naredbu programa i za razliku od prevodioca, izvršava je umjesto da generira objektni program koji će se kasnije izvršiti. Punilac jest uslužni program kojim se izvršljivi program tj. objektni program smješta u glavnu memoriju i time biva spreman za izvođenje. Povez/7/Tcje uslužni program za povezivanje kojim se različiti prevedeni programi ili programski moduli povezuju u oblik pogodan za izvršavanje.
SI. 1.17 Hijerarhijski model računarskog sustava
S. RIBARIĆ - GRAĐA RAČUNALA
23
Vrlo često se funkcije punioca i poveznika objedinjuju u uslužni program koji se naziva povezni punilac (engl. linking loader). Uređivač teksta, odnosno editor je također uslužni program koji se koristi za unos i modifikaciju podataka u tekstualnom obliku. Takvi podaci mogu biti naredbe u višem programskom jeziku ili pak tekst nekog izvješća ili knjige napisane u prirodnom jeziku. Najvišu razinu u modelu računala čine ljudi koji su korisnici računala. Oni svoje zadatke prosljeđuju, putem namjenskih programa ili programa napisanim (obično) u višim programskim jezicima, kroz niže razine modela sklopovlju koje uz sudjelovanje operacijskog sustava izvršava te zadatke. Potrebno je napomenuti da je dokumentacija (korisnička i servisna) sastavni dio svake od razina u hijerarhijskom modelu arhitekture. U skladu s predloženim hijerarhijskim modelom računarskog sustava i opisanim različitim pristupima arhitekturi možemo ponuditi sljedeću dovoljno općenitu definiciju arhitekture. Arhitektura računarskog sustava je dio računarske znanosti koji se odnosi na oblikovanje računarskih sustava radi ostvarivanja osnovnih ciljeva kao što su veća performansa, prilagodljivost, pouzdanost i raspoloživost uz što je moguće nižu cijenu, odnosno, što je moguće veći omjer performansa/cijena. To se postiže uporabom niza tehnika, postupaka i zahvata u svim hijerarhijskim razinama - od sklopovlja, programske oprema pa sve do razine interakcije čovjeka i stroja. Vrlo često se susrećemo i s izrazom građa i organizacija računala (engl. computer organization). Pod tim se pojmovima podrazumijevaju podrobni opisi pojedinih sastavnica računala (aritmetička jedinica, logička jedinica, upravljačka jedinica, memorijska jedinica, ulaznoizlazne jedinice, sabirnice) i konfiguracija koje te sastavnice oblikuju. Organizacija obuhvaća i opise njihova povezivanja te načine međudjelovanja. U kontekstu organizacije računala spominje se i realizacija pod čime se podrazumijevaju detalji koji se odnose na sklopovske strukture i osnovne sklopovske građevne sastavnice (komponente) u tehnologiji visokog stupnja integracije koje se rabe u konstrukciji računarskog sustava.
1.5 KLASIFIKACIJA ARHITEKTURE RAČUNARSKOG SUSTAVA Postojanje različitih računskih modela i različitih definicija, pristupa te poimanja arhitekture računala uvjetovalo je i postojanje različitih pokušaja njezine klasifikacije. Tako, na primjer, P. C. Treleaven predlaže klasifikaciju arhitekture računala na temelju upravljanja slijedom izvršavanja u osnovnim računskim modelima: i) arhitektura računala s upravljačkim tokom, ii) arhitektura računala upravljana tokom podataka, iii) arhitektura računala upravljana zahtjevom. Računala koja se svrstavaju u i) su računala koja se temelje na konvencionalnom von Neumannovom modelu i njegovim izvedenicama, dok su računala iz ii) i iii) takve arhitekture koja se korjenito od njih razlikuju.
24
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
SI. 1.18 Klasifikacija arhitekture računala na temelju odnosa viših programskih jezika i računala
Budući da se na najvišim razinama apstrakcije računarski sustav predočava korisniku kao stroj koji izvršava programe u višim programskim jezicima, G. J. Mayers predlaže klasifikaciju na temelju odnosa viših programskih jezika i računala (slika 1.18). Ona je predočena sljedećim putovima koji povezuju programe napisane u višim programskim jezicima i stroj: i) Put 0 - arhitektura s tradicionalnim pristupom: postupkom prevođenja, uporabom prevodioca, programi napisani u višem programskom jeziku pretvaraju se u programe u strojnom jeziku niske razine (engl. low-level machine language); ii) Put 1- arhitektura koja premošćuje jaz između viših programskih jezika i stroja tako da se programi napisani u višem programskom prevode u programe u strojnom jeziku više razine (engl. higher-level machine language). Osnovna razlika između strojnog jezika niske razine i strojnog jezika visoke razine je u tome što potonji ima strojne instrukcije koje su bliske naredbama u višem programskom jeziku i stroj sklopovski podržava operacije koje su njima određene. Arhitektura s tim značajkama naziva se jezično usmjerena arhitektura (engl. language directed architecture); iii) Put 2 - arhitektura računala koja omogućuje uporabu višeg programskog jezika kao zbirnog jezika (engl. assembly language) i prevođenje u odnosu jedan naprema jedan, tj. svakoj naredbi u višem programskom jeziku odgovara jedna instrukcija u strojnom jeziku. Takva se arhitektura naziva arhitektura visoke jezične razine (engl. high-level language architecture);
S. RIBARIĆ - GRAĐA RAČUNALA
25
iv) Put 3 - arhitektura omogućuje izravno izvršavanje programa napisanog u višem programskom jeziku, i to bez prevođenja. Pojednostavljeno, to znaći daje svaka naredba u višem programskom jeziku izravno podržana sklopovljem. Takva se arhitektura naziva izravno izvršna arhitektura (engl. direct-execution architecture). Arhitektura računala može se klasificirati i s obzirom na promjenjivost strukture računala, i to na: i) statičku arhitekturu u kojoj nisu moguće programski upravljane promjene konfiguracije računala, ii) rekonfigurabilnu arhitekturu u kojoj su pod programskim upravljanjem dopuštene promjene veza između različitih funkcijskih jedinica računala (npr. promjena veza između procesora i memorijskih modula), iii) dinamičku arhitekturu koja omogućuje potpunu promjenjivost sustava pod programskim upravljanjem. Na primjer, 64-bitno računalo se po potrebi rekonfigurira u jedno 32-bitno računalo i dva 16-bitna računala.
1.5.1. FLYNNOVA KLASIFIKACIJA U uvodnom smo dijelu, razmatrajući obradu podataka naveli podatke i algoritam kao dvije od tri osnovne sastavnice obrade. Algoritam se stroju predočava programom, a njegovo je izvršavanje definirano slijedom instrukcija. Na određenoj razini apstrakcije, dinamički promatrano, tijekom izvođenja programa možemo govoriti o toku podataka (D5) i instrukcijskom toku (iS) koji se uspostavljaju između funkcijskih jedinica stroja. Upravo su tok podataka i instrukcijski tok poslužili M. J. Flynnu za jednu od opće prihvaćenih klasifikacija arhitekture računala. Tipovi arhitekture prema Flynnovoj klasifikaciji mogu se predočiti u dvodimenzionalnom prostoru koji je određen brojem tokova podataka i brojem instrukcijskih tokova (slika 1.19). tok podataka
1
SIMD
MIMD
SISD
MISD
n
instrukcijski tok
SI. 1.19 Prikaz Flynnove klasifikacije u prostoru broj tokova podataka - broj instrukcijskih tokova
Na slici 1.19 uočavamo četiri točke označene sa SISD, SIMD, MIMD i MISD - one označavaju četiri osnovna tipa arhitekture:
26
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
i) SISD (Single Instruction Stream Single Data Stream) - računalo s jednostrukim instrukcijskim tokom i jednostrukim tokom podataka. Arhitektura SISD predstavlja arhitekturu sekvencijalnog računala temeljenog na von Neumannovom računskom modelu; i i) SIMD (Single Instruction Stream Multiple Data Stream) - računalo s jednostrukim instrukcijskim tokom i višestrukim tokom podataka. U ovu se kategoriju svrstavaju paralelna računala (nazivaju se i matrična računala) koja se obično sastoje od velikog broja procesora ili procesnih elemenata koji istodobno izvršavaju istu instrukciju na različitim podacima; i i i) MIMD (Multiple Instruction Stream Multiple Data Stream) - računalo s višestrukim instrukcijskim tokom i višestrukim tokom podataka. Multiprocesorski sustavi, odnosno paralelni računarski sustavi s dva i više procesora približno jednakih performansi, pri čemu svaki od njih ima pristup zajedničkoj memorijskoj jedinici i svi dijele ulaznoizlazne jedinice, a pritom djeluju pod jednim operacijskim sustavom, predstavljaju ovaj tip arhitekture; iv) MISD (Multiple Instruction Stream Single Data Stream) - računalo s jednostrukim in- , strukcijskim tokom i višestrukim tokom podataka.Teorijski strogo gledano, računala ! ovog tipa arhitekture ne mogu se fizički realizirati. Nemoguće je, naime, ostvariti da se istodobno više različitih instrukcija izvršava na istim podacima (slično kao što u fizici makro svijeta nije moguće da se dva različita tijela istodobno nalaze na istom mjestu). No dogovorno u ovu kategoriju uvrštavamo protočna (engl. pipeline) računala i računarske sustave koji se temelje na sistoličkim poljima. Prikažimo shematski pojedine tipove arhitekture pomoću veza među memorije (MU - memory unit), upravljačkih jedinica (CU - control unit) i jedinica za obradu (PU - processor unit - procesna jedinica ili PE - processing element - procesni element). Slika 1.20 prikazuje arhitekturu tipa SISD. Vidimo da samo jedan instrukcijski tok (IS) i jedan tok podataka (DS) izviru iz memorijske jedinice (MU). Instrukcije se dovode do upravljačke jedinice (CU) gdje se dekodiraju. Dekodirani instrukcijski tok i tok podataka "susreću" se u jedinici za obradu PU u kojoj se tok podataka preoblikuje. Uočavamo da se preoblikovani podaci ponovo dovode u memorijsku jedinicu koja predstavlja izvori ponor toka podataka. IS
SI. 1.20 Shematski prikaz arhitekture tipa SISD
Na slici 1.21 shematski je prikazana arhitektura tipa SIMD. Vidimo da se instrukcijski tok (IS) koji izvire iz memorije dovodi u upravljačku jedinicu (CU) gdje se dekodira. Upravljačka jedinica dekodirani instrukcijski tok upućuje na n identičnih jedinica za obradu (PE). (Opaska: obično računalo SIMD kategorije ima vrlo veliki broj jedinica za obradu koje su relativno jednostavne pa se vrlo često nazivaju procesnim elementima - PE).
S. RIBARIĆ - GRAĐA RAČUNALA
A
DS
^
PE2
DS
^
,
2
•
DS
W
LM,
^
W
LM2
^
DS
,
2
w
27
A
W
skupovi podataka prema/od računalu domaćinu
•
•
•
PEn
^
DS
p
LM n
4
DS n
fc
J
SL1.21 Shematski prikaz SIMD kategorije arhitekture
U računalu SIMD kategorije arhitekture imamo n različitih tokova podataka DS17 DS2,..., DSn od kojih svaki izvire iz svoje privatne ili lokalne memorije (LM., i = 1 , 2 , n ) . Identičan instrukcijski tok IS i n različitih tokova podataka susreću se u jedinicama za obradu (PE., i = 1,2,..., n). I ovdje uočavamo daje svaki tok podataka dvosmjeran - od LM. do PE. i obratno. Računalo SIMD kategorije arhitekture jest paralelno računalo - istodobno se obrađuju podaci iz n tokova podataka. Ono se obično upotrebljava kao posebno računalo na području obrade gdje se zahtijeva rukovanje velikim grupama uređenih i istodobno raspoloživih podataka kao što su vektori, matrice, višedimenzionalna polja (npr. obrada vremenskih modela, obrada satelitskih snimaka) te se obično koriste uz računalo konvencionalne arhitekture koje ima ulogu računala domačina (engl. host computer). Računalo domaćin šalje podatke u lokalne memorije LM., i = 1,2,..., n i specificira koji zadatak treba računalo SIMD arhitekture obaviti. Napomenimo da procesni elementi PE., i = 1, 2,..., n mogu biti organizirani kao jednodimenzionalna i višedimenzionalna polja s različitim uzorcima lokalnih veza između procesnih elemenata (npr. veza sa četiri ili osam bližih susjeda u dvodimenzionalnom polju, veza s bližim /c-kubnim susjedima, veza potpunog miješanja (engl. perfect shuffle) i si.). Slika 1.22 prikazuje računalo tipa arhitekture MIMD. Ono ima memoriju koju međusobno dijeli n upravljačkih jedinica (CU., i = 1, 2,..., n) i n jedinica za obradu (PU., i = 1, 2 , n ) . Iz međusobno dijeljene memorije MU istodobno izvire n različitih instrukcijskih tokova i n različitih tokova podataka. Svi se oni susreću u n jedinica za obradu. Računala tipa MIMD su paralelna računala i obično se nazivaju multiprocesorski (računarski) sustavi. Kako je dobiveno računalo paralelne arhitekture? Ako na trenutak djelomično prekrijemo sliku 1.22 tako da možemo vidjeti samo gornji dio slike koji prikazuje elemente CU1# PU1 i dio dijeljene memorije MU, tada vidimo da to nije ništa drugo negoli dio koji predstavlja SISD kategoriju arhitekture (slika 1.20). Pojednostavljeno, možemo protumačiti da se MIMD kategorija arhitekture dobiva uvišestručenjem struktura koje odgovaraju SISD arhitekturi. Na slici 1.23 shematski je predočena arhitektura računala MISD. Kao što smo već napisali, strogo teorijski gledano računalo tipa MISD ne može se fizički realizirati, ali u tu kategoriju
28
1. POGLAVLJE: ARHITEKTURA RAČUNARSKOG SUSTAVA
arhitekture ipak svrstavamo protočna računala. Istaknimo, već na ovom mjestu, da je koncept protočnosti iznimno važan i da se nezaobilazno pojavljuje u arhitekturi suvremenih računala te da će se posebno poglavlje u ovoj knjizi posvetiti upravo njemu.
SI. 1.22 Shematski prikaz M I M D kategorije arhitekture
Na slici 1.23 vidimo da n različitih instrukcijskih tokova (IS., i = 1,2,..., n) izvire iz memorijske jedinice MU. Istodobno, iz memorije izvire samo jedan tok podataka DS.Tok podataka protječe kroz jedinice za obradu (PU, i = 1,2,..., n) i u svakoj jedinici biva preoblikovan u skladu s dekodiranim instrukcijskim tokovima. I u ovom slučaju možemo ustvrditi da je riječ o paralelnoj arhitekturi u kojoj se istodobno izvršava n instrukcija najednom toku podataka.
S. RIBARIĆ - GRAĐA RAČUNALA
& 1.23 Shematski prikaz MISD kategorije arhitekture
29
S. RIBARIĆ - GRAĐA RAČUNALA
31
2. POGLAVLJE
VON NEUMANNOV MODEL RAČUNALA 2.1. UVOD Jedan od najznačajnijih članaka na području arhitekture računala "Uvodna rasprava o logičkom oblikovanju elektroničkog računskog uređaja" (izvorni naslov: "Preliminary Discussion of the Logical Design of an Electronic Computing Instrument") autora A. W. Burksa, H. H. Goldsteina i von J. Neumanna, objavljen je 1946., dakle petnaestak godina prije pojave izraza "arhitektura računala" Taj je članak imao dalekosežne posljedice i utjecao je na arhitekturu sljedećih četiriju generacija računala. Naravno, i prije 1946. postojala su ozbiljna nastojanja u realizaciji stroja za računanje, odnosno računala. Njihov povijesni razvoj može se predočiti generacijama računala - od nulte generacije koja odgovara mehaničkim računalima pa sve do četvrte generacije koja se temelji na tehnologiji vrlo visokog stupnja integracije VLSI {Very Large Scale Integration). (Opaska: neki autori navode i petu generaciju računala koja se temelji na konceptima umjetne inteligencije (engl. artificial intelligence), ali tehnološka podloga i tih računala je VLSI). Opišimo, ukratko po generacijama računala, samo jedan mali isječak iz burne povijesti razvoja strojeva za računanje, odnosno računala.
2.1.1. NULTA GENERACIJA - GENERACIJA MEHANIČKIH STROJEVA ZA RAČUNANJE (1644. - 1945.) B. Pascal je u razdoblju između 1642. i 1644. godine izgradio stroj koji je mogao obavljati računske operacije zbrajanja i oduzimanja. Godine 1673. G. W. Leibniz oblikovao je mehanički računski stroj koji je, uz zbrajanje i oduzimanje, mogao obavljati i računske operacije množenja i dijeljenja. Bio je to ekvivalent "džepnim kalkulatorima" sa četiri funkcije tri stoljeća kasnije. C. Babbage je 1822. izgradio diferencijskistroj (engl. difference engine) koji se temeljio na računu konačnih diferencija. C. Babbage je, također, 1834. započeo rad na analitičkom stroju (engl. analytical engine) koji je obavljao četiri osnovne računske operacije i korjenovanje te je trebao biti računski stroj opće namjene. On je zamislio stroj koji se sastoji od četiriju jedinica: memorije (ili spremnika), jedinice za računanje (izvorno nazvane mili - što na engleskom znači pogon ili mlin), ulazne jedinice (čitača bušenih kartica) i izlazne jedinice (pisača i bušaća kartica). Analitički je stroj bio programirljiv - čitao je instrukcije s bušenih kartica i izvršavao ih. Iz memorije je dohvaćao dva broja predočena u dekadskom brojevnom sustavu,obavljaooperaciju u jedinici za računanjete pohranjivao rezultat natrag u memoriju.
32
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
Slijed bušenih kartica određivao je program koji se mogao upotrijebiti za više skupova podataka. Na žalost, analitički stroj nije bio nikad dovršen zbog problema s mehaničkom izradom koja je zahtijevala tisuće i tisuće vrlo precizno izrađenih zupčanika i osovina što je u 19. stoljeću bilo tehnološki neizvodivo. Računski stroj koji se može promatrati kao prekretnica u tehnološkom smislu sa potpuno mehaničkih strojeva na elektromehaničke računske strojeve bio je stroj nazvan Z1, njemačkog istraživača K. Zusea (1934.-1936.) koji se temeljio na elektromehaničkim relejima. H. Aiken je 1944. u Harvardu, Sjedinjene Američke Države, izgradio elektromehaničko računalo Mark I koje se smatra prvim američkim računalom opće namjene. Ono je pohranjivalo 72 riječi od kojih je svaka bila predstavljena s 23 dekadske znamenke, a instrukcije su se izvršavale za 6 sekundi.
2.1.2. PRVA GENERACIJA - ELEKTRONIČKA RAČUNALA S ELEKTRONSKIM CIJEVIMA (1945. - 1955.) Tijekom ratne 1943. za razbijanje šifriranih poruka, odnosno dekriptiranje njemačkih poruka u Engleskoj je izgrađeno računalo COLOSSUS koje se smatra prvim elektroničkim računalom. Ono je imalo oko dvije tisuće elektronskih cijevi, a u razvoju računala sudjelovao je A.Turing. Iste su godine J. Mauchley i J. P. Eckert započeli s izgradnjom računala ENIAC (Electronic Numerical Integrator And Computer). Ono je imalo oko 18000 elektronskih cijevi i 1500 releja, težilo je oko 30 tona, a za žarenje elektronskih cijevi, anodne izvore i ventilatore za hlađenje bila mu je potrebna snaga od 140 kW! Računalo je bilo završeno 1946. Mnogi smatraju da je povijest suvremenih računala započela upravo s ENIAC-om. M.Wilkes je na Sveučilištu u Cambridgeu 1949. izgradio računalo EDSAC (Electronic Delay Storage Automatic Computer) koje se smatra prvim elektroničkim računalom s pohranjivanjem programa. Dok su J. Mauchley i J. P. Eckert radili na EDVAC-u (Electronic Discrete Variabile Automatic Computer) koji je trebao biti nasljednik ENIAC-a, J. von Neumann, koji je inače sudjelovao u projektu ENIAC, došao je u Institut za napredna istraživanja (Institute for Advanced Study) u Princeton, SAD, te započeo projekt izgradnje računala I AS. Računalo I AS završeno je 1952. i svojim konceptima predstavlja osnovne temelje današnjih računala. Osnovni model računala, opisan u članku koji smo spomenuli na početku ovog poglavlja, poznat je kao von Neumannov model računala. Skoro istodobno dok je von Neumann radio na oblikovanju IAS računala, na MIT-u su razvijali 16-bitno računalo Whirlwind I koje je prvo računalo za upravljanje u stvarnom vremenu (engl. real-time control). U sklopu Whirlwind projekta izumljena je memorija s magnetskim jezgricama (engl. magnetic core memory). Godine 1953. tada mala tvrtka IBM započinje s proizvodnjom računala IBM 701.
2.1.3. DRUGA GENERACIJA RAČUNALA - TRANZISTOR KAO GRAĐEVNA KOMPONENTA (1955. - 1965.) Poluvodičku elektroničku komponentu tranzistor izumili su 1948. trojica istraživača J. Bardeen, W. Brattain i W. Shockley. Tranzistor možemo pojednostavljeno predočiti kao sklopku s dva stanja (isključeno/uključeno; engl. off/ori) koja je električki upravljana.
S. RIBARIĆ - GRAĐA RAČUNALA
r B
j ,
33
Izum tranzistora predstavljao je revoluciju na području računarske tehnologije i u kasnim je pedesetim godinama u potpunosti potisnuo elektronske cijevi. Prvo računalo izgrađeno na temelju tranzistora bilo je TX-0 (Transistorized experimental computer 0) (u MIT Lincoln Laboratoryju). Godine 1960. tvrtka DEC (Digital Equipment Corporation) na tržište plasira prvo malo računalo (miniračunalo) PDP-1 čija je cijena bila oko 120 tisuća dolara. Godine 1965. DEC proizvodi 12-bitno miniračunalo PDP-8 čija je cijena bila samo 16 tisuća dolara, Tvrtka DEC prodala je preko 50 tisuća računala PDP-8. Tvrtka IBM je 1961. proizvela vrlo popularno malo poslovno računalo IBM 1401, a odmah sljedeće godine IBM 7094 koje je bilo jedno od vodećih računala za uporabu na znanstvenom području (engl. scientific computing). Tvrka CDC (Control Data Corporation) je 1964. izgradila prvo superračunaio CDC 6600 za znanstvenu primjenu. Vodeći istraživač na projektu bio je Seymour Cray koji će kasnije osnovati svoju tvrtku i graditi superračunala Cray I, II,..., Cray-XMP itd. Općenito, pod superračunalom se podrazumijeva računarski sustav koji svojim računskim sposobnostima, odnosno performansom, udovoljava zahtjevima obrade na području vodećih istraživanja u znanosti i inženjerstvu.
2.1.4. TREĆA GENERACIJA - INTEGRIRANI SKLOPOVI (1965. - 1980.) Izum postupka kojim se deseci tranzistora mogu integrirati na komadiću silicija i oblikovati u integrirani sklop ili čip (R. Noyce, 1958.) najavio je još jednu prekretnicu u izgradnji računala. Zahvaljujući integriranim sklopovima bilo je moguće graditi manja, brža i jeftinija računala. U trećoj generaciji računala poluvodičke memorije zamjenjuju memorije s magnetskim jezgricama, a brzina poluvodičkih memorija dopušta uporabu mikroprogramiranja u izvedbi upravljačkih jedinica. Nadalje, integrirani sklopovi zbog svoje niske cijene dopuštaju gradnju sustava s naglašenim stupnjem paralelnosti (uvišestručenje jedinica za obradu, izvedba protočnih instrukcijskih i aritmetičkih struktura) te višeprogramski rad (engl. multiprogramming) pri kojem se u memoriji računala istodobno nalazi više korisničkih programa, a pritom operacijski sustav omogućuje istodobno izvođenje dijelova pojedinih programa). Spomenimo neka računala i porodice računala iz treće generacije: IBM System/360 Model 30,40,50 i 65, UNIVAC 1100 te DEC-ove PDP-11 i VAX 11 porodice računala. Prvo se vektorsko superračunaio Cray I pojavilo na tržištu 1974. U drugoj polovini 1971. pojavljuje se na tržištu prvi 4-bitni mikroprocesor Intel 4004 koji je bio predviđen kao kalkulatorski čip. Prvi 8-bitni mikroprocesor opće namjene Intel 8008 pojavit će samo godinu dana kasnije. Godine 1974. pojavljuje se druga generacija 8-bitnih mikroprocesora čiji su tipični predstavnici Motorola 6800 i Intel 8080 te nagovještavaju revoluciju na području računala.
2.1.5. ČETVRTA GENERACIJA RAČUNALA - SKLOPOVI VRLO VISOKOG STUPNJA INTEGRACIJE (1980. - ?) Zahvaljujući razvoju tehnologije vrlo visokog stupnja integracije VLSI (Very Large Scale Integration), koja omogućuje, uz nisku cijenu, realizaciju integriranih sklopova koji su početkom 80-ih imali desetke tisuća pa onda stotine tisuća, a danas stotine milijuna tranzi-
34
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
stora, računarski sustavi postaju dostupni vrlo širokom spektru korisnika i koriste se u svim sferama ljudske djelatnosti. Povećanje broja tranzistora integriranih na čipu opisuje Mooreov zakon koji govori da se broj tranzistora na čipu udvostručuje svakih 18 - 24 mjeseca. Slika 2.1 ilustrira razvoj tehnologije VLSI na primjeru dinamičke poluvodičke memorije (DRAM - Dinamic Random Access Memory). Na y-osi označen je kapacitet jednog memorijskog čipa izražen u K bitovima (Kb) (K = 1024, odnosno 210) a na x-osi razdoblje od 1976. do 2008. godine. Kapacitet DRAM-a približno se učetverostručivao svake tri godine, tako se, na primjer, kapacitet DRAM čipa sa 16 Kb (1977.) povećao na 1 Gb (G = 230) (2008.). (Opaska: u daljnjem tekstu s b označavat ćemo bit a s B bajt (osam bita).)
godina pojavljivanja SI. 2.1 Povećanje kapaciteta DRAM čipa
Četvrtu generaciju računala označila je industrija osobnih računala. IBM-ova osobna računala temeljena na Intelovom mikroprocesoru Intel 8088, koja su se pojavila na tržištu 1981., postala su najprodavanija računala u povijesti. Osim tvrtke IBM, pojavili su se proizvođači osobnih računala kao što su Commodore, Apple, Amiga i Atari koji su temeljili dizajn na tzv. non-IntelCPU, tj. mikroprocesorima drugih proizvođača. Da bi se dobila predodžba o broju mikroprocesora koji se rabe u različitim računarskim sustavima - osobnim računalima, poslužiteljima (engl. server), radnim stanicama, ali i u ugrađenim računalnim sustavima - možemo navesti daje samo 1998. bilo prodano 120 milijuna Intelovih procesora porodice 80x86,74 milijuna Motorolinih procesora MC 68000, 54 milijuna procesora MIPS, 50 milijuna procesora ARM i 13 milijuna procesora PowerPC. Prema nekim izvorima u 2004. bilo je na svijetu oko 6,4 milijarde stanovnika i 0,8 milijarde osobnih računala pa je u prosjeku svaki osmi stanovnik Zemlje imao osobno računalo. Naglasimo još jednom, mikroprocesori se ne koriste samo kao građevne sastavnice računala opće namjene, oni se rabe za izgradnju ugrađenih računalnih sustava koji se kao sastavnice ugrađuju u proizvode kao što su videoigre, kućanske naprave, laserski pisači, mobilni telefoni, automobili itd. Na primjer, od 54 milijuna isporučenih procesora MIPS 1998., samo je 1% korišten za računarske sustave opće namjene, dok je preostali dio korišten u ugrađenim računalnim sustavima. Četvrta generacija računala, zahvaljujući razvoju tehnologije, ali i arhitekture računala, obilježena je procesorima vrlo velikih performansi, na primjer 64-bitni procesor Intel Xeon (2005.) ima za faktor 6500 veću performansu u odnosu na VAX 11/780 (1978.).
S.RIBARIĆ- GRAĐA RAČUNALA
35
Godine 1980. javlja se i novi pristup arhitekturi računala, nazvan RISC (Reduced Instruction Set Computer), koji se za razliku od tradicionalnog pristupa arhitekturi CISC (Complex Instruction Set Computer) temelji na jednostavnijoj, ali bržoj izvedbi procesora. Navedimo neke od značajki procesora i računarskih sustava četvrte generacije: paralelizam na razini instrukcija - procesori koji izvršavaju istodobno veći broj instrukcija (superskalarni RISC i CISC procesori), višeprocesorski sustavi na čipu, odnosno višejezgreni procesori (engl. multicore microprocessor), višedretveni procesori (engl. muItithread processor), povećani kapacitet priručne memorije (engl. cache memory), procesori za multimedijsku primjenu temeljeni na vrlo dugim instrukcijskim riječima -VLIW (Very Long Instruction Word). Razvoj tehnologije sklopovskih sastavnica snažno je utjecao na brzinu računala. Tablica 2.1. prikazuje broj osnovnih operacija u sekundi ovisno o tehnologiji koja se rabi u izvedbi sklopova. Osnovna operacija je ona koja je izravno podržana sklopovljem, npr. operacija zbrajanja dvaju brojeva. Tehnologija - sastavnica
Godina
Broj osnovnih operacija u sekundi
elektromehanika - releji
1940.
10
elektronika - elektronske cijevi
1945.
103
elektronika - tranzistor
1950.
IO4
mikroelektronika - sklopovi niskog stupnja integracije
1960.
105
mikroelektronika - sklopovi srednjeg stupnja integracije
1980.
106
mikroelektronika - sklopovi vrlo visokog stupnja integracije
2000.
109
: r a Z1. Broj osnovnih operacija u sekundi ovisno o tehnologiji
2.2. FUNKCIJSKE JEDINICE VON NEUMANNOVOG MODELA RAČUNALA Von Neumann, Burks i Goldstine u već spomenutom su članku iznijeli osnovne zahtjeve koji su poslužili kao ishodište za određivanje arhitekture računala: i) računalo treba imati opću namjenu i potpuno automatsko izvođenje programa. Pod potpuno automatskim izvođenjem programa podrazumijevali su potpunu neovisnost računala o operateru od trenutka započinjanja izvođenja programa, tj. tijekom izvođenja programa ne zahtijevaju se intervencije operatera; ii) računalo treba, osim podataka potrebnih za računanje (ulazne vrijednosti, granične vrijednosti, tablice funkcija), pohranjivati međurezultate i rezultate računanja; iii) računalo treba imati i sposobnost pohranjivanja programa u obliku slijeda instrukcija.
36
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
Neke od izravnih posljedica ishodišnih zahtjeva jesu: • instrukcije su u računalu svedene na numerički kod, tako da se podaci i instrukcije pohranjuju u jednakom obliku i na jednaki način u istoj jedinici. Ta se jedinica naziva memorija ili spremnik (engl. memory, storage), odnosno memorijska jedinica; • budući da je računalo prvenstveno stroj za računanje, mora imati jedinicu koja obavlja aritmetičke operacije. Ta se jedinica naziva aritmetička jedinica. No stroj treba izvoditi i logičke operacije (logičko I, ILI, NE, ISKLJUČIVO ILI) koje trebaju biti podržane u jedinici za računanje pa je aritmetička jedinica nazvana aritmetičko-logička jedinica; • računalo mora imati jedinicu koja tumači i razumije instrukcije svedene na numerički kod, a uz to upravlja slijedom izvršavanja instrukcija (osigurava potpuno automatsko izvođenje programa). Taj je zadatak povjeren upravljačkoj jedinici (engl. control unit); • računalo treba komunicirati s vanjskim svijetom (korisnikom, procesom, drugim računalom). Jedinice koje omogućuju takvu komunikaciju nazivaju se ulazno-izlazne jedinice.
SI. 2.2 Model von Neumannovog računala
S. RIBARIĆ - GRAĐA RAČUNALA
37
Slika 2.2 prikazuje model von Neumannovog računala. Ono se sastoji od četiri osnovne funkcijske jedinice: • aritmetičko-logičke, • upravljačke, • memorijske i • ulazno-izlazne jedinice.
2.2.1. UPRAVLJAČKI TOK, INSTRUKCIJSKI TOK I TOK PODATAKA U NEUMANNOVOM MODELU RAČUNALA Funkcijske jedinice računala povezane su tokom podataka, instrukcijskim tokom i tokom upravljačkih signala. Većinu upravljačkih signala generira upravljačka jedinica na temelju tumačenja instrukcije. Na slici 2.2 debljom punom debljom linijom označen je tok podataka, instrukcijski tok označen je tanjom punom linijom, a crtkanom linijom tok upravljačkih signala. Promotrimo tok podataka i instrukcijski tok. Vidimo da oba izviru iz memorijske jedinice jer su podaci i instrukcije pohranjeni u toj jedinici. Između memorijske jedinice i aritmetičkologičke jedinice uspostavljenje dvosmjeran tok podataka: podaci (operandi) koji sudjeluju u aritmetičkim ili logičkim operacijama dohvaćaju se iz memorije, a nakon obavljene operacije podaci koji predstavljaju rezultat obrade pohranjuju se natrag u memorijsku jedinicu. Potrebno je napomenuti da memorijska jedinica nema sposobnost obrade, odnosno ne može obavljati niti aritmetičke niti logičke operacije nad operandima. Uočavamo (slika 2.2) da nema izravnog toka podataka između memorijske jedinice i ulazno-izlazne jedinice. Izmjena podataka između memorijske jedinice i ulazno-izlazne jedinice (a time i veza s vanjskim svijetom) u von Neumannovom modelu računala ostvaruje se neizravno: podaci (rezultat obrade) iz memorijske jedinice upućeni ulazno-izlaznoj jedinici moraju proći kroz aritmetičko-logičku jedinicu. Jednako tako, podaci iz ulazno-izlazne jedinice (ulazni podaci) upućeni memoriji moraju proći kroz aritmetičko-logičku jedinicu. To je ujedno i razlog postojanju dvosmjernog toka podataka između aritmetičko-logičke jedinice i ulaznoizlazne jedinice. Prethodno opisani smjerovi podataka odgovaraju dvjema operacijama: izlaznoj operaciji {smjer podataka od memorijske jedinice prema ulazno-izlaznoj jedinici) i ulaznoj operaciji (smjer podataka od ulazno-izlazne jedinice prema memorijskoj jedinici). Obje su operacije određene strojnim instrukcijama. Vidimo da aritmetičko-logička jedinica nepotrebno sudjeluje u izmjeni podataka između memorijske i ulazno-izlazne jedinice. To ujedno znači da tijekom izmjene podataka između memorije i ulazno-izlazne jedinice ona ne može obavljati svoj osnovni zadatak - aritmetičke ili logičke operacije. Da bi se to izbjeglo, von Neumannov model računala modificiran je tako da je uspostavljen izravan tok podataka između memorijske i ulazno-izlazne jedinice (slika 2.3).
38
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
SI. 2.3 Model von Neumannovog računala s izravnim pristupom memoriji D M A
Izravna veza između memorijske i ulazno-izlazne jedinice naziva se izravan pristup memoriji (engl. DMA - Direct Memory Access). Prijenosom podataka na tom putu upravlja poseban DMA upravljački sklop pa je omogućen istodobni prijenos podataka i obrada u aritmetičko-logičkoj jedinici. Tok podataka uspostavljenje i između ulazno-izlazne jedinice koja obično predstavlja sučelje (engl. interface) s ulazno-izlaznim (perifernim) uređajima (prika-j zna jedinica, zaslon, pisač, miš, tipkovnica i si.). Instrukcijski tok usmjeren je od memorijske prema upravljačkoj jedinici. U skladu s ishodišnim zahtjevima (instrukcije svedene na numerički kod i pohranjene u istoj memorijskaj jedinici kao i podaci) nema razlike u obliku prikaza podataka i instrukcija. Jedino usmjeren nost toka između memorijske jedinice i upravljačke jedinice određuje da se na tom sport nom putu nalaze instrukcije. Instrukcije, odnosno numerički kodirane instrukcije tumača se (de kod i raj u) u upravljačkoj jedinici i na temelju njihova dekodiranja upravljačka jedinica] generira sljedove upravljačkih signala kojima pobuđuje sklopove u aritmetičko-logičkaj jedinici, ali i operacije u ostalim funkcijskim jedinicama. Na primjer, ako je dekodirana irv] strukcija takva da određuje operaciju dohvata podatka iz memorijske jedinice, upravljačka] će jedinica generirati upravljački signal ČITAJ (engl. READ) i uputiti ga memorijskoj jedinicu
S. RIBARIĆ - GRAĐA RAČUNALA
39
Na temelju zadatka upravljačke jedinice očekujemo da svi upravljački signali izviru iz nje. No na slici vidimo da postoje i upravljački signali usmjereni prema upravljačkoj jedinici. Istina, u prvotnom von Neumannovom modelu tako usmjereni signali nisu postojali, ali vrlo brzo se pokazala potreba za njima jer se posebni upravljački signali, generirani od ulazno-izlazne jedinice, koriste za prekid izvođenja tekućeg programa, odnosno izvedbu prekidnog sustava (engl. interrupt system) kojim se ostvaruje jedan od osnovnih načina izmjena podataka između vanjskog svijeta i računala. Obično se signalne linije kojima se prenose ti upravljački signali nazivaju prekidne linije, a signali zahtjev za prekid (engl. Interrupt Request - IRQ). Sa slika 2.2 i 2.3 uočavamo da su aritmetičko-logička i upravljačka jedinica prikazani u zajedničkom okviru. Razlog tome je što se objedinjenje aritmetičko-logičke jedinice s najnužnijom memorijom (radnim registrima) i upravljačkom jedinicom naziva središnja (centralna) procesna jedinica (engl. CPU - Central Processing Unit; Central Processor Unit) ili samo procesor. (Opaska: kada procesoru pridružimo preostale funkcijske jedinice, periferne uređaje i odgovarajuću programsku opremu, govorimo o računalu, odnosno računarskom sustavu.)
X.
2. ARITMETIČKO-LOGIČKA JEDINICA Aritmetičko-logička jedinica sastoji se od sklopova koji obavljaju aritmetičke i logičke operacije na podacima (ti se podaci nazivaju operandi) te registara za privremeno pohranjivanje operanada i rezultata. Unatoč dugoj povijesnoj tradiciji uporabe dekadskog brojevnog sustava u računskim strojevima, i tome da je dekadski brojevni sustav čovjeku najprikladniji, von Neumann, Burks i Goldstine odlučili su se za osnovu digitalnog računala uzeti binarni brojevni sustav. Osim jednostavnije tehnološke izvedbe sklopova (očito je jednostavnije realizirati sklop s dva diskretna stanja (0 i 1) negoli sklop s deset diskretnih stanja ( 0 , 1 , 2 , 9 ) ) i ekonomičnijeg prikazivanja brojeva, razlog tome bio je i to što "računalo nije samo aritmetički računski stroj, već po svojoj prirodi treba biti i logički. Logički sustavi su sustavi koji barataju s dva stanja istinito - lažno, odnosno 0 ili 1".
2.1. Pokušajmo ocijeniti ekonomičnost brojevnog sustava koji će poslužiti kao podloga za izgradnju sklopova te naći optimalni brojevni sustav. Drugim riječima, zanima nas koju bazu brojevnog sustava trebamo izabrati da bi cijena sklopova za prikaz brojeva u zadanom opsegu od 0 do N-1 bila najniža. Potpuno opravdano pretpostavljamo da će cijena sklopova biti proporcionalna broju potrebnih brojevnih mjesta i broju diskretnih stanja koje svaka znamenka na brojevnom mjestu može poprimiti: c = k n B, pri čemu je c cijena (npr. u $), k je pretvorbena konstanta koja omogućuje da se dobije cijena u pretpostavljenim novčanim jedinicama, nje broj potrebnih brojevnih mjesta i Bje baza brojevnog sustava, odnosno broj diskretnih stanja koje znamenka može poprimiti. Pretpostavimo da želimo predočiti brojeve samo u opsegu od 0 do 999 u dekadskom brojevnom sustavu. Cijena sklopova iznosi: c = k x 3 x 1 0 = 30k
40
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
gdje je 3 broj potrebnih mjesta, a 10 broj diskretnih stanja koje svaka znamenka može zauzeti. Ako se pak odlučimo za binarni brojevni sustav (B = 2), tada cijena iznosi: c = k x 10x 2 = 20k pri čemu 10 odgovara broju potrebnih brojevnih mjesta za prikaz brojeva u opsegu 0 999, a 2 je broj diskretnih stanja. Na primjer, 999 (dekadno) predočeno je s deset binarnih znamenki: 1111100111. Vidimo da je binarni brojevni sustav ekonomičniji - zahtijeva nižu cijenu izvedbe sklopova. Koji je brojevni sustav optimalan? Za ishodište će nam poslužiti izraz za cijenu c= kx nxB pri čemu za pozicijske brojevne sustave vrijedi da je: N - Bn
(2.1)
(2.2)
Logaritmirajmo lijevu i desnu stranu izraza (2.2): N - Bn / log dobivamo: log N = n log B n = log N / log B
(2.3) (2.4)
Uvrstimo izraz (2.4) u jednadžbu (2.1): c = k (log N / log B) B
(2.5)
Tražimo vrijednost za B za koju će funkcija c postići svoj minimum: dc - 0 dB — = /c log A/ dB
l°9B-BWB)\age log2 B
slijedi log B - log e = 0, dakle B = e. Rezultat je pomalo čudan - baza optimalnog brojevnog sustava bi trebala biti e = 2.71828... (baza prirodnog logaritma ln)! Budući da B treba biti cijeli broj, trebamo izabrati između broja 2 i 3. Zbog lakše tehnološke izvedbe sklopova odlučujemo se za bazu B = 2 i smatramo je optimalnom. Aritmetičko-logička jedinica von Neumannovog računala IAS imala je sklop za zbrajanje (zbrajalo) i sklop za posmak (engl. shifter) kojim se podatak posmiče ulijevo ili udesno za I jedno ili veći broj mjesta. Osim toga, imala je i dva 40-bitna registra za privremeno pohra-| njivanje operanada i rezultata: registar AC (koji se naziva akumulator) i registar MQ kop' je upotrebljavao kao "proširenje" akumulatora AC za potrebe pohrane rezultata operacija! množenja i dijeljenja. Naime, te operacije daju rezultat dvostruke duljine operanada (801 bitova) pa se 40 značajnijih bitova rezultata smješta u AC, a 40 manje značajnih bitova u MQ. Budući da je aritmetičko-logička jedinica računala IAS imala samo zbrajalo i sklop za
S. RIBARIĆ - GRAĐA RAČUNALA
41
posmak, operacija oduzimanja izvršavala se zbrajanjem umanjenika (minuenda) i potpunog komplementa (engl. two's complement) odbitnika (suptrahenda). Množenje i dijeljenje nije bilo izvedeno sklopovljem, već se izvršavalo pod programskim upravljanjem izvođenjem uzastopnih operacija zbrajanja, odnosno oduzimanja i posmaka (podsjetimo se dualizma sklopovske i programske opreme; poglavlje 1.) Operandi su u IAS računalu imali duljinu od 40 bita: 39 bitova bilo je namijenjeno za znamenke, a jedan bit za predznak. Zašto je izabrana duljina operanda od 40 bita? Pozornost von Neumanna i ostalih autora bila je usmjerena na oblikovanje računala koje će rješavati numeričke zadatke (npr. numeričko rješavanje parcijalnih diferencijalnih jednadžbi). Na temelju analize tadašnjih matematičkih problema (1946.) i stvarnih tehnoloških ograničenja došli su do potrebnog kapaciteta radne memorije i duljine riječi, odnosno duljine operanda: 4096 riječi duljine 40 bita. Naime, duljina od 40 bita omogućuje točnost računanja na dvanaest decimala (2~40 je približno 0.9 • 10"12). Brojevi su bili prikazani u obliku predznačnih razlomljenih brojeva s čvrstim pomičnim zarezom (engl. fixed-point) u rasponu od +0.999999999998 do -0.999999999998. Brojevi koji su se nalazili izvan tog raspona morali su biti skalirani, odnosno normalizirani.
'2.2.3. UPRAVLJAČKA JEDINICA Upravljačka jedinica na temelju dekodiranja strojne instrukcije generira sve potrebne upravljačke signale za vremensko vođenje i upravljanje ostalim jedinicama računala. Ti se signali dovode u tzv. upravljačke točke i njima se aktiviraju sklopovi u pojedinim funkcijskim jedinicama. Uz to, upravljačka jedinica zadužena je za automatsko izvršavanje programa - upravljanje slijedom izvršavanja instrukcija kojima je predočen algoritam obrade. Svaki je korak algoritma predstavljen jednom strojnom instrukcijom ili slijedom strojnih instrukcija. One određuju elementarne operacije koje sklopovlje može izvesti. Slika 2.4 prikazuje format strojne instrukcije IAS računala. Pod formatom strojne instrukcije razumijeva se oblik (organizacija) strojne instrukcije s označenim poljima (nizovima binarnih znamenki 0 i 1) kojima je naznačena funkcija. b7 b8
bO operacijski kod
b19 adresno polje
Si. 2.4 Format strojne instrukcije IAS računala
Strojna instrukcija je duljine 20 bitova (bO - bi9) i organizirana je u dva polja: osam bitova (bO - b7) predstavljaju polje operacijskog koda (op) (engl. opcode - operation code). Ono određuje operaciju koja će se izvršiti. Svakoj strojnoj instrukciji iz skupa instrukcija jednoznačno je pridružen 8-bitni operacijski kod. To znači da IAS može imati skup strojnih instrukcija koji se sastoji od maksimalno 256 instrukcija (28 = 256). Drugo, 12-bitno polje (b8 - b19) je adresno polje koje sadržava adresu memorijske lokacije na kojoj se nalazi podatak (operand). Svakoj memorijskoj lokaciji u memorijskoj jedinici jednoznačno je pridružena adresa što znači da se binarnim slijedom iz adresnog polja može izravno adresirati 4096 memorijskih lokacija (212 = 4096). 12-bitna duljina adresnog polja ujedno je i određivala ukupni kapacitet memorije: 4096 40-bitnih riječi. Strojne instrukcije koje imaju samo jedno adresno polje nazivaju se jednoadresne strojne instrukcije.
42
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
Vidimo da je duljina memorijske riječi (40 bita) prilagođena duljini riječi podataka (40 bita), dok je duljina strojne instrukcije 20 bitova. To je omogućilo da se dvije strojne instrukcije smještaju u jednu memorijsku lokaciju: lijeva strojna instrukcija i desna strojna instrukcija (slika 2.5). bO
bi 9 b20
b7 b8 operacijski kod
adresno polje lijeva instrukcija
b27 b28
operacijski kod
b39 adresno polje
desna instrukcija
SI. 2.5 Lijeva i desna strojna instrukcija IAS računala
Program se izvršava tako da upravljačka jedinca pribavlja (engl. fetch) instrukcije u kodiranom obliku iz memorijske jedinice (u IAS računalu istodobno se pribavljaju dvije strojne instrukcije: lijeva i desna), dekodira ih i u skladu s njihovom funkcijom generira upravljačke signale na temelju kojih funkcijske jedinice (aritmetičko-logička jedinica, memorijska jedinica, ulazno-izlazna jedinica) izvode potrebne operacije. Podsjetimo se da je algoritam obrade u obliku slijeda strojnih instrukcija pohranjen u memorijskoj jedinici u kojoj su pohranjeni i podaci. Računalo s takvom značajkom naziva se računalo s pohranjivanjem programa. Jedno se pitanje samo od sebe nameće: ako su podaci i strojne instrukcije predočene binarnim kodovima i ako su pohranjeni u istoj memorijskoj jedinici, kako se zna što je podatak, a što instrukcija i razlikuju li se oni na temelju slijeda bitova? Odgovor je pomalo neočekivan: na temelju slijeda bitova nije moguće razlikovati podatak od strojne instrukcije. Za podrobnije objašnjenje ovog odgovora molim čitatelja za malo strpljenja naći ćemo ga već u ovom poglavlju. Za IAS računalo kažemo da je akumulatorsko orijentiran stroj zato što središnju ulogu u izvođenju aritmetičkih operacija ima spremnik - registar: akumulator AC. Razmotrimo kako će se izvoditi aritmetičke operacije koje zahtijevaju dva operanda, npr. C = A + B, gdje su A i B operandi. Općenito, možemo napisati C = f(A, B). Ako ovaj izraz promatramo u svjetlu strojnih instrukcija, onda bismo mogli reći da funkciji f odgovara polje operacijskog koda, a da A i B predstavljaju adrese izvorišta operanada, dok je C adresa odredišta rezultata. U skladu s time, mogli bismo očekivati da strojne instrukcije budu troadresne, odnosno da imaju sljedeći format: op kod, adresno poljel, adresno polje 2, adresno polje 3, pri čemu adresna polja 1 i 2 predstavljaju adrese izvorišta, a adresno polje 3 adresu odredišta. No strojna instrukcija IAS računala je jednoadresna. Kako se jednoadresnom instrukcijom može podržati operacija koja zahtijeva tri adrese? To je riješeno na sljedeći način. U akumulatoru AC nalazi se jedan od operanada (AC je izvorište jednog operanda), drugi se operand nalazi u memorijskoj jedinici i on je određen 12-bitnom adresom iz adresnog polja strojne instrukcije. Odredište rezultata je akumulator AC. Dakle, umjesto C = f(A, B) možemo napisati A = f(A, M), gdje A odgovara akumulatoru AC, a M odgovara adresi memorijske lokacije. Jasno, nakon obavljene specificirane operacije operand u AC je"izgubljen"jer se u akumulatoru AC sada nalazi rezultat. Računalo IAS imalo je pet osnovnih tipova strojnih instrukcija koji su mogu razvrstati na: 1. instrukcije za prijenos (premještanje) podataka (engl. data transfer), 2. instrukcije za obradu podataka (engl. dataprocessing) 3. ulazno-izlazne instrukcije, 4. instrukcije za upravljanje izvršavanjem programa (engl. program controf), 5. instrukcije s djelomičnom zamjenom (engl.partialsubstitution).
S. RIBARIĆ - GRAĐA RAČUNALA
43
Prva četiri tipa instrukcija karakteristična su i za današnja računala. Instrukcije s djelomičnom zamjenom bile su strojne instrukcije koje su mijenjale samo adresno polje strojnih instrukcija. Pomoću njih su programi mogli preoblikovati svoje strojne instrukcije tijekom izvođenja i onda se ista instrukcija mogla primjenjivati na drugom skupu podataka. Ovakva se mogućnost, da program mijenja sam sebe, vrlo brzo pokazala kao neprikladna jer otežava ispitivanje ispravnosti rada programa i otkrivanja pogrešaka u programu te se početkom šezdesetih godina prošlog stoljeća napušta uporaba instrukcija za modifikacije adresnog dijela strojnih instrukcija. Tablica 2.2. prikazuje neke od osnovnih tipova strojnih instrukcija IAS računala. kcije
Instrukcija
Opis
AC := MQ AC := M(X) M(X) := AC MQ := M(X) AC :=-M(X) AC:=|M(X)|
Prenesi sadržaj registra MQ u registar AC Prenesi sadržaj memorijske lokacije X u AC Prenesi sadržaj AC u memorijsku lokaciju X Prenesi M(X) u MQ Prenesi - M(X) u AC Prenesi apsolutnu vrijednost sadržaja memorijske lokacije X u AC Prenesi minus |M(X)| u AC
AC := - |M(X)| AC := AC + M(X) AC = AC + |M(X)| AC = AC - M(X) AC = AC - |M(X)| AC.MQ := MQxM(X) MQ.AC := AC / M(X) AC := AC x 2 AC := AC/2
Zbroji sadržaje memorijske lokacije X i AC te rezultat pohrani u AC Zbroji apsolutnu vrijednost M(X) i sadržaj AC Oduzmi M(X) od AC Oduzmi |M(X)| od AC Pomnoži MQ s M(X) i pohrani produkt u obliku riječi dvostruke duljine u AC i MQ Podijeli AC s M(X) i kvocijent pohrani u AC a ostatak u MQ Pomnoži AC s dva (posmak ulijevo za jedno mjesto) Podijeli AC s dva (posmak udesno za jedno mjesto)
go to M(X, 0:19) go to M(X, 20:39) if AC > 0 then go to M(X, 0:19) ^ .sijanje
Uzmi sljedeću instrukciju iz lijeve polovine riječi M(X) Uzmi sljedeću instrukciju iz desne polovine riječi M(X) Ako AC sadržava nenegativni broj uzmi sljedeću instrukciju iz lijeve polovine M(X) if AC > 0 then go to M(X, 20:39) Ako AC sadržava nenegativni broj, uzmi sljedeću instrukciju iz desne polovine M(X) Zamijeni adresno polje lijeve instrukcije u M(X) s 12 M(X, 8:19) := AC(28:39) krajnje desnih bitova AC Zamijeni adresno polje desne instrukcije u M(X) s 12 M(X, 28:39) :=AC (28:39) krajnje desnih bitova AC
2-2. Neki od osnovnih tipova strojnih instrukcija IAS računala
44
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
Slika 2.6 prikazuje organizaciju središnje procesne jedinice, tj. procesora računala IAS. Dvije se strojne instrukcije smještene u jednoj 40-bitnoj riječi, koja je pribavljena iz memorijske jedinice, privremeno smještaju u memorijski registar podataka MDR. Iz MDR registra desna se strojna instrukcija smješta u instrukcijski registar IR. Lijeva se strojna instrukcija pohranjuje u privremeni registar CR. Operacijski kod (8 bita) desne instrukcije prosljeđuje se sklopu za dekodiranje (izvorno se taj sklop naziva funkcijska tablica), a preostalih se 12 bitova (adresno polje) prenosi u memorijski adresni registar MAR. MAR sadržava adresu operanda koji će se dohvatiti iz memorijske jedinice i sudjelovati u zadanoj operaciji. Nakon što se desna strojna instrukcija izvede, iz privremenog se registra CR premješta lijeva instrukcija u instrukcijski registar IR i izvodi se na prethodno opisan način. Sadržaj 12-bitnog registara PC povećan za jedan pokazuje na sljedeću memorijsku riječ koja sadržava sljedeće dvije strojne instrukcije programa. Ako je bila dekodirana strojna instrukcija grananja ili skoka (sljedeća strojna instrukcija nije ona koja je uzastopna u programu), onda se njezino adresno polje, umjesto u registar MAR, premješta u programsko brojilo PC. Na taj je način pripremljena adresa memorijske riječi koja sadržava dvije instrukcije koje će se sljedeće pribaviti. r — — — — — — — — — — — — — — — — — — — — — — -, . aritmetičko-logička jedinica
.
akumulator AC
(40)
iV 40 / /
/
^
40/
*
/
registar MQ y ik
'40
40 / /
(40)
'40
aritmetički sklopovi
40 /
' 40
prema memoriji i ulazno-izlaznim jedinicama
SI. 2.6 Organizacija središnje procesne jedinice računala IAS
S. RIBARIĆ - GRAĐA RAČUNALA
45
Zapamtimo; programsko brojilo PC sadržava adresu sijedeće strojne instrukcije (odnosno, u računalu IA5 adresu memorijske lokacije koja sadržava instrukcijski par), a instrukcijski registar IR sadržava instrukciju čije je izvođenje upravo u tijeku. U računalu IAS programsko se brojilo nazivalo upravljačko brojilo CC (Control Counter), a instrukcijski se registar nazivao registar funkcijske tablice FR (Function Table Register). Izvođenje strojne instrukcije odvija se u dvije faze (obje se faze nazivaju i instrukcijski ciklus): PRIBAVI (engl. fetch) i IZVRŠI (engl. execute). Tijekom faze PRIBAVI upravljačka jedinica pribavlja strojnu instrukciju iz memorijske jedinice te se događa sljedeće: 1. korak: M(PC) IR; iz memorije se pribavlja (čita se) strojna instrukcija i smješta u instrukcijski registar IR (Opaska: u računalu IAS pribavljaju se dvije strojne instrukcije smještene u 40-bitnoj riječi.); adresa strojne instrukcije nalazi se u programskom brojilu PC; 2. korak: PC + 1 PC; sadržaj programskog brojila PC povećava se za jedan i time određuje strojnu instrukciju koja neposredno slijedi za instrukcijom koja je upravo pribavljena; u skladu s opaskom iz 1. koraka u računalu IAS određuje se par strojnih instrukcija iz slijeda; 3. korak: dekodira se operacijski kod strojne instrukcije koja je bila pribavljena u 1. koraku. Trećim se korakom završava faza PRIBAVI. Upravljačka jedinica prelazi u fazu IZVRŠI. Za vrijeme faze IZVRŠI, upravljačka jedinica, ovisno o ishodu dekodiranja operacijskog koda, generira sljedove upravljačkih signala kojima pobuđuje operacije izravno podržane sklopovljem, na primjer, prijenos podataka iz memorijske jedinice, prijenos podataka između registra i aritmetičko-logičkih sklopova, aktiviranje aritmetičko-logičkih sklopova, prijenos podataka memorijskoj jedinici, promjena vrijednosti programskog brojila (ako je riječ o strojnoj instrukciji grananja ili skoka) i si. Na primjer, faza IZVRŠI, za aritmetičku operaciju zbroji (add) može biti predočena sljedećim koracima: 4. korak: M(MAR) MDR; dohvati podatak (operand) iz memorijske jedinice i smjesti ga u memorijski registar podataka MDR; adresa memorijske lokacije na kojoj se nalazi operand određena je sadržajem memorijskog adresnog registra MAR; 5. korak: AC + MDR AC; izvedi operaciju zbrajanja; rezultat operacije smješta se u akumulator AC. Izvođenjem posljednjeg koraka u fazi IZVRŠI, upravljačka se jedinica vraća na 1. korak faze PRIBAVI i nastavlja se faza PRIBAVI. Ritam izmjene PRIBAVI - IZVRŠI nastavlja se sve dok se ne izvede strojna instrukcija za zaustavljanje rada (HaIt). Slika 2.7 prikazuje dijagram stanja instrukcijskog ciklusa za von Neumannov model računala. Napomenimo da se u suvremenim procesorima promjene stanja PRIBAVI - IZVRŠI događaju i nekoliko stotina milijuna puta u sekundi. (Opaska: u literaturi (L. Budin i sur.) koriste se i nazivi "dohvat instrukcije"za fazu PRIBAVI te "obavljanje operacije"za fazu IZVRŠI.) U memorijskoj su jedinici pohranjeni podaci i strojne instrukcije u istom obliku - kao nizovi 0 i 1. Kako upravljačka jedinica razlikuje strojnu instrukciju i podatak? Na temelju binarnog niza nije ih moguće razlikovati. Strojna instrukcija i podatak mogu se razlikovati jedino na temelju stanja upravljačke jedinice. Ako se upravljačka jedinica nalazi u fazi PRIBAVI, tada se riječ pribavljena iz memorijske jedinice smatra strojnom instrukcijom (ili parom strojnih
46
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
instrukcija u računalu IAS) i smješta se u instrukcijski registar IR, odnosno u slučaju računala IAS - desna strojna instrukcija smješta se u IR, a lijeva u registar CR. Ako se, međutim, upravljačka jedinica nalazi u fazi IZVRŠI, riječ koja se dohvaća iz memorijske jedinice tumači se kao podatak (operand). Jednako tako, ako se tijekom faze IZVRŠI riječ pohranjuje u memorijsku jedinicu, onda je to podatak ili rezultat neke aritmetičke ili logičke operacije.
SI. 2.7 Dijagram stanja instrukcijskog ciklusa za von Neumannov model računala
2.2.4. MEMORIJSKA JEDINICA Memorijska jedinica IAS računala bila je, za današnje stanje razvoja tehnologije, vrlo skromnog kapaciteta: 4096 40-bitnih riječi, dakle 4 K 40-bitnih riječi (1 K = 210). No izvedba 163840 bistabila, tj. 4096 • 40, bila je zbog tadašnjih tehnoloških ograničenja ocijenjena kao neizvediva. Priklonili su se rješenju u kojem je memorijska jedinica bila realizirana uporabom elektronskih cijevi sličnih katodnoj cijevi koje su bile razvijene u tvrtki RCA, Princeton. Te su se elektronske cijevi nazivale Selectron i za izvedbu memorijske jedinice uporabljeno je 40 takvih Selectrona - svaki od njih bio je kapaciteta 4096 bita. Svaka je elektronska cijev pohranjivala bitove u obliku tamnih (0) i svijetlih polja (1), a zaslon cijevi osvježavao se elektronskim snopom. Elektronski se snop rabio i za čitanje i upisivanje podataka u Selectron, tako da je to bila memorija s izravnim pristupom do željenog položaja (engl. random access memory). Naime, za memorije s izravnim pristupom vrijedi da je vrijeme pristupa memorijskoj lokaciji neovisno o položaju te lokaciji u memorijskoj jedinici. Brzina memorijske jedinice tj. vrijeme pristupa (engl. memory access time) bilo je 50 ^is. Memorijska jedinica nema sposobnosti obrade podatka, već može izvoditi dvije vrlo važne operacije - pohranu podatka i dohvaćanje prethodno pohranjenog podatka. Dohvaćanje podatka opisano je operacijom čitanja (engl. Read), a pohrana podatka operacijom pisanja (engl. Write). Riječ iz memorije dohvaća se tako da se adresa memorijske lokacije čiji se sadržaj želi dohvatiti (pročitati) smješta u memorijski adresni registar MAR i time adresa postaje raspoloživa na adresnoj sabirnici, a zatim upravljačka jedinica generira upravljački signal Čitaj koji se šalje memorijskoj jedinici. Izabrana se riječ, nakon isteka vremena pristupa memoriji, npr. 50 ^is (za računalo IAS), prenosi preko puta podataka (sabirnice podataka) procesoru i smješta u memorijski registar podataka MDR. Napomenimo da operacija čitanja nije destruktivna operacija, odnosno ona ne "ruši" ili ne mijenja sadržaj pročitane memorijske lokacije.
S. RIBARIĆ - GRAĐA RAČUNALA
47
Operacija pisanja izvodi se na sljedeći način: podatak koji se želi pohraniti u memorijskoj jedinici smješta se u memorijski registar podataka MDR i time postaje raspoloživ na putu podataka (sabirnici podataka) između procesora i memorije, adresa memorijske lokacije na kojoj se želi pohraniti podatak postavlja se u memorijski adresni registar MAR i time adresa postaje raspoloživa na adresnoj sabirnici. Upravljačka jedinica generira upravljački signal Piši i šalje ga memorijskoj jedinici. Nakon isteka vremena pristupa memoriji, podatak biva pohranjen na izabranoj memorijskoj lokaciji. Operacija pisanja je, uvjetno rečeno, destruktivna u smislu daje novi podatak koji se pohranjuje na željenu memorijsku lokaciju, "prebrisao" stari sadržaj na toj memorijskoj lokaciji. Von Neumann, Burks i Goldstine, svjesni da postoje mnogi važni razredi problema koji zahtijevaju veći kapacitet memorijske jedinice od 4096 riječi, razmatraju hijerarhijsku organizaciju memorije. Ona se sastoji od radne (primarne ili glavne) memorije, sekundarne memorije i treće razine - tzv. neaktivne memorije (engl. dead store). Radna je memorija bila u IAS računalu ostvarena Selectronima i izravno je podržavala rad procesora. Ona je ujedno bila i najbrža memorija u predloženoj hijerarhijskoj organizaciji. Sekundarnom memorijom, koja je većeg kapaciteta od radne memorije, jeftinija (cijena po bitu je manja), ali sporija, upravlja računalo i ona predstavlja njegov sastavni dio. Sekundarna je memorija kao medij za pohranu podataka koristila magnetsku žicu ili svjetlosno osjetljiv film. Treća razina memorije jest neaktivna memorija i ona nije sastavni dio računala. Ona se po potrebi uključuje u računalo. Od memorije u drugoj razini razlikuje se samo po raspoloživosti (zahtijeva ručni zahvat operatera da bi se uključila u računalo).
2.2.5. ULAZNO-IZLAZNA JEDINICA Računalo IAS razmjenjivalo je podatke s okolinom, odnosno operaterom. Za to su bile predviđene ove jedinice: grafička izlazna jedinica i teleprinter s pomoćnom magnetskom žicom. Kao grafička izlazna jedinica poslužile su elektronske cijevi Seiectron koje su imale svjetla polja na pozicijama na kojima su bile pohranjene jedinice (1) i tamna polja koja su odgovarala nulama (0). Teleprinter s pomoćnom magnetskom žicom upotrebljavao se kao ulazno-izlazna jedinica. Oprema teleprintera bila je preinačena tako da je omogućavala i upis podataka s bušene papirne vrpce na magnetsku žicu, i obratno. Strojna instrukcija INPUT(X, N) specificirala je prijenos N podataka od ulazne jedinice procesoru i onda pohranu na N slijednih memorijskih lokacija, započevši s memorijskom lokacijom s adresom X. Slično, strojna instrukcija OUT(X, N) određivala je prijenos N slijednih podataka iz memorijske jedinice, započevši s memorijskom lokacijom s adresom X, prema izlaznoj jedinici. I u ovom je slučaju na putu podataka bio i procesor. Računalo IAS bilo je jednokorisničko računalo (engl. single-user oriented) - dopuštalo je istodobni rad samo jednom korisniku i zato se izmjena podataka s vanjskim svijetom obavljala pod izravnim upravljanjem procesora. Autori računala IAS razmatraju mogućnost istodobnog rada ulazno-izlazne jedinice i procesora, međutim, zbog tehnoloških ograničenja odustaju od takve izvedbe.
48
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
2.3. JEDNOSTAVNO MIKRORAČUNALO VON NEUMANNOV MODEL RAČUNALA U ovom smo poglavlju veliku pozornost posvetili von Neumannovom računskom modelu i IAS računalu. Osnovni razlog za to je što je taj model, tijekom skoro pola stoljeća, odredio osnovne zamisli u oblikovanju računala i snažno utjecao na arhitektonske značajke suvremenih računala. Zamisli kao što je računalo opće namjene, svođenje podataka i instrukcija na numerički (binarni) kod, njihovo pohranjivanje u istoj memorijskoj jedinici, četiri osnovne funkcijske jedinice (aritmetičko-logičko jedinica, upravljačka jedinica, memorijska jedinica, ulazno-izlazna jedinica) i četiri osnovna razreda strojnih instrukcija (instrukcije za prijenos (premještanje) podataka, instrukcije za obradu podataka, ulazno-izlazne instrukcije, instrukcije za upravljanje izvršavanjem programa) određuju značajke koje nalazimo u suvremenim računalima. Naravno, za više od pet desetljeća von Neumannov model računala doživio je brojne promjene i poboljšanja koja su se snažno odrazila na njihovoj performansi, pouzdanosti, raspoloživosti, prilagodljivosti i dramatičnom padu cijene računala. Veliku je zaslugu za sve to imao strahoviti tehnološki napredak, posebno mikroelektronike, odnosno tehnologije visokog stupnja integracije. Da bismo potkrijepili tvrdnju o snažnom utjecaju von Neumannovog modela na generacije računala koje su mu slijedile, razmotrimo mikroračunalo na slici 2.8. Taj jednostavan sustav temeljenje na 8-bitnom mikroprocesoru MC 6800 (procesoru ostvarenom u tehnologiji visokog stupnja integracije LSI - Large Scale Integration). Sve su ostale njegove funkcijske jedinice također realizirane u tehnologiji LSI tako da je tiskana pločica na kojoj se nalazi cijeli sustav veličine dlana. Je li računalo sa slike 2.8. takvo da se zaista temelji na von Neumannovom modelu? Pokušajmo identificirati njegove osnovne funkcijske jedinice. Blok (slika 2.8) s oznakom MPU što je kratica Microprocessor Unit očito predstavlja procesor realiziran u LSI tehnologiji (čip) koji objedinjuje dvije funkcijske jedinice - upravljačku jedinicu i aritmetičko-logičku jedinicu. Blok s oznakom ROM (Read Only Memory) predstavlja memorijski čip koji zbog svoje izvedbe trajno pohranjuje sadržaj (on ostaje sačuvan i ne briše se nakon prestanka napajanja). Osim toga, sadržaj ROM-a ne može se mijenjati strojnim instrukcijama tijekom izvođenja programa. Naravno, sadržaj ROM-a može se strojnim instrukcijama čitati i zato takvu vrstu memorije nazivamo ispisna memorija. Zbog takvih se njezinih značajki u ispisnoj memoriji pohranjuju podaci koji se ne mijenjaju te stalni programi (npr. programi koji čine jezgru operacijskog sustava). Čip s oznakom RAM (Random Access Memory) predstavlja memorijsku jedinicu, odnosno memoriju s izravnim pristupom. Ona tijekom izvođenja programa dopušta i upisivanje i čitanje podataka. Prestankom napajanja njezin se sadržaj briše. Zaključimo, čipovi ROM i RAM predstavljaju treću funkcijsku jedinicu - memorijsku jedinicu. Čipovi označeni s PIA (Peripheral Interface Adapter) i ACIA (Asynchronous Communication Interface Adapter), gdje su PIA i ACIA komercijalni nazivi sklopova, predstavljaju ulaznoizlazne jedinice mikroračunala. PIA omogućuje paralelni prijenos podataka između mikroračunala i perifernih uređaja (i/ili vanjskog svijeta). Preko linija PA0-PA7 i PB0-PB7 (slika 2.8; označene samo s PA i PB) prenose se 8-bitni podaci (2 puta po 8 bita). Podsjetimo se, paralelni je prijenos podataka takav prijenos pri kojem je svakom bitu podatka dodijeljena jedna linija (vodič) za prijenos i cijeli se podatak prenosi istodobno. Smjer prijenosa podataka preko linija PAO - PA7 i PBO - PB7 određuje se tijekom incijalizacije PIA koja se obavlja programom. Kažemo da je PIA prog ram irijiv sklop jer mu se početna konfiguracija i način rada određuje programom.
S. RIBARIĆ - GRAĐA RAČUNALA
AB0-AB15
SI. 2.8 Jednostavno mikroračunalo temeljeno na mikroprocesoru M C 6800 (tvrtka Motorola)
49
DB0-DB7
50
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
PIA ima još dva para linija kojima je povezana s vanjskim svijetom: CA1 i CA2, te CB1 i CB2. Te se linije nazivaju linije za rukovanje (engl. handshaking) i njima se ostvaruje izmjena upravljačkih signala između računala i vanjskog svijeta. Ti signali služe za ostvarivanje jednostavnih protokola koji se koriste u izmjeni podataka i omogućuju pouzdani prijenos podataka. Čip ACIA je ulazno-izlazna jedinica koja podržava serijski prijenos podataka između mikroračunala i vanjskog svijeta. Serijski prijenos podataka je takav da se jednom signalnom linijom prijenosi bit po bit podatka (kažemo u obliku "vlaka impulsa"). Linija označena s Rx (Receive) (slika 2.8) je prijemna signalna linija kojom se podaci iz vanjskog svijeta prenose u računalo. Linija Tx (Transmit) (slika 2.8) jest predajna linija kojom se podaci šalju u vanjski svijet ACIA je također programirljivsklop i u fazi inicijalizacije programom se određuju detalji načina njegova rada. Na slici 2.8. uočavate da ACIA ima još i druge signalne linije (CTS, DCD, RTS,...) - one su namijenjene posebnom sklopu modemu koji omogućuje prijenos serijskih podataka telefonskim linijama (paricama). Opisali smo glavne sastavnice mikroračunala sa slike 2.8: MPU, ROM, RAM PIA i ACIA. Te su građevne sastavnice osnovne funkcijske jedinice koje odgovaraju von Neumannovom modelu računala, samo što su one realizirane u LSI tehnologiji. Na slici vidimo i blok označen s dock - to je čip koji ima funkciju generatora signala vremenskog vođenja odnosno takta. Naime, računalo je, poput Turingovog stroja, diskretni vremenski stroj u kojem je trenutak svake promjene određen signalom vremenskog vođenja ili"clockom"- kako mi to u žargonu nazivamo. Signal vremenskog vođenja ("clock") je periodički signal određene frekvencije čija se velika stabilnost frekvencije postiže uporabom kristalnog oscilatora. Zapravo, ovo mikroračunalo rabi dva signala vremenskog vođenja (kažemo da koristi "dvofazni signal" vremenskog vođenja): c|)l i cj>2 (slika 2.8). Za mikroračunalo sa slike 2.8. frekvencija oba signala vremenskog vođenja jest 1 MHz; (M = 106). Budući da signal vremenskog vođenja određuje vremenske trenutke u kojima se mijenja stanje u sklopovlju, jasno je da frekvencija signala vremenskog vođenja utječe na brzinu izvođenja programa, odnosno na performansu računala (današnja osobna računala imaju frekvenciju 3 i više GHz (G = 109)). (Opaska: kada ne govorimo o kapacitetu memorije obično za K, M ili G podrazumijevamo sljedeće: K = 103, M = 106 i G = 109.) Sve su aktivnosti mikroračunala sinkronizirane signalom vremenskog vođenja - signal se dovodi procesoru MPU (oba signala: c> j 1 i <|>2), ali i ROM-u (<|>2), RAM-u (<(>2), PlA-i ($2) i AClA-i (<|>2) (slika 2.8). Blok označen na slici 2.8 sa start up predstavlja relativno jednostavan sklop za početno upuštanje u rad mikroračunala, odnosno za vraćanje mikroračunala u početno stanje (u žargonu kažemo "resetiranje"). Sklop ima obično gumb označen s RESET. Korisnik pritiskom na taj gumb, preko sklopa start up, aktivira ulaznu upravljačku liniju označenu s kojom se računalo postavlja u početno stanje. Aktiviranje RESET {RESET 0) znači za procesor iznimku, odnosno prekid vrlo visoke razine. Slika 2.8 može nam poslužiti i za tumačenje toga kako se fizički u računalu ostvaruje tok podataka, instrukcijski tok i tok upravljačkih signala, odnosno kako se ostvaruje komunikacija među funkcijskim jedinicama. Na slici vidimo tri komunikacijska puta kojima su funkcijske jedinice povezane: put podataka (engl. data bus), put upravljačkih signala (engl. control bus) i adresni put (engl. address bus). Svaki od tih putova, koji se naziva sabirnica (engl. bus), fizički predstavlja skup linija (vodiča) kojim se prenose signali (koji svojim razinama odgovaraju logičkoj "0" i logičkoj "1"). S obzirom na namjenu sabirnice, govorimo o sabirnici podataka (ili podatkovnoj sabirnici), upravljačkoj sabirnici i adresnoj sabirnici.
S. RIBARIĆ - GRAĐA RAČUNALA
51
Tok podataka i instrukcijski tok ostvareni su pomoću sabirnice podataka. Ona je dvosmjerna jer dopušta prijenos od procesora prema drugim funkcijskim jedinicama (memorijskoj i ulazno-izlaznim jedinicama), ali i prijenos od navedenih funkcijskih jedinica prema procesoru. Odmah ovdje navedimo jedan važan detalj: referentna točka u analizi ponašanja računalnog sustava i određivanju smjerova prijenosa jest procesor, koji ima ulogu vodećeg modula (engl. master module) jer on upravlja cijelim računarskim sustavom. Ostale funkcijske jedinice imaju ulogu pratećeg modula (engl. slave) i one "poslušno" obavljaju zadatke koje im upućuje vodeći modul - procesor. Budući daje procesor određen kao referentna točka, onda se linije usmjerene od procesora prema ostalim jedinicama nazivaju izlaznim, a one u suprotnom smjeru ulaznim linijama. Analogno tome, ako kažemo da se izvodi operacija čitanja (engl. read), to znači da vodeći modul, tj. procesor "čita" podatak, odnosno pristupa nekoj memorijskoj lokaciji ili nekom registru u ulazno-izlaznim jedinicama i dohvaća taj podatak (podatak predstavlja ulazni podatak za procesor). Sabirnica se podataka za mikroračunalo na slici 2.8. sastoji od osam linija (ili vodiča) označenih s DBO, DB1,..., DB7. Linija DBO služi za prijenos najmanje značajnog bita podatka, dok će linija DB7 prenositi najznačajniji bit podatka (prijenos je paralelan). Za sabirnicu podataka DBO - DB7 kažemo da je 8-bitna, tj. da je "širine" od osam bita. Kako se njome ostvaruje instrukcijski tok i tok podataka? Kad je upravljačka jedinica u stanju PRIBAVI, iz memorijske se jedinice pribavlja podatak koji se tumači kao strojna instrukcija, odnosno sastavnica strojne instrukcije (ako se ona sastoji od više 8-bitnih riječi). Podatak - strojna instrukcija - preko sabirnice podataka prenosi se procesoru. Tijekom faze IZVRŠI podaci koji se dohvaćaju iz memorijske jedinice ili se šalju memorijskoj jedinici, preko sabirnice podataka predstavljaju elemente toka podataka. Zaključimo, dvosmjerna sabirnica podataka predstavlja komunikacijski put kojim se ostvaruje instrukcijski tok i tok podataka. Upravljački signali koje generira upravljačka jedinica šalju se ostalim funkcijskim jedinicama pomoću upravljačke sabirnice. Ona se sastoji od pojedinačnih linija (vodiča)_kojima se prenose upravljački signali. Na primjer, izlazna upravljačka linija označena kao /?/1/1/prenosi upravljački signal "Čitaj" (/?/W = 1) ili "Piši" (/?/ W = 0) memorijskoj jedinici, odnosno čipu RAM i time određuje operaciju koju treba obaviti memorijska jedinica. Pažljivi će čitatelj primijetiti da se taj signal dovodi i do ulazno-izlaznih jedinica (PIA i ACIA; slika 2.8), a o razlozima za to bit će riječi u poglavlju o ulazno-izlaznim jedinicama. Pažljivi će čitatelj također primijetiti da se upravljački signal RAA/ ne dovodi memorijskom modulu ROM - razlog tome je što je ROM samo ispisna memorija tako da se već samim izborom tog modula određuje operacija čitanja. Skup upravljačkih linija čini upravljačku sabirnicu. U slučaju mikroračunala sa slike 2.8 sabirnice čine linije označene s R/\N, (j>2, VMA, RESET i IRQ. Upravljačka linija IRQ je ulazna linija i njome upravljaju ulazno-izlazne jedinice (na slici 2.8 vidi se da IRQ "izvire" i iz PIA i ACIA). Ta se upravljačka linija naziva prekidna linija, a signal koji ona prenosi je zahtjev za prekid. Aktivno stanje signala IRQ (IRQ = 0) znači procesoru da je neka ulazno-izlazna jedinica zahtijevala prekid izvođenja tekućeg programa. Na slici 2.8 vidimo još jednu sabirnicu - adresnu sabirnicu koja je širine šesnaest bita ABO AB15. Ona je iznimno važna jer pomoću nje procesor određuje kojoj lokaciji u memorijskoj jedinici ili kojem registru u ulazno-izlaznoj jedinici želi pristupiti. Von Neumanov model računala koristi adrese koje su jednoznačno dodijeljene svakoj sastavnici kojoj procesor
52
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
može pristupiti: svaka memorijska lokacija ima jednoznačno pridruženu adresu, svaki registar u bilo kojoj funkcijskoj jedinici također ima jednoznačno pridruženu adresu. Na temelj u jed noznačne adrese procesor izabire sastavnicu s kojom želi komunicirati. Važno je napomenuti da se načelo jednoznačnostiadrese u računalnom sustavu mora strogo poštovati - ne smiju u računalu postojati npr. dvije memorijske lokacije s istom adresom, dva registra ili dvije funkcijske jedinice s istom adresom. Ako se to načelo ne poštuje, računalo neće ispravno funkcionirati, štoviše može imati za posljedicu kvar sklopovske sastavnice (npr. posebnih pogonskih sklopova; engl. driver, koji su sučelni sklopovi na sabirnici računala). Analogija, s poštovanjem načela jednoznačnosti adrese, jest dobro uređen grad u kojem ne smiju postojati dvije ili veći broj ulica s istim imenom ili, pak, više zgrada s jednakim kućnim brojem u istoj ulici. Naravno, kad se ta jednoznačnost ne bi poštovala, pisma i druge poštanske pošiljke bilo bi nemoguće uručiti pravom primatelju. Slično je i s "porukama" koje šalje procesor. Adresna sabirnica je jednosmjerna - ona izvire iz procesora i njome se adresa koju generira procesor prenosi svakoj funkcijskoj jedinici. Funkcijske jedinice "osluškuju" adresnu sabirnicu i ako utvrde da je na njoj adresa koja upravo odgovara adresi koja je njima dodijeljena, aktiviraju se te obavljaju zadatak koji im je procesor odredio na temelju stanja upravljačkih signala. Primjer 2.2. Slika 2.9 prikazuje detalj priključenja memorijske jedinice RAM (slika 2.8) na sabirnicu podataka DBO - DB7, upravljačku sabirnicu te adresnu sabirnicu ABO - AB15. Adresna sabirnica je širine 16 bita i određuje ukupan adresni prostor od 65356 adresa (216): od 0000 - FFFF (heksadekadno), tj. ukupno 64 K lokacija (K = 210). Čip RAM ima četiri ulazna priključka označena s E (engl. enable - omogući) i dva ulazna priključka označena s £ Ti ulazni priključci služe za izbor čipa na temelju adrese. Čip je izabran, tj. omogućen i postaje aktivan ako je zadovoljen sljedeći uvjet: istodobno moraju sve logičke vrijednosti signala na priključcima označenima s E i E poprimiti aktivno stanje, dakle redom £= 0, £= 0, £ = 0, £= 0, 1 i E-1. Na slici 2.9 vidimo da su adresne linije A7 - A15, preko logičkih sklopova ILI priključene na četiri ulaza označena s £, a da je na dva priključka E doveden signal vremenskog vođenja
2 (odnosno kada njegova amplituda poprima visoku vrijednost koja se može tumačiti kao logičko 1).
S. RIBARIĆ - GRAĐA RAČUNALA
53
SI. 2.9 Detalj priključenja memorijske jedinice RAM
Sedam najmanje značajnih adresnih linija AO - A6 dovodi se izravno na priključke RAM-a označene s AO - A6. Binarne vrijednosti na adresnim linijama AO do A6 određuju adresu memorijske lokaciju u RAM-u. Sada možemo, konačno, odrediti adresni potprostor koji zauzima RAM sa slike 2.9. Stanje adresnih linija od A7 do A15 mora biti sljedeće: A15 A14 A13 A12 A11 A10 A9 0 0 0 0 0 0 0
A8 0
A7 0
Adresne linije A0 do A6 poprimaju vrijednosti 0 ili 1, ovisno o kojoj se memorijskoj lokaciji u čipu RAM želi pristupiti. Ovih nam sedam adresnih linija govori koliki je kapacitet memorijskog čipa. Zbog načela jednoznačnosti adrese tih sedam adresnih linija (A0 - A6) određuje 128 memorijskih lokacija (27), od adrese 00 do 7F (heksadekadno). Kapacitet RAM-a sa slike 2.9 je 128 x 8 bita ili 128 bajtova. Odredimo adresni potprostor koji RAM sa slike 2.9 zauzima:
A15 0 0 0 0 :o 0 0 ; 0 0 0 0 0 u
l1 o 0
A14 A13 A12 A11 A10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0
0 0
0 0
0 0
A9 0 0 0 0 0 0 0 0 0 0 0 0
A8 0 0 0 0 0 0 0 0 0 0 0 0
kl 0 0 0 0 0 0 0 0 0 0 0 0
A6 0 0 0 0 0 0 0 0 0
0 0
0 0
0 0
1 1
A5 0 0 0 0 0 0 0 0 0
.
.
•
•
1 1
A4 0 0 0 0 0 0 0 0 0
A3 0 0 0 0 0 0 0 0 1
.
.
•
•
1 1
1 1
A2 0 0 0 0 1 1 1 1 0
.
•
1 1
A1 0 0 1 1 0 0 1 1 0
A0 0 1 0 1 0 1 0 1 0
Adresa 0000 0001 0002 0003 0004 0005 0006 0007 0008
. . •
•
1 1
0 1
007E 007F
54
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
Adresni potprostor koji zauzima RAM dio je veličine od samo 128 adresa od ukupnog adresnog prostora od 64 K i definiran je adresama: 0000 - 007F. Budući da sedam najmanje značajnih adresnih linija (A0 - A6) koje se dovode na priključke čipa označene s A0 - A6 ne utječu na izbor RAM-a, već samo na izbor riječi u RAM-u (uz uvjet da su adresne linije A7 - A15 poprimile odgovarajuće vrijednosti), onda se obično adresa sklopa prikazuje u obliku: A15 A14 A13 A12 A l i 0
0
0
0
0
A10 0
0
A9
A8
A7
A6
A5
0
0
X
X
X
A4 X
A3 X
A2 X
A1 X
A0 ,
gdje X označava bilo 0 bilo 1 (X se tumači kao "nije važno"; engl. don'tcare). Primjer 2.3. Odredimo adresni potprostor u kojem se pojavljuje ulazno-izlazna jedinica ACIA. Priključci čipa ACIA koji su u vezi s njezinim adresiranjem jesu (slika 2.10): • RS (Register Select) - priključak za izbor registra u ACIA. Samo na temelju RS-a možemo zaključiti da se ACIA javlja procesoru kao sklop koji ima dva registra (jedan kad je RS = 0 i drugi kad je RS = 1), • CS0 (Chip Select) - priključak za izbor čipa (ima istu funkciju kao priključak E u prethodnom primjeru), • CS1 (Chip Select) - priključak za izbor čipa (ima istu funkciju kao priključak E u prethodnom primjeru), • CS2 (Chip Select) - priključak za izbor čipa (ima istu funkciju kao priključak £ u prethodnom primjeru). RS DB0 - DB7
CSO CS1
AC IIA
ČS2
E
D0-D7
02
IRQ R/W Tx
Rx
CT5
DCD
R/W
RTS
SI. 2.10 Detalj priključenja ulazno-izlazne jedinice ACIA
Uvjet da bude čip ACIA izabran je sljedeći: istodobno moraju biti CS0 = 1 (na CS0 se dovodi adresna linija A3), CS1 = 1 (naCSI se dovodi logičko I: A14 • VMA). Signal VMA (Valid Memory Address) upravljački je signal koji generira procesor i označava daje adresa koja se trenutno nalazi na adresnoj sabirnici valjana, i konačno, CS2 = 0 (na CS2 se dovodi logičko ILI: A1 + A 2 + A4 + A5 + A6 + A7 + A 8 +A9 +A10 +A11 + A12 + A13 + A15). Adresnom linijom A0 koja se dovodi na priključak RS izabire se jedan od dva registara u ACIA.
S. RIBARIĆ - GRAĐA RAČUNALA
55
Na temelju navedenih uvjeta možemo odrediti adresni potprostor koji zauzima ACIA:
A15 A14 A13 A12 A11 A10 A9 0 0
1
0 1
0
A8
A7
A6
A5
A4
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
A3
A2 0
0
0
A1 AO Adresa 0
0
4008
1
4009.
Dakle ACIA se javlja procesoru na dvjema sljednim adresama: 4008 i 4009 (heksadekadno), odnosno adresu ACIA možemo prikazati i kao: A15 A14 A13 A12 A l i A10 A9 A8 A7 A6 A5 A4 0 1 0 0 0 0 0 0 0 0 0 0 1
A3 0
A2 0
A1
A0 X,
gdje X označava 0 ili 1.
2.4. VON NEUMANNOVO RAČUNALO - RAČUNALO SISD Računala temeljena na von Neumannovom modelu razvrstavamo, u skladu s Flynnovom klasifikacijom, u SISD (Single Instruction Stream Single Data Stream) - arhitekturu računala s jednim instrukcijskim tokom i jednim tokom podataka. Zaista, ako pažljivo promotrimo sliku 2.2 vidimo da model ima samo jedan tok podataka i samo jedan instrukcijski tok. Pritom oba izviru iz memorijske jedinice, a "susreću" se u aritmetičko-logičkoj jedinici. Štoviše, fizička realizacija putova za prijenos podataka i instrukcija je takva da se isti put (sabirnica podataka) koristi za oba toka. To ima za posljedicu da istodobno na tom putu ne mogu postojati i jedan i drugi tok pa je obrada strogo slijedna (sekvencijalna). Nadalje, ako analiziramo aktivnosti tijekom instrukcijskog ciklusa (faze PRIBAVI i IZVRŠI), možemo utvrditi da je posebno intenzivan promet i instrukcija i podataka između procesora i memorijske jedinice: Tijekom faze PRIBAVI procesor obavezno jednom ili više puta uzastopce pristupa memorijskoj jedinici pribavljajući strojnu instrukciju. Tijekom faze IZVRŠI, ovisno o vrsti operacije koju treba izvesti, procesor također za većinu operacija pristupa memorijskoj jedinici da bi dohvatio operande ili pak pohranio rezultat. Pojednostavljeno, model von Neumanovog računala mogao bi se predočiti slikom 2.11. Vidimo daje na toj razini apstrakcije računalo prikazano samo procesorom, memorijskom jedinicom i spojnim putom između njih. Promet se podataka (u širem značenju te riječi jer su i strojne instrukcije svedene na binarni kod) odvija spojnim putem, a brzina obrade očito ovisi o njegovoj propusnosti. Nažalost, propusnost spojnog puta takva je da se samo jedan podatak ili samo jedna strojna instrukcija mogu u vremenu prenijeti između procesora i memorijske jedinice. J. Backus, jedan od autora programskog jezika FORTRAN, u kritici von Neumannovog modela računala nazvao je taj spojni put "von Neumannovim uskim grlom" Bacus tvrdi da mora postojati"... manje primitivan način..."ostvarivanja obrade podatka negoli je to "pumpanje" ogromne količine podataka naprijed-natrag kroz taj spojni put.
56
2. POGLAVLJE: VON NEUMANNOV MODEL RAČUNALA
"von Neumannovo usko grlo"
SI. 2.11 Pojednostavnjeni model von Neumannovog računala
U knjizi ćemo se susresti s procesorima i računalima koji se temelje na von Neumannovim zamislima arhitekture, ali koji upotrebljavaju paralelizam na različitim razinama i predstavljaju otklon u odnosu na izvorni von Neumannov koncept. Jedan od otklona je i harvardska arhitektura računala (nazvana po mjestu Harvard i zamisli koju je koristilo računalo Mark I) u kojoj se razlikuju memorijska jedinica za pohranu podataka i memorijska jedinica za pohranu instrukcija.
2.5. USPOREDBA TURINGOVOG STROJA I VON NEUMANNOVOG MODELA RAČUNALA U prvom smo se poglavlju detaljnije upoznali sTuringovim strojem (TS), a u ovom smo poglavlju podrobnije opisali računalo temeljeno na von Neumannovom modelu. Usprkos tomu što je TS apstraktni izvršitelj i nije poslužio kao model u oblikovanju stvarnih računskih strojeva, zanimljivo gaje usporediti s von Nemannovim modelom računala. Memorijska jedinica TS-a, nazvana vanjska memorija, s lijeva je i s desna neograničena vrpca podijeljena na polja u kojima se pohranjuje po jedan simbol iz vanjske abecede. Neograničenost vrpce tumačimo tako što po potrebi možemo vrpci dodavati proizvoljan broj polja s lijeve ili desne strane. Pristup se podacima pohranjenim na vrpci ostvaruje R/W glavom. Pristup podacima je sekvencijalan - vrijeme, odnosno broj taktova potreban za dohvat podatka ovisi o trenutnom položaju R/W glave i položaju polja u kojem se nalazi željeni podatak. R/W glava tijekom jednog takta može se pomaknuti samo za jedno polje (ulijevo ili udesno) u odnosu na njezin trenutni položaj. Poljima na vrpci nisu dodijeljene adrese, već se podacima pristupa na temelju položaja R/W glave. Stroj ima posebne naredbe za pomak glave (N, L, D). Osim vanjske memorije, TS ima i dvije jednostavne unutarnje memorije za pohranu stanja stroja i naredbe za pomak R/W glave. U vanjskoj memoriji pohranjuju se početni podaci, međurezultati i konačan rezultat. Program se ne pohranjuje u vanjskoj memoriji. S obzirom na to da je riječ o apstraktnom izvršitelju, nema ograničenja u obliku i načinu prikaza podataka.
S. RIBARIČ - GRAĐA RAČUNALA
57
Rad TS-a odvija se u taktovima kojima su definirani diskretni vremenski trenuci i u kojima TS mijenja svoje stanje. Rad stroja zamišljen je tako da se tijekom svakog takta dva pristupa vrpci: čita se simbol upisan u polju nad kojim se nalazi R/W glava, upisuje se (novi) simbol u promatrano polje. Memorijska jedinica von Neumannovog modela računala je memorija ograničenog kapaciteta sastavljena od konačnog broja memorijskih lokacija. Svakoj je memorijskoj lokaciji jednoznačno pridružena adresa. Pristup podacima je izravan - temelji se na adresi memorijske lokacije pri čemu vrijeme pristupa ne ovisi o mjestu gdje je podatak pohranjen. U memorijskoj se jedinici pohranjuju početni podaci, međurezultati, rezultati i programi u istom obliku - sljedova nula i jedinica. Rad se računala odvija također u taktovima - diskretnim vremenskim trenucima koji su definirani signalom vremenskog vođenja.Tijekom instrukcijskog ciklusa procesor pristupa jednom ili više puta memorijskoj jedinici radi pribavljanja strojne instrukcije (faza PRIBAVI) te nijednom, jednom ili više puta tijekom faze IZVRŠI (broj pristupa memorijskoj jedinici ovisi o operaciji koja je određena operacijskim kodom strojne instrukcije). Obrada informacije u TS-u odvija se u logičkom bloku stroja L u kojem je realizirana logička funkcija stroja 6 : S x Q - ^ S x P x Q . Obrada podataka u von Neu man novom računalu odvija se u aritmetičko-logičkoj jedinici. Program za TS, odnosno algoritam obrade predstavlja realizaciju logičke funkcije stroja 6 koja je u obliku funkcionalne sheme Turingovog stroja pohranjena u logičkom bloku stroja L Algoritam obrade u von Neumannovom računalu predočen je programom koji se sastoji od slijeda strojnih instrukcija. Program je pohranjen u memorijskoj jedinici u kojoj su pohranjeni i podaci. Vanjska memorija TS-a ima ulogu i ulazno-izlazne jedinice, dok von Neu ma novo računalo ima posebnu ulazno-izlaznu jedinicu. Postoji sličnost između vanjske memorije TS-a kao prikazne jedinice i memorijske jedinice IAS računala koja je realizirana elektronskim cijevima Selectron. U tom se slučaju memorijska jedinica računala može promatrati i kao izlazna grafička jedinica.
S. RIBARIČ - GRAĐA RAČUNALA
59
3. POGLAVLJE
POJEDNOSTAVLJENI MODELI CISC I RISC PROCESORA 3.1. UVOD Procesor smo pojednostavljeno opisali kao objedinjenje dviju funkcijskih jedinica: upravljačke i aritmetičko-logičke jedinice. Današnji su procesori realizirani u tehnologiji vrlo visokog stupnja integracije VLSI i ostvareni su na komadiću silicija približne veličine poštanske marke te se obično nazivaju mikroprocesori (prefiks mikro treba nas asocirati na mikroelektroniku). Tehnologija vrlo visokog stupnja integracije omogućuje ostvarivanje procesora koji imaju brojne i vrlo složene sklopove. Na primjer, mikroprocesor Intel Pentium 4 (2001. godina) na komadiću silicija površine 217 mm 2 (približnih dimenzija: 14.7 mm x 14.7 mm) ima 42.000.000 tranzistora, višejezgreni procesor POWER7 ostvaren je na čipu površine 567 mm2 i ima 1,2 milijarde tranzistora! Prefiks mikro u daljnjem ćemo tekstu knjige zanemariti jer se podrazumijeva da su procesori ostvareni u tehnologiji visokog stupnja integracije. Razumijevanje rada procesora, poznavanje osnovnih funkcija upravljačke jedinice, funkcije pojedinih registara i sklopova aritmetičko-logičke jedinice, poznavanje stanja na internim sabirnicama procesora (ali i vanjskim sabirnicama: sabirnici podataka, upravljačkoj i adresnoj sabirnici) jedan je od osnovnih preduvjeta uspješnog oblikovanja i kvalitetnog održavanja računarskih sustava opće namjene ili ugrađenih računalnih sustava. U ovom ćemo poglavlju opisati dva modela procesora: jedan 8-bitni procesor sa značajkama CISC (Complex Instruction Set Computer) arhitekture i jedan 32-bitni procesor sa značajkama RISC (Reduced Instruction Set Computer). Naravno, usput ćemo istaknuti i pojasniti neke arhitektonske značajke svojstvene CISC i RISC procesorima.
3.2. POJEDNOSTAVLJENI MODEL CISC PROCESORA Model 8-bitnog CISC procesora prikazanje na slici 3.1. Prije negoli se upustimo u podrobni opis pojedinih sastavnica modela, odgovorimo na pitanje: Na temelju kojih se značajki procesori klasificiraju kao 8-, 16-, 32- ili 64-bitni? Obično se promatraju sljedeće arhitektonske značajke: duljina registara podataka (broj bitova), širina interne sabirnice - spojnog puta u procesoru i duljina podataka (operanada) kojima se izravno koriste sklopovi u aritmetičko-
60
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
logičkoj jedinici. Na primjer, ako su registri podataka koji se rabe za pohranjivanje operanada i rezultata 8-bitni, ako je širina interne sabirnice 8-bitna i ako su sklopovi aritmetičkologičke jedinice 8-bitni, onda se procesor jednoznačno može klasificirati kao 8-bitni. No ponekad nije tako jednostavno, procesor može imati 32-bitne registre podataka, 16-bitnu internu sabirnicu i dvije 16-bitne aritmetičko-logičke jedinice koje se mogu promatrati i kao jedna 32-bitna jedinica. U takvom se slučaju teško može govoriti jednoznačno o npr. 16-bitnom ili 32-bitnom procesoru. Obično se tada priklanjamo klasifikaciji proizvođača, ali uz to vrlo često rabimo i izraz kao što je pseudo 16-bitni ili pseudo 32-bitni procesor.
signal vremenskog vođenja
SI. 3.1 Model 8-bitnog CISC procesora
Model procesora (slika 3.1) ima 8-bitni registar podataka AC koji se naziva akumulator: On ima jednaku funkciju kao i 40-bitni akumulator u von Neumannovom IAS računalu: upotrebljava se za privremeno pohranjivanje jednog od operanada koji sudjeluje u aritmetičkoj ili logičkoj operaciji. Osim toga, akumulator AC služi kao odredište rezultata izvedene aritmetičke ili logičke operacije (registar je dobio naziv akumulator zato što se kod ponavljajućih postupaka računanja u njemu "akumulira" rezultat). U skladu s von Neumannovim modelom računala, akumulator AC sudjeluje i u ulaznim i izlaznim operacijama, odnosno izmjeni podataka između računala i vanjskog svijeta. U tom slučaju akumulator AC ima ulogu "odskočne daske": svaki ulazni podatak na svom putu iz ulazno-izlazne jedince mora biti privremeno pohranjen u akumulatoru AC, a zatim premješten u memorijsku jedinicu i obratno, svaki izlazni podatak mora biti, na svom putu od memorijske jedinice prema ulazno-izlaznoj jedinici, privremeno pohranjen u akumulatoru AC. Naravno, ovo ne vrijedi ako se prijenos ostvaruje izravnim pristupom memoriji DMA (vidi poglavlje 2.).
S. RIBARIČ - GRAĐA RAČUNALA
61
Sastavnica modela je i 8-bitni privremeni registar 77? koji je povezan s jednim od dva ulaza u aritmetičko-logičku jedinicu i služi za privremeno pohranjivanje jednog od podataka koji sudjeluje u aritmetičkoj ili logičkoj operaciji. 8-bitna aritmetičko-logička jedinica (ALU - Aritmetic Logic Unit) izvršava osnovne aritmetičke i logičke operacije s jednim (unarne) ili s dva operanda (binarne operacije) kao što su: inkrementiranje (povećavanje za jedan), posmak operanda, pretvorba u jedinični ili potpuni komplement, zbrajanje, oduzimanje te logičke operacije I, ILI i ISKLJUČIVO ILI. Registar SR- statusni registar (često se naziva i registar uvjeta) povezan je s ALU i sastoji se od bistabila koji se nazivaju dojavni bista bili ili zastavice (engl. flag). Prema funkciji, one se mogu razvrstati na: i) zastavice za indikaciju stanja koja su nastala kao posljedica izvođenja neke aritmetičke ili logičke operacije, ii) zastavice za indikaciju glavnih stanja procesora, iii) zastavice za rukovanje prekidom i označavanje prekidnih razina. Zastavice se iz skupine i) automatski postavljaju (poprimaju vrijednost 1) ili brišu (poprimaju vrijednost 0) ovisno o rezultatu aritmetičkih i logičkih operacija. Zastavice iz skupine i) promatraju se kao pojedinačni bistabiii i obično imaju jednoslovčane oznake: C, H, N, Z, V, gdje je C (engl. Carry) - zastavica prijenosa koja pokazuje da se dogodio prijenos iz najznačajnijeg bita rezultata, H (engl. Half Carry) - zastavica polovičnog prijenosa - prijenosa iz bitovne pozicije b3 u b4, N (engl. Negative) - zastavica predznaka, Z (engl. Zero) - zastavica nule, V (engl. Overflow) - zastavica preljeva. Podrobnije ćemo zastavice iz skupine i) opisati kada bude riječi o aritmetičko-logičkoj jedinici. Za sada navedimo samo da strojne instrukcije uvjetnog grananja obično koriste zastavice iz skupine i). O zastavicama iz skupine ii) i iii) bit će riječi u poglavljima koja se odnose na obradu prekida i iznimaka, odnosno na načine prijenosa upravljanja sjedne programske strukture na drugu. Primjer 3.1. Jedan od bistabila SR registra - zastavica s oznakom Z (od engl. Zero - nula) automatski će se postaviti u logičko"! "(kažemo da je zastavica "postavljena" ili da je u jedinici) ako je rezultat aritmetičke ili logičke operacije takav da su svi bitovi rezultata jednaki 0. Strojna instrukcija uvjetnog grananja brzr (Branch if Zero - granaj ako nula) ispituje stanje zastavice Z i ako je Z = 1 obavit će se grananje u programu (izvođenje programa uputit će se na ciljnu instrukciju koja neposredno ne slijedi instrukciji brzr). Sastavnica pojednostavljenog modela procesora jest i upravljačka jedinica. Ona se sastoji od sklopova za dekodiranje strojnih instrukcija i sklopova koji generiraju sljedove upravljačkih signala u skladu s tumačenjem operacijskog koda instrukcije. Ti signali upravljaju prijenosom podataka između registara, između registra i sklopova aritmetičko-logičke jedinice, aktiviraju sklopove za izvršavanje aritmetičkih ili logičkih operacija ili izazivaju inkrementiranje sadržaja programskog brojila i si. Upravljački signali određuju i smjer prijenosa podataka između procesora i memorijske jedinice (upravljački signal Čitaj, Piši, odnosno R/W; R - read, W - write) ili između procesora i u lažno-izlazne jedinice. Sve se te operacije sinkroniziraju signalom vremenskog vođenja <> j (engl. clock) (slika 3.1). Upravljački signali koji su potrebni ostalim funkcijskim jedinicama računala (memoriji i ulazno-izlaznim jedinicama) prenose se signalnim linijama koje formiraju upravljačku sabirnicu računala.
62
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC1RISC PROCESORA
Model procesora koristi tzv. jednofazni signal vremenskog vođenja. Pretpostavit ćemo da je frekvencija signala vremenskog vođenja 1MHz, odnosno perioda mu je l^is (IO 6 s). Slika 3.2 prikazuje signal vremenskog vođenja (|>. Ponovimo još jednom, događaji u procesoru i drugim funkcijskim jedinicama računala odvijaju se u točno utvrđenim diskretnim trenucima.
SI. 3.2 Signal vremenskog vođenja (engl. clock) <(> (perioda 1 [is)
Sastavni dijelovi pridruženi upravljačkoj jedinici su i 16-bitni registar nazvan programsko brojilo PC (engl. Program Counter), 8-bitni instrukcijski registar IR (engl. Instruction Register) te 16-bitni registar brojilo podataka DC (engl. Data Counter). Funkcije pojedinih registara su sljedeće: Programsko brojilo PC sadržava adresu sljedeće strojne instrukcije - one koja će biti pribavljena u sljedećem instrukcijskom ciklusu. (Opaska: u nekim procesorima registar koji ima funkciju programskog brojila ima oznaku IP (engl. Instruction Pointer) - kazaljka na instrukciju.) Instrukcijski registar IR sadržava strojnu instrukciju čije je izvođenje upravo u tijeku, odnosno u našem će modelu procesora instrukcijski registar IR sadržavati 8-bitni operacijski kod strojne instrukcije u tijeku. 16-bitno brojilo podataka DC sadržava adresu memorijske lokacije na kojoj se nalazi operand ili na koju se treba pohraniti rezultat operacije. Interna sabirnica širine 8 bita predstavlja komunikacijski put za sve sastavnice modela i omogućuje prijenos podataka između pojedinih registara podataka i upravljačkih registara, aritmetičko-logičke jedinice i upravljačke jedinice. Interna sabirnica kao skup linija vodiča izvedena je na samom procesorskom čipu. Sa internom su sabirnicom povezana i dva registra: 16-bitni memorijski adresni registar MAR (engl. Memory Address Register) koji predstavlja "izvor" za vanjsku adresnu sabirnicu (ABO - AB15) te 8-bitni memorijski registar podataka MDR (engl. Memory Data Register) koji predstavlja izvor i ponor dvosmjerne vanjske sabirnice podataka (DBO - DB7). Registri MAR i MDR predstavljaju sučelje procesora s ostalim funkcijskim jedinicama računala. Izraz "vanjska sabirnica" odnosi se na sabirnicu računala (vidi poglavlje 2.). (Opaska: često se memorijski adresni registar MAR naziva i adresni međuspremnik (engl. address buffer), a memorijski registar podataka MDR naziva se još i međuspremnik podataka (engl. data buffer)). Strojna se instrukcija u procesoru izvršava u dvije faze: PRIBAVI i IZVRŠI (vidi poglavlje 2.). Procesor tijekom faze PRIBAVI postavlja sadržaj programskog brojila PC na adresnu sabirnicu ABO - AB15 tako da se manje značajan bajt (PCO - PC7) i značajniji bajt (PC8 - PC15) programskog brojila slijedno prenose preko 8-bitne interne sabirnice procesora u 16-bitni memorijski adresni registar MAR. Upisom 16-bitnog sadržaja u memorijski adresni registar MAR on (sadržaj) se pojavljuje na adresnoj sabirnici ABO - AB15. Ujedno, upravljački sklo-
S. RIBARIČ - GRAĐA RAČUNALA
63
povi generiraju upravljački signal Čitaj i šalju ga na upravljačku sabirnicu računala (upravljačka linija Čitaj). (Opaska: stvarni procesori, za razliku od našeg modela procesora, imaju obično umjesto izdvojenih upravljačkih linija Čitaj i Piši jednu upravljačku liniju R/W, pri čemu R/W= 1 odgovara signalu Čitaj, a R/ W= 0 znači Piši). Memorijska jedinica, koja je priključena na vanjsku sabirnicu, "osluškuje" adresnu sabirnicu i dekodira postavljenu adresu (adresu koja je prisutna na adresnoj sabirnici) da bi se omogućio pristup do odgovarajuće memorijske lokacije. Za nekoliko stotina nanosekundi, npr. 400 ns - što odgovara vremenu pristupa memoriji, sadržaj izabrane memorijske lokacije bit će pročitan i pojavit će se na vanjskoj sabirnici podataka DBO - DB7. Taj se podatak preko memorijskog registra podataka MDR i preko interne sabirnice procesora usmjerava i zatim pohranjuje u 8-bitnom instrukcijskom registru IR. Pohranjeni se podatak u registru IR tumači kao operacijski kod instrukcije. Ovoj cijeloj priči odgovara zapis: M(PC) IR (vidi 1. korak faze PRIBAVI, poglavlje 2.). Interni sklopovi procesora povećavaju sadržaj programskog brojila PC za 1; (PC + 1 -•PC). 8-bitna riječ (bajt) koja je smještena u instrukcijskom registru IR sadržava operacijski kod strojne instrukcije. No strojne se instrukcije većinom sastoje od dva ili više bajtova. Dekoder u upravljačkoj jedinici dekodira operacijski kod instrukcije te na temelju njega dobiva dvije važne stvari: informaciju koja se operacija tijekom faze IZVRŠI mora izvršiti i informaciju o duljini strojne instrukcije, tj. od koliko se bajtova sastoji instrukcija. Ako je upravljačka jedinica na temelju operacijskog koda utvrdila da se strojna instrukcija sastoji samo od jednog bajta (daje riječ o instrukciji koja u operacijskom kodu sadržava i informaciju o izvoru operanda i odredištu rezultata, npr. strojna instrukcija COMA - komplementiraj sadržaj akumulatora AC ima izvorište operanda u akumulatoru AC i rezultat (jedinični komplement akumulatora AC) pohranjuje u akumulator AC), tada upravljačka jedinica prelazi u fazu IZVRŠI. Ako je, pak, upravljačka jedinica na temelju operacijskog koda utvrdila da se instrukcija sastoji od dvaju ili više bajtova, faza PRIBAVI se nastavlja: sadržaj programskog brojila PC smješta se kao i u prethodnom ciklusu faze PRIBAVI, na adresnu sabirnicu, upravljačka jedinica generira upravljački signal Čitaj. Bajt dohvaćen iz specificirane memorijske lokacije se sabirnicom podataka DBO - DB7 preko registra MDR i interne sabirnice prenosi u brojilo podataka DC. Sadržaj programskog brojila PC ponovo se povećava za 1. Ako ni sada nije pribavljena kompletna instrukcijska riječ, faza PRIBAVI nastavlja se i izvode se prethodno opisane aktivnosti. Na kraju faze PRIBAVI, kada su konačno pribavljeni svi bajtovi od kojih se sastoji strojna instrukcija, programsko brojilo PC mora sadržavati adresu sljedeće strojne instrukcije. Upravljačka jedinica prelazi u fazu IZVRŠI. Tijekom faze IZVRŠI upravljačka jedinica, u skladu s tumačenjem operacijskog koda, generira sljedove upravljačkih signala koji pobuđuju sklopove u aritmetičko-logičkoj jedinici, prijenose između registara, prijenos podataka između procesora i memorijske jedinice ili procesora i ulazno-izlazne jedinice. Nakon što su obavljene sve zahtijevane aktivnosti potrebne za izvršenje operacije specificirane operacijskim kodom, upravljačka jedinica prelazi u fazu PRIBAVI i kreće u pribavljanje sljedeće strojne instrukcije. Slika 3.3 prikazuje dijagram toka aktivnosti tijekom instrukcija skog ciklusa.
64
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
SI. 3.3 Dijagram toka instrukcijskog ciklusa
3.3. PRIMJER IZVOĐENJA PROGRAMA Na primjeru izvođenja jednostavnog programa za naš model prikazat ćemo kako djeluje procesor. Pretpostavimo da se program sastoji samo od jedne strojne instrukcije: INC $05FF. Instrukcija INC $05FF, zapisana u skladu s pravilima za zbirni jezik, tumači se kao: inkrementiraj sadržaj memorijske lokacije čija je adresa 05FF (heksadekadno), odnosno 0000 0101 1111 1111 (binarno). Operacijski kod instrukcije INC je 7C (heksadekadno), odnosno 0111 1100 (binarno). Simbol $ upotrebljava se kao znak asembleru (prevodiocu za zbirni jezik) da slijede oznake zapisane heksadekadno. Podsjetimo se, u Primjeru 1.6. napisali smo program za Turingov stroj koji također inkrementira binarni broj zapisan na vrpci stroja. U memoriji računala, na slijednim memorijskim lokacijama s adresama 0100, 0101, 0102, ... pohranjen je program. Slika 3.4 prikazuje program (adrese i sadržaj memorijskih lokacija zapisani su heksadekadno samo radi jednostavnijeg zapisa), uz to je prikazan i sadržaj memorijske lokacije 05FF koji je 23 (heksadekadno). Podatak na memorijskoj lokaciji 05FF imat će ulogu operanda. Vidimo da se strojna instrukcija sastoji od tri bajta koja su slijedno pohranjena u memoriji.
S. RIBARIČ - GRAĐA RAČUNALA
adresa
sadržaj
0100
7C
0101
05
0102
FF
65
INC $05FF inkrementiraj sadržaj memorijske lokacije s adresom 05FF
05FE 05FF
23
0600 SI. 3.4 Prikaz programa i podataka u memorijskoj jedinici računala
Primjećujemo, duljina memorijske riječi je jedan bajt (osam bita) i svakoj je memorijskoj lokaciji jednoznačno pridružena adresa. Za takvu organizaciju memorijske jedinice kažemo da ima bajtnu adresnu zrnatost Slika 3.5 prikazuje početni uvjet - sadržaje registara procesora neposredno prije započinjanja programa. Uvjet je samo jedan - sadržaj programskog brojila PC mora sadržavati adresu prve strojne instrukcije našeg programa. To znači: (PC) = 0100. Početni sadržaji drugih registara procesora nisu važni. AC
DC
15
PC
15
0100
T
i
upravljački Signal
upravljački signal
upravljački signal
i n t e r n a sabirnica
0
TR
IR
upravljački signal
upravlj. signal
upravljački signal
DB7 dekoder SR O t u s n i registar Registar uvjeta)
I
upravljački ^signal
15
a r i t m e t i č k o - l o g i č ka
DB0
sabirnica podataka
• AB0
AB15 adresna sabirnica
jedinica (ALU) upravljački signal
upravljački signali upravljački sklop
Čitaj upravljačka sabirnica Piši
upravljačka jedinica
0 signal vremenskog vođenja
SI. 3.5 Početni uvjet - sadržaji registara procesora neposredno prije upuštanja u rad (startanja)
66
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
Prije negoli se upustimo u tumačenje izvođenja samog programa, objasnimo kako je u memoriji računala unesen program i kako je početna adresa programa smještena u programsko brojilo PC. Najjednostavnije je objašnjenje, za sada, da računalni sustav ima vrlo jednostavnu jezgru operacijskog sustava koja se naziva monitor i koja podržava jednostavan unos podataka u memoriju preko heksadekadne tipkovnice, definiranja početne adrese programa (unos u PC) te upuštanje u rad (startanje) programa s početne adrese. Procesor se, odnosno njegova upravljačka jedinica, nakon upuštanja u rad nalazi u fazi PRIBAVI. Sadržaj se programskog brojila PC preko interne sabirnice i memorijskog adresnog registra MAR postavlja na vanjsku adresnu sabirnicu i upravljačka jedinica generira upravljački signal Čitaj. Pribavlja se 8-bitna riječ (7C) s memorijske lokacije čija je adresa 0100 (heksadekadno). Ona se preko sabirnice podataka šalje procesoru. Istodobno se sadržaj programskog brojila PC povećava za 1. Pribavljeni bajt - operacijski kod - smješta se u instrukcijski registar IR (procesor je u fazi PRIBAVI). Slika 3.6 prikazuje stanje procesora nakon pribavljanja prvog bajta instrukcije.
SI. 3.6 Stanje registara nakon pribavljanja operacijskog koda strojne instrukcije
Stanje registara neposredno nakon pribavljanja operacijskog koda instrukcije možemo zapisati na sljedeći način (slika 3.6): • sadržaj programskog brojila: (PC) = 0101, • sadržaj instrukcijskog registra (IR) = 7C, • sadržaj memorijskog registra podataka (MDR) = 7C, • sadržaj memorijskog adresnog registra (MAR) = 0100, • sadržaji ostalih registara ostali su nepromijenjeni.
S. RIBARIČ - GRAĐA RAČUNALA
67
Sadržaj se instrukcijskog registra (IR) 0111 1100 (binarno) dekodira i tumači kao: Povećaj za 1 vrijednost operanda čija je adresa sadržana u dva bajta koja slijede ovom operacijskom kodu. Možemo primijetiti da se zaista u operacijskom kodu nalazi informacija o operaciji koja se treba izvršiti, ali i važna informacija od koliko se 8-bitnih riječi (bajtova) sastoji kompletna strojna instrukcija.Točnije, u operacijskom se kodu nalazi informacija o načinu adresiranja. Naime,... čija je adresa sadržana u dva bajta koja slijede ovom operacijskom kodu govori nam da instrukcija koristi izravni način adresiranja koji je karakterističan po tome što preostala dva bajta instrukcijske riječi predstavljaju izravnu (direktnu) adresu memorijske lokacije na kojoj se nalazi operand. Sve se ove aktivnosti događaju tijekom jedne periode signala vremenskog vođenja. Upravljačka jedinica na temelju informacije dobivene dekodiranjem operacijskog koda instrukcije "zna" da strojna instrukcija nije u potpunosti pribavljena - nedostaju još dvije manje značajne 8-bitne riječi koje čine strojnu instrukciju. Upravljačka jedinica ostaje u fazi PRIBAVI i u sljedećoj periodi signala vremenskog vođenja pribavlja sljedeći, tj. drugi bajt strojne instrukcije, i to tako da: sadržaj programskog brojila PC postavi na adresnu sabirnicu računala, generira upravljački signal Čitaj. Povećava se sadržaj programskog brojila PC za 1. Nakon isteka vremena pristupa memoriji s memorijske se lokacije 0101 (heksadekadno) dohvaća njezin sadržaj 05 (heksadekadno) te se preko sabirnice podataka prenosi procesoru i smješta u brojilo podataka DC i to u njegov značajniji dio (DC8 - DC15). Podsjetimo se, 05 je značajniji bajt adrese memorijske lokacije na kojoj se nalazi operand, a brojilo podataka DC sadržava adresu operanda. Neposredno, nakon pribavljanja značajnijeg bajta adrese operanda stanja registara procesora su: • • • •
programsko brojilo: (PC) = 0102, instrukcijski registar: (IR) = 7C, brojilo podataka: (DC) = 05 --, sadržaj memorijskog registra podataka (MDR) = 05 i
• sadržaj memorijskog adresnog registra (MAR) = 0101. Protekla je još jedna perioda signala vremenskog vođenja. Upravljačka jedinica ostaje u fazi PRIBAVI i pribavlja treći bajt instrukcijske riječi - manje značajan bajt adrese operanda FF: sadržaj programskog brojila PC postavlja se preko memorijskog adresnog registra MAR na adresnu sabirnicu, generira se upravljački signal Čitaj te se nakon isteka vremena pristupa memoriji na sabirnici podataka pojavljuje podatak FF (heksadekadno) koji predstavlja manje značajan bajt 16-bitne adrese. On će se smjestiti u manje značajan bajt registra brojila podataka DC. Naravno, tijekom i ove periode vremenskog vođenja sadržaj se programskog brojila PC povećava za jedan. Stanje registara neposredno nakon pribavljanja manje značajnog bajta adrese operanda je: • programsko brojilo: (PC) = 0103, • instrukcijski registar: (IR) = 7C, • brojilo podataka: (DC) = 05FF, • sadržaj memorijskog registra podataka (MDR) = FF, • sadržaj memorijskog adresnog registra (MAR) = 0102. Faza PRIBAVI za instrukciju INC $05FF završena je. Vidimo da je sadržaj programskog brojila PC 0103 (heksadekadno) i da pokazuje na sljedeću strojnu instrukciju (podsjetimo se,
68
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
program je niz slijednih strojnih instrukcija). Ocijenimo potrebno vrijeme za fazu PRIBAVI instrukcije INC $05FF: Za fazu PRIBAVI procesor je trebao tri periode signala vremenskog vođenja (za naš model procesora trebalo mu je 3|lis jer je perioda signala vremenskog vođenja 1 fx). Ako se na trenutak pretpostavi da 8-bitni instrukcijski registar IR i 16-bitni registar brojilo podataka DC tvore jedan 24-bitni registar, dobivamo situaciju prikazanu na slici 3.7. instrukcijski registar
| registar: brojilo podataka
01111100
00000101
11111111
7C
05
FF
IR
DC
format instrukcije:
operacijski kod
adresa operanda
SI. 3.7 Instrukcijska riječ sastavljena od 3 bajta
Vidimo sa slike 3.7 da je format strojne instrukcije jednak formatu instrukcije von Neumannovog računala. Strojna instrukcija sastoji se od 8-bitnog operacijskog koda i 16-bitnog adresnog polja. Adresno polje instrukcije u von Neumanovom računalu bilo je 12 bita. Kao što smo već spomenuli, za pribavljanje instrukcijske riječi našem 8-bitnom procesoru bile su potrebne tri periode signala vremenskog vođenja, dok bi procesoru s riječi duljine 24 bita i više taj isti postupak obavio u jednoj periodi signala vremenskog vođenja. Vratimo se nastavku izvođenja instrukcije INC$05FF. Nakon faze PRIBAVI upravljačka jedinica prelazi u fazu IZVRŠI. Ona se sastoji u dobavljanju operanda s memorijske lokacije 05FF. Tijekom četvrte periode signala vremenskog vođenja postavlja se sadržaj brojila podataka DC na adresnu sabirnicu i generira se upravljački signal Čitaj. Podatak s memorijske lokacije 05FF preko sabirnice podataka prenosi se u procesor. Upravljački signali usmjeravaju taj podatak preko interne sabirnice u 8-bitni privremeni registar TR koji se nalazi na ulazu u aritmetičko-logičku jedinicu. Naravno, dohvaćeni se podatak smatra podatkom-operandom jer je upravljačka jedinica u fazi IZVRŠI. Radoznali će se čitatelj upitati zašto se dohvaćeni podatak nije smjestio u akumulator AC kada je on prvenstveno namijenjen pohrani operanada. Odgovor je sljedeći: smještanje dohvaćenog podatka u akumulator AC "ruši" njegov prethodni sadržaj, a uz to instrukcija INC ne specificira sudjelovanje akumulatora AC u njezinom izvođenju. Važno je naglasiti da je akumulator AC sastavnica programskog modela procesora, dok privremeni registar TR to nije. Pojednostavljeno, programski model procesora čine sve sastavnice procesora koje su "vidljive" i dohvatljive programeru u strojnom ili zbirnom jeziku (poglavlje 5.). Stanje registara nakon dohvata operanda je sljedeće: • programsko brojilo: (PC) = 0103, • instrukcijski registar: (IR) = 7C, • brojilo podataka: (DC) = 05FF, • privremeni registar: (TR) = 23. Primjećujemo da se sadržaj programskog brojila PC nije promijenio - on i dalje pokazuje na adresu sljedeće instrukcije. Napomenimo, da se u načelu, sadržaj programskog brojila
S. RIBARIČ - GRAĐA RAČUNALA
69
PC tijekom faze IZVRŠI ne mijenja, osim kad se izvršavaju instrukcije grananja. Tijekom pete periode signala vremenskog vođenja, upravljačka jedinica aktivira sklop za inkrementiranje u aritmetičko-logičkoj jedinici te se izvodi operacija TR + 1 TR, odnosno povećava se za jedan vrijednost operanda 23, i nova se vrijednost (24) prenosi natrag u privremeni registar TR. Stanje registara nakon pete periode signala vremenskog vođenja je sljedeće: • • • •
programsko brojilo: (PC) = 0103, instrukcijski registar: (IR) = 7C, brojilo podataka: (DC) = 05FF, privremeni registar: (TR) = 24.
Uočavamo da je aktivnost u petoj periodi signala vremenskog vođenja interna aktivnost procesora - ne zahtijeva se komunikacija procesora s memorijskom niti s ulazno-izlaznom jedinicom. Budući da procesor tijekom te periode ne koristi sabirnicu računala (adresnu sabirnicu, sabirnicu podataka i upravljačku sabirnicu), on se električki odspaja od sabirnice tako da mu odgovarajuće signalne linije prelaze u stanje visoke impedancije. Na taj način sabirnica računala biva raspoloživa nekom drugom privremeno vodećem modulu, npr. DMA upravljačkom sklopu koji može ovu periodu iskoristiti za izravan prijenos podataka između memorije i ulazno-izlazne jedinice. Faza IZVRŠI još nije okončana. Za vrijeme šeste periode signala vremenskog vođenja mora se sadržaj brojila podataka DC 05FF, preko registra MAR, postaviti na adresnu sabirnicu, a rezultat (24) iz privremenog registra TR prenijeti preko interne sabirnice u memorijski registar podataka MDR i time na sabirnicu podataka i, još uz to, upravljačka jedinica mora generirati upravljački signal Piši. Nakon isteka vremena pristupa memoriji rezultat operacije inkrementiranja bit će pohranjen natrag na memorijsku lokaciju 05FF. Time je faza IZVRŠI okončana. Stanje registara procesora: • programsko brojilo: (PC) = 0103, • instrukcijski registar: (IR) = 7C, • brojilo podataka: (DC) = 05FF, • privremeni registar: (TR) = 24. Promijenjeni sadržaj memorijske lokacije 05FF je: • M(05FF) = 24. Upravljačka jedinica iz faze IZVRŠI prelazi u fazu PRIBAVI te se ponavlja postupak - pribavlja se prva riječ nove instrukcije s memorijske lokacije 0103. Na temelju potonje analize vidimo da relativno jednostavna instrukcija INC M, gdje je M 16-bitna adresa operanda zahtijeva 6 perioda signala vremenskog vođenja i daje tijekom njezina izvođenja promet između procesora i memorijske jedinice bio vrlo velik - od 6 perioda signala vremenskog vođenja, pet je utrošeno u komunikaciji procesora s memorijom (tri za pribavljanje strojne instrukcije (faza PRIBAVI), jedna za dohvat operanda (faza IZVRŠI) i još jedna za pohranu rezultata (faza IZVRŠI)). Što će se dogoditi ako za program pohranjen u memoriji (slika 3.4) promijenimo početni uvjet i postavimo početnu vrijednost programskog brojila PC na 05FF? U tom će slučaju tijekom faze pribavi procesor dohvatiti sadržaj memorijske lokacije 05FF, tj. 23 i smjestiti ga u instrukcijski registar IR. Dakle, 23 će biti operacijski kod instrukcije. Vidimo, daje 23, koji je
70
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
u slučaju početne vrijednosti programskog brojila (PC) = 0100, bio operand (podatak) sada postao dio instrukcije, odnosno operacijski kod instrukcije. Potvrdimo još jednom, ono što smo napisali u drugom poglavlju: Strojna instrukcija i podatak mogu se razlikovati jedino na temelju stanja upravljačke jedinice {je li u stanju pribavi ili u stanju izvrši).
3.4. STANJE NA VANJSKIM SABIRNICAMA Pri prikazu izvođenja "programa" koji se sastojao samo od jedne instrukcije ponašali smo se kao da imamo neku vrstu "magične lupe" pomoću koje smo mogli promatrati sadržaje registara procesora i pratiti izvođenje strojne instrukcije. U stvarnosti, nažalost, nemamo takvu "magičnu lupu" kojom bismo mogli prodrijeti u silicijski čip i u stvarnom vremenu pratiti promjene sadržaja tijekom izvođenja pojedinih instrukcija. U stvarnosti nam preostaje jedino promatrati stanja na vanjskim sabirnicama: sabirnici podataka, adresnoj sabirnici i upravljačkoj sabirnici. To možemo jer imamo fizički pristup sabirničkim linijama. Posebnim instrumentom - logičkim analizatorom priključujemo se njegovim ispitnim sondama na sabirničke linije i možemo promatrati i snimati njihova stanja. Naravno, moramo razumjeti i znati tumačiti ta stanja jer ona imaju posebnu važnost u razumijevanju rada procesora, ali i u dijagnostičkim postupcima pri otklanjanju grešaka u sustavu temeljenom na procesoru. Pokušajmo utvrditi i nacrtati stanja na vanjskim sabirnicama tijekom izvođenja strojne instrukcije INC $05FF. Zaključili smo da se ona izvodi u šest perioda signala vremenskog vođenja <(>. Sažetak aktivnosti tijekom tih šest perioda jest: Faza PRIBAVI: 1. perioda • na adresnu sabirnicu ABO - AB15 postavlja se sadržaj programskog brojila PC (ABO - AB15 = 0100 (heksadekadno)); • aktivira se upravljački signal Čitaj (Čitaj 1); • nakon isteka vremena pristupa memoriji na sabirnicu podataka postavlja se podatak - operacijski kod instrukcije (DB0 - DB7 = 7C (heksadekadno)); 2. perioda • na adresnu sabirnicu postavlja se sadržaj programskog brojila PC (pozor: tijekom 1. periode njegov se sadržaj povećao za 1) (ABO - AB15 = 0101 (heksadekadno)); • aktivira se upravljački signal Čitaj (Čitaj 1); • nakon isteka vremena pristupa memoriji na sabirnicu podataka postavlja se podatak - značajniji bajt adrese operanda (DB0 - DB7 = 05 (heksadekadno)); 3. perioda • na adresnu sabirnicu postavlja se sadržaj programskog brojila PC (pozor: tijekom 2. periode njegov se sadržaj povećao za 1) (ABO - AB15 = 0102 (heksadekadno)); • aktivira se upravljački signal Čitaj (Čitaj 1); • nakon isteka vremena pristupa memoriji na sabirnicu podataka postavlja se podatak - manje značajniji bajt adrese operanda (DB0 - DB7 = FF (heksadekadno)); Ovim se faza PRIBAVI završava i upravljačka jedinica prelazi u fazu IZVRŠI.
4. perioda • na adresnu sabirnicu postavlja se sadržaj brojila podataka DC (ABO - AB15 = 05FF (heksadekadno)); • aktivira se upravljački signal Čitaj (Čitaj 1); • nakon isteka vremena pristupa memoriji na sabirnicu podataka postavlja se 8-bitni podatak - operand (DBO - DB7 = 23 (heksadekadno)); 5. perioda • nema aktivnosti na vanjskim sabirnicama - procesor se električki odspaja od sabirnice - postavlja linije vanjske sabirnice u stanje visoke impedancije; 6. perioda • na adresnu sabirnicu postavlja se sadržaj brojila podataka DC (ABO - AB15 = 05FF (heksadekadno)); • na sabirnicu podataka postavlja se sadržaj privremenog registra TR (DBO - DB7 = 24 (heksadekadno)); • aktivira se upravljački signal Piši (Piši
1).
Sada možemo nacrtati stanje na adresnoj sabirnici ABO - AB15, sabirnici podataka DBO DB7 i upravljačkoj sabirnici (upravljačke linije Čitaj i Piši). Sve to ćemo promatrati u ritmu signala vremenskog vođenja . Budući da nam je signal vremenskog vođenja referentni signal, njega ćemo prvog nacrtati, a zatim slijedi stanje na adresnoj sabirnici, upravljačkoj sabirnici i konačno, sabirnici podataka. (Opaska: umjesto crtanja stanja na svim adresnim linijama ABO - AB15 uobičajeno je da se u tijekom periode signala vremenskog vođenja, simbolično prikaže da su neke adresne linije u logičkoj "0" a neke u logičkoj "1", a između tih se signala napiše heksadekadna vrijednost koja predstavlja adresu na sabirnici. Slično vrijedi i za sabirnicu podataka DBO - DB7.) Slika 3.8 prikazuje stanje na sabirnicama tijekom izvođenja instrukcije INC$05FR perioda
perioda #2
#1
o
•V-AB15 GtBj
perioda
perioda
/ \ / \ / \ ^
0100
/ \
^^
0101
^^
0102
\ / \
perioda
/ \
\ ^
05FF
\
)
*
*
D67
/ \ ,
tW
5FF
( ° )
*
t.
*
t T. *
№
perioda
*
\
th
w
• *
, ...
tw
vrijeme pristupa memoriji
faza pribavi (fetch)
faza izvrši (execute)
SI. 3.8 Vremenski dijagram stanja na sabirnicama za instrukciju INC$05FF
legenda: * * - stanje visoke impedancije
72
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
Primjer 3.2. Pretpostavimo da je strojna instrukcija koja slijedi instrukciji INC$Q5EF instrukcija LDA $07 te da njoj slijedi instrukcija СОМА. Slika 3.9 prikazuje sa^žajmemorije. Instrukcija LDA $07 određuje operaciju "punjenja" (ptnemonik LDA specificira operaciju Load - puni) akumulatora AC s podatkom koji se nalazi na memorijskoj lokaciji 0007(heksadekadno). Instrukcija LDA koristi adreslranje nulte memorijske stranice (raspon adresa od 0000 do 00FF) ili kako se još naziva izravno kratko adreslranje. Značajka ovog načina adresiranja je da je dovoljna adresna komponenta duljine samo jednog bajta. Podrazumijeva se da je značajniji bajt adrese 00 (heksadekadno). Dakle, adresa memorijske lokacije s koje će se dohvatiti podatak i smjestiti u akumulator AC je: 0007 (heksadekadno). adresa ^
sadržaj
0006 0007
A3
0008
00FF 0100
7C
0101
05
0102
FF
0103
96
0104
07
0105
43
0106
sljedeća inst.
INC $05FF
LDA $07 }
СОМА
SI. 3.9 Prikaz sadržaja dijela memorije za Primjer 3.2. Operacijski kod instrukcije LDA je 96 (heksadekadno), a instrukcija se sastoji od dva bajta: operacijskog koda i manje značajnog bajta adrese operanda (07). Instrukcija COMA pretvara početni sadržaj akumulatora AC u njegov jedinični komplement Instrukcija COMA ima operacijski kod 43 (heksadekadno) i duljine je samo jednog bajta. Ako pretpostavimo daje sadržaj memorijske lokacije 0007 A3: M(0007)=A3, tada posljedica izvođenja programskog odsječka: LDA $07 COMA je (AC) = 5C; u akumulatoru AC je pohranjen jedinični komplement operanda A3.
S. R1BARIĆ - GRAĐA RAČUNALA
73
Slika 3.10 prikazuje stanje na sabirnicama tijekom izvođenja gornjeg programskog odsječka. Vidimo i ovdje da tijekom faze I Z V R Š I instrukcija COMA ne koristi vanjsku sabirnicu te da se procesor električki odspaja od sabirnice. perioda #1
Ф
AB0-AB15
perioda #3
perioda #2
/ \ / \
1
\
perioda #4
perioda
/ \ / \ ./ \ .. p.
*
^
0103
^^
0104
^^
0007
perioda
^^
0105
#
^ 4
Čitaj
/ \
\
\ / \
p
* *
t p.
* *
Piši
t
wh
* *
DBO - DB7
•i") «•••'•
•
4 « )
t
w
—
vnjeme pristupa memoriji
wgenda: " * - stanje visoke impedancije
faza pribavi
faza izvrši
>4-
faza pribavi
faza izvrši
Si. 3.10 Vremenski dijagram stanja na sabirnicama {Primjer3.2.)
Ako analiziramo model procesora i primjer izvođenja instrukcija (INC $05FF, LDA $07, COMA), uočit ćemo da je procesor akumulatorsko orijentiran procesor, da su mu strojne instrukcije promjenjive duljine (jedan bajt, dva bajta ili tri bajta) te da vrijeme njihova izvođenja varira od dvije do šest perioda signala vremenskog vođenja - ovisno о složenosti strojne instrukcije. Osim toga, vidimo da pored instrukcije LDA i STA (engl. store - pohrani), procesor komunicira u fazi IZVRŠI s memorijom i instrukcijom INC koja je po svom značenju aritmetička. Ove nabrojene značajke u velikoj mjeri određuju arhitekturu CISC (Complex Instruction Set Computer) pa ćemo potpuno opravdano opisani model 8-bitnog procesora smatrati CISC modelom (bez obzira na njegovu jednostavnost). Upoznali smo se pojednostavljenim modelom procesora i analizirali izvođenje strojnih instrukcija, međutim, postavlja se pitanje koliko se model procesora razlikuje od modela stvarnih 8-bitnih procesora. U priručniku za 8-bitni mikroprocesor MC 6800 možemo naći sljedeće podatke koji se odnose na instrukciju INC (Tablica 3.1.) Način adresirana Instrukcija
inkrement
Izravni (engl. Direct Extended)
Mnemonik
operacijski kod (OP)
broj perioda H
broj bajtova
C7
6
3
INC
Oblica 3.1. Detalj iz priručnika za mikroprocesor M C 6800
(#)
74
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC I RISC PROCESORA
Iz tablice 3.1 vidimo da je broj perioda signala vremenskog vođenja potreban za izvođenje strojne instrukcije INC jednak broju perioda za naš model procesora. Duljina strojne instrukcije iznosi tri bajta kao i u našem modelu. Slika 3.11 prikazuje model mikroprocesora MC 6800. Vidimo da se model MC 6800 razlikuje samo u nekoliko detalja: • MC 6800 je također^laimulato*sko orijentiran procesor, ali ima dva akumulatora: A i B; • osim programskog registra PC,)MC 6800 ima 16-bitni registar SP (Stack Pointer) registar kazalo stoga i 16-bitni indeksni registar IX. sabirnica podataka DB0-DB7
međuspremnik podataka MDR
interna sabirnica
A
akumulator
В
(8)
akumulator
(8)
(8)
f
о
instrukcijski registar
(8)
IX indeksni registar (16)
PC
programsko brojilo
(16)
sklopovi za dekodiranje
ALU
SP kazalo stoga
(16)
registar zastavice (CCR) uvjeta
Л 7
Slika 3.11
^
sklopovi za vremensko vođenje i upravljački sklopovi
adresni međuspremnik MAR
signal vremenskog vođenja i upravljački signali
adresna sabirnica
(16)
AB0-AB15
Model mikroprocesora MC 6800 Funkciju registra kazala stoga SP upoznat ćemo u nastavku kada bude riječi o stogu. Indeksni se registar upotrebljava pri indeksnom načinu adresiranja, pri kojem se adresa (ili točnije adresna komponenta) u instrukcijskoj riječi i sadržaj indeksnog registra pribrajaju u cilju određivanja stvarne (efektivne) adrese operanda. Na primjer, ako je sadržaj 16-bitnog indeksnog registra (IX) = 0300 (heksadekadno), a instrukcija LDA koristi indeksni način adresiranja: LDA 2,X, pri čemu je, u skladu s asemblerom ,X oznaka indeksnog načina adresiranja, onda će sadržaj akumulatora biti napunjen sa sadržajem memorijske lokacije čija je adresa 0302 jer se ona dobiva kao 0300 + 2, pri čemu je 2 adresna komponenta sadržana u instrukciji LDA 2,X.
S. RIBARIČ - GRAĐA RAČUNALA
75
Indeksnom registru pridružene su strojne instrukcije poput LDX (napuni indeksni registar), STX (pohrani sadržaj indeksnog registra), INX (inkrementiraj sadržaj indeksnog registra) i D£X(dekrementiraj sadržaj indeksnog registra) kojima se olakšava pristup strukturama podataka koje su pohranjene u memoriji. Mikroprocesor MC 6800 koristi dvofazni signal vremenskog vođenja, odnosno signale l i 4>2 sadržaj p r o g r a m s k o g brojila PC povećava se za 1
sadržaj PC-a na adresnu sabirnicu
A
/
02
podaci se postavljaju na vanjsku sabirnicu podataka
podaci su prihvaćeni u procesoru ili memoriji
SI. 3.12 Dvofazni signal vremenskog vođenja
(slika 3.12). Signal
4 •1
"V®
•4
#2
#3
>4
"V©
•
"\n®
z
/ R/W
00-D7
/
\
l
\
\ d Z Z t adresa (značajniji bajt)
7
C
3
.........
adresa (manje značajniji bajt)
SI. 3.13 Vremenski dijagram stanja na sabirnicama za instrukciju STAA$010F (MC 6800)
\ = C Z > : . podatak iz akumulatora
76
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
Slika 3.13 prikazuje stanje na sabirnici računala koje se temelji na MC 6800 (na slici su označene vremenske međuzavisnosti signala c> j 1 i aktivnosti na adresnoj sabirnici, odnosno signala
memorijski registar podataka MDR (8)
interna sabirnica (8 bita)
akumulator (A)
instrukcijski registar
privremeni registar (TMP)
(8)
(8)
SZ
x/
sklopovi za dekodiranje
ALU
^
w
(8)
2
(8)
B
(8)
C
(8)
(8)
E
(8)
(8)
L
(8)
D H
kazalo stoga SP programsko brojilo PC
sklop za inkrementiranje/dekrementiranje
zastavice (8)
upravljački signali
N 7
^
^
sklopovi za vremensko vođenje i upravljački sklopovi
signal vremenskog vođenja i upravljački signali
SI. 3.14 Model mikroprocesora Intel 8080
memorijski adresni registar MAR ^
adresna sabirnica AB0-AB15
S. RIBARIČ - GRAĐA RAČUNALA
77
r
>
i
3.5. POJEDNOSTAVLJENI MODEL RISC PROCESORA Slika 3.15 prikazuje pojednostavljeni model 32-bitnog RISC procesora. Odmah možemo uočiti neke bitne arhitektonske značajke koje ga razlikuju od pojednostavljenog 8-bitnog CISC procesora: procesor je registarsko orijentiran stroj - ima 32 32-bitna registra opće namjene (RO - R31) i ima tri 32-bitne interne sabirnice - sabirnicu operanda A, sabirnicu operanda B i sabirnicu rezultata C.Trosabirnička interna struktura upućuje na to da se posebna pažnja posvetila poboljšanju performanse procesora. Naime, iskustvo i analize pokazali su da samo jedna interna sabirnica kao komunikacijski put predstavlja usko grlo u djelovanju procesora i time negativno utječe na performansu procesora. Na primjer, za osnovnu operaciju zbrajanja sadržaja dvaju registara iz skupa registara opće namjene, u slučaju jedne interne sabirnice, operandi se moraju slijedno u vremenu prenijeti u aritmetičko-logičku jedinicu. U slučaju trosabirničke strukture, oba se operanda iz skupa registara opće namjene prenose istodobno (jedan sabirnicom operanada A, a drugi sabirnicom operanada B), istodobno je moguće prenijeti i rezultat prethodne aritmetičke ili logičke operacije preko sabirnice rezultata C u odredišni registar u skupu registara opće namjene. Dakle, istodobno se izvode dvije operacije čitanja i jedna operacija upisa u skupu registara opće namjene. Naravno, zahtijeva se posebna izvedba skupa registara - on mora biti organiziran kao dvoizlazni za operaciju čitanja i jednoulazni za operaciju pisanja. Analize pokazuju da se, na primjer, osnovne instrukcije tipa add (zbroji) i Id (puni) ubrzavaju u odnosu na jednosabirničku izvedbu procesora za 48% i više posto. Uočimo još jednu značajku modela - registri opće namjene (RO - R31), instrukcijski registar IR, programsko brojilo PC te sučelni registri - memorijski adresni registar MAR i memorijski registar podataka MDR - svi su oni duljine 32 bita. Model RISC procesora opisat ćemo na ISA (Instruction Set Architecture) razini. Prikazat ćemo njegov programski model i podrobno opisati skup strojnih instrukcija. Podsjetimo se, programski model procesora čine one njegove sastaynjce koje su vidljive i dohvatljive programeru kada programira u zbirnom jeziku (aseraoeru\ Lijevi dio slike 3.16 prikazuje programski model procesora koji se sastoji samo pd 32 32^bitna registra opće namjene (RO - R31), 32-bitnog programskog brojila PC i 32-bitnog instrukcijskog registra IR. Desni dio slike 3.16 predstavlja model memorijske jedinice (memorije) za računalo temeljeno na RISC procesoru. Vidimo da je memorija, unatoč tomu što je procesor 32-bitni, bajtno organizirana i da ima bajtnu adresnu zrnatost - svakoj memorijskoj riječi koja je duljine 8-bita jednoznačno je pridružena adresa. Usprkos bajtnoj adresnoj zrnatosti, procesor može dohvatiti samo 32-bitnu riječ - 4 slijedna bajta. Četiri se bajta dohvaćena iz memorije smještaju u 32-bitni registar tako da najmanje značajnom bajtu registra odgovara bajt s najvišom memorijskom adresom (slika 3.17). Takav se način uređenja slijeda bajtova naziva Big-Endian Byte Ordering.
78
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
C sabirnica
A sabirnica
SI. 3.15 Pojednostavljeni model 32-bitnog procesora RISC
B sabirnica
S. RIBARIČ - GRAĐA RAČUNALA
bo
b31
b7
79
bo
RO R1 R2
32 32-bitna registra opće namjene
R29 R30
232 bajta
R31
b31
bo
b31
bo
PC
IR
232-3 232-2 2 32 -1
programski model RISC procesora
radna memorija
SI. 3.16 Programski model računala RISC Primjer 3.3. Obično se, posebice u novijim procesorima, duljina riječi procesora ne poklapa s duljinom riječi u memoriji koju smatramo fizičkom jedinicom informacije - onoj kojoj je jednoznačno pridružena adresa. U slučaju našeg modela RISC imamo 32-bitnu riječ procesora, a fizička jedinica informacije je bajt - svakom je bajtu u memoriji jednoznačno pridružena adresa. Glede načina smještanja slijeda bajtova u registre procesora razlikujemo dvije osnovne organizacije: i) uređenje slijeda batova slijeva udesno ili uređenje po njihovim rastućim adresama (engl. Big-Endian Byte Ordering). U tom se uređenju bajt koji ima najvišu memorijsku adresu smješta na poziciju najmanje značajnog bajta u registru procesora. Slijedno tome, bajt s najnižom adresom nalazi se na poziciji najznačajnijeg bajta u registru procesora. Slika 3.17 prikazuje uređenje slijeda bajtova po njihovim rastućim adresama; i i) u ređenje si ij ed a bajtova zdesna ulijevo i I i uređenje po njihovim padajućim adresama (engl. Little-Endian Byte Ordering). U tom slučaju najmanje značajan bajt u registru ima najnižu adresu (slika 3.18), a najznačajniji bajt odgovara bajtu koji u memoriji ima najvišu adresu.
80
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
sadržaj
adresa
AC
aaaa
01
aaaa+1
FF
aaaa+2
7C
aaaa+3 aaaa+4 smjer rasta adresa
bajt b31
b24 b23
AC
b16 b15
FF
01
•
b0
b8 b7
7C
memorija i
32-bitni registar
najznačajniji bit
najmanje značajan bit
SI. 3.17 Uređenje slijeda batova slijeva udesno (Big-Endian Byte Ordering) sadržaj
adresa
AC
aaaa
01
aaaa+1
FF
aaaa+2
7C
aaaa+3 aaaa+4
i
smjer rasta adresa
bajt b31
b24 b23
7C
b16 blS
FF
bO
b8 b7
01
AC
memorija
32-bitni registar najznačajniji bit
najmanje značajan bit
SI. 3.18 Uređenje slijeda bajtova zdesna ulijevo (Little-Endian Byte Ordering)
Opišimo model RISC procesora na razini strojnih instrukcija. Sve su instrukcije u skupu strojnih instrukcija "čvrste" duljine (32 bita). To je jedna od osnovnih značajki RISC procesora. Druga osnovna značajka RISC procesora je reduciran skup strojnih instrukcija, odnosno relativno mali broj strojnih instrukcija. Instrukcije se mogu podijeliti na: i) aritmetičke i logičke instrukcije, ii) instrukcije za pristup memoriji, iii) instrukcije grananja, iv) mješovite instrukcije.
S. RIBARIČ - GRAĐA RAČUNALA
81
3.5.1. ARITMETIČKE I LOGIČKE INSTRUKCIJE Aritmetičke i logičke instrukcije možemo razvrstati na one koje specificiraju operacije s jednim operandom (unarne) i one koje određuju operacije s dva operanda (binarne). Format aritmetičke ili logičke instrukcije s jednim operandom prikazanje na slici 3.19. Ь31
Ь27 Ь26
op
Ь22 Ь21
Ы7Ы6
ne koristi se
ra
Ы2 Ы1
bO
ne koristi se
rc
SI. 3.19 Format aritmetičke ili logičke instrukcije s jednim operandom
Instrukcija je organizirana na sljedeći način: pet najznačajnijih bitova (bitovne pozicije Ь27 - b31) predstavljaju operacijski kod instrukcije. Na temelju njegove duljine može se zaključiti da će se skup strojnih instrukcija sastojati od maksimalno 32 različite instrukcije (25). Naime, podsjetimo se, i za instrukcije vrijedi načelo jednoznačnosti - svakoj instrukciji pripada jednoznačna bitovna kombinacija sadržana u polju operacijskog koda. Polje ra (bitovne pozicije Ь22-Ь26) sadržava 5-bitnu kombinaciju koja određuje jedan od 32 registra u skupu registara opće namjene, tj. registar R[ra], koji će imati ulogu odredišta rezultata. 5-bitno polje rc (bitovne pozicije Ы2-Ы6) određuje izvorište operanda, odnosno registar R[rc]. Ostala bitovna polja (slika 3.19) na pozicijama bO- bi 7 i b / 7 - b21 u ovom se formatu instrukcije ne koriste. Grupu aritmetičkih i logičkih instrukcija s jednim operandom čine samo dvije instrukcije: Aritmetička instrukcija: neg ra, rc
; R[ra]«- - R[rc],
kojom se izvodi potpuni komplement na operandu dohvaćenom iz registra R[rc] i rezultat smješta u registar R[ra]. Logička instrukcija: notra, rc
; R[ra] <- R[rc],
koja iz registra R[rc] dohvaća operand, pretvara ga u jedinični komplement i smješta ga u odredišni registar R[ra]. Primjer 3.4. Na slici 3.20 prikazanje format strojne instrukcije neg r16> r22. Operacijski kod instrukcije лед je 01111 (binarno). Odredimo što će biti posljedica izvođenja ove instrukcije ako su neposredno prije njezina izvođenja sadržaji registara R[16] = 00000000 i R[22] = 00000AFF. Ь31
01111
Ь27 Ь26
Ь22 Ь21
10000
Ь17 Ы 6
ne koristi se
Ы2 Ы1
10110
bO
ne koristi se
SI. 3.20 Format instrukcije neg r16, r22
Nakon izvođenja instrukcije sadržaji registara R[16] i R[22] bit će sljedeći: R[22j = 00000AFF - sadržaj izvorišnog registra se ne mijenja, R[16] = FFFFF501 - registar R[16] sadržava potpuni komplement, tj. negativnu vrijednost operanda OOOOOAFF.
82
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
Grupu aritmetičkih i logičkih instrukcija s dvama operandima čine instrukcije: add ra, rb, rc ; R[ra] «- R[rb] + R[rc] sub ra, rb, rc ; R[ra] «- R[rb] - R[rc] and ra, rb, rc or ra, rb, rc
; R[ra] «- R[rb] A R[rc]; pri čemu A označava logičko I ; R[ra]«- R[rb] v R[rc]; pri čemu v označava logičko ILI
Slika 3.21 prikazuje format za gornje strojne instrukcije. Već iz njihovih mnemonika vidimo da su instrukcije takve da rabe tri adresna polja - dva za specifikaciju izvora operanada rb i rc te jedno za specifikaciju odredišta za rezultat ra. b31
b27 b26
op
b22 b21
ra
b17 b16
rb
b12 b i 1
bO
ne koristi se
rc
SI. 3.21 Format aritmetičke ili logičke instrukcije s dvama operandima
Uočavamo da je format instrukcije troadresni. Svakoje adresno polje duljine 5 bitova i služi za specifikaciju registara u skupu registra koji će sudjelovati u operaciji. Troadresni format instrukcije svojstven je za RISC procesore i u njemu se zrcali jedan od zahtjeva koji je u skladu s RISC načelom oblikovanja procesora: Svi operandi koji sudjeluju u aritmetičkim ili logičkim operacijama moraju se prethodno nalaziti u registrima iz skupu registara opče namjene. Za takav tip instrukcija kažemo da su registar - registar. Osnovni razlog za takav zahtjev jest smanjiti promet podataka između procesora i memorijske jedinice što vodi ubrzanju operacija. U načelu vrijedi daje pristup memorijskoj jedinici vremenski jedna od najzahtjevnijih operacija. Za model CISC procesora razmatrali smo instrukciju tipa INCM, gdje je M adresa memorijske lokacije, koja je s obzirom na mjesto izvora i odredišta operanda instrukcija tipa memorija - memorija. Instrukcije koje obavljaju aritmetičku ili logičku operaciju na operandu koji je pohranjen u memoriji, a zatim rezultat operacije pohranjuju natrag u memoriju, nisu dopuštene u RISC arhitekturi. U grupi aritmetičkih i logičkih instrukcija nalaze se instrukcije koje koriste usputno ili uključno adresiranje (engl. immediate) u kojem je vrijednost operanda neposredno uključena u samoj instrukciji (u polju c2) (slika 3.22). Za model RISC procesora to su sljedeće instrukcije: addi ra, rb, c2 ; R [ra] «- R[rb] + c2 andi ra, rb, c2 ; R[ra] <- R[rb] A C2 (logičko I) ori ra, rb, c2 ; R[ra]«- R[rb] v c2. (logičko ILI) Zadnje slovo u tro- ili četveroslovčanom mnemoniku i (immediate) upućuje nas na to daje riječ o instrukciji koja koristi usputni način adresiranja (engl. immediate addressing). Naravno, i operacijski se kodovi ovih instrukcija razlikuju od instrukcija add, and i or. Na primjer, operacijski kod za instrukciju add je 01100, dok je za instrukciju addi 01101. Podsjetimo se, u potpoglavlju 3.3. rekli smo da se u operacijskom kodu nalazi i informacija o načinu adresiranja. Slika 3.22 prikazuje format strojne instrukcije koja koristi usputno adresiranje. b31
b27 b26
op
b22 b21
ra
b17 b16
rb
SI. 3.22 Format strojne koja koristi usputno adresiranje
bO
c2
S. RIBARIČ - GRAĐA RAČUNALA
83
Vidimo da je polje c2 predviđeno za smještanje usputnog podatka u instrukciji duljine 17 bitova (bO- b 76). Taj se usputni podatak treba pretvoriti u 32-bitni i tek onda može sudjelovati u aritmetičkoj ili logičkoj operaciji. Pretvorba 17-bitnog podatka u 32-bitni, neposredno prije negoli se izvede specificirana aritmetička ili logička operacija, obavlja se u aritmetičko-logičkoj jedinici posebnim postupkom koji se naziva širenje bita predznaka (eng\. sign-extended) koji ćemo opisati u dijelu ovog pot poglavlja instrukcije za pristup memoriji. Razlozi uporabe usputnog načina adresiranja dvojaki su: • djelotvorno se iskorištava memorija (na istoj memorijskoj lokaciji na kojoj je pohranjena instrukcija pohranjen je i podatak), • ubrzava se izvođenje programa (već se tijekom faze PRIBAVI dohvaća i operand koji je uključen u instrukciji). U skupu aritmetičkih i logičkih instrukcija nalaze se i posmačne instrukcije (engl. shift instruction). One posmiču operand ulijevo, udesno ili kružno za broj binarnih mjesta od 0 - 31. Slika 3.23 prikazuje format posmačne instrukcije. b31
b27 b26
b22 b21
ra
op
bi 7 bi 6
b5 b4
ne koristi se
rb
bO
iznos
SI. 3.23 Format posmačne instrukcije 5-bitno polje (pozicije b27 - b31) sadržava operacijski kod kojim se specificira jedna od operacija posmaka (shr-posmak udesno, shra- aritmetički posmak udesno, sh/-posmak ulijevo, shc - kružni posmak), 5-bitno polje ra određuje odredišni registar R[ra] u koji će se smjestiti posmaknuti operand, a 5-bitno polje rb specificira izvor operanda, tj. registar R [rb]. Pet najmanje značajnih bitova (bO - b4) instrukcije sadržava 5-bitni nepredznačeni cijeli broj kojim se specificira za koliko će se mjesta operand posmaknuti (od 0 - 31 binarnih mjesta). Na primjer, instrukcija (slika 3.24) shr rl2, r14,5 posmiče operand dobavljen iz R[14] za 5 mjesta udesno i rezultat pohranjuje u R[12]. b31
b27 b26
b22 b21
b17 b i č
11010
01100
01110
op kod
ra
rb
b5 b4
ne koristi se
bO
00101
iznos p o s m a k a
SI. 3.24 Format instrukcije shr r12, rl4,5 U modelu RISC razlikujemo dvije vrste posmačnih instrukcija udesno: logički posmak udesno shr i aritmetički posmak udesno shra. Slika 3.25 prikazuje oba načina posmaka udesno. Pri logičkom posmaku udesno za 1s n <; 31, n najznačajnijih bitovnih pozicija poprima vrijednost 0. Aritmetički posmak udesno izvodi se tako da se najznačajniji bit operanda ne posmiče, već ostaje sačuvan na tom mjestu i širi se za n - 1 mjesta udesno. Nakon toga mu se pridružuju ulančavanjem bitovi izvornog operanda b31 - bn.
1
0
1
0
0
1
1
1
0
prije logičkog posmaka udesno
0
0
1
0
1
nakon logičkog posmaka udesno a) logički posmak udesno
1
0
1
0
0
1
1
(3 >s
prije aritmetičkog posmaka udesno
—s
0
0
0
nakon aritmetičkog posmaka udesno
bit predznaka ostaje sačuvan
b) aritmetički posmak udesno
SI. 3.25 Logički a) i aritmetički posmak udesno b)
Primjer 3.5. Prikažimo kako se izvodi aritmetički posmak posmačnom instrukcijom: shra ra, rb, n shra (:=op = 11011(2))
R[ra] <31...0> <- [n@R[rb] <31 >) # R[rb] <31...n>,
gdje n@ R[rb] <31 > označava operaciju pojavljivanja n puta bita predznaka izvornog operanda, a # ulančavanje. Na primjer za: shra r4, r5,6 ako je R[5] = 10100010000000111111111111111001 i R[4] = xxxx.....
xxx
n =6 R[5] <31>=1 n@1 = 6@1 =111111 konačan rezultat aritmetičkog posmaka udesno za 6 mjesta je: R[4] = 111111 10100010000000111111111111 Umjesto 5-bitnog nepredznačenog cijelog broja, smještenog na bitovom pozicijama bOb4 posmačne instrukcije (slika 3.23) kojim se specificira za koliko će se mjesta operand posmaknuti, može se u posmačnim instrukcijama specificirati registar iz skupa registara u kojem će pet najmanje značajnih bitova određivati iznos posmaka. U tom slučaju instrukcije: sh ra, rb, rc ; posmakni R[rb] udesno za broj mjesta određen u R[rc] i pohrani rezultat u R[ra] ; posmakni (aritmetički) R[rb] udesno za broj mjesta određen u R[rc] i pohrani rezultat u R[ra] ; posmakni R[rb] ulijevo za broj mjesta određen u R[rc] i pohrani shl ra, rb, rc rezultat u R[ra] shc ra, rb, rc ; kružno posmakni R[rb] za broj mjesta određen u R[rc] i pohrani rezultat u R[ra] imaju format prikazan na slici 3.26. shra ra, rb, rc
S. RIBARIČ - GRAĐA RAČUNALA
b31
b27 b26
op
b22 b21
ra
b i 7 bi 6
b12 b i 1
rc
rb
85
b5 b4
ne koristi se
bO
00000
SI. 3.26 Format posmačne instrukcije za slučaj kada je iznos posmaka pohranjen u registru R[rc]
3.5.2. INSTRUKCIJE ZA PRISTUP MEMORIJI Arhitektura RISC vrlo se često naziva i load-store arhitektura zato što je jedna od važnih značajki RISC procesora da se jedino strojnim instrukcijama vrste load i store može pristupiti memoriji. Na primjer, već smo spomenuli, instrukcija / A / C g d j e je M adresa memorijske lokacije, nije dopuštena u RISC arhitekturi. Model RISC procesora ima četiri instrukcije load, od toga dvije "prave" (Id i Idr) za dohvat operanda iz memorije i smještanje u jedan od registara u skupu registara opće namjene te dvije instrukcije (la i lar) koje se rabe za oblikovanje 32-bitne adrese i njezino smještanje u jedan od registara u skupu registara opće namjene. b31
b27 b26
op
b22 b21
ra
b17 b16
rb
bO
c2
SI. 3.27 Format instrukcije za pristup memoriji: Id, lar i st
Opišimo prvo instrukciju load (mnemonik Id). Slika 3.27. prikazuje format instrukcije Id. Instrukcija se izvodi tako da se dohvaćeni podatak iz memorije pohranjuje u odredišni registar koji je određen 5-bitnim poljem ra. Adresa memorijske lokacije s koje se dohvaća podatak određuje se na temelju 17-bitne vrijednost koja je smještena u polju c2 (slika 3.27), i to na sljedeće načine: • ako je polje rb jednako 00000, onda je to "signal" upravljačkoj jedinici da se 32-bitna adresa memorijske lokacije formira uporabom 17-bitne vrijednosti smještene u polju c2 na koju se primjenjuje postupak širenja bita predznaka (signal-extended). Slika 3.28 pojašnjava postupak širenja bita predznaka. Bit na bitovnoj poziciji bi6 predstavlja bit predznaka 17-bitne konstante upisane u polju c2. On se postupkom širenja bita predznaka kopira na sve bitovne pozicije od b17 do b31 i na taj način oblikuje 32-bitnu vrijednost koja se tumači kao 32-bitna adresa. Dakle, ako je b 16 jednako 0, onda će bitovi na bitovnim pozicijama od b17ćo b31 poprimiti vrijednost 0. U slučaju kada je b16 jednako 1, onda će bitovi na bitovnim pozicijama od b17 do b31 poprimiti vrijednost 1. Ovakav način adresiranja, odnosno određivanja efektivne adrese naziva se u RISC modelu izravan ili direktan.
86
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
bi 6
c2
bo
C2
bO
širenje bita predznaka
b16
širenje bita predznaka
SL 3.28 Postupak širenja bita predznaka
Primjer 3.6. Instrukcija u zbirnom jeziku: Id r2,65 ; R[2] «- M [65] ima format prikazan na slici 3.29. Instrukcija ovako zapisana, bez specifikacije rb podrazumijeva da je rb - 0. Operacijski kod instrukcije Id je 00001, ra je 00010 i c2 je: bO
b16
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1,
i odgovara vrijednosti 65 (dekadno). Širenjem bita predznaka dobiva se 32-bitna adresa memorijske lokacije koja je izvor operanda: b31
b16
bO
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
000001
Efektivna, 32-bitna adresa je 00000041 (heksadekadno). (Opaska: pod efektivnom adresom razumijeva se konačna adresa pomoću koje se pristupa podatku - operandu ili pomoću koje se pristupa odredištu - lokaciji na kojoj se pohranjuje podatak (ili rezultat neke operacije).) b31
b27 b26
b22 b21
b17 b16
bO
00001
00010
00000
00000000001000001
op
ra
rb
c2
SI. 3,29 Format instrukcije Id r2,65
• ako je, međutim, polje rb različito od 0, tada se adresa memorijske lokacije oblikuje kao c2 + R[rb], pri čemu se, neposredno prije zbrajanja, konstanta c2 pretvara širenjem bita predznaka u 32-bitnu vrijednost. Ovaj se način adresiranja naziva bazno adresiranje s pomaknućem
S. RIBARIČ - GRAĐA RAČUNALA
87
(engl. based, displacement addressing mode). Važno je napomenuti da se efektivna adresa izvorišta računa tijekom izvođenja instrukcije (engl. run time), a ne tijekom prevođenja programa. Ako c2 ima vrijednost 0, onda je riječ o registarsko posrednom ili registarsko indirektnom načinu adresiranja jer je adresa izvorišta određena 32-bitnim sadržajem registra R[rb]. Instrukcija loadaddress (mnemonik/a) je specifična load instrukcija koja ne dohvaća operand iz memorije, već samo služi za oblikovanje 32-bitne adrese koja će biti pohranjena u jednom od registara iz skupa registara opće namjene. Na primjer, instrukcija: la ra, c2 ; R [ra] «- c2 na temelju 17-bitne konstante c2, širenjem bita predznaka oblikuje 32-bitnu adresu i pohranjuje je u R[ra]. Instrukcija la koristi i bazno adresiranje s pomaknućem: la ra, c2(rb) ; R[ra] <-c2 + R[rb] U oba se potonja slučaja na c2 primjenjuje širenje bita predznaka. Napomenimo još da se za bazno adresiranje s pomaknućem efektivna adresa koja će biti smještena u R[ro] računa tijekom izvođenja programa (a ne tijekom prevođenja). Instrukcija store (mnemonik st) koristi jednak format instrukcije kao load ali izvodi "obrnutu" operaciju: pohranjuje sadržaj specificiranog registra u memoriju. I ovdje vrijedi: • ako je rb = 0, onda se adresa odredišta dobiva širenjem bita predznaka 17-bitne vrijednosti upisane u polju c2. • ako je rb * 0, onda se efektivna adresa odredišta dobiva kao c2 + R[rb]. Primjer 3.7. Slika 3.30 prikazuje format instrukcije: st r22,27(r6)
; M[27 + R[6]] <- R[22] b16
bo
00011
10110
00110
00000000000011011
op
ra
rb
c2
SL 3.30 Format instrukcije str22,27(r6)
Primjer instrukcija st koja koristi registarsko posredni način adresiranja: str 16,0(r9) pohranit će sadržaj registra R[16] na memorijsku lokaciju čija je adresa sadržana u registru R[9],tj.M[R[9]]«-R[16]. Primjer 3.8. Za model CISC procesora razmatrali smo instrukciju tipa INCM, gdje je M adresa memorijske lokacije, koja je s obzirom na mjesto izvora i odredišta operanda instrukcija tipa memorija-memorija. Instrukcije koje obavljaju aritmetičku ili logičku operaciju na operandu koji je pohranjen u memoriji, a zatim rezultat operacije pohranjuju natrag u memoriju, nisu dopuštene u RISC arhitekturi. To znači da se operacija s jednakim rezultatom
88
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
kao stoje rezultat izvođenja CISC instrukcije INCM mora nadomjestiti u RISC procesoru sa sljedećim programskim odsječkom: Id ra, c2(rb)
; R[ra] <- M[c2 + R[rb]]
addi ra, raj
; R [ra] «- R [ra] + 1
st ra, c2(rb)
; M[c2 -f R[rb])
R [ra]
Prije negoli objasnimo instrukcije koje koriste relativni ili odnosni način adresiranja Idr, str i lar, pogledajmo ograničenja izravnog ili direktnog adresiranja kod kojeg se efektivna adresa određuje samo na temelju širenja bita predznaka. Pretpostavimo da je 17-bitna vrijednost zapisana u polju c2 pozitivna. U skladu s notacijom potpunog komplementa to znači da je najznačajniji bit [bi6) jednak 0. Raspon 17-bitne konstante je u tom slučaju 00000000000000000 - 01111111111111111 (binarno). Širenjem bita predznaka određen je adresni potprostor: 00000000 - 0000FFFF (heksadekadno). Pretpostavimo da je sada 17-bitna konstanta negativna (najznačajniji bit je 1). U tom je slučaju raspon konstante 10000000000000000 - 11111111111111111 (binarno). Širenjem bita predznaka određenje drugi adresni potprostor: FFFF0000 - FFFFFFFF (heksadekadno) kojem se može pristupiti instrukcijama Id ili sf izravnim načinom adresiranja. Svaki od ta dva potprostora veličine je 64 K (216) bajtova.To je samo mali dio od ukupnog adresnog prostora veličine 4G (232) bajtova. Pristup operandima koji su pohranjeni izvan spomenuta dva potprostora ostvaruje se uporabom registarsko posrednog načina adresiranja i baznog adresiranja s pomaknućem. Instrukcija loadrelative (mnemonik/đr): Idr ra, cl ;R[ra] <-M[PC + c7] ima format instrukcije prikazan na slici 3.31. b31
b27 b26
op
b22 b21
ra
bO
cl
SI. 3.31 Format instrukcije Idr i str
Efektivna se adresa izvorišta operanda PC + c1 računa tijekom izvođenja programa i relativna je u odnosu na trenutni sadržaj programskog brojila PC. Primjećujemo da je ovaj način adresiranja sličan baznom adresiranju s pomaknućem samo što sada ulogu baznog registra preuzima programsko brojilo PC. Pomaknuće je sadržano u 22-bitnom instrukcijskom polju cl (slika 3.31) tako da je omogućeno adresiranje operanada u rasponu od ± 221 u odnosu na sadržaj programskog brojila PC. Relativni način adresiranja čini instrukcije, a time i programe premjestivim (engl. relocatable) - programski moduli i njima pripadajući podaci mogu se premještati u memoriji bez mijenjanja pomaknuća (jer je njihov položaj definiran tekućim sadržajem programskog brojila PC). Primjer 3.9. Instrukcija: Idr rl 6,-65 dohvaća operand s memorijske lokacije M[PC - 65] i smješta ga u R[16].
S. RIBARIČ - GRAĐA RAČUNALA
89
Slika 3.32 prikazuje format instrukcije. 5-bitni operacijski kod instrukcije je 00010, a 22-bitna konstanta (pomaknuće) je 3FFFBF. b31
b27 b26
b22 b21
00010
10000
op
ra
bO
1111111111111110
111111
cl
S I 3.32 Format instrukcije Idrr16, -65
Instrukcija store relative (mnemonik str) ima isti format kao i instrukcija Idr (slika 3.31 ): strra, cl
; M[PC + cl]«- R[ra]
pohranjuje sadržaj registra R[ra] na memorijsku lokaciju s efektivnom adresom PC + cl. Ako pažljivije pogledamo klasifikaciju tipova instrukcija za naš model RISC procesora, uočit ćemo da nema strojnih instrukcija za ulazne i izlazne operacije. Razlog tomu je što RISC procesor koristi memorijsko ulazno-izlazno preslikavanje (engl. memory mapped I/O) u kojem se adrese registra ulazno-izlaznih jedinica smatraju dijelom memorijskog adresnog prostora te se tim registrima pristupa instrukcijama load i store. U tom slučaju instrukcija st ima funkciju izlazne instrukcije (out), a instrukcija Id funkciju ulazne instrukcije (in).
3.5.3. INSTRUKCIJE GRANANJA Instrukcije grananja imaju važnu ulogu - one su jedan od preduvjeta automatskom izvođenju programa jer se, u pojedinim njegovim točkama (ovisno o vrijednosti neke varijable), može izabrati alternativni put izvršavanja programa - granati u programu, tj. prenijeti upravljanje na neku ciljnu instrukciju koja nije slijedna instrukcija u programu. Instrukcije grananja izvode se tako da se tijekom faze IZVRŠI modificira sadržaj programskog brojila PC. Na taj je način određena ciljna instrukcija koja će biti pribavljena u sljedećoj fazi PRIBAVI. Model RISC procesora ima dvije vrste instrukcija grananja: branch (mnemonik br) i branch and link (mnemonik brl). Slika 3.33 prikazuje format instrukcije br. b31
b27 b26
op
b22b21
ne koristi se
b17b16
rb
b12 b i 1
rc
b3 b2
ne koristi se
b0
Cond
SI. 3.33 Format instrukcije br
Opišimo format instrukcije. Operacijski kod instrukcije, kao i kod svih ostalih formata za naš model RISC procesora, zauzima pet najznačajnijih bitovnih pozicija (b27-b31). Polja b22 - b26 se ne koriste. Polje rb (bitovne pozicije b17~ b21) određuju registar R[rb] koji sadržava 32-bitnu adresu ciljne instrukcije. Sadržaj registra R[rb] bit će prenesen u programsko brojilo PC tijekom faze IZVRŠI. Polje rc određuje registar R[rc] čiji će sadržaj biti ispitan. Ovisno o ishodu tog ispitivanja tijekom izvođenja instrukcije grananja donijet će se odluka hoće li se grananje dogoditi. Ako uvjet grananja nije ispunjen, program će se nastaviti sa sljedećom instrukcijom u slijedu. Tri najmanje značajna bita instrukcije, označena s Cond, određuju koji se uvjet grananja ispituje. On (uvjet grananja) je i određen mnemonikom instrukcije grananja:
90
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
mnemonik
Cond <2...0>
brriv, brlnv
000 001 010 011 100 101
br, brl brzr, brlzr brnz, brlnz brpl, brlpl brmi, brlmi
Uvjeti grananja nikada bezuvjetno (uvijek granaj) ako je R[rc] = 0 ako je R[rc] * 0 ako je R[rc]<31> = 0 ako je R[rc] < 0
Polje rc specificira registar čiji će se sadržaj ispitati, a polje rb određuje registar koji sadržava adresu ciljne instrukcije (slika 3.33). Na primjer, instrukcija "granaj ako je nula" brzrr31,r1 ; PC R[31] ako je R[1] = 0 bit će prevedena asemblerom u oblik u kojem će tri najmanje značajna bita 32-bitne instrukcije imati vrijednost 010 i time odrediti uvjet koji se ispituje. No treba pripaziti, naime sve instrukcije vrste br (br, brzr brnz brpl brmi) imaju isti operacijski kod (01000), ali se razlikuju po 3-bitnoj kombinaciji sadržanoj u polju Cond Na neki način, ovo 3-bitno polje možemo promatrati kao "proširenje" operacijskog koda. Osim instrukcija uvjetnog grananja, u skupu instrukcija nalaze se i instrukcije bezuvjetnog grananja: br i brl. Za te instrukcije 3-bitno polje Cond ima vrijednost 001. Instrukcije ne ispituju bilo kakav uvjet, već obavljaju grananje smještanjem sadržaja registra R[rb] u programsko brojilo PC. Instrukcija branch and link (mnemonik brl) ima operacijski kod 01001 i izvodi se tako da prije grananja pohranjuje sadržaj programskog brojila PC u jedan od registara u skupu registara opće namjene (koji poprima ulogu tzv. poveznog registra), a zatim u zavisnosti od uvjeta grana na ciljnu instrukciju. Na primjer, instrukcija "poveži i granaj ako je sadržaj registra R[rc] pozitivan" brlpl ra, rb, rc izvodi se tako da se prvo sadržaj programskog brojila PC smješta u R[ra], zatim se ispituje uvjet je li sadržaj registra R[/r] pozitivan, i ako je, onda se sadržaj registra R[rb] smješta u programsko brojilo PC. Ako uvjet nije ispunjen, sadržaj R[rc] nije pozitivan, grananje se neće dogoditi, ali će se sadržaj programskog brojila PC ipak pohraniti u R[ra]. Instrukcija brl ima format sličan instrukciji br (slika 3.33) samo što su sada bitovne pozicije b22 - b26 namijenjene adresi registra ra. Instrukcije vrste branch and link koriste se u postupcima prijenosa upravljanja između glavnog programa (ili pozivajućeg programa) i potprograma (ili pozvanog programa), gdje povezni registar pohranjuje povratnu adresu (o tome više i podrobnije u poglavlju o upravljačkoj jedinici). Možemo primijetiti pomalo"čudne"instrukcije brnv(branch never-nikad ne granaj) i brlnv (branch and link never - poveži i nikad ne granaj) - instrukcija brnv neće nikada obaviti grananje, ali zato troši vrijeme potrebno za njezino izvođenje te se može koristiti za vremensku sinkronizaciju (vidi instrukciju nop). Instrukcija brlnv također ne grana, ali je posljedica njezinog izvođenja, bez obzira što nema grananja, pohranjivanje tekućeg sadržaja programskog brojila PC u registar R[ra].
S. RIBARIČ - GRAĐA RAČUNALA
91
I još jedno zapažanje, naš model RISC procesora nema statusni registar SR sa zastavicama koje koriste instrukcije uvjetnog grananja, već se uvjeti izravno utvrđuju ispitivanjem sadržaja registra R[rc]. (Opaska: RISC procesori imaju statusni registar koji se obično naziva PSW (Procesor Status Word) u kojem se nalaze zastavice uvjeta, zastavice za indikaciju glavnih stanja procesora te zastavice za rukovanje prekidom. U tom slučaju, kao što je bio slučaj u modelu CISC procesora, instrukcije uvjetnog grananja ispituju stanje zastavica i na temelju njih se donosi odluka o grananju.)
3.5.4. MJEŠOVITE INSTRUKCIJE U ovu skupinu svrstavamo strojne instrukcije no operation (mnemonik nop) i instrukciju stop (mnemonik stop). Instrukcija nop (operacijski kod 00000), kao što i sam naziv govori, ne radi ništa. Naravno, njezino izvođenje "troši" procesorsko vrijeme te se ona koristi za vremensku sinkronizaciju, npr. u komunikaciji računala s vanjskim procesom. U protočnoj arhitekturi procesora ima vrlo važnu ulogu u razrješavanju hazarda tako da je jednako zastupljena u skupu instrukcija CISC i RISC procesora (vidi poglavlje Protočnost). Instrukcija stop (operacijski kod 00001) upotrebljava se za zaustavljanje stroja na specificiranoj točki programa. Slika 3.34 prikazuje instrukcijski format za nop i stop instrukcije. Vidimo da je instrukcija duljine 32-bita, ali se koristi samo pet najznačajnijih bitova (polje operacijskog koda). b31
b27 b26
op
b0
ne koristi se
SI. 3.34 Format instrukcije nop i stop
Na kraju ovog potpoglavlja zanima nas koliko se naš model RISC procesora razlikuje od stvarnog modela. Slika 3.35 prikazuje blok-shemu ARM 6 procesora RISC arhitekture. Vidimo da procesor ima tri glavne interne sabirnice (A, B, ALU sabirnica), 32-bitnom aritmetičko-logičku jedinicu sa sklopovljem za množenje na temelju Boothovog algoritma (8. poglavlje) te skup registara opće namjene od 32 32-bitna registra. ARM procesor ima i pomalo neuobičajenu značajku - programsko brojilo PC i statusni registri smješteni su u registrima u skupu registara opće namjene.
92
3. POGLAVLJE: POJEDNOSTAVLJENI MODELI CISC 1 RISC PROCESORA
sabirnica podataka SI. 3.35 ARM 6 procesor RISC arhitekture
S. RIBARIČ - GRAĐA RAČUNALA
93
4. POGLAVLJE
PERFORMANSA RAČUNALA 4.1. UVOD: PERFORMANSA, CIJENA I OMJER CIJENE I PERFORMANSE Veliki se napori na području arhitekture računala ulažu u povećanje performanse računala. Sve odluke tijekom oblikovanja računarskog sustava - od pažljivog definiranja i oblikovanja skupa strojnih instrukcija pa sve do implementacijskih tehnika kao što su protočnost (engl. pipelining), priručna memorija (engl. cache), predviđanja grananja, paralelizam na razini funkcijskih jedinica, procesa, instrukcija i dretvi, samo prividno nisu prvenstveno motivirane unapređenjem performanse računala, međutim, vode upravo povećanju performanse. Naravno, kada se govori o performansi računala, potrebno je precizno definirati što je to performansa računala. Drugi važan atribut računarskog sustava jest njegova cijena. Zahvaljujući razvoju tehnologije, moguće je izgraditi računalo koje je brže od bilo kojeg do danas raspoloživog (komercijalnog) računala, međutim, njegova cijena može biti ograničavajući čimbenik koji će spriječiti realizaciju takva računala. Obično vrijedi da se računalo s najvećom performansom koju mu dopušta tehnološka izvedba neće realizirati jer je omjer cijene i performanse takav da je računalo neisplativo, odnosno predstavlja nekonkurentan proizvod na bespoštednom tržištu računala. Pored same cijene računala uzima se u obzir i ukupna cijena tijekom njegova "životna vijeka" (engl. life-cycle cost) koja uključuje iznos jamstva, cijenu servisa, troškove za programsku i sklopovsku nadogradnju te troškove ekološkog zbrinjavanja nakon njegova životnog vijeka. Obično se, kada govorimo općenito o performansi nekog tehničkog sustava, suočavamo s njezinom višeznačnosti jer u velikoj mjeri ovisi o motrištu ocjenjivača ili korisnika. Dobru su ilustraciju dali D. A. Patterson i J. L. Hennessy kad su za različite vrste putničkih zrakoplova pokušali naći onaj zrakoplov koji je "najbolje performanse". Tablica 4.1. prikazuje osnovne značajke (broj mjesta u zrakoplovu, domet, brzina i cijenu zrakoplova) za pet tipova putničkih zrakoplova.
94
4. POGLAVLJE: PERFORMANSA RAČUNALA
Zrakoplov
Broj mjesta u zrakoplovu
Domet (km)
Brzina (km/h)
Cijena (IO6 $}
Airbus A310
250
8300
895
120
Boeing 747
470
6700
980
200
Boeing 777
375
7450
980
180
BAC/Sud Concorde
130
6400
2200
350
Douglas DC-8-50
145
14000
875
80
|i
Tablica 4.1. Osnovne značajke za pet tipova putničkih zrakoplova
Koji od zrakoplova iz Ta bi ice 4.1. ima najveću performansu? Ako na to pitanje odgovaraju putnici koji su zainteresirani da do odredišta stignu u najkraćem vremenu, onda bi odgovor bio da je to nadzvučni zrakoplov BAC/Sud Concorde (za trenutak zanemarimo da je povučen iz uporabe). No ako je udaljenost odredišta kamo putnik želi stići 8750 km, onda će zrakoplov Douglas DC-8-50 imati najveću performansu, bez obzira što mu za to treba 10 sati, a Concordeu samo oko 4 sata. Razlog tome je dodatno slijetanje Concordea jer se ciljano odredište nalazi izvan njegovog dometa, vrijeme potrebno da putnici napuste zrakoplov, vrijeme potrebno za formalnosti u zračnoj luci, vrijeme punjenja zrakoplova Concorde gorivom, vrijeme potrebno za ukrcavanje putnika, vrijeme potrebno za polijetanje itd. Ako performansu ocjenjuje aviokompanija, onda će performansu definirati na temelju tzv. propusnosti (engl. throughput) koja je definirana kao umnožak broja putnika (odnosno, broja mjesta u zrakoplovu) i brzine zrakoplova. U tom će slučaju zrakoplov Boeing 747 imati najveću performansu. S motrišta agencije FAA (Federal Avion Administration) najveću performansu ima tip zrakoplova koji je najsigurniji. Promatrati samo performansu, a zanemariti cijenu koja je potrebna da bi se ta performansa ostvarila nije baš uputno. Ako uzmemo u obzir propusnost kao mjeru performanse (s gledišta aviokompanije) i cijenu zrakoplova, onda je prema omjeru cijena/propusnost najbolji zrakoplov Boeing 747. Naravno, ovo je razmatranje vrlo, vrlo pojednostavnjeno, jer kada bi zaista postojao jedinstveni kriterij koji se odnosi na performansu zrakoplova, onda bi sve aviokompanije imale istu vrstu zrakoplova. Slično kao što postoje različiti pogledi na performansu zrakoplova, postoje i različiti pogledi na performansu računala, odnosno računarskog sustava. Na primjer, ako promatramo dva računala koja izvode identičan program, onda ćemo računalo koje brže izvrši program smatrati računalom koje ima veću performansu. Za dva računarska sustava u načinu rada vremenskom podjelom (engl. timesharing), s točke motrišta rukovoditelja centra za automatsku obradu podataka (AOP), brži je onaj računarski sustav koji je završio više zadataka ili poslova tijekom dana ili nekog definiranog vremenskog intervala. S druge strane, individualnog korisnika koji koristi računske usluge AOP centra zanima samo vrijeme odgovora {e ngl. response time, turnaround time, elapsed time) koje je definirano kao vrijeme koje protekne od trenutka započinjanja pa do trenutka završetka njegova programa. Vrijeme odgovora često se naziva i vrijeme izvršavanja (engl. execution time, wall clock time) - ono podrazumijeva ukupno vrijeme koje je potrebno da računalo završi zadatak i uključuje vrijeme pristupa memoriji i diskovima, vrijeme potrebno za ulazno-izlazne aktivnosti, vrijeme "kućanskih poslova" operacijskog sustava i procesorsko vrijeme izvršavanja (engl. CPU execution time). Često se umjesto vremena izvršavanja kao osnove za određivanje performanse sustava upotrebljava samo procesorsko vrijeme izvršavanja (ono se kratko naziva i
S. RIBARIČ - GRAĐA RAČUNALA
95
procesorsko vrijeme (engl. CPU time)). Na taj se način žele izlučiti promjenjivi i teško procjenjivi drugi utjecaji (vrijeme potrebno za ulazno-izlazne aktivnosti, vrijeme kućanskih poslova operacijskog sustava) koji u višeprogramskom sustavu ne ovise samo o određenom korisničkom programu. U tom se slučaju performansa može definirati kao: Performansa = 1 / (procesorsko vrijeme). Procesorsko se vrijeme može podijeliti na vrijeme koje procesor troši za izvođenje korisničkog programa (korisničko procesorsko vrijeme) i vrijeme procesora za izvođenje funkcija operacijskog sustava koje su namijenjene izvođenju upravo tog korisničkog programa (sistemsko procesorsko vrijeme). Teško je, međutim, precizno odrediti granicu između korisničkog i sistemskog procesorskog vremena jer je teško točno razlikovati koje su funkcije operacijskog sustava izričito namijenjene jednom, a koje ostalim korisničkim programima. Pri usporedbi performansi dvaju računala često namjerno zanemarujemo sistemsko procesorsko vrijeme, odnosno ukupno procesorsko vrijeme promatramo kao korisničko procesorsko vrijeme. Ako se ocjena performanse računala temelji na vremenu odgovora, onda se koristi izraz performansa sustava, a odnosi se na odziv sustava kada je sustav opterećen samo tim korisničkim programom (kada je riječ o višeprogramskom, odnosno višekorisničkom računarskom sustavu). Performansa koja u obzir uzima samo procesorsko vrijeme obično se naziva performansa procesora (engl. CPUperformance).
4.2. MJERE PERFORMANSE Računala su vremenski diskretni strojevi - u diskretnim vremenskim trenucima dolazi do promjene stanja u sklopovima stroja. Razmaci između tih diskretnih trenutaka određeni su periodom signala vremenskog vođenja (ili taktnog signala) T (engl. clock cycle, clock tick, clock period). Perioda T određena je frekvencijom signala vremenskog vođenja f (engl. clock rate): T= 1 / f Osnovna mjera performanse procesora, s motrišta korisnika, temelji se na procesorskom vremenu koje je potrebno za izvođenje programa: (procesorsko vrijeme) = Ncp xT, (1) odnosno: (procesorsko vrijeme) = Ncp / f gdje je Ncp broj perioda signala vremenskog vođenja potreban za izvođenje programa, T perioda signala vremenskog vođenja, a f frekvencija signala vremenskog vođenja. Performansa procesora je: Performansa = 1 / (procesorsko vrijeme)
96
4. POGLAVLJE: PERFORMANSA RAČUNALA
Primjer 4.1. Frekvencija signala vremenskog vođenja je f = 4 GHz, a broj perioda signala vremenskog vođenja koji je potreban za izvođenje programa neka je Ncp = 1 290 000. Procesorsko vrijeme je 1290000 / (4 x 109) = 322500 x 10"9 (procesorsko vrijeme) =0.3225 ms Performansa je: Performansa = 1 / (procesorsko vrijeme) = 1 / (0.3225 x 10~3) Performansa = 3.1 x IO3 s_1 U izrazu za performansu procesora (2) izravno se ne pojavljuje broj izvršenih instrukcija u programu. Broj perioda signala vremenskog vođenja potreban za izvođenje programa Ncp jednak je umnošku broja izvršenih instrukcija u programu i prosječnog broja perioda signala vremenskog vođenja po instrukciji. Prosječan broj perioda po instrukciji označit ćemo s CPI (clock cycles per instruction). Procesorsko vrijeme tada se računa kao: (procesorsko vrijeme) = (broj izvršenih instrukcija u programu) x CPI x T,
(3)
(procesorsko vrijeme) = ((broj izvršenih instrukcija u programu) x CPI) / f
(4)
odnosno:
Jednadžbe (3) i (4) sadržavaju tri važne arhitektonske značajke koja utječu na performansu procesora: prosječan broj perioda signala vremenskog vođenja po instrukciji (CPI), frekvenciju signala vremenskog vođenja (f) i broj izvršenih instrukcija u programu. U prvoj i trećoj arhitektonskoj značajki odražavaju se karakteristike skupa strojnih instrukcija. Da bismo dobili procesor sa što je moguće većom performansom, procesorsko vrijeme treba biti što je moguće kraće, a to znači u skladu s jednadžbom (4), treba smanjiti prosječan broj perioda po instrukciji (CPI), povećati frekvenciju signala vremenskog vođenja (f) i smanjiti broj (izvršenih) instrukcija u programu. Na žalost, sva su ova tri faktora međusobno ovisna. Na primjer, da bi se smanjio broj prosječnih perioda signala vremenskog vođenja po instrukciji (CPI), strojne instrukcije trebaju biti jednostavnije, odnosno određivati jednostavnije operacije. Raspoloživost samo jednostavnih instrukcija, međutim, povećava broj instrukcija u programu jer se u tom slučaju jedna složenija instrukcija mora zamijeniti većim brojem jednostavnijih instrukcija. Na primjer, instrukcija incM (inkrementiraj sadržaj memorijske lokacije M) se mora zamijeniti trima instrukcijama: ldrl,M, addir1,1 i stM,rh Povećanje frekvencije signala vremenskog vođenja f znači smanjenje ukupnog raspoloživog vremena za izvođenje instrukcije, što uz pretpostavku "očuvanja jednake količine posla" koju instrukcija treba obaviti znači povećanje broja perioda signala vremenskog vođenja po instrukciji. S druge strane, tehnološke značajke sklopova također određuju granice do kojih se frekvencija signala vremenskog vođenja može povećavati. Jedno od ograničenja povećanja frekvencije signala vremenskog vođenja jest i disipacija snage procesora, odnosno problemi koji nastupaju uslijed zagrijavanja silicijskog čipa na kojem je implementiran procesor. Naime, primarni uzrok disipacije snage je tzv. dinamička disipacija koja se odnosi na snagu, odnosno potrošak snage tijekom promjena stanja logičkih sklopova u procesoru (engl. switching). Snaga je u tom slučaju proporcionalna frekvenciji, ukupnom kapacitivnom opterećenju svakog od tranzistora i kvadratu napona. Budući da su frekvencija i snaga međusobno korelirani, jasno je da povećanje frekvencije utječe na snagu, a time i na probleme odvođenja topline koja se razvija u silicijskom čipu.
S. RIBARIČ - GRAĐA RAČUNALA
97
Na primjer, procesor AMD Opteron X4 koji radi na frekvenciji 2.5 GHz ima snagu^oko 120 W koja se pretvara u toplinu na čipu površine nešto veće od 1 cm2 i koju treba odvoditi da bi se osigurali normalni radni uvjeti za procesor. Jedno od rješenja koje je omogućilo porast frekvencije signala vremenskog vođenja je i smanjenje napona napajanja pa je u posljednjih 20 godina napon napajanja s 5V reduciran na samo IV (obratite pozornost da dinamička disipacija snage ovisi o kvadratu napona). Tablica 4.2. prikazuje porast frekvencije signala vremenskog vođenja (engl. clock rate) i snage za osam generacija Intelovih procesora (u razdoblju od 25 godina). Na temelju podataka iz tablice vidi se povezanost između frekvencije i snage. Naravno, broj tranzistora integriranih na čipu utječe na iznos snage, odnosno na disipaciju snage. CPI ovisi i o arhitektonskim značajkama procesora i računala, npr. o strukturi i organizaciji procesora, ali i o memorijskom sustava računala te o mješavini tipova instrukcija koje se rabe u programu. Procesor
Godina
Frekvencija signala vremenskog vođenja [MHz]
Snaga[W]
80286
1982.
12.5
3.3
80386
1985.
16
4.1
80486
1989.
25
4.9
Pentium
1993.
66
10.1
Pentium Pro
1997.
200
29.1
Pentium 4 VVillamette
2001.
2000
75.3
Pentium 4 Prescott
2004.
3600
103
Ćore 2 Kentsfield
2007.
2667
95
"ablica 4.2 Porast frekvencije signala vremenskog vođenja i snage za osam generacija Intelovih procesora
Primjer 4.2. Ilustrirajmo odnos frekvencije signala vremenskog vođenja (f) i prosječnog broja perioda signala vremenskog vođenja za instrukciju (CPI). Pretpostavimo da imamo dva računala (računalo A i računalo B) s istim skupom strojnih instrukcija, odnosno njihovi su procesori jednaki na razini ISA (Instruction SetArchitecture). Računala izvršavaju jednak program. Računalo A radi s frekvencijom signala vremenskog vođenja fA = 1.8 GHz. Računalo B radi s frekvencijom signala vremenskog vođenja fB = 1.0 GHz. Računala A i B, budući da imaju jednake procesore na razini ISA, imaju i jednak broj izvršenih instrukcija za program. Označimo s l broj izvršenih instrukcija za program. Stroj A ima prosječan broj perioda signala vremenskog vođenja za instrukciju CPIA jednak 2.0, stroj B ima CPIB jednak 1.2. Koje je računalo brže i za koliko? Broj perioda signala vremenskog vođenja za program (računalo A): I x 2.0 Broj perioda signala vremenskog vođenja za program (računalo B): I x 1.2
98
4. POGLAVLJE: PERFORMANSA RAČUNALA
Izračunajmo procesorsko vrijeme za računalo A: (procesorsko vrijemeA) = I x 2.0 x (1 /(1.8 x IO9)) = (1.111 x 10 9 )l Izračunajmo procesorsko vrijeme za računalo B: (procesorsko vrijemeB) = I x 1.2 x (1 / (1.0 x 109) = (1.2 x 10"9) I Računalo A je brže, i to za faktor: ((1.2 x 109) 0/(1.111x10" 9 ) I) = 1.08. U jednadžbi (4) koristi se prosječan broj perioda signala vremenskog vođenja po instrukciji CPI, odnosno broj potrebnih perioda signala vremenskog vođenja za izvršenje nekog programa računa se kao: (broj izvršenih instrukcija u programu) x CPI. Različite strojne instrukcije imaju različita vremena trajanja, odnosno za njihovo se izvođenje zahtijeva različit broj perioda signala vremenskog vođenja, a i njihova je učestalost pojavljivanja u programima različita. Za točniju ocjenu broja potrebnih perioda signala vremenskog vođenja za neki program uzima se u obzir prosječno trajanje svakog tipa instrukcije CPI. i broj izvršenih instrukcija tog tipa C, gdje / označava tip instrukcije (npr. instrukcije tipa registar - memorija, registar - registar, memorija - memorija). U tom je slučaju ukupan broj potrebnih perioda signala vremenskog vođenja za neki program: S(CP/,xC,.) /=1 pri čemu je n broj različitih tipova instrukcija koje se pojavljuju u programu.
4.2.1. MIPS - MILLIONS OF INSTRUCTIONS PER SECOND Jedna od vrlo često upotrebljavanih mjera za izražavanje performanse jest MIPS (Millions of Instructions Per Second) koja nam govori koliko milijuna instrukcija procesor izvrši u jednoj sekundi: MIPS = (broj izvršenih instrukcija u programu) / (vrijeme izvršavanja programa x 106) Ovako definirana mjera za performansu naziva se prirodan MIPS (engl. nativeMIPS) i intuitivno je razumljiva: brža računala imaju veči MIPS. No mjera MIPS izražava samo broj instrukcija u jedinici vremena, ali nam ništa ne govori o sposobnosti tih instrukcija, odnosno o složenosti operacija koje one određuju. Problemi koji nastaju ako se želi MIPS koristiti za uspoređivanje performansi računala su sljedeći. Dva se računala s različitim skupovima instrukcija ne mogu uspoređivati na temelju te mjere jer se broj instrukcija u programu razlikuje. Nadalje, mjera MIPS razlikuje se za isto računalo ovisno o programu koji se izvršava tako da računalo nema jednu mjeru za performansu izraženu u MIPS. Ako u izraz za MIPS uvrstimo umjesto vremena za izvršavanje programa, izraz za procesorsko vrijeme (jednadžba (4)) dobivamo: MIPS = f / (CPI x 106). Da bi čitatelj dobio predodžbu o performansama procesora izraženim pomoću mjere MIPS, poslužit će mu slika 4.1 koja prikazuje MIPS performansu i trend njezina porasta na temelju procesorskih porodica Intel Pentium i njegovih prethodnika 80x86, porodice Motorola 68000 i MIPS R 10000. Na slici 4.1 je uz porast performanse procesora prikazan i porast kapaciteta memorijskog čipa za DRAM (dinamičku memoriju s izravnim pristupom; poglavlje 9.) koji se pokorava Mooreovom zakonu.
S. RIBARIČ - GRAĐA RAČUNALA
Tb
TIPS
99
Legenda: k = 103 M = 106
9 G= IO 12
procesor^
T=10
nemorija
GIPS
R10000 Pentium ll^ Pentium^^* — ^ ^ 680 80486^—^
80386 68000 ^ ^ MIPS 80286^» /
O
Gb
1 Gb
Legenda: kb = 2'° bita Mb = 220 bita Gb = 230 bita Tb = 2<° bita
6 IYIL. M h% ^9 J5 U
64Mb
Mb \Mb
Mb
1 Mb
> kb °64kb
kIPS 2000
1990
1980
kb 2010
godina
SI. 4.1 Performansa procesora izražena pomoću mjere MIPS te trend njezina porasta
| Primjer 4.3. Procesor RISC arhitekture ima frekvenciju signala vremenskog vođenja 500 MHz, a budući da je oblikovan u skladu s izvornim načelima RISC, ima CPI = 1 (u svakoj se periodi signala vremenskog vođenja izvede jedna strojna instrukcija). Njegova performansa izražena mjerom MIPS iznosi: MIPS = (500 x 106) / (1 x 106) = 500, što znači da procesor RISC izvodi 500 milijuna instrukcija u sekundi. Uz mjeru prirodan MIPS koriste se još dvije mjere: vršni MIPS (engl. peak MiPS) i relativni MIPS (engl. relativeMIPS). Vršni MIPS dobiva se izborom mješavine strojnih instrukcija kojom se minimizira CPI čak i uz uvjet daje ta mješavina instrukcija potpuno neupotrebljiva u takvom programu. Da bi se mjera MIPS mogla upotrijebiti i za uspoređivanje performansi računala koja imaju različite skupove strojnih instrukcija, uvedena je mjera relativni MIPS. Ona je definirana kao: relativni MIPS = MIPSref (Vrijemeref / Vrijememjer), gdje je MIPSref dogovorena mjera MIPS za referentno računalo, Vrijemeref je vrijeme potrebno za izvršenje programa na referentnom računalu i Vrijernem.er vrijeme potrebno za izvršenje istog programa na računalu kojem se mjeri performansa. Relativni MIPS proporcionalan je vremenu izvršavanja samo za dani program i iste ulazne podatke. Osamdesetih godina prošlog stoljeća računalo dugovječne arhitekture VAX 11/780
100
4. POGLAVLJE: PERFORMANSA RAČUNALA
(tvrtka DEC) bilo je izabrano kao referentno računalo i bila mu je dogovorno dodijeljena performansa 1 MIPS. U literaturi nailazimo na performansu procesora izraženu s MOPS - Millions of Operations Per Second koja nam govori koliko milijuna operacija procesor izvodi u jednoj sekundi. 2a razliku od mjere MIPS, ovdje su operacije obično izabrane samo one koje su određene jednostavnim aritmetičkim i logičkim instrukcijama.
4.2.2.
FLOPS - FLOATING-POINT OPERATIONS PER SECOND U znanstvenim i komercijalnim primjenama računala rabe se operacije brojevima s pomičnim zarezom (zbrajanje, oduzimanje, množenje i dijeljenje) (engl. floating-point operation) gdje su operandi predočeni u obliku eksponent-mantisa i dopuštaju vrlo precizna računanja. Podaci predočeni u obliku eksponent-mantisa obično se u višim programskim jezicima specificiraju ključnim riječima kao: float, real, double precision. Za takva je područja primjene zanimljiva performansa računala izražena mjerom FLOPS (Floating-point Operations Per Second) - brojem operacija brojevima s pomičnim zarezom u sekundi. Ta je mjera, iako i ona ovisi o tipovima operacija brojevima s pomičnim zarezom koje se u programu koriste, za korisnika je bitnija od MIPS-a. Ona se razlikuje od MIPS-a po tomu što su operacije brojevima s pomičnim zarezom složenije i što bez sklopovlja namijenjenog upravo tim operacijama usporavaju rad računala, čak i kada je mjera MIPS za takva računala vrlo velika (prisjetimo se dualizma između sklopovlja i programske opreme). Nadalje, uporaba operacija brojevima s pomičnim zarezom zahtijeva i dodatne instrukcije koje su zadužene za "kućanske poslove" u vezi s tim operacijama kao što su dohvat opera nada i pohranjivanje rezultata operacija brojevima s pomičnim zarezom. I ovdje, kao i u slučaju mjere MIPS, vrijedi da se performansa FLOPS odnosi samo na određeni program i ne može se generalizirati kao jedinstvena mjera za performansu računala. Performansa suvremenih računala izražava se u MFLOPS (106 FLOPS), GFLOPS (109 FLOPS), TFLOPS (1012 FLOPS) i PFLOPS (1015 FLOPS); P - peta.
Primjer 4.4. Aritmetička jedinica Pentium procesora može generirati rezultat 64-bitne operacije s pomičnim zarezom u jednoj periodi signala vremenskog vođenja. Za Pentium 90 (koji radi s frekvencijom 90 MHz) performansa je 90 MFLOPS-a. Da bi čitatelj dobio predodžbu o performansi procesora izraženoj pomoću mjere FLOPS, navodimo neke podatke koji vrijede na početku 21. stoljeća: stolna računala (engl. desktop computer) imaju performansu reda GFLOPS-a, superračunala (engl. supercomputer) reda TFLOPS. Očekivana je performansa procesora koja se nalaze trenutno u razvoju PFLOPS (peta FLOPS = 1015 FLOPS)!
4.2.3.
SPEC (SYSTEM PERFORMANCE EVALUATION COOPERATIVE) MJERA Zbirka programa koju korisnik svakodnevno i učestalo koristi predstavlja dobru podlogu za procjenu performanse novog računala. Radno opterećenje računala (engl. workload"1.
S. RIBARIČ - GRAĐA RAČUNALA
101
definirano je programima iz zbirke i učestalošću njihova izvođenja. U postupku procjene performanse dva ili više računala korisnik može usporediti njihova vremena odgovora. Primjer 4.5. Pretpostavimo da se zbirka programa sastoji od 6 programa: P7 - P6. Slika 4.2 prikazuje vrijeme odgovora dvaju različitih računala za zbirku programa.
aćjnato 1 P1
P2
P3
P4
P5
P6
-.alo 2
P1
P2
P3
P4
P5
P6 vrijeme
SI. 4.2 Vrijeme odgovora računala 1 i računala 2 za zbirku programa iz radnog opterećenja
Vidimo da računalo 2 ima veću performansu (kraće ukupno vrijeme odziva) uz pretpostavku da su učestalosti izvođenja programa jednake. No ako je radno opterećenje takvo da se programi P2 i P5 izvode s većom učestalošću od drugih programa, može se pokazati da je računalo 1 bolji stroj za zadano radno opterećenje. Nažalost, korisnik je rijetko u situaciji da ima na raspolaganju računalo ili računala koja namjerava kupiti i za koja bi mogao procijeniti performansu na temelju iscrpnog eksperimentiranja s programima iz radnog opterećenja. Nadalje, vrlo mu često nisu ni raspoloživi niti poznati svi programi koji će u budućnosti činiti radno opterećenje računala. U tim se slučajevima procjena performanse temelji na ispitnim programima (engl. benchmark). Ispitni programi su realni ili umjetni programi koji su izabrani ili oblikovani za usporedbenu procjenu performansi računala ili procesora. Zbirka ispitnih programa (engl. benchmark suite) sastoji se od pažljivo izabranih programa koji trebaju cjelovito predstavljati određen razred primjene. Procijenjena performansa na temelju ispitnih programa ima vrijednost za korisnika u onoj mjeri u kojoj se radno opterećenje podudara sa zbirkom ispitnih programa. S druge strane, različite zbirke ispitnih programa olakšavaju usporedbu različitih procesora i računala. Zbirke ispitnih programa omogućuju da isporučitelji računalne opreme, ali i nezavisne tvrtke procjenjuju različite procesore i računala te objavljuju dobivene rezultate i na taj način olakšavaju potencijalnim kupcima izbor stroja. Potrebno je napomenuti da su ispitni programi prvenstveno namijenjeni procjeni performansi kada je raspoloživa sklopovska oprema i kada su na raspolaganju prevodioci (engl. compiler) koji su potrebni za prevođenje programa iz zbirke ispitnih programa. Većina je prevodioca takva da imaju
102
4. POGLAVLJE: PERFORMANSA RAČUNALA
u sebi ugrađene optimizacijske postupke koji se mogu uključiti ili isključiti. Da bi se izbjeglo podešavanje prevodioca svakom od programa iz zbirke ispitnih programa, treba se za cjelokupnu zbirku postaviti jedinstvena kombinacija optimizacijskih zastavica kojima se definira nepromjenjivi skup optimizacijskih postupka. Godine 1988. vodeći su svjetski proizvođači računalne opreme i sustava (IBM, Sun Microsystems, Appolo Comp., MIPS Computer Systems, Hewlett-Packard, Intel i drugi) osnovali udrugu SPEC (System Performance Evaluation Cooperative) kojoj je osnovni zadatak bio definirati i oblikovati standardan skup ispitnih programa za procjenu performanse. Na temelju tako definiranog skupa ispitnih programa ostvaruje se osnovni cilj: objektivnost procjene performanse, i to tako da niti jedan ispitni program niti postupak prevođenja tih programa ne mogu biti orijentirani i prilagođeni računalnom sustavu nekog određenog proizvođača. Naime, do 1988. proizvođači su performansu računala oglašavali na temelju pažljivo izabranih ispitnih programa koji su upravo za njihova računala pokazivala veću performansu u odnosu na druge konkurente na tržištu.To su postizali uporabom relativno kratkih ispitnih programa i njima posebno prilagođenim prevodiocima koji su prepoznavali programske odsječke tih programa i generirali posebno djelotvorne odsječke objektnog koda. Prva se zbirka ispitnih programa SPEC sastojala se od dvije skupine ispitnih programa: • Cint89 - četiri programa za cjelobrojnu obradu (engl. integer-processing program); • Cfp89 - šest programa koji su imali veliki broj operacija brojevima s pomičnim zarezom (dvostruke preciznosti) (engl. doubie-precision floating-point operation). Svih deset programa bili su dovoljno složeni (napisani u C i FORTRAN-u) i mogli su se rabiti za rješavanje stvarnih problema. SPEC 89 ispitna metoda pretpostavlja generiranje deset SPEC omjera (engl. SPECratio) različitih rezultata procjene performanse. Svaki od njih definirao je omjer između vremena izvršavanja /-tog programa iz zbirke Cint89 i/ili Cfp89 na računalu VAX 11/780 i ispitnom računalu. Integralna mjera za performansu računala SPECmark indeks predstavlja geometrijsku sredinu deset pojedinačnih SPEC omjera: [To SPECmark = 10/JJ SPEComjerf TT gdje ± ± Oj označava a1 x a2 x ... x an. /=1
*
M
Računalo VAX 11/780 bilo je referentno računalo i imalo je po definiciji 1 SPECmark. Primjer 4*6. Pretpostavimo da umjesto 10 ispitnih programa imamo samo tri ispitna programa A, B i C. Ispitivanja su pokazala da su vremena izvršavanja tih triju programa na referentnom računalu: t*A = 60s, t ^ = 25s i ^ = 50s. Vremena izvršavanja na ciljanom računaiu (onom kojem procjenjujemo performansu) su: = 45s, = 20s i t=c = 60s.
S. RIBARIČ - GRAĐA RAČUNALA
103
Omjeri između vremena izvršavanja na referentnom računalu i vremena izvršavanja na ciljanom računalu su: o t = t*A / f A = 1.333, o2 = t*B / r B = 1,250 i o3 = t* c / = 0.833. Integralna mjera za performansu ciljanog računala izražena geometrijskom srednjom
x o2 x o3 = Vi .333x1.25x0.833= 1.115 Na temelju dobivenog rezultata za ovaj bismo pojednostavljeni primjer mogli pretpostaviti da je performansa ciljanog računala za faktor 1.115 veća od performanse referentnog računala. Dvije mjere, SPECint89 i SPECfp89, daju dvije procjene performanse računala - jednu za cjelobrojnu obradu i jednu za obradu podataka predočenih brojevima s pomičnim zarezom. Integralna mjera za performansu računala SPECmarkindeks nam u slučaju ispitnih programa iz zbirke Cint89 i/ili Cfp89 govori koliko je puta performansa ciljanog računala veća u odnosu na performansu za referentno računalo tj. VAX 11/780. Na primjer, ako smo dobili da je SPECint89 jednak 5.5, to znači da ciljano računalo za zbirku cjelobrojnih ispitnih programa ima za faktor 5.5 veću performansu. Slika 4.3 prikazuje porast performanse procesora (u razdoblju 1978. - 2005.) relativno u odnosu na VAX 11/780 koji je uzet kao referentni stroj. Performansa je dobivena na temelju SPECint ispitnih programa. Vidimo da, npr. Intel Xeon (3 GHz) ima 4195 puta veću performansu u odnosu na VAX 11/780, a 64-bitni Intel Xeon (3.6 GHz) čak 6505 puta (!). g *0000
64-bit Intel Xeon, 3.6 GHz Intel Xeon, 3.6 GHz 6505 A M D Opteron, 2.2 G H z j Intel Pentium 4,3.0 GHz j r ^ S 4195 A M D Athlon, 1.6 G H z y » ^ ^ Intel Pentium III, ^ O G H z ^ r ^ Alpha 21264A, 0.7 GHz Aloha 21264,0.6 GHz ^ T 7 1267 xT* 993 '
i P l
9
looo
v
Alpha 21164,0.6 G H z ^ g Alpha 21164,0.5 G H z ^ « ^ Alpha 21164A, 0.3 G H z ^ ^
-tov
|
•M
Alpha 21064A, 0.3 G H z ^ > PowerPC604,0.1 GHz
100
Alpha 21064,0.2 GHz
3
'
HP PA-RISC, 0.05 GHz
1 1
IBM RS6000/540 / jr MIPS M 2 0 0 0 # ^ 24
MIPSM/120>r^i8 10
Sun-4/260/O9"
•
;
. /
•
VAX 8700
VAX-11/780
1978
„—**l,5VAlH1/785
""""T"^...
0< 1980
1982
»
1984
"" i
1986
i
i
i
i
i
i
1988
1990
1992
1994
1996
1998
i 2000
i ... 2002
*' 2004
i 2006 godine
Si. 4.3 Porast performanse procesora u odnosu na VAX 11 /780 (izvor: J. L. Hennessy, D. A. Patterson)
104
4.
POGLAVLJE: PERFORMANSA RAČUNALA
Od 1989. mijenjale su se zbirke ispitnih programa od zbirke SPEC89, preko SPEC92, SPEC95 SPEC2000 do SPEC2006, ali i referentna računala (VAX 11/780, SPARC Station 10/40, radna stanica s 296MHz UltraSPARC II procesorom) pa je bilo do danas ukupno 70 ispitnih programa u različitim ispitnim zbirkama. Zbirka ispitnih programa SPEC92 sastoji se od 6 cjelobrojnih ispitnih programa napisanih u programskom jezku C (espresso - program za minimizaciju logičkih funkcija; 13500 linija koda; li - LISP interpreter za rješavanje problema 9 kraljica, 7413 linija koda; eqntott - program za prevođenje Booleovih jednadžbi u tablice istinitosti, 3376 linija koda; compress - program za kompresiju podataka uporabom Lempel-Ziv postupka kodiranja 1503 linija koda; sc - računanje s UNIX tabličnim kalkulatorom, 8116 linija koda; gcc - GNU C prevodilac, 85589 linija koda) i 14 ispitnih programa s operacijama brojevima s pomičnim zarezom (12 napisanih u FORTRAN-u i 2 u programskom jeziku C). Tu zbirku programa čine programi za simulaciju sklopova (spice2g6,18476 linija koda), za simulaciju metodom Monte Carlo (doduc, 5334 linija koda), pa sve do programa za rješavanje problema iz područja hidrodinamike (hydro2d, 4461 linija koda). Zbirka ispitnih programa SPEC CPU 2006 sastoji se od 12 cjelobrojnih ispitnih programa (CINT 2006) od kojih je devet napisano u programskom jeziku C, a preostala tri u C++ te 17 ispitnih programa koji koriste operacije brojevima s pomičnim zarezom CFP 2006 (engl. floating-point benchmark) (6 u FORTRAN-u, 4 u C++, 3 u C i 4 mješovito FORTRAN i C). Zbirku cjelobrojnih ispitnih programa sastavljaju programi od GNU C prevodioca (gcc), programa za igranje šaha (sjeng), preko programa za igranje goa (go) do simulacije quantum računala (libquantum). Zbirka ispitnih programa koji koriste operacije brojevima s pomičnim zarezom sastoji se od programa za modeliranje metodom konačnih elemenata, preko programa za raspoznavanje govora do programa za molekularnu dinamiku i dinamiku fluida. Napomenimo da su samo tri ispitna programa iz zbirke SPEC89 "preživjela" i ostala uključena u zbirku SPEC2006. Udruga SPEC nudi i ispitne programe koji su namijenjeni procjeni performanse računala - poslužitelja (engl. server) orijentiranih prema radu s datotekama SPECSFS (file server benchmark) i wefc>-poslužiteljima SPEC Web. Primjer 4.7. Za zbirku SPECfp2000 od 14 ispitnih programa koji koriste operacije brojevima s pomičnim zarezom i referentno računalo Sun Ultra 5 i ciljano računalo temeljeno na 64-bitnom Intel Itanium 2 dobiveni su rezultati prikazani u tablici 4.3. Opaska: informaciju o ispitnim programima možete naći na i http://www.spec.org/cpu20Q0/CFP200Q
S. RIBARIČ - GRAĐA RAČUNALA
wupwise
1600
56.1
28,52
swim
3100
70.7
43.85
mgrid
1800
65.8
27.36
applu
2100
50.9
41.26
mesa
1400
108.0
12.96
galgel
2900
40.0
72.50
art
2600
21.0
123.80
equake
1300
36.3
35.81
facerec
1900
86.9
21.86
ammp
2200
132.0
16.67
lucafs
2000
107.0
18.70
fma3d
2100
131.0
16.03
sixtrac
1100
68.8
15.99
apsi
2600
231.0
11.25
SPECmark
105
27.12
ica 4.3. Rezultati ispitivanja performansi za računalo temeljeno na 64-bitnom Itanium 2 procesoru (zbirka SPECfp2000)
4.2.4 SINTETIČNI ISPITNI PROGRAMI Sintetični ispitni programi su „lažni" programi koji ne rješavaju niti računaju ništa korisno već svojom strukturom oponašaju statistiku koja se odnosi na učestalost tipova operacija i opera nada dobivenu analizom velikog skupa programa. Dva najpoznatija sintetička ispitna programa su Whetstone i Dhrystone. Whetstone ispitni program razvijen je 1972. i bio je izvorno napisan u programskom jeziku Algol (kasnije u FORTRAN-u, Pascalu i jeziku C). Izvorno se temeljio na statistici ponašanja programa koji su se izvršavali na računalu KDF9 u National Physical Laboratory, Engleska. Ispitni program Whetstone namijenjen je prvenstveno procjeni performanse za obradu podataka predočenih brojevima s pomičnim zarezom. Performansa se izražava u MWIPS [Millions of Whetstone Instructions Per Second). Dhrystone program razvijen je 1984. i predstavlja cjelobrojni ispitni program. Zajednička značajka oba ispitna programa jest da su relativno kratki - nekoliko stotina linija koda u višem programskom jeziku i pogodni su za "ugađanje" parametara optimizirajućih prevodioca što u izvjesnoj mjeri narušava objektivnost dobivenih procjena performanse.
106
4. POGLAVLJE: PERFORMANSA RAČUNALA
AMDAHLOV ZAKON Povećanje performanse računala jedan je od osnovnih ciljeva koji se želi ostvariti uporabom različitih metoda, postupaka i tehnika na području arhitekture računala. Poboljšanje, koje se ogleda u kraćem procesorskom vremenu izvršavanja, pokorava se Amdahlovom zakonu koji definira daje povećanje performanse dobiveno određenim poboljšanjem ograničeno iznosom u kojem se ta poboljšana značajka arhitekture koristi: (procesorsko vrijeme izvršavanja nakon poboljšanja) = (procesorsko vrijeme na koje se poboljšanjem utjecalo / iznos poboljšanja) + (procesorsko vrijeme izvršavanja na koje se poboljšanjem nije utjecalo). Amdahlov zakon možemo izraziti i jednadžbom za ukupno ubrzanje obrade s: 1 (1-0
f +
p
'7
gdje je f dio na koji se poboljšanjem ne utječe, p iznos poboljšanja. Primjer 4.8* Pretpostavimo da je procesorsko vrijeme izvršavanja za neki program 100 sekundi i da »bai se :ati brzinu množenja ako da nam prosklopovlje za povećati gram bude 2.5 puta ubrzanje za faktor 5.0? je f = 0.20. Za ul
Dio na koji se
2.5 020+
$ = 2.5,
1 . ( 1 7
020+
(1~ 020)
iz čega slijedi: 5.0 =
0.20p+0.80
odnosno p + 4 == p. Vidimo da nema rješenja, odnosno da nije moguće naći iznos poboljšanja p kojim bi se brzina izvođenja povećala za faktor 5!
S. RIBARIČ - GRAĐA RAČUNALA
107
5. POGLAVLJE
ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK 5.1. ZBIRNI JEZIK U uvodnim smo poglavljima već naglasili daje sklopovlju procesora jedino razumljiv strojni jezik (engl. machine language) u kojem su instrukcije i podaci predočeni sljedovima nula i jedinica. Instrukcije i podaci u obliku binarnih brojeva procesoru su prirodni i njima se djelotvorno koristi. No za čovjeka dugi sljedovi nula i jedinica predstavljaju skoro nepremostivu poteškoću u razumijevanju i pri njihovoj uporabi. Da bi se premostio jezični jaz između sklopovlja i čovjeka, razvijeni su viši programski jezici kao što su FORTRAN, Cobol, Basic, Pascal, C, C++, Java, LISP, Prolog i mnogi drugi koji omogućuju korisniku pisanje programa na puno višoj razini apstrakcije koja dopušta uporabu riječi i simbola kojima se čovjek mnogo lakše koristi. Viši programski jezici pružaju niz prednosti u odnosu na programiranje u strojnom jeziku: i) dopuštaju programeru razmišljanje i izražavanje na prirodniji način, uporabom oznaka na engleskom ili nekom drugom jeziku i primjenu algebarske notacije pa programi više nalikuju tekstu nego dugačkim tablicama binarno kodiranih simbola, ii) viši programski jezici podržavaju različite tipove podataka kao što su brojevi s pomičnim zarezom (engl. floating-point numbers) jednostruke ili višestruke točnosti, znakovi (engl. character), strukturirani tipovi podataka kao što su jedno- i višedimenzionalna polja (engl. array), zapisi (engl. record), nizovi znakova (engl. character string) i redovi (ili repovi) (engl. queue), iii) viši programski jezici oblikovani su tako da su prilagođeni namjeni što olakšava programiranje na specifičnom području. Na primjer, FORTRAN, C i C++ su namijenjen za znanstveno računanje, Cobol za poslovne aplikacije, LISP i Prolog za područje umjetne inteligencije i si., iv) programiranje u višim programskim jezicima višestruko povećava produktivnost programera, v) većina viših programskih jezika, uz neka proširenja, podržava samodokumentiranje programa (engl. self-documenting) kojim se povećava njegova čitljivost, te se lakše razumije njegova funkcija pa je time lakše i održavanje programa, vi) programi napisani u višim programskim jezicima prenosivi su - postupkom prevođenja pretvaraju se u binarni oblik koji je izvodljiv, u načelu, u bilo kojem računalu.
108
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK
Jasno je, međutim, da programi napisani u višem programskoj jeziku moraju biti prevedeni i računalu predstavljeni u strojnom jeziku. Prevođenje se obavlja programima koji su sastavni dio operacijskog sustava - prevodiocima (engl. compiler). Oni prevode program napisan u višem programskom jeziku - naziva se izvorni program - (engl. source program) u objektni program ili izvršljivi binarni program (engl. executable binary program). U mnogim se slučajevima, međutim, pojavljuje potreba za pisanjem programa u jeziku koji je vrlo blizak strojnom jeziku i nalazi se samo jednu razinu apstrakcije iznad njega. Takav se jezik naziva zbirni jezik ili asemblerski jezik (engl. assembly language). Naredba se u zbirnom jeziku predočava dvo-, tro- ili četveroslovčanim simbolima (nazivamo ih mnemonici) koji imaju značenje operacijskog koda u strojnoj instrukciji (polje operacijskog koda; slika 5.1), zatim slovčanom i/ili slovčano-numeričkom oznakom registara, memorijske lokacije ili operanda (polje operanda) koji sudjeluju u specificiranoj operaciji. Nadalje, zbirni jezik dopušta programeru uporabu oznaka koje se nazivaju labele (engl. label), koje se nalaze u polju labela i služe za identifikaciju određenih memorijskih riječi koje sadržavaju instrukcije ili podatke. Osim toga, omogućeno je i dokumentiranje programa pisanjem komentara u za to posebno predviđeno polje uz svaku instrukciju (polje komentara). Program napisan u zbirnom jeziku je također sklopovlju nerazumljiv i mora se prevesti u objektni program, točnije u objektnu datoteku (engl. object file), koja pored binarno predočenih strojnih instrukcija i podataka sadrži i informaciju potrebnu povezniku (engl. linker) i puniocu (engl. loader). Program koji izvorni program napisan u zbirnom jeziku pretvara u objektni program naziva se asembler (engl. assembler). (Opaska: vrlo se često zbirni jezik u žargonu naziva samo „asembler" (umjesto asemblerski jezik), jednako kao i prevodilac, što u nekim situacijama može izazivati zabunu.) Komentari pridruženi instrukcijama služe samo za dokumentiranje izvornog programa te se tijekom prevođenja zanemaruju. START polje labele
MOVE.W polje operacijskog koda
PRIV,DO
; dohvati
polje operanda
riječ s memorijske lokacije PRIV polje komentara
SI. 5.1. Oznake odgovarajućih polja u instrukciji u zbirnom jeziku
^ t) straktur^ u zbirnom jeziku: START MOVE. W. PRIV, DO
^
£ ' • l i l i ; :
; dohvati riječ s memorijske lokacije PRIV
START je labela koja se nalazi u polju labela, MOVE je mnemonik koji označava operacij u premještanja podataka, . w je sufiks pridružen mnemoniku i određuje da je podatak duljine riječi (npr. 16-bita), PRIV je simbol (labela) koja označava memorijsku lokaciju koja je izvor operanda, DO je oznaka registra koji ima funkciju odredišta, a dohvati riječ s memorijske lokacije PRIVje komentar koji će asembler tijekom prevođenja ignorirati. Slika 5.1 prikazuje odgovarajuća polja u instrukciji u zbirnom jeziku. Potonja će se instrukcija, na primjer, asemblerom za procesor MC 68000 prevesti u strojhu instrukciju predočenu ovim slijedom nula i jedinica: 0011 0000 0011 10000100 0000 0000 0000 uz pretpostavku da je PRIV = $4000 adresa memorijske lokacije. (Znak $ ispred broja
S.RIBARIČ- GRAĐA RAČUNALA
109
označava asembleru da slijedi zapis broja u heksadekadnoj notaciji.). Strojna će se instrukcija pohraniti u memoriji na četiri slijedne memorijske lokacije (svaka lokacija ima duljinu riječi od osam bita, odnosno duljinu jednog bajta).
5.1.1. IZVRŠLJIVE INSTRUKCIJE I PSEUDOINSTRUKCIJE Instrukcije u zbirnom jeziku mogu se podijeliti na izvršijive instrukcije (engl. executable instruction) i instrukcije koje su namijenjene upravljanju postupkom prevođenja (engl. assembler directive). Izvršijive se instrukcije asemblerom prevode u strojni jezik, dok se instrukcijama namijenjenim upravljanju asemblerom ne dodjeljuju binarni kodovi. Instrukcije za upravljanje asemblerom nazivaju se i pseudoinstrukcije. I one se su u zbirnom jeziku predstavljaju dvo-, tro- ili četveroslovčnim oznakama koje također asociraju na osnovnu funkciju upravljanja asemblerom.
Razmotrimo i upoznajmo se s nekim uobičajenim pseudoinstrukcijama: • NAM (name) dodjeljuje simboličko ime programu; • ORG {origin} govori asembleru gdje će podaci Hi program biti pohranjeni u memorijskoj jedinici; • DS (define storage) nalaže asembleru rezervaciju dijela memorijskog prostora; • DC (define constant) nalaže asembleru da pohrani konstantu u memoriju prije negoli će se izvršiti program; • EQU (equate) izjednačava simboličko ime s numeričkom vrijednosti; • END (end) označava asembleru da je to kraj izvornog programa i da ništa više nije preostalo za prevođenje. Ilustrirajmo njihovu uporabu na jednostavnom programu napisanom u zbirnom jeziku za procesor MC 68000 (bez upuštanja u ono što program zapravo radi): DATA EQU $6000 ; oznaci DATA dodijeljena je vrijednost $6000 PROGRAM EQU $4000 ; početna adresa programa ORG DATA ; počevši od adrese $6000 bit će pohranjeni podaci VALUE DS.B 1 ;rezerviran je 1 bajt u memoriji na adresi $6000 DS.B 1 ; još je 1 bajt rezerviran u memoriji na adresi $ 6001 - poravnanje na granicu riječi RESULT DS .W 1 ; rezervirana su dva slijedna bajta na $6002 i $6003 MASK EQU $000F ; oznaci MASK je pridružena vrijednost $000F ORG PROGRAM ; program započinje na memorijskoj lokaciji $4000 START MOVE. B VALUE, DO AND. B #MASK, DO MOVE. B DO, RESULTH-1 MOVE.B VALUE, DO LSR.B #4, DO MOVE.B DO, RESULT RTS END S TART ; pseudoinstrukcija označava kraj programa i pokazuje na početak programa ($4000)
110
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI
JEZIK
Ispis prevedenog izvornog programa izgledao bi ovako: 00006000 DATA EQU 00004000 PROGRAM EQU 00006000 006000
00000001
006001
00000001
006002
00000002 OOOOOOOF
VALUE RESULT MASK
00004000 START
$6000 $4000
ORG
DATA
DS.B
1
DS.B
1
DS.W
1
EQU
$000F
ORG
PROGRAM
MOVE.B
VALUE, DO
004000
10386000
004004
C03C000F
AND. B
#MASK, DO
004008
11C06003
MOVE. B
DO, RESULT+1
00400C
10386000
MOVE.B
VALUE"- DO
004010 004012 004016
E80S 11C06002 4E75
LSR.8
#4/ 1 DO, RESULT
MOVE.B RTS END
START
Pseudoinstrukcijama DATA EQU $6000 i PROGRAM EQU $4000 dodijelili smo oznakama (labelama) DATA i PROGRAM vrijednosti 6000 (heksadekadno), odnosno 4000 (heksadekadno). Labeia DATA definira početnu adresu memorijskog prostora u kojem će se pohraniti podaci, a labeia PROGRAM označava adresu memorijske lokacije prve izvršljive instrukcije programa. . i
Pseudoinstrukcija ORG DATA određuje da će podaci biti pohraftjeni u memoriji započevši od memorijske 6000 (heksadekadno). Za podatak VALUE, uporabom pseudoinstrukcije VALUE DS.B 1 rezervirana je jedna memorijska lokacija (8-bitna) s adresom 6000 (heksadekadno). Sljedeća pseudoinstrukcija DS.B 1 služi samo za tzv. poravnanje na granicu riječi (engl. align on word boundary) 16-bitne riječi RESULT. Naime, procesor MC 68000 zahtijeva poravnanje adrese podatka duljine riječi (oznaka . W) tako da ona bude parna. Pseudoinstrukcijom RESULT DS.W 1 predviđaju se za pohranu rezultata dvije memorijske lokacije 6002 i 6003 (heksadekadno). Pseudoinstrukc^a M A S K EQU $00OF dodjeljuje simboličkom imenu MASK vrijednost 000F (heksadekadno). Pseudoinstrukcijom ORG PROGRAM određujemo početak izvršljivog dijela programa. Prva se izvršljiva instrukcija (MOVE. B VALUE , DO) kojom započinje program nalazi na adresi 4000 (heksadekadno). Objektni program, tj. strojni program u kojem su instrukcije i podaci predočeni binarno, pohranjen umemoriji s početnom adresom $004000 izgledao W ovako: 004000
00010000 00111000
01100000 00000000 004004
11000000
*
\
S. RIBARIČ - GRAĐA RAČUNALA
004010
00111100 00000000 00001111 00010001 11000000 01100000 00000011 00010000 00111000 01100000 00000000 11101000
004012
00001000 00010001
004008
00400C
004016 _
i
111
11000000 01100000 00000010 01001110 01110101
Na temeljći oblika prethodnog objektnog programa zamislite kako bi izgledalo programiranje izravno u strojnom jeziku! (Opaska: u knjizi za izradu primjera programa za procesor MC 68000 korišteni su uređivač teksta (editor), asembler i simulator EASy68K v5.90 koji čitatelj može besplatno „skinuti" s http://www.easy68k.com) Pogledajmo što program iz Primjera 5.2. radi! Programom se rastavlja (raspakirava) bajt koji je pohranjen na lokaciji VALUE na dva 4-bitna dijela (engl. nibble) te se oni pohranjuju u dvije uzastopne lokacije RESULT i RESULT+1. Na primjer, ako je (VALUE) = 4A, odnosno (6000) = 4A, nakon izvođenja programa dobiva se (RESULT) = 04 i (RESULT+1) = 0A, odnosno (6002) = 04 i (6003) = 0A. Programski model procesora MC 68000 prikazan je na slici 6.18 (poglavlje Upravljačka jedinica). Izvedimo prethodni program instrukciju po instrukciju. Pretpostavimo daje početni sadržaj memorijskih lokacija 6000 4A, dok je 6002 i 6003 jednak 00. Nakon izvođenja instrukcije MOVE.B VALUE, DO u registru DO nalazi se 0000004A. Instrukcijom AND.B #MASK, DO izvodi se logička operacija I maske koja ima vrijednost 000F i sadržaja registra DO, rezultat se pohranjuje u DO: 0000004A 000F OOOOOOOA Sadržaj registra DO je sada OOOOOOOA. Instrukcijom MOVE.B DO, RESULT+1 se najmanje značajan bajt registra DO pohranjuje na memorijsku lokaciju RESULT+1, odnosno na 6003. Dobivamo (6003) = 0A.
112
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK
Instrukcijom MOVE.B VALUE, DO ponovno punimo najmanje značajan bajt registra DO s 4A: (DO) = 0000004A. Sljedećom instrukcijom LSR.B #4, DO posmičemo najmanje značajan bajt registra DO za 4 mjesta udesno. Rezultat posmaka za četiri mjesta udesno je (DO) = 00000004. Konačno, instrukcijom MOVE.B DO, RESULT se najmanje značajan bajt registra DO pohranjuje na memorijsku lokaciju RESULT, odnosno na 6002. Nakon izvođenja programa imamo raspakirani bajt 4A u (6002) = 04 i (6003) = OA.
5.1.2. MAKROINSTRUKCIJE Tijekom programiranja u zbirnom se jeziku često pojavljuje potreba za višekratnim ponavljanjem jednakog slijeda instrukcija u brojnim i različitim mjestima izvornog programa. Najjednostavnije je svaki put prepisati taj slijed instrukcija kada se pojavi potreba za njim. No ako je slijed dug i ako se često koristi, zbirni program postaje predug i nepregledan. Druga je mogućnost da se taj slijed preoblikuje u potprogram te da se on poziva kadgod je potreban. Taj pristup, međutim, ima nedostatak jer zahtijeva uporabu dviju dodatnih instrukcija (za pozivanje potprograma i za vraćanje iz potprograma) i dodatno procesorsko vrijeme za njihovo izvođenje. Jednostavno i djelotvorno rješenje problema učestalog ponavljanja jednakog slijeda instrukcija u zbirnom jeziku dobiva se uporabom makroinstrukcije (engl. macroinstruction). Makroinstrukcija - nova korisničko definirana problemsko orijentirana instrukcija zamjenjuje slijed instrukcija i tako se izbjegava višekratno ponavljanje jednakog slijeda instrukcija u zbirnom programu. Potrebno je naglasiti da će asembler tijekom postupka prevođenja zamijeniti makroinstrukciju i umjesto nje umetnuti u zbirni program slijed instrukcija (postupak se naziva ekspanzija). Pri upotrebi makroinstrukcije razlikujemo tri faze: i) definiranje makroinstrukcije, ii) pozivanje, iii) zamjenu, odnosno ekspanziju. Definicija makroinstrukcije sadržava: • zaglavije kojim se daje ime makroinstrukciji, • tijelo - slijed instrukcija u zbirnom jeziku • kraj. Makroinstrukcija se definira pomoću dvije organizacijske pseudoinstrukcije: MACRO i
ENDM. IME MACRO slijed instrukcija u zbirnom jeziku
ENDM Primjer 5.3. Pretpostavimo da se u našem izvornom programu u zornom jeziku za procesor MC 68000 učestalo pojavljuje potreba za slijedom instrukcija (programskim odsječkom) koji broji znakove u nekom nizu znakova. Početna adresa niza znakova neka se nalazi
S. RIBARIČ - GRAĐA RAČUNALA
113
u adresnom registru A4, a utvrđena duljina niza znakova neka se pohranjuje u registru podataka D8. Svaki od niza znakova kojima utvrđujemo broj znakova završava ASCII nuli znakom (vrijednost 0} koji se također broji.
OPET
MOVE.B MOVE. B ADD . B CMP.B BNE
# 0 , D8 ; postavi brojilo u 0 (A4) + , DO ; dohvati prvi znak i pohrani ga u DO # 1 , D8 ; inkrementiraj brojilo znakova # 0 , DO ; je li znak nuli - kraj niza? OPET ; nije - dohvati sljedeći znak u nizu
(Opaska: instrukcije MOVE. B # 0 , DO, ADD.B #1, D8 i CMP.B #0, DO koriste usputni način (engl. immediate) u kojem je podatak sastavni dio instrukcije. U zbirnom jeziku za MC 68000 taj je način adresiranja označen povisiiicom (#) koja prethodi vrijednosti podatka. Instrukcija MOVE.B (A4) +, DO koristi tzv. registarsko indirektno (neizravno) adresiranje s postinkrementiranjem (engl. address register indirect with postincrement) u kojem adresni registar/u našem slučaju A4, sadržava adresu memorijske lokacije, a procesor nakon dohvata podatka s memorijske lokacije određene sadržajem adresnog registra modificira sadržaj adresnog registra u skladu s duljinom operanda (za 1,2, ili 4) u našem slučaju (&k) + 1 jer je operand duljine jednog bajta (.B). Nakon izvršenja instrukcije MOVE . B (A4) +, DO novi je sadržaj adresnog registra pokazuje na sljedeći znak u nizu.) Budući da se potonji slijed instrukcija u našem izvornom programu pojavljuje više puta, upotrijebit ćemo makroinstrukciju i dati joj ime BROJI. Definirajmo makroinstrukciju BROJI: BROJI OPET
MACRO MOVE.B MOVE. B ADD.B CMP. B BNE ENDM
# 0 , D8 ; postavi brojilo u 0 (A4) + , DO ; dohvati prvi znak i pohrani ga u DO #1, D8 ; inkrementiraj brojilo znakova #0, DO ; je li znak nuli - kraj niza? OPET ; nije - dohvati sljedeći znak u nizu
Pogledajmo sada kako će izgledati izvorni program bez uporabe makroinstrukcije, a kako s njom: i) bez uporabe makroinstrukcije
OPET
MOVEA.L
Nizi,
A4
MOVE.B MOVE.B ADD.B
# 0 , D8 ( A 4 ) + , DO #1, D8
; postavi kazaljku na prvi znak u nizu N I Z 1 ; postavi brojilo u 0 ; dohvati prvi znak i pohrani ga u DO ; inkrementiraj brojilo znakova
114
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK
OPET
OPET
CMP.B BNE
#0, DO OPET
; je ti znak nuli - kraj niza? ; nije - dohvati sljedeći znak u nizu
MOVE. B
D8, COUNT 1
: pohrani duljinu N I Z 1 u COUNT1
MOVEA.L
NI22,
; postavi kazaljku na prvi znak u nizu NIZ2
MOVE.B MOVE.B ADD.B CMP.B BNE
#0, D8
MOVE. B
D8, COUNT2
: pohrani duljinu NIZ2 u COUNT2
MOVEA.L MOVE.B MOVE.B ADD.B CMP.B BNE
N123, A4 # 0 , D8 (A4)+ r DO # 1 , D8 # 0 , DO OPET
; postavi kazaljku na prvi znak u nizu NIZ3 ; postavi brojilo u 0 ; dohvati prvi znak i pohrani ga u DO ; inkrementiraj brojilo znakova ; je li znak nuli - kraj niza? ; nije - dohvati sljedeći žnak u nizu
MOVE .B
D8, COUNTS
: pohrani duljinu N I Z 3 U COUNT3
A4
; postavi brojilo u 0 ,; dohvati prvi znak i pohrani ga u DO ; inkrementiraj brojilo znakova ; je li znak nuli - kraj niza? ; nije - dohvati sljedeći zn^k u nizu
ii) uporabom makroinstrukcije:
MOVEA.L BROJI OPET
MACRO MOVE.B MOVE.B ADD.B CMP.B BNE ENDM MOVE. B
N I Z 1 , A4
; postavi kazaljku na prvi znak u nizu NIZ1
40,
D8 ( A 4 ) + , DO # 1 , D8 # 0 , DO OPET
; postavi brojilo u 0 ; dohvati prvi znak i pohrani ga u DO ; inkrementiraj brojilo znakova ; je li znak nuli - kraj niza? ; nije - dohvati sljedeći znaku nizu
D8, COUNT 1
: pohrani duljinu NIZl u COUNT1
S. RIBARIČ - GRAĐA RAČUNALA
115
.MOVEA.L BROJI
N I Z 2 , A4
; postavi kazaljku na prvi znak u nizu NIZ2
MOVE.B
D8, COUNT2
: pohrani duljinu NIZ2 u GOUNT2
MOVE A . L BROJI
N I Z 3 , A4
; postavi kazaljku na prvi znak u nizu NIZ3
MOVE. B
D8 , COUNT3
: pohrani duljinu NIZ3 u COUNT3
U ii) vidimo da se samo jednom u izvornom programu pojavljuje programski odsječak, odnosno definicija makroinstrukcije, a nakon toga se u izvornom programu rabi samo makroinstrukcija BEOJI. Naglasimo još jednom, tijekom prevođenja će asembler zamijeniti makroinstrukciju slijedom instrukciji koje se nalaze između MACRO i ENDM (postupak ekspanzije). Ekspanzija se događa pri svakom pojavljivanju makroinstrukcije - pomoću/tnakroinstrukcije se ne postiže ušteda memorijskog prostora potrebnog za
Jednak slijed instrukcija pogodan za uporabu makroinstrukcije može, međutim, uključivati različite načine specifikacije operanada (npr. različite registre) pri svakom korištenju. Taj problem rješavaju makroinstrukcije koje imaju listu formalnih parametara koji će se zamijeniti stvarnim parametrima tijekom prevođenja. U tom slučaju definicija makroinstrukcije izgleda ovako:
IME MACRO a, b, C slijed instrukcija u zbirnom jeziku
ENDM, gdje su a, b i c parametri koji se prenose.
5.2. RAZLOZI UPORABE ZBIRNOG JEZIKA Programiranje u zbirnom jeziku teško je i mukotrpno. Pisanje programa u zbirnom jeziku zahtijeva puno više vremena nego pisanje programa s istom funkcijom u višem programskom jeziku. Koji su onda razlozi programiranja u zbirnom jeziku? Dva su temeljna razloga: i) veličina objektnog (izvršljivog binarnog) programa i brzina njegova izvođenja. U mnogim je slučajevima objektni program (program u strojnom jeziku), koji je generiran prevodiocem za viši programski jezik, puno veći, odnosno zauzima puno više memorije od objektnog programa dobivenog prevođenjem programa u zbirnom jeziku uporabom asemblera. Razlog tome je što prevodilac za viši programski jezik treba generirati kod koji je dovoljno općenit da može raditi u različitim slučajevima
116
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK
i za različite konfiguracije računala. Programi u zbirnom jeziku pisani su ciljano za određeni procesor tako da se mogu koristiti brže strojne instrukcije koje nisu izravno raspoložive postupkom prevođenja programa u višem programskom jeziku. Na primjer, za dijeljenje s dva, prevodilac za viši programski jezik generirat će strojnu instrukciju DIV (divide), dok će programer u zbirnom jeziku za dijeljenje sa dva upotrijebiti instrukciju SHR (shift right) koja posmiče podatak udesno za jedno mjesto. Instrukcija SHR izvodi se mnogo brže od instrukcije DIV; ii) neke procedure zahtijevaju izravan i potpuni pristup sklopovlju procesora, odnosno računala, koji nije ostvariv u višim programskim jezicima. Na primjer, postupci rukovanja prekidima niske razine (engl. low-level interrupt) i rukovanje zamkama (engl. trap) u operacijskom sustavu ili pak postupci upravljanja u ugrađenim računalima za rad u stvarnom vremenu. Primjer 5.4. Ugrađeno računalo (engl embedded computer) koje se u automobilu koristi za upravljanje sustavom kočenja mora brzo i predvidljivo odgovoriti na događaje u vanjskom svijetu (npr. na proklizavanje kotača na zaleđenoj površini). Objektni program mora jamčiti daće ugrađeno računalo generirati odgovor na podražaj iz vanjskog svijeta u točno određenom intervalu - na primjer za 800 ns od trenutka kada senzor otkrije (detektira) proklizavanje. To jamstvo, nažalost, ne daje objektni program, tj. izvršljivi binarni program koji je generiran prevođenjem izvornog programa napisanog u višem programskom jeziku. Razlog je prevodilac koji generira objektni program koji je dovoljno općenit i ne vodi strogo brigu o izboru procesoru raspoloživih strojnih instrukcija i vremenu njihova izvršavanja. S druge strane, programer u zbirnom jeziku ima pregled i upravljanje nad izvođenjem svake strojne instrukcije, posebice nad vremenom trajanja njezinog izvođenja i može programom točno definirati trenutak ili vremenski interval u kojem će računalo odgovoriti signalom upućenom sustavu za kočenje. Ugrađena računala koja se koriste u pametnim karticama (engl. smart card), mobilnim telefonima, dječjim igračkama, video i glazbenim uređajima za zabavu, igraćim konzolama i si. moraju zadovoljiti stroge zahtjeve u pogledu brzine, cijene i potroška snage te se obično programiraju u zbirnom jeziku jer su mnoge takve aplikacije kritične i u pogledu raspoloživog memorijskog prostora i vremena izvođenja.
5.3. DVOPROLAZNI ASEMBLER Izvorni se program u zbirnom jeziku sastoji od niza redaka instrukcija i pseudoinstrukcija. Svaki redak sadržava instrukciju u zbirnom jeziku koja, zapravo, predstavlja tekst napisan u skladu sa sintaksom zbirnog jezika (labela, polje operacijskog koda, polje operanda, polje komentara). Prevodilac za zbirni jezik (asembler) trebao bi čitati redak po redak izvornog programa i prevoditi ga u strojni jezik. Postupak bi bio završen kada i posljednja instrukcija programa bude prevedena. No stvari nisu tako jednostavne - zbirni jezik koristi labele ili oznake za simboličko označavanje adresa memorijskih lokacija, konstanti i vrijednosti operanada koje usložnjavaju postupak prevođenja. Na primjer, asembler prethodnim postupkom ne može prevesti instrukciju grananja na ciljnu instrukciju koja je označena labelom ako se ta ciljna lokacija nalazi u retku koji asembler nije još pročitao, i to zato što redak tek slijedi i može se nalaziti negdje pri kraju programa. Asembler u trenutku prevođenja
S. RIBARIČ - GRAĐA RAČUNALA
117
instrukcije grananja ne zna adresu ciljne instrukcije i ne može prevesti instrukciju grananja sve dok ne prođe skoro kroz cijeli program. Taj se problem prepoznaje kao problem referenciranja unaprijed (engl. forward reference problem). Primjer 5.5, Prikažimo problem referenciranja unaprijed. Za programski odsječak u zbirnom jeziku:
LOOP
DONE
MOVE. L MOVE.W BEQ. S MOVE.W ADD.L
DO, D2 LENGHT, D1 DONE (AO) +, D2 D2, DO
BNE MOVE.L
LOOP DO, TOTAL
•
; granaj na DONE ako je LENGTH - 0
!
7
(Opaska: u instrukciji BEQ. S DONE sufiks . S se upotrebljava, u skladu s zbirnim jezikom za MC 68000, kao oznaka prevodiocu da se koristi referenciranje unaprijed te da je ciljna instrukcija na udaljenosti (broj bajtova) koja se može izraziti duljinom jednog bajta.) U trenutku kada asembler čita redak: BEQ. S DONE
; granaj na DONE ako je LENGTH = 0
ne može prevesti instrukciju u strojni kod jer mu je simbolička adresa DONE, odnosno adresa ciljne instrukcije nepoznata. Problem referenciranja unaprijed obično se rješava tako da asembler dvaput čita tekst zbirnog programa. Svako se takvo čitanje naziva prolaz (engl. pass) pa se takav asembler naziva dvoprolazni asembler. U prvom prolazu asembler gradi tablicu simbola (engl. symbol table) koja sadržava sve simbole i njihove vrijednosti. Simboli su ili labele, ili vrijednosti koje su dodijeljene simboličkim imenima uporabom pseudoinstrukcija, npr. MASK EQU $ 0 0 0 F. Da bi dodijelio vrijednost simbolu koji se nalazi u polju labele instrukcije, asembler treba znati adresu te instrukcije koju če ona stvarno imati tijekom izvršavanja objektnog programa. To znači da asembler prolazeći kroz zbirni program mora svakoj instrukciji i podatku pridružiti adresu. To se postiže uporabom posebnog brojila koje se naziva brojilo instrukcijskih lokacija (engl. ILC - Instruction Location Counter) čiju vrijednost asembler obnavlja tijekom prevođenja. Na početku prvog prolaza, inicijalno, vrijednost brojila instrukcijskih lokacija postavljena je na 0. Čitanjem svake instrukcije u retku, asembler povećava njegovu vrijednost u skladu duljinom instrukcije (npr. brojem bajtova ili, općenito, brojem riječi od kojih se ta instrukcija sastoji). Kada asembler naiđe na pseudoinstrukciju, ORG postavlja vrijednost brojila na onu koju određuje ta pseudoinstrukcija.
118
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK
Primjer 5,6. Za program iz primjera 5.2 prikažimo vrijednosti brojila instrukcijskih lokacija: Duljina DATA PROGRAM VALUE RESULT MASK START
EQU EQU ORG DS.B DS.B DS.W
$6000 $4000 DATA 1 1 1
EQU ORG MOVE*B AND.B MOVE.B ; MOVE,B LSR.B MOVE.B V RTS
$000F $4000 VALUE, DO #MASK, DO DO, RESULT+1 VALUE, DO # 4 , DO DO, RESULT
Opaska: duljltia
-
-
1 1 2
4 4
4 2
ILC 0000 0000 6000 6000 6001 6002 6003 4000 4000 4004 4008 40OC 4010 4012 4016
bajtd^ti^
Tijekom prvog prolaska asembler osim tablice simbola generira još i tablicu pseudoinstrukcijai t ^ l i c u o p ^ operacijskih kodoya sadržava mnemonik institrfe^ d z n a ^ tb asembleru biti p o ^ i ^ i» ^htog^r^^^^tes^^ kr^u ^ vrijednosti brojila Instrukcijskih lokacija, asembler generira konačnu tablicu simbola. Illlllllllll^
' Za program iz pmr^mŠ^ na temelju starija brojila instrukcijskih lokacija ILC tablica s i m b o l a ^ t ^ ^ ^ o ^ta^tc^
DATA MASK
000F
PROGRAM
4000
VALUE
6000
RESULT
6002
START
4000
—
-
-
Tablica 5.1, Tablica simbola Polje dodatne informacije može sadržavati duljinu polja pridruženog simbolu, informaciju mijenja ti simbol vrijednost ako se program puni na različitim adresama, je li simbol dosežljiv izvan tog programskog modula i si.
5.RIBARICI- GRAĐA RAČUNALA
119
Tijekom prvog prolaska asembler utvrđuje jesu li instrukcije u zbirnom jeziku napisane u skladu sa sintaksom zbirnog jezika. Na primjer, ako je neki mnemonik asembleru nepoznat ili ako se komentar pojavljuje u polju operanada, ili ako tablica simbola sadržava višestruko definiran isti simbol, ili pak sadržava nedefiniran simbol (nije mu dodijeljena vrijednost), onda će asembler signalizirati grešku i generirati listu s izvještajem o greškama. U tom se slučaju obustavlja daljnji postupak prevođenja. Ako nema pogrešaka, asembler prolazi još jednom (drugi prolaz) kroz izvorni program redak po redak. Ako redak sadržava instrukciju, asembler umeće binarni uzorak koji odgovara toj instrukciji u objektni program koji postupno "raste" prolaskom asemblera redak po redak kroz izvorni program. U svakoj liniji asembler rješava i simboličko referenciranje zamjenom simbola s njemu pridruženoj vrijednosti (koju nalazi u tablici simbola ili tablici pseudioinstrukcija). Ako redak sadržava pseudoinstrukciju kojom se definira vrijednost podatka (npr. DC - Define Constant), asembler će umetnuti odgovarajuću vrijednost koja će biti pohranjena na toj adresi. Uz sve to, asembler tijekom drugog prolaza obavlja aritmetičke operacije koje su potrebne da bi se odredile vrijednosti pomaknuća u slučaju instrukcija grananja (engl. branch offset). Na kraju postupka prevođenja asembler generira i informaciju koja je potrebna povezniku (engl. linker) kao što je, npr. vrijednost vanjskih simbola / labela (onih koje program referencira u drugim programskim modulima) te vrijednost simbola koji označava početak programa. Primjerice, za program iz primjera 5.6. asembler EASy68K će nakon uspješnog prevođenja generirati ispis koji sadrži strojni kod, ispis izvornog programa te poruke:
No errors detected No warnings generated a tome će slijediti ispis tablice simbola:
SYMBOL TABLE INFORMATION Symbol-name Value DATA MASK PROGRAM RESULT START VALUE
6000 F 4 000 6002 4 000 60 00
Asembler generira objektnu datoteku koja sadržava binarni prikaz programa i podataka te dodatnu informaciju koja je potrebna povezniku i puniocu: i) zaglavlje datoteke u kojem se opisuje veličina i položaj dijelova koji su sastavni dijelovi te datoteke; ii) tekstualni segment - sadržava strojni kod programa; iii) podatkovni segment - sadržava binarni prikaz podataka iz izvornog programa; iv) informaciju o premjestivosti - pokazuje na instrukcije i podatke koji ovise o apsolutnim adresama. Referenciranje takvih instrukcija i podataka mora se mijenjati ako se program premješta u memoriji; v) tablicu simbola koja sadržava adrese vanjskih labela (onih koje program referencira u drugim programskim modulima) i listu neriješenih referenciranja;
120
5. POGLAVLJE: ZBIRNI JEZIK I PREVODIOCI ZA ZBIRNI JEZIK
vi) informaciju potrebnu za otkrivanje i otklanjanje pogrešaka
- sažet opis načina prevo-
đenja tako da program za otkrivanje pogrešaka može naći korespondenciju između adrese svake instrukcije i retka u kojem se instrukcija nalazi u izvornom programu. Slika 5.2. prikazuje shematski strukturu objektne datoteke.
zaglavlje datoteke
tekstualni segmenti
podatkovni segment
informacija o premjestivosti
tablica simbola
informacija potrebna za otkrivanje pogrešaka
SI. 5.2 Struktura objektne datoteke
5.4. POSTUPAK PREVOĐENJA ZBIRNOG PROGRAMA Slika 5.3 prikazuje postupak dobivanja objektnog programa kad se program sastoji od nekoliko izvornih programa (programskih modula) koji su napisani u zbirnom jeziku. Svaki se od njih nezavisno prevodi asemblerom u objektni program - izvršljivi binarni program. Programski modul obično referencira potprograme i podatke koji su definirani u drugim programskim modulima ili u knjižnici programa (engl. program library) u kojoj se nalaze već gotovi programi. Poveznik (engl. linker) kombinira i povezuje objektne programe i programe iz knjižnice programa u izvršljivu datoteku (engl. executable file) tj. konačni objektni program koji računalo može izvesti.
SI. 5.3 Postupak dobivanja objektnog programa kada se program sastoji od nekoliko izvornih programa
Postupak prevođenja instrukcija iz zbirnog jezika u strojne instrukcije predstavlja preslikavanje 1 - 1 , odnosno instrukciji u zbirnom jeziku dodjeljuje se pripadajuća strojna instrukcija. Vrlo se često u složenim primjenama kombiniraju programi napisani u višem programskom jeziku s programima napisanim u zbirnom jeziku (tzv. hibridni pristup). Ovi posljednji koriste se za dijelove koji su vremenski kritični. Slika 5.4 prikazuje putove prevođenja programa koji su napisani u višim programskim je-
5.RIBARICI- GRAĐA RAČUNALA
121
zicima i programa u zbirnom jeziku. Vidimo da zbirni jezik može imati dvostruku ulogu: prevodilac prevodi program napisan u višem programskom jeziku (izvorni program) u program u zbirnom jeziku, a zatim se on asemblerom prevodi u objektni program. U drugoj je ulozi izvorni program napisan u zbirnom jeziku i asemblerom se prevodi u objektni program. Vidimo na slici 5.4 da prevodilac može izravno prevesti program napisan u višem programskom jeziku u objektni program (bez generiranja zbirnog programa). Prevodioci koji ne generiraju program u zbirnom jeziku brži su od onih koji zahtijevaju i asembler na putu prevođenja. No takvi prevodioci koji izravno generiraju objektni program moraju obaviti mnoge zadatke koje obavlja i asembler (određivanje adresa i kodiranje instrukcija sljedovima nula i jedinica).
SI. 5.4 Putovi prevođenja programa
5.5. PUNILAC (ENGL. LOADER) Izlaz iz poveznika ima oblik datoteke koja se pohranjuje u sekundarnoj memoriji. Punilac je zadužen za prijenos te datoteke u radnu memoriju. Ovisno o raspoloživom memorijskom prostoru isti program može biti smješten u različitim dijelovima memorije za svako njegovo izvršavanja. Punilac je zadužen za prilagođavanje svih adresa programa u skladu sa stvarnim lokacijama na kojima je program pohranjen. Poveznik pretpostavlja da se objektni program pohranjuje u memoriji na lokaciji s adresom 0. No ako je stvarna početna adresa A, tada se sve apsolutne adrese moraju povećati za A Taj zadatak treba obaviti punilac Punilac obavlja sljedeće glavne funkcije: i) na temelju informacije iz zaglavlja objektne datoteke određuje potreban memorijski prostor za tekstualni i podatkovni segment, ii) kopira tekstualni i podatkovni segment iz objektne datoteke u radnu memoriju, iii) mijenja adrese (povećava ih za A) gdje je to potrebno, iv) postavlja parametre programa (ako ih program ima) na stog jer se program promatra kao procedura koju poziva programska rutina koja je sastavni dio operacijskog sustava, v) inicijalizira sadržaje svih registara uključujući i registar kazalo stoga, vi) grana na pobudniprogram (engl. start-up routine) koji poziva glavni programski modul prevedenog programa. Nakon povratka iz glavnog programskog modula, pobudni program završava program sistemskim pozivom te vraća upravljanje operacijskom sustavu.
5.RIBARICI- GRAĐA RAČUNALA
128
6. POGLAVLJE
UPRAVLJAČKA JEDINICA 6.1. UVOD Upravljačka jedinica generira upravljačke signale i njima pobuđuje i koordinira sve aktivnosti unutar procesora, ali i u svim ostalim funkcijskim jedinicama računala (u memorijskoj jedinici, ulaznim-izlaznim jedinicama). Upravljačka jedinica procesora mora općenito podržati četiri sljedeće temeljne funkcije: i) uspostavljanje određenog stanja tijekom svakog instrukcijskog ciklusa (podsjetimo se, instrukcijski ciklus jedne strojne instrukcije čine dvije faze: PRIBAVI i IZVRŠI), ii) određivanje sljedećeg stanja na temelju trenutnog stanja, stanja zastavica u statusnom registru i stanja na ulaznim upravljačkim linijama procesora, iii) pohranjivanje informacije koja opisuje tekuće stanje u kojem se procesor nalazi, iv) generiranje upravljačkih signala za izmjenu podataka između procesora i drugih funkcijskih jedinica. Primjer 6.1. Ako je tijekom instrukcijskog ciklusa ulazno-izlazna jedinica generirala zahtjev za prekid koji je signalnom linijom upućen procesoru i ako je stanje prekidne zastavice I (interrupt) u statusnom registru takvo da je prekid omogućen, tada će upravljačka jedinica odrediti da je sljedeće stanje - stanje koje odgovara posluživanju prekidnog zahtjeva (funkcija ii)), a ne dohvat sljedeće instrukcije iz slijeda instrukcija. No prije negoli krene na izravno posluživanje prekida, upravljačka jedinica mora pohraniti informaciju koja opisuje tekuće stanje u kojem se procesor nalazi (funkcija iii)). Upravljačka jedinica treba generiranim slijedom upravljačkih signala podržati pribavljanje instrukcije, dekodiranje instrukcije, njezino izvršavanje te prijenos upravljanja s instrukcije na instrukciju u programu (engl. instruction sequencing). Prijenos upravljanja s instrukcije na instrukciju preduvjet je automatskog izvođenja programa. Na prvi pogled, najjednostavnija metoda upravljanja slijedom izvođenja instrukcija jest ona koja je korištena u računalu EDVAC (Electronic Discrete Variable Computer) (J. Mauchley i J. P. Eckert, 1945.): svaka strojna instrukcija ima adresno polje koje sadržava adresu instrukcije koja će se sljedeća izvršiti. Format instrukcije prikazan je na slici 6.1. Primjećujemo da je instrukcija četveroadresna: adrese u adresnim poljima A1 i A2 određuju memorijske lokacije na kojima su se nalazili operandi, adresno polje A3 specificira memorijsku lokaciju na kojoj će se pohraniti rezultat operacije (npr. rezultat zbrajanja ili množenja). Adresno polje A4 određuje memorijsku lokaciju na kojoj se nalazi sljedeća instrukcija.
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
adresno polje A1
adresno polje A2
adresno polje A3
adresne• polje A4
op5
I r operacijski i
adrese operanada (adrese izvorišta podataka)
— • adresa S;ljedeće instrukcije
kod
adresa rezultata (adresa odredišta)
SL 6.1 Format strojne instrukcije za računalo EDVAC
Nedostatak predloženog rješenja očit je: instrukcija koja osim polja operacijskog koda ima četiri adresna polja koja sadržavaju adrese memorijskih lokacija (izvorišta operanada, odredište rezultata te kazaljku na sljedeću instrukciju) zahtijevaju veliki broj bitova, odnosno veliku duljinu. Na primjer, uz pretpostavku da je polje operacijskog koda duljine 8 bita, a kapacitet radne memorije skromnih 4K, potrebna duljina instrukcije je 8 + 4 x 12 = 56 bita. Druga metoda određivanja instrukcije koja će se sljedeća izvršiti zasniva se na opravdanoj pretpostavci da program predstavlja niz strojnih instrukcija koje su uzastopno pohranjene na slijednim memorijskim lokacijama. To znači, ako se instrukcija ^ nalazi na adresi A, onda ona ima jednoznačno određenu nasljednicu - instrukciju l2 koja se nalazi na memorijskoj lokaciji kojoj je adresa A + 1. Pažljivi će čitatelj u ovome prepoznati važnu ulogu registra programskog brojila PC čiji se sadržaj tijekom faze PRIBAVI automatski inkrementira tako da na kraju faze PRIBAVI pokazuje na sljedeću instrukciju. Zaista, ulogu četvrtog adresnog polja - kazaljke na sljedeću instrukciju preuzelo je programsko brojilo PC. Ovisno o duljini instrukcije (broja riječi od kojih se sastoji instrukcija) i adresne zrnatosti memorije (poglavlje 3.), sadržaj programskog brojila povećava se za različite vrijednosti.
Procesori CISC arhitekture imaju promjenjivu duljinu instrukcije (npr. od 2 do 22 bajta) ovi$n<* o vrsti e p e r ^ c ^ ^ t i pc^toika i načinu adresiranja pa se sadržaj programskog brojila PC tijekom faze PRIBAVI povećava za vrijednost od 2 do 22. Procesori RISC arhitekture imaju "čvrstu"duljinu instrukcije. Na primjer, 32-bftni RISC procesor ima duljinu instrukcije 32 bita pa se sadržaj programskog brojila PC tijekom faze PRIBAVI povećamo • za CISC procesore sadržaj se programskog brojila tijekom faze PRIBAVI mijenja u PC promjenjiv i ovisi o duljini Instrukcije čije je pribavljanje u tijeku; . . .. • za RISC procesore sadržaj se programskog brojila tijekom faze PRIBAVI mijenja u PC PC + k, gdje je k konstanta i ovisi o"čvrstoj"duljini Instrukcije i adresnoj zrnatosti memorije. Automatsko izvođenje programa zahtijeva i prijenos upravljanja s instrukcije na instrukciju kada one nisu slijedne: nasljednica instrukcije je ciljna instrukcija koja nije na adresi A + k. Razlikujemo dva glavna slučaja prijenosa upravljanja s instrukcije l1 na ciljnu instrukciju lc: i) prijenos upravljanja unutar istog programa; ii) prijenos upravljanja između različitih programa.
5.RIBARICI- GRAĐA RAČUNALA
130
6.2. PRIJENOS UPRAVLJANJA UNUTAR ISTOG PROGRAMA Prijenos upravljanja s instrukcije na instrukciju kada one nisu slijedne unutar istog programa obavlja se instrukcijama grananja (njih smo već upoznali u poglavlju 3.). Razlikujemo instrukcije bezuvjetnog i uvjetnog grananja. Ponašanje instrukcije bezuvjetnog grananja možemo opisati ovako: PC<-X, gdje je X adresa ciljne instrukcije ili adresna sastavnica na temelju koje se može odrediti adresa ciljne instrukcije. Pozor, promjena sadržaja programskog brojila obavlja se tijekom faze IZVRŠI instrukcije grananja. Sadržaj programskog brojila PC mijenja se bezuvjetno, odnosno ne provjeravaju se bilo kakvi uvjeti na temelju kojih bi se mogla spriječiti promjena sadržaja programskog brojila.
£
I ,
Izvođenje instriHccfje l^ezuvjetnog g r ^ M M ^ asocira na ^ J g Ima ^ p o s t ^ taKifK)} tijekom ft^ IZV^Hn&ruk^^ tako da ee u sljedećoj fazi PRIBAVI biti pribavljena (ciljna) instrukcija s memorijske
Instrukcija uvjetnog grananja izvodi se tako da se tijekom njezine faze IZVRŠI ispituje je li uvjet C zadovoljen ili ispunjen (C je obično posljedica neke prethodne instrukcije) i ako je uvjet C zadovoljen, tada se modificira sadržaj programskog brojila PC «- X. Ako uvjet nije zadovoljen, sadržaj programskog brojila PC se u fazi IZVRŠI ne mijenja, što znači da se u sljedećoj fazi PRIBAVI pribavlja slijedna instrukcija u programu (nema grananja na ciljnu instrukciju) - pribavlja se instrukcija koja neposredno slijedi instrukciji grananja. U poglavlju 3. smo vidjeli da se zastavice statusnog registra SR sadržavaju informaciju o rezultatu neke aritmetičke ili logičke instrukcije te da njihovo stanje ispituju instrukcije uvjetnog grananja (model CISC procesora). U našem primjeru RISC modela vidjeli smo da same instrukcije uvjetnog grananja ispituju izravno sadržaj registra R[rc] u skupu registara opće namjene i ovisno o njegovom sadržaju modificiraju sadržaj programskog brojila (granaju ili ne granaju na ciljnu instrukciju).
6.3. PRIJENOS UPRAVLJANJA IZMEĐU RAZLIČITIH PROGRAMA Suvremeni stil programiranja u prvi plan stavlja upotrebu programskih procedura. One su temelj strukturiranih programa. Pod procedurom se obično podrazumijeva program, odnosno dio programa koji je napisan u višem programskom jeziku i kojem je dodijeljeno ime. Procedura obično provodi operacije na podacima koji su definirani pomoću parametara. Procedura se može pozivati s bilo kojeg mjesta u programu s različitim parametrima za svaki poziv. One su temelj strukturnih programa. Veliki su programi organizirani u manje jedinice - procedure koje su pogodnije za rukovanje, jednostavnije za ispitivanje ispravnosti
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
djelovanja te jednostavnije za razumijevanje i dokumentiranje. Programi su organizirani kao skup procedura koje se međusobno pozivaju. Pozivi procedura predstavljaju zapravo prijenos upravljanja s jednog programa na drugi. Obično proceduru napisanu u zbirnom jeziku (asembleru) nazivamo potprogram. Razlikujemo i program koji poziva potprogram. On se često naziva i glavni program, dok se pozvani naziva potprogram. No s obzirom da se pozivi mogu gnijezditi, tj. potprogram može pozivati drugi potprogram, taj treći potprogram itd., koristimo nazive pozivajući program (engl. calling) - onaj koji poziva, i pozvani program (engl. called) - onaj koji se poziva. Prijenos upravljanja sličan je kao i kod instrukcija uvjetnog ili bezuvjetnog grananja, ali s jednom važnom razlikom: kad se obavi zadatak definiran pozvanom procedurom (potprogram om), upravljanje se mora vratiti na instrukciju u pozivajućem programu, koja neposredno slijedi instrukciji koju je proceduru pozvala. Drugi važan slučaj prijenosa upravljanja između dva programa koji je složeniji od prethodno opisanog slučaja događa se tijekom prekida (engl. interrupt). U tom slučaju govorimo o prekinutom programu - programu čije je izvođenje prekinuto zahtjevom za prekid, i prekidnom programu - programu na koje se prenosi upravljanje i koji obično poslužuje ulaznoizlaznu jedinicu koja je generirala zahtjev za prekid. Prijenos upravljanja između programa može nastati uslijed iznimke (engl. exception) (Primjer 6.4.). Pod iznimkom podrazumijevamo posebne okolnosti kojima se narušava normalno stanje procesora i izvođenje tekućeg programa. Prekidi se mogu promatrati kao podskup iznimke. Primjer 6.4. Iznimke mogu biti dvojake: i) vanjske iznimke su posebne okolnosti izazvane događajerp izvan procesora. Na primjer, vanjski je uređaj generirao zahtjev za prekid ili se pak dogodila pogreška na sabirnici, ili je aktiviran signal za ponovno upuštanje procesora u rad (reset); ii) unutarnje iznimke su posebne okolnosti kao posljedica događaja unutar procesora. Na primjer, tijekom izvođenja instrukcije za cjelobrojno dijeljenje sklopovlje procesomutvrđujedaJe djelitelj jednako ili je procesor otkrto
6.3.1. PRIJENOS UPRAVLJANA IZMEĐU POZIVAJUĆEG I POZVANOG PROGRAMA Razmotrimo prvo jednostavniji slučaj - prijenos upravljanja između pozivajućeg i pozvanog programa, odnosno glavnog programa i potprograma. U skupu strojnih instrukcija nalazimo instrukcije za prijenos upravljanja s pozivajućeg programa (označimo ga s P}) i pozvanog programa (potprograma) - označimo ga s P2 (slika 6.2). Označimo tu strojnu instrukciju mnemonikom CALL koja u polju operanda ima oznaku X: CALL X, gdje je X adresa (ili se ciljna adresa određuje na temelju X) ciljne instrukcije - prve instrukcije potprograma (slika 6.2).
5.RIBARICI- GRAĐA RAČUNALA
132
P prva instrukcija određena na temelju X
slijed in struke i
CALL;
instrukcija koja neposredno slijec instrukciji CALL X u P ,
RET
SI. 62 Odnos između pozivajućeg P1 i pozvanog programa P2
Tijekom faze IZVRŠI instrukcija CALL X izvodi se u dva slijedna koraka: 1. korak: Sadržaj PC-a (koji pokazuje na sljedeću instrukciju u Pl; slika 6.2) pohranjuje se na za to predodređenu memorijsku lokaciju S: S PC; 2. korak: X (ili adresa izračunata na temelju X) prenosi se u PC: PC «- X. Posljedica 1. koraka je pohrana povratne adrese na memorijsku lokaciju S. Posljedica izvođenja 2. koraka je priprema programskog brojila PC za dohvat ciljne instrukcije (prve instrukcije pozvanog (pot)programa) u sljedećoj fazi PRIBAVI. Prijenos upravljanja natrag s pozvanog potprograma P2 na pozivajući (glavni) program P1 obavlja se strojnom instrukcijom RET (return). Ona je posljednja instrukcija u programu ? r Tijekom njezine faze IZVRŠI obavlja se sljedeće: PC<-S, sadržaj memorijske lokacije S, koja sadržava povratnu adresu, smješta se u programsko brojilo PC. U sljedećoj fazi PRIBAVI pribavlja se instrukcija iz P1 i to ona koja neposredno slijedi instrukciji CALL X. Nažalost ovako opisana CALL X instrukcija ne podržava gniježđenje poziva programa. Slika 6.3 prikazuje što će se dogoditi ako program P1 instrukcijom CALL X poziva (pot)program P2, a ovaj instrukcijom CALL Y poziva (pot)program P3. Uporabom samo memorijske lokacije S u kojoj se pohranjuje povratna adresa događa se sljedeće: nakon prvog poziva na memorijsku lokaciju S pohranjuje se adresa instrukcije 1 (slika 6.3). Nakon drugog poziva na S se pohranjuje adresa instrukcije 2, pri čemu je bespovratno izgubljena povratna adresa koja pokazuje na instrukciju 1. Izvođenjem instrukcije RET u (pot)programu P3 uzima se sadržaj iz S i smješta u programsko brojilo PC te se upravljanje prenosi na instrukciju 2. Za sada je sve u redu, međutim, instrukcijom RET u (pot)programu P2 smješta se sadržaj iz S u PC - upravljanje će se prenijeti na instrukciju 2 istog (pot)programa (na memorijskoj lokaciji S pohranjena je adresa instrukcije 2!) - prijenos upravljanja natrag na program P1 neće se nikada dogoditi. Problem gniježđenja je ozbiljan problem jer je na temelju analiza uzoraka pozivanja i vraćanja iz procedura za programe napisane u višim programskim jezicima utvrđen neprekinuti
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
slijed gniježđenja, odnosno dubina gniježđenja pet i više. Slijed gniježđenja prekida se instrukcijom RET. Procesor mora podržati i na razini strojnih instrukcija pozivanje i gniježđenje poziva potprograma.
SI. 6.3. Problem gniježđenja poziva u slučaju instrukcije CALL X kada se ona izvodi u sljedeća dva koraka: S «- PC i PC <- X, pri čemu je S memorijska lokacija predviđena za pohranu povratne adrese
Kako se problem gniježđenja rješavao u računarskoj povijesti? Opisat ćemo dva načina prije negoli predložimo zadovoljivo rješenje. Arhitekti u tvrtki DEC (Digital Equipment Computer) problem gniježđenja riješili su za malo računalo PDP-8 na sljedeći način: svaki pozvani (pot)program P. imao je "zaglavlje" S. - memorijsku lokaciju na kojoj se pohranjivala povratna adresa. S se nalazila na mjestu na kojem je trebala biti prva instrukcija pozvanog programa. Prva prava instrukcija pozvanog programa nalazila se na memorijskoj lokaciji koja slijedi neposredno zaglavlju. Pozivanje potprograma izvodila je instrukcija JMS X (Jump to Subroutine) tako da se povratna adresa, tj. sadržaj programskog brojila pohranjivala u zaglavlje potprograma X - lokaciju S]t nova vrijednost programskog brojila X automatski se inkrementirala tako da je njegov sadržaj X+1 pokazivao na prvu instrukciju potprograma. Kod sljedećeg (gniježđenog) poziva nova se povratna adresa pohranjivala u zaglavlje pozvanog potprograma. Trag povratnih adresa bio je sačuvan. Vraćanje natrag - prijenos upravljanja s pozvanog na pozivajući program obavljalo se instrukcijom JMPIX (Jump indirect to X).To je instrukcija indirektnog (neizravnog) skoka koja se izvodi tako da se program grana na ciljnu adresu X, ali se sadržaj memorijske lokacije X ne tumači kao instrukcija, već adresa na kojoj se sljedeća instrukcija nalazi. Primjer 6.5,
'
Pretpostavimo da je sadržaj 16-bitne memorijske lokacije M jednak (M)=03FF (heksadekadno) i daje sadržaj memorijske lokacije (G3FF) - 01B7. Izvođenjem "obične" instrukcije JMP M sadržaj će programskog brojila na kraju njezine faze IZVRŠI biti (PC) = 03FF što znači da će se tijekom sljedeće faze PRIBAVI dohvatiti prva riječ nove instrukcije tj. 01B7. No izvođenjem instrukcije indirektnog skoka JMP I M sadržaj programskog brojila PĆ će na kraju njezine faze IZVRŠI biti (PC) = 01B7 što znači da će se tijekom sljedeće faze PRIBAVI dohvatiti prvariječInstrukcije koja je smještena na memorijskoj lokaciji 01B7.
5. RIBARICI - GRAĐA RAČUNALA
134
Instrukcijom JMPIX, gdje je X adresa zaglavlja potprograma dohvaćala se povratna adresa i uspješno se obavljalo vraćanje iz ugniježđenih (pot)programa (slika 6.4). pohranjuje se adresa
pohranjuje
SL 6.4 Rješenje problema gniježđenja poziva uporabom instrukcija JMS i JMP IX
Opisano rješenje zaista podržava gniježđenje proizvoljne dubine, ali ima jedan nedostatak - ne podržava rekurzivno pozivanje (pot)programa. Drugo ćemo rješenje problema gniježđenja prikazati s već poznatim elementima. Sjetimo se instrukcije brl (Branch and link) za naš model RISC procesora (poglavlje 3.): brira, rb
; R[ra] <- PC, PC «- R[rb]
Instrukcija brl ra, rb pohranjuje povratnu adresu ujedan od registara u skupu od 32 registra opće namjene R[ra], a zatim puni programsko brojilo PC s 32-bitnim sadržajem registra
Rlrbl Ako sadržaj registra R[rb] predstavlja adresu prve instrukcije pozvanog (pot)programa, dogodit će se grananje, odnosno prijenos upravljanja s P na P . Povratak se obavlja instrukcijom bezuvjetnog grananja: brra
; PC <- R[ra]
kojom se sadržaj registra R[ra], koji je povratna adresa, smješta u programsko brojilo PC. Gniježđenje pozivanja i uspješno vraćanje iz potprograma omogućeno je uporabom instrukcija brl ra, rb i br ra i pažljivim izborom registara iz skupa registra opće namjene.
Primjer Pretpostavimo da registar R[28] sadržava adresu potprograma P2, registar R[29] potprograma P3 i registar R[23] adresu potprograma P4. Iz glavnog programa P1 pozvat će se potprogramP^ imtrukcyom: brirZm
;R[2]<-PC,PC<-R[28]
pri čemu se povratna adresa pohranjuje u registar R[2].
124
6.
POGLAVLJE: UPRAVLJAČKA JEDINICA
Potprogram P2 poziva potprogram P3 izvođenjem instrukcije: brl r3, r29,
pri čemu se povratna adresa pohranjuje u R[3], I konačno, iz P3 se poziva potprogram P4"4: brlr15,r23
pri čemu se povratna adresa pohranjuje u registru R[15]. Vraćanje se iz ugniježđenih programa obavlja se instrukcijama brrIS, brr3, br r2. Slika 6.5 prikazuje slijed pozivanja i vraćanja iz potprograma za prethodni primjer. P.
Mr2fr28
brifis
SI. 6.5 Primjer pozivanja i vraćanja iz potprograma uporabom instrukcija brl ra, rb \brrb
Nažalost, ni ovo rješenje ne podržava rekurzivno pozivanje (pot)programa. Prije negoli pogledamo kako se rukuje rekurzivnim procedurama (ili rekurzivnim potprogramima), razmotrimo još jedan važan detalj u vezi s programskim procedurama - prijenos parametara između pozivajućeg i pozvanog programa. Naime, često je potrebno pozvanom programu prenijeti neke parametre ili, pak, pozvani program mora vratiti neke vrijednosti. Postoje tri glavna načina prijenosa parametara: i) prijenos parametara preko registara (engl. parameter passing via registers), ii) prijenos parametara preko memorijskih lokacija (engl. parameter passing in memory), i i i) prijenos parametara preko stoga (engl. stack) (engl. passing parameters on the stack). U načinu i) pozivajući program priprema podatke koji su potrebni pozvanom programu tako da ih pohranjuje u registre procesora. Pozvani program prije povratka sprema rezultate u registre kojima može pristupiti pozivajući program. Broj raspoloživih registara je ograničavajući čimbeniku ovom jednostavnom načinu izmjene podataka. Pri prijenosu parametara preko memorijskih lokacija parametri se pohranjuju izravno na memorijske lokacije odmah nakon instrukcije za poziv potprograma. Potprogram mora u tom slučaju modificirati povratnu adresu u skladu s dobavljenim parametrima.
5. RIBARICI - GRAĐA RAČUNALA
136
Treći način prijenosa parametra temelji se na uporabi stoga, i to tako da se parametri polažu na stog, a potprogram ih skida s vrha stoga i premješta u registre procesora. Podrobnije o prijenosu parametara načinima ii) i iii) upoznat ćemo se nešto kasnije u ovom poglavlju. Primjer 6.7. Ilustrirajmo programskim odsječkom za MC 68000 prijenos parametara preko registara. {Opaska: programski model procesora MC 68000 prikazan je na slici 6.18.) Pretpostavimo da treba prenijeti potprogramu SUBR dva parametra: duljinu spremnika podataka BUFL i njegovu početnu adresu BUFFER. Programski odsječak pozivajućeg (glavnog) programa izgleda ovako: MOVE. w #BUFL, DO ; duljinu spremnika pohrani u registar DO MOVEA. L #BUFFER, AO ; početna adresa spremnika u A0 JSR SUBR ; poziv potprograma SUBR (Opaska: instrukcija MOVE. W #BUFL, DO koristi usputni način adresiranja (engl. immediate) u kojem je podatak sastavni dio instrukcije (poglavlje 5.). Na primjer, ako je BUFL jednako 0100 (hekshdekadao) onda će se instrukcija MOVE. W #BUFL, DO prevesti u 303C 0100 (heksadekadno) a posljedica njezina izvođenja bit će smještanje 0100 (heksadekadno) u registar DO.). Instrukcija MOVEA, L #BUFFER, AO (MOVEA - Move to Address R^gister) smještava početnu adresu spremnika u adresni registar A0. Tako na primjer, ako je spremnik BUFFER veličine 256 bajtova određen s: DATA EQU $4000 ORG DATA BUFFER DS.B 256 instrukcija MOVEA. L #BUFFER, A0 prevest će se u 207C 00004000. Nakon prijenosa upravljana instrukcijom JSR SUBR, pozvani potprogram ima parametre BUFL i BUFFER u registru DO, odnosno registru A0.
6.4. REKURZIVNE PROGRAMSKE PROCEDURE (REKURZIVNI POTPROGRAMI) Najjednostavnije možemo definirati rekurzivnu programsku
proceduru ili rekurzivni pot-
program kao programsku strukturu koja sama sebe poziva. Formalno, rekurzivni program (procedura ili potprogram) P može se prikazati kao kompozicija n osnovnih instrukcija Sj (koje ne sadržavaju P) i samog programa P: P = IIP [Sj, P]. Uočavamo da se rekurzivni program P pojavljuje na lijevoj i desnoj strani potonjeg izraza. Primjer 6.8. U višem programskom jeziku PROLOG, koji se koristi na području umjetne inteligencije, možemo precizno definirati pretka sa činjenicom da su naši roditelji naši (prvi) preci, ali i činjenicom da su i preci naših roditelja naši preci, kao i to da su preci naših predaka naši preci:
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
predakod (X,Y):- roditelj_od (X, Y). predak_od (X, Y)roditelj_od (Z, Y), predak_od (X, Z). Prva nam naredba govori daje X predak od Y ako je X roditelj od Y (u POLOG-u se znak tumači kao "ako"). Druga nam naredba govori da je X predak od Y ako je Z roditelj od Y i ako je X predak od Z (u PROLOG-u se znak, (zarez) tumači kao logičko I). Iz matematike, ali i iz programiranja poznajemo rekurziju. Na primjer, faktorijela n! ima reku rzivn u definiciju: 1.0! = 1; i 2. za n > 0, (n+1)! = (n + 1) (n!) Uočava se da se u rekurzivnoj definiciji faktorijela nalazi s lijeve i desne jednakosti. Drugi su primjer Fibonaccijevi brojevi koji se rekurzivno mogu definirati kao: 1.F0 = O.F, = 1:i 2. Fn = Fn-1 + Fn-2, za n G Z+ i n a 2. Iz programiranja poznajemo problem Hanojskih tornjeva koji se jednostavno rješava uporabom rekurzije. Prikažimo vrlo općenito rekurzivno pozivanje potprograma najednom primjeru (slika 6.6): glavni program rekurzivni potprogram SUB
SI. 6.6 Prikaz rekurzivnog pozivanja
Glavni program u jednom trenutku instrukcijom CALL SUB poziva potprogram SUB. Povratna adresa u glavni program je A. Prenosi se upravljanje na potprogram SUB. Izvode se instrukcije u potprogramu SUB i u jednom se trenutku izvodi instrukcija u pozvanom potprogramu CALL SUB - potprogram SUB sam sebe poziva! Predviđena povratna adresa je B. Ovim se pozivom ponovo prenosi izvođenje na prvu instrukciju potprograma (označena labelom SUB). Ponovo se izvodi slijed instrukcija u potprogramu i ponovo se s CALL SUB poziva potprogram itd. Ovako predočena rekurzivna struktura, osim što ilustrira samopozivanje nema nikakav praktičan značaj. Naime, rekurzivno pozivanje će se događati do beskonačnosti (naravno, teorijski razmatrano) (slika 6.7).
5. RIBARICI - GRAĐA RAČUNALA
138
oo
CALLSUB A:
SI. 6.7 Rekurzivno pozivanje do beskonačnosti
Da se rekurzivni program ne bi pozivao do beskonačnosti, potrebno je u rekurzivni program ugraditi dodatni kontrolni "mehanizam" kojim će se ograničiti broj rekurzivnih pozivanja. Slika 6.8 ilustrira takav dodatni "mehanizam". Vidimo da će se u tom slučaju samopozivanje obavljati sve dok je N > 0. Ako je, na primjer, početna vrijednost za N bila 3 (definirali smo je u glavnom programu i prenosimo je kao parametar rekurzivnom potprogramu), onda potprogram SUB samo dva puta poziva samog sebe. glavni program rekurzivni potprogram SUB
SUB:
N: = 3 CALLSUB A:
N: = N-1 IF (N>0)THEN CALLSUB B:
RET
SI. 6.8. Kontrolirano samopozivanje potprograma
Rješenje problema rekurzivnog pozivanja i uspješnog vraćanja iz rekurzivnih poziva nudi stog (engl. stack).
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
6.4.1. STOG Stog se obično definira kao LIFO (Last In First Out -zadnji unutra, prvi van) dinamička struktura podataka. S implementacijske točke motrišta stog predstavlja LIFO memorijsku strukturu koja uključuje vremensku sastavnicu u svoje uređenje podataka:"najstariji"podatakje na dnu stoga, dok je "najmlađi" (onaj koji je posljednji pohranjen ili položen na stog) na vrhu stoga. Stogom se rukuje samo dvjema operacijama: i) položi podatak na stog (engl. push), ii) uzmi podatak sa stoga (engl. pop ili pull). Treba posebno naglasiti da obje operacije imaju pristup samo vrhu stoga. Izvođenjem operacija push i pop dinamički se mijenja stog - kažemo da on "raste" kada se podaci polažu na vrh stoga i da se on "smanjuje" kada se podaci uzimaju s vrha stoga. Rast ili smanjivanje stoga "prati" poseban registar koji se naziva kazalo stoga SP (engl. stack pointer). (Opaska: registar kazalo stoga se u literaturi (npr., L. Budin i sur.) naziva i kazaljka stoga). Kazalo stoga SP sadržava adresu stoga, i to tako da njegov sadržaj pokazuje na vrh stoga, odnosno na memorijsku lokaciju koja odgovara vrhu stoga. Sadržaj kazala stoga se automatski mijenja izvođenjem push i pop operacija, i to na sljedeći način: • polaganjem podatka na vrh stoga (operacija push) sadržaj kazala stoga SP automatski se umanjuje - kažemo da stog raste u smjeru padajućih adresa; • uzimanjem podatka s vrha stoga (operacija pop) sadržaj kazala stoga SP automatski se povećava - kažemo da se stog smanjuje u smjeru rastućih adresa; Obično me studenti pitaju što je razlog takvom pomalo neobičnom pravilu da stog raste u smjeru padajućih adresa - osim objašnjenja da su razlozi povijesni, nema drugog (opravdanog) razloga. (Opaska: za registar kazalo stoga koristi se i naziv registar kazaljke stoga (L. Budin i sur.)) Primjer 6.9. Slika 6.9 prikazuje stanje stoga i sadržaj kazala stoga SP prije i poslije izvođenja operacija push i pop. Primjećujemo da u oba slučaja (izvođenje push i pop) sadržaj kazala stoga SP prati "disanje" stoga. Operacijom pop svrha stoga uzetje podatak međutim, kako je ta operacija zapravo čitanje sadržaja memorijske lokacije, a ona nije destruktivna, podatak b će ostati u memoriji, ali nije više element stoga, čitatelj se može u to jednostavno uvjeriti - ako se nakon stoje izvedena operacija pop izvede operacija push (npr. push d), podatak d će "prekriti" a sadržaj kazala stoga SP će poprimiti vrijednost mmmm-4 (slika 6.10). Neki procesori imaju instrukcije s mnemonicima PUSH (ili PSH) i POP (ili PUL) namijenjene operacijama sa stogom. Procesor MC 68000 nema instrukcije push i pop već umjesto njih koristi instrukciju MOVE, Na primjer, instrukcija
MOVE/L DO, - (A7) pohranjuje 32-bitni sadržaj registra DO na vrh stoga, dakle ima funkciju operacije push. (Opaska: potonja instrukcija rabi registarsko indirektno (neizravno) adresiranje s predekre-
mentiranjem (engl. address register indirect with predecrement) kojim prije negoli se odredi adresa odredišta operanda procesor oduzima 1 od sadržaja adresnog registra (A7), koji ima funkciju kazala stoga, za svaki bajt operanda - stog raste u smjeru padajućih adresa.)
5.RIBARICI- GRAĐA RAČUNALA
140
ft
an
...
.. ••
£ £
'Ci-: £
lili £ e ili e
mmmmxissMt.
E
£ £ £ £
«ft
£ -Ć £
»
" . . - - . - -o £ •••: £
I
I
I
!
£ £ £ £ - a E £ £ £
I
£ £ £ •"-" £ £
SI. 6.9 Stanje stoga i sadržaj kazala stoga SP prije i poslije izvođenja operacija push i pop Procesor MC 68000 obavija zadatak operacije uzimanja podatka s vrha stoga (pop) instrukcijom
MOVE.L (A7)+, DO kojom se s vrha stoga 32-bitni podatak premješta u registar podataka DO. Potonja instrukcija rabi registarsko indirektno (neizravno) adresiranje s postinkrementiranjem
(engl. address register indirect with postincrement; poglavlje 5.) - stog se smanjuje u smjeru rastućih adresa.
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
mmmm -6 mmmm -5 mmmm - 4
registar kazalo stoga SP mmmm-3
rrimmm -3 m m rrt m - 2 mmmm trt m nrt m
mmmm-6 mmmm-5
registar kazalo stoga SP
mmmm -4
mmmm -4 mm m m-3
a
mmmm -2 mmmm mmmm SI. 6.10 Podatak b nije element stoga i zato će se "prekriti" operacijom push d Razumijevanje djelovanja stožnog mehanizma (stoga i registra kazala stoga SP) iznimno je važno jer se on koristi u postupcima grananja u potprograme, u postupcima rekurzivnog pozivanja programskih procedura (rekurzivnih potprograma) te u posluživanju prekida, odnosno iznimaka. Na stog se privremeno pohranjuju podaci kao što su: • povratna adresa koja osigurava pravilan povratak iz potprograma ili procedura; • parametri i rezultati koji se izmjenjuju između pozivajućeg i pozvanog programa; • tekući status ili stanje procesora koje je nužno potrebno za pravilan povratak iz prekidnog programa i iznimki te za pravilan nastavak prekinutog programa; • korisničko definirani podaci LIFO strukture. Budući da razlikujemo podatke koji su namijenjeni upravljačkim funkcijama i podatke koji su korisničko orijentirani i koji se pohranjuju u stog, možemo očekivati da će procesori podržavati više stožnih struktura koje se mogu klasificirati kao upravljačke i korisničke. Vratimo se sada problemu pozivanja potprograma i rekurzivnog pozivanja potprograma, odnosno programskih procedura. Već smo spomenuli da se problem rekurzivnog poziva-
5.RIBARICI- GRAĐA RAČUNALA
142
nja i uspješnog vraćanja iz rekurzivnih poziva može riješiti uporabom stoga. Uz pretpostavku da upravljačka jedinica procesora podržava stožni mehanizam, možemo sada preinačiti funkciju CALL instrukcije i to na sljedeći način: Tijekom faze IZVRŠI instrukcija CALL X izvodi se u dva slijedna koraka, ali tako da u prvom koraku koristi stog: 1. korak: Pohranjuje se sadržaj programskog brojila PC na stog (operacija push PC); (Povratna adresa se privremeno pohranjuje na stog), 2. korak: X (ili adresa izračunata na temelju X) prenosi se u PC: PC <- X. Tako definirano ponašanje CALL X instrukcije zahtijeva i preinaku instrukcije vraćanja iz potprograma RET. Ona se sada izvodi tako da uzima s vrha stoga povratnu adresu i smješta je u programsko brojilo PC.Tijekom faze IZVRŠI strojna instrukcija RET izvodi operaciju: pop PC
Ovdje moramo napomenuti da instrukcija RET uzima s vrha stoga "na slijepo" podatke koji se smatraju da su povratna adresa, međutim, ako je u međuvremenu sadržaj stoga modificiran, može se dogoditi da "skinuti" podaci s vrha stoga nisu povratna adresa. I f '
i I
J i
.
" '
•
.
'
v
V^
Pretpostavimo da pozivajući program P1 poziva potprogram SUBR. Nakon što potprogram SUBRobavi^adatak, instrukcijom RET prenosi upravljanje natrag na pozivajući program P r Pretpostavimo daje A 32-bitna povratna adresa (adresa instrukcije u programu P1 koja neposredno slijedi instrukciji CALL) te da je memorija u kojoj je organiziran stog bajtno adresno zrnata. Slika 6.11 a) prikazuje stanje stoga i kazala stoga SP neposredno prije grananja u potprogram, dika 6.11 b) prikazuje njihovo stanje neposredno nakon grananja u potprogram te, konačno, slika 6.11 c) prikazuje stanje stoga i kazala stoga SP neposredno nakori povratka u pozivajući program. Na slici 6.11 b) vidimo da je 32-bitna povratna adresa (koju smo označili $ A) zapravo sadržaj programskog koja se nalazi na adresi A. Povratna je adresa zapisana u obliku slijeda od 4 bajta: od PC[7:0] - označava najmanje značajan bajt povratne adrese, do PC[31; 24] - označava najznačajniji bajt povratne adrese. Na slici 6.11 c) vidimo daje stanje stoga i kazala stoga identično onom kofe je bilo neposredno prije pozivanja potprograma SUBR. Ono što zamjećujemo jesttiag izvođenja-sadržaji itremor^skih toMc^a^ ali pozor sada ova četiri bajta PC[7:0] - PC[3 V24] nisu elementi koji pripadaju stogu.
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
bajt
registar kazalo stoga SP mmmm -4
a) fegstar kazalo stoga SP mni fniit mmmm -7 mmmm -6
mmmm -8
11111 l U U i i f g j - ^ m in irt " 3
Sto
ililililili^^ v/-
mm:»1 lili' 1R
IIP .;-. -
- .
:
gjK igg
*
BiliSffifB! mmmm -5
V -;
PC 17:«
S i l i l M
registar kazato stoga SP
Slit: —
mmmm-1 K ^ S l i l l l l l l ; mmsmmr
SI. 6.11
(Opaska: opisane operacije određene instrukcijama CALL i RET koje rabe stog, ovisno o vrsti procesora, imaju različite mnemonike. Na primjer, procesor MC 68000 koristi mnemonik
5.RIBARICI- GRAĐA RAČUNALA
144
JSR (Jump to Subroutine) koji određuje operaciju pozivanja potprograma, te mnemonik RTS (Return from Subroutine) za povratak iz potprograma. Naravno, obje instrukcije rabe stog za pohranu povratne adrese, odnosno za uzimanje povratne adrese s vrha stoga.) Primjer 6.11. Sada kad smo se upoznali sa stogom i njegovom ulogom u prijenosu upravljanja između pozlvajućeg i pozvanog programa, možemo pogledati i prijenos parametara preko memorijskih lokacija (engl. parameter passing in memory) za procesor NIC 68000. (Opaska: ovdje nam je potrebno poznavanje mehanizma stoga samo radi razumijevanja "ugađanja" povratne adrese.) Pretpostavimo da želimo kao i u Primjeru 6.7, prenijeti potprogramu SUBR dva parametra: duljinu spremnika podataka BOFL i njegovu početnu adresu BUFFER. Parametri koji se prenose mogu se smjestiti neposredno poslije instrukcije JSR (JSR - Jump to Subroutine) kojom se poziva potprogram. Odsječak pozivajućeg programa izgleda ovako: ; poziv potprograma SUBR
JSR DC.W
SUBR BUFL
DC. L
BUFFER
...
; sljedeća "prava* instrukcija u po2^vajućem programu
(Opaska: najcon izvođenja JSR SUBR na stogu bit će pohranjena adresa koja odgovara adresi pseudoinstrukcije DC. W BUFL. Naravno, to nije prava povratna adresa jer očekujemo da povratak bude na instrukciju koja neposredno s///ed/drugoj pseudoinstrukciji Potprogram SUBR prvo pohranjuje na stog prethodne vrijednosti registara koje će koristiti i nakon toga uzima parametre i, konačno, ugađa povratnu adresu: SUBR MOVEM. L DO /AO-AL, - (A 7) , 00, AO i At i
MOVEA.L 12 (A7), AI
; povratna aifesa popuje na BUFL
MOVE.W (AL)+, DO MOVEA.L ( A l ) +, AG M0VE.L A l , 12 (A7)
ISMJE^BTI^BPQ ;smjestipogitniiađras^
(Opaska: instrukcija MOVEM. L DO / AO-AL, - (Al) pohranjuje sadržaje 32-bitnih registara DO, AO i A1 na stog uporabom registarsko indirektnog (neizravnog) adresiranja
s predekrementiranjem (engl. address register indirect with predecrement) kojim prije negoli se odredi adresa odredišta operanda procesor oduzima 1 od sadržaja adresnog ij registra A7 bit će umanjen za 4 jer je operand specificiran s ,L. Instrukcijom MOVEM. L (Move Multiple - višestruko premještanje) uporabom adresiranja adresnim registrom A7 s predekrementiranjem ostvaruje se operacija polaganja triju 32-bitnih sadržaja specificiranih registara (DO, AO, AT) na stog pri čemu se sadržaj tiraža 12.) setriregina stog. ilika za analizu stanja stoga i kazala stoga, tj. registra A7.
О
2
'ЕГ «5 (D. О 2 U С ^ ^ Ш (О
ill и, U
щ
Ф
>
.>
PQ
spiiili i i l l p
шЛшшЛ ipeiiiWl
ifiliii
ШШтШШШШ*. IS ЛшшШШ 5
iliis
,' J3E4 'Jv'Misfit »ilflllt о &
spgiiei
рЩ8 § В-f • «3 .'Л 1
5.RIBARICI- GRAĐA RAČUNALA
SUBR
MOVEM.L DO/AL, -(Al) MOVE.W 12 (A7), DO MOVEA. L 14 ( A 7 ) , A l
141
; pohrani "stare" sadržaje registara ;duljinu spremnika pohrani u DO ; početna adresa spremnika je u A1
U ovom slučaju nije potrebno ugađati povratnu adresu jer se nakon vraćanja starih sadržaja registara DO i A l instrukcijom MOVEM. L (A7) + , D O / A l na vrhu stoga nalazi prava povratna adresa. Čitatelju savjetujem da pažljivo analizira stanja stoga tako da nacrta stog i prati promjene stanja stoga i sadržaja kazala stoga SP tijekom izvođenja potonje opisanih operacija. Naravno, preporučujem i uporabu EASy68K asemblera i simulatora za analizu stanja stoga. Čitatelju ostavljamo da se sam uvjeri da instrukcije CALL X i RET koje se temelje na stožnom mehanizmu podržavaju gniježđenje poziva procedura i vraćanje iz njih.
Razmotrimo kako će se tim instrukcijama podržati rekurzivno pozivanje i vraćanje iz rekurzivno pozvanih procedura. Pozovimo se na sliku 6.8 na kojoj smo ilustrirali situaciju kada se rekurzivna procedura poziva iz glavnog programa, a zatim se rekurzivno poziva još dvaput. Slika 6.12 prikazuje stanje stoga. Nakon prvog poziva potprograma SUB (poziva iz glavnog programa) na stog se pohranjuje povratna adresa A (slika 6.12 a)). Prenosi se upravljanje na prvu instrukciju rekurzivnog potprograma SUB. Slika 6.12 b) prikazuje stanje stoga nakon prvog rekurzivnog poziva - na stogu je pohranjena povratna adresa B. (Vrijednost varijable N = 2). Nakon toga se izvodi slijed instrukcija u rekurzivnom potprogramu i ponovo se samopoziva potprogram SUB. (Vrijednost varijable N = 1). Na stog se ponovo polaže povratna adresa B. Slika 6.12 c) prikazuje stanje stoga. Ponovo se izvodi slijed instrukcija započevši od prve instrukcije rekurzivnog potprograma. U tom prolasku N-1 poprima vrijednost 0 i umjesto rekurzivnog pozivanja nastavlja se slijed instrukcija potprograma do instrukcije RET. Slika 6.12 d) prikazuje stanje stoga neposredno nakon prvog izvođenja instrukcije RET: S vrha stoga uzeta je povratna adresa B i nastavlja se slijed instrukcija potprograma s instrukcijom kojoj je ciljna adresa B. Nakon toga, ponovo se izvodi instrukcija RET koja sa vrha stoga uzima ponovo povratnu adresu B. Slika 6.12 e) prikazuje stanje stoga neposredno nakon drugog povratka iz rekurzivno pozvanog potprograma SUB. Konačno, nakon još jednog prolaska kroz slijed instrukcija od ciljane adrese B do instrukcije RET, instrukcija RET uzima s vrha stoga povratnu adresu A i prenosi upravljanje na glavni program (slika 6.12 f)).
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
SP
SP
--
B»
- —
;
— —
A
—
„^^«lilMfilli
b)
SP
B
SP
II
s i SS .
'
•
iiiiiiiiiiBsisii:iiiiiiiisiiiii ,
f\ i^ti^f^rt
, '-• •' •
a i s f i i
%
s a n
—
laillBllgiii d)
SP SP
e)
f)
SL 6.12 Stanje stoga tijekom rekurzivnog pozivanja i vraćanja iz rekurzivno pozvanog potprograma; a) prvi poziv (N = 3) - poziv potprograma SUB iz glavnog programa; b) drugi poziv (N = 2) - rekurzivni poziv iz potprograma SUB; c) treći poziv {N = 1) - rekurzivni poziv iz potprograma SUB; d) prvi povratak iz rekurzivnog potprograma; e) drugi povratak iz rekurzivnog potprograma; f) stanje stoga i kazala stoga SP nakon povratka u glavni program
6.4.2. IZVEDBA STOGA Stog je iznimno važna sastavnica računala. On se može u procesoru, odnosno računalu
realizirati programski ili sklopovski. Programska izvedba stoga temelji se na određenom broju memorijskih lokacija koje su obično dio radne memorije računala. Takvoj se izvedbi uz obavezni registar kazalo stoga SP obično pridružuju još i dvije kazaljke koje održava operacijski sustav računala (slika
5.RIBARICI- GRAĐA RAČUNALA
143
6.13). One pokazuju i omeđuju memorijski potprostor koji je dodijeljen stogu - kazaljka BR pokazuje na memorijsku lokaciju koja ima najvišu adresu i odgovara dnu stoga, a kazaljka LR pokazuje na memorijsku lokaciju koja ima najnižu adresu u potprostoru dodijeljenom stogu (napomenimo, stog raste prema padajućim vrijednostima adresa). Stvarno "disanje" stoga prati, naravno, registar kazalo stoga SP. Ove spomenute kazaljke BR i LR služe za otkrivanje kritičnih situacija koje se, bez obzira na veličinu memorijskog potprostora namijenjenom stogu, mogu dogoditi. To su preljev stoga (engl. stack overflow) i podljev stoga (engl. stack underflow). Preljev stoga nastupa kada se operacijama push stog popuni tako
SI. 6.13 Programski realiziran stog
Podljev stoga nastupa kada brojnim uzastopnim operacijama pop dostigne dno stoga, odnosno kada sadržaj kazala stoga SP premaši vrijednost koja definirana kazaljkom BR. Primjer 6.13.
/
Zna se dogoditi, posebice programeru početniku, da računalo odnosno operacijski sustav računala, umjesto očekivanog prikaza rezultata izvođenja programa na zaslonu ispiše poruku "System stack overflowTo upravo znači da je zbog logičke pogreške u programu broj polaganja podatka (ili povratnih adresa) na stog bio takav da je premašen prostor predviđen za područje sistemskog stoga. U skupu strojnih instrukcija postoje instrukcije koje omogućuju programeru definiranje početne vrijednosti kazala stoga SP. Na primjer, procesor MC 68000 koristi instrukciju:
MOVE An, USP kojom se 32-bitni sadržaj adresnog registra An premješta u korisničko kazalo stoga. Nešto kasnije ćemo vidjeti da je to povlaštena instrukcija koja se može izvesti samo u nadglednom načinu rada (engl. supervised mode) procesora. 8-bitni procesor MC 6800, prethodnik procesora MC 68000, ima instrukciju LDS (Load Stack Pointer - puni kazalo stoga). Na primjer, instrukcijom
LDS #$1400
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
koja koristi usputni načina adresiranja 16-bitno kazalo stoga SP poprima vrijednost 1400 (heksadekadno). Sklopovski realizirani stog sastoji se od n internih registara koji čine LIFO strukturu i koji su izvedeni na procesorskom čipu. Prednost takve izvedbe jest velika brzina, a nedostatak je ograničena, relativno mala dubina stoga. Sklopovski ostvaren stog zahtijeva i dodatno sklopovlje za otkrivanje preljeva i podljeva. Slika 6.14 prikazuje sklopovsku izvedbu stoga koji je dubine n k-bitnih riječi. Stog je ostvaren pomoću k posmačnih n-bitnih sklopova (posmačnih registara sR1 - sRk). Operaciji push odgovara posmak udesno, a operaciji pop posmak ulijevo. Posmačnim registrima pridodano je brojilo po modulu n i kombinacijski logički sklop koji na temelju razlike broja push i pop operacija detektira preljev, odnosno podljev. vrh stoga
SI. 6.14 Sklopovski ostvaren stog
(Opaska: čitatelj može dobiti zorniju predodžbu o sklopovski ostvarenom stogu ako sliku 6.14zakreneza 90° u smjeru kazaljke na satu.)
5.RIBARICI- GRAĐA RAČUNALA
145
r ,5. PRIJENOS UPRAVLJANJA IZMEĐU PREKINUTOG I PREKIDNOG PROGRAMA Već smo spomenuli da se drugi važan slučaj prijenosa upravljanja između dva programa događa tijekom prekida. Slika 6.15 prikazuje shematski odnos između prekinutog i prekidnog programa. Na prvi je pogled slika 6.15 vrlo slična slici 6.11 a) (slučaj pozivanja potprograma). No postoje neke vrlo bitne razlike. Prijenos upravljanja u slučaju poziva potprograma obavlja se pod uvjetima koje možemo smatrati kontroliranim: trenutak prijenosa upravljanja određen je instrukcijom CALL. U slučaju prekida, trenutak kada će se dogoditi prijenos upravljanja, odnosno kada će pristići procesoru zahtjev za prekid nije poznat. Zahtjev za prekid generira ulazno-izlazni uređaj, a trenutak ovisi o stanju vanjskog svijeta čije aktivnosti nisu sinkronizirane s aktivnostima procesora ili računalnog sustava. Dakle, zahtjev za prekid može biti generiran u bilo kojem trenutku tijekom izvođenja programa. Procesor ne odgovara trenutno na zahtjev (u t = 0 s), već se mora završiti instrukcija čije je izvođenje bilo u tijeku. Postojanje zahtjeva za prekid i završetak instrukcije tijekom koje je zahtjev generiran još nije dovoljan uvjet za prihvaćanje prekida. Naime, procesor se može zaštititi od prekida tako da ne reagira na zahtjev ako je prekid maskiran ili onemogućen. Prekid se maskira postavljanjem jedne ili više prekidnih zastavica u statusnom registru SR. Procesori koji imaju hijerarhijsku višerazinsku organizaciju prekida zahtijevaju kao uvjet prihvaćanja prekida da razina zahtjeva za prekid bude viša od razine trenutno kodiranog prekida pomoću prekidnih zastavica u statusnom registru SR. Razlog postojanja mogućnosti neprihvaćanja prekida jest činjenica da vrlo često postoje kritični programski odsječci koji ne smiju biti prekinuti. Zbog nepoznavanja trenutka, odnosno instrukcije nakon koje će zahtjev za prekid prihvatiti, procesor mora osim povratne adrese pohraniti i sadržaj statusnog registra SR prije negoli grana na prvu instrukciju prekidnog programa. Zašto sadržaj statusnog registra SR? U stanju zastavica statusnog registra ogleda se stanje procesora koje je bilo neposredno prije nego što je zahtjev za prekid prihvaćen. Informacija pohranjena u statusnom registru predstavlja dodatnu minimalnu informaciju koja daje nadu da će se stanje procesora, koje je bilo neposredno prije prekida, moći rekonstruirati. prekinuti program
prekidni program
IF zahtjev za p r e k i
RTI
SI. 6.15 Shematski prikaz odnosa prekinuti i prekidni program
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
Povratna adresa i stanje statusnog registra definiraju tzv. minimalni kontekst (engl. minimal context). Taj se minimalni kontekst tijekom "kućanskih poslova" prijenosa upravljanja s prekinutog na prekidni program pohranjuje na stog.
registar kazalo stoga SP m mm m -2
mmmm -2
m m m m -1
t.
"
'
1
m mm m
-
;
a)
registar kazalo stoga SP m mmm -8
b)
mmmm -8
SR [15:8]
mmmm -7
SR [7:0]
m mmm -6
PC [31 :24]
m mmm -5
PC [23:16]
m mmm -4
PC [15:8]
m mmm -3
PC [7:0]
m mmm -2 m m m m -1
registar kazalo stoga SP m m mm -2
•••
•-•
r"
mmmm C)
SI. 6,16 Stanje stoga tijekom prijenosa upravljana s prekinutog na prekidni program i natrag; a) stanje stoga i kazala stoga SP neposredno prije prihvaćanja prekida; b) stanje stoga i kazala stoga SP neposredno nakon prijenosa upravljanja na prekidni program; c) stanje stoga i kazala stoga SP neposredno nakon vraćanja iz prekidnog programa
S. R1BARIČ - GRAĐA RAČUNALA
147
Druga važna razlika je u tome stoje u slučaju poziva potprograma adresa prve instrukcije potprograma sadržana u samoj instrukciji CALL X (gdje je X adresa ili adresna sastavnica na temelju koje se određuje adresa prve instrukcije potprograma). U slučaju prekida, adresa prve instrukcije prekidnog programa određuje se tako da se identificira uzročnik prekida, dakle ulazno-izlazni uređaj koji je generirao zahtjev za prekid. Tek kad se utvrdi uzročnik prekida, određen je i prekidni program koji se treba izvršiti. Uzročnik prekida identificira se na različite načine - najjednostavniji način je da procesor uvijek odlazi na isti prekidni program i u njemu prozivanjem potencijalnih uzročnika prekida utvrđuje tko je zaista generirao zahtjev za prekid. Druga mogućnost je uporaba metode vektorskog prekida u kojoj uzročnik prekida, nakon što od procesora primi signal da je prekid prihvaćen, šalje procesoru jedinstveni, npr. 8-bitni kod koji je identifikator uzročnika prekida. Na temelju tog vektorskog broja procesor tijekom "kućanskih poslova" prijenosa upravljanja računa ciljnu adresu prve instrukcije prekidnog programa. U poglavlju 13. čitatelj će naći podroban opis organizacije prekidne strukture procesora. Prekidni program završava instrukcijom tipa RTI (Return from interrupt) ili RTE (Return from Exception) - povratak iz prekida ili povratak iz iznimke. Ova instrukcija uzima s vrha stoga minimalni kontekst tj. povratnu adresu i sadržaj statusnog registra, i raspoređuje ga u programsko brojilo PC i statusni registar SR. Budući da ćemo posebno poglavlje posvetiti prekidu, ovdje samo kao sažetak zapamtimo da se prijenos upravljanja s prekinutog na prekidni program obavlja tako da se minimalni kontekst pohranjuje na stog. Povratak iz prekidnog programa izvodi se strojnom instrukcijom (tipa RTI ili RTE) kojom se s vrha stoga uzima minimalni kontekst i raspoređuje tako da povratna adresa "ide" u programsko brojilo PC, a preostali se dio minimalnog konteksta pohranjuje u statusni registar SR. Slika 6.16 prikazuje stanje stoga neposredno prije prihvaćanja prekida (6.16. a)), neposredno nakon prijenosa upravljanja na prekidni program (6.16 b)) i, konačno, stanje stoga neposredno nakon vraćanja iz prekidnog programa (pretpostavili smo da je povratna adresa 32-bitna, a statusni registar SR 16-bitni, adresna zrnatost memorije bajtna).
6.6. PRIMJER UPORABE STOGA ANALIZA SLUČAJA ZA MC 68000 Da bismo utvrdili gradivo vezano za problem prijenosa upravljanja s različitih programa, analizirat ćemo stanje stogova u računalu na bazi 16-bitnog procesora MC 68000 tijekom jednog realnog scenarija kojeg možemo opisati na sljedeći način. 1. procesor je u korisničkom načinu rada i izvodi korisnički program; 2. korisnički program poziva potprogram instrukcijom JSR (Jump to Subroutine) i nastavlja se izvođenja korisničkog potprograma; 3. tijekom izvođenja korisničkog potprograma generiran je zahtjev za prekid. Zahtjev je takve razine da biva prihvaćen; 4. upravljanje se prenosi na prekidni program. Prekidni se program izvodi u nadglednom načinu rada procesora; 5. nakon što je izvršen prekidni program, prenosi se upravljanje instrukcijom RTE (Return from Exception) na potprogram koji je bio prekinut; 6. iz potprograma se instrukcijom RTS (Return from Subroutine) vraćamo u pozivajući (glavni) korisnički program.
®
®
potprogram
©
prekidni program
SUBR
JSR SUBR
RTE
SI. 6.17 Grafički prikaz scenarija za analizu slučaja
Slika 6.17 prikazuje potonji scenarij (U - korisnički način rada (engl. User Mode); S - nadgledni način rada (engl. Supervisor Mode). Naš je zadatak odrediti stanje stogova u točkama koje su neposredno prije prijenosa upravljanja i točaka neposredno nakon prijenosa upravljanja između pojedinih programskih struktura (glavnog korisničkog programa, korisničkog potprograma i prekidnog programa). Pažljivi čitatelj već je primijetio da smo upotrijebili množinu - stanje stogova, a ne stanje stoga. Vrlo brzo bit će jasno zašto. Slika 6.18 prikazuje programski model procesora MC 68000. Procesor je registarski orijentiran i ima dvije skupine registara opće namjene: 32-bitne registre podataka označene s DO - D7. Registri podataka mogu pohranjivati operande duljine bajta (oznaka B), duljine riječi -16-bita (oznaka W) i duljine duge riječi, odnosno 32 bita (oznaka L). Važno je napomenuti da operacije s podacima duljine 8 bita i 16-bita utječu samo na manje značajan dio 32-bitnog registra podataka. Na primjer, instrukcijom MOVE.B utječe se samo na osam najmanje značajnih bitova registra podataka dok preostala 24 značajnija bita ostaju nepromijenjena. Druga skupina registara opće namjene su sedam 32-bitnih adresnih registra A0 - A6. Program koristi te registre za pohranu memorijskih adresa (kazaljki na memorijske lokacije). Zrnatost adresnih registara je 16-bitna i 32-bitna riječ. Instrukcije koje premještaju podatke (MOVE) u te registre utječu na svih 32 bita. Tako, na primjer, ako se pohranjuje 16-bitna vrijednost u neki od adresnih registara, promijenit će se svih 32 bita, i to tako da će postupkom širenja bita predznaka 16-bitne vrijednosti, bitovne pozicije bi6 -b37 odredišnog registra poprimiti vrijednost bita predznaka. Osmi 32-bitni adresni registar A7 je registar kazalo stoga SP. Fizički procesor MC 68000 ima dva registra kazala stoga: korisničko kazalo stoga USP (User Stack Pointer) označeno s A7 i nadgledno (ili sistemsko) kazalo stoga (Supervisor Stack Pointer) SSP označeno s A7'. Naime, procesor MC 68000 je procesor naprednije arhitekture i podržava višekorisnički rad te ima i dva osnovna načina rada: korisnički način (engl. User Mode) - predviđen za izvođenje korisničkih programa
i nadgledni način (engl. Supervisor Mode) - predviđen za izvođenje
programa operacijskog sustava. Važno je zapamtiti da istodobno ne mogu biti aktivna oba kazala stoga - koje će biti aktivno zavisi od toga u kojem se načinu rada nalazi procesor.
5.RIBARICI- GRAĐA RAČUNALA
31
15 DO
149
A
Dl D2 03 V
registri podataka
D4 D5 D6
15 statusni registar SR
sistemski bajt status registra
korisnički bajt status registra
SI. 6,18 Programski model procesora MC 68000
Programsko brojilo PC također je sastavnica programskog modela. Ono je duljine 32-bita, međutim, stvarna duljina adrese koju ono sadržava ovisi o stvarnoj širini adresne sabirnice (za MC 68000 stvarna, upotrebljiva duljina je 24 bita, za MC 60012 31 bit te za MC 68020 32 bita). 16-bitni statusni registar SR podijeljen je na manje značajan bajt koji sadržava zastavice X, N, Z, V i C koje su korisnički orijentirane zastavice (nose zajedničko ime CCR - Condition Code Register) i značajniji bajt koji predstavlja nadgledni ili sistemski bajt
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
statusnog registra SR koji je dohvatljiv samo kada se procesor nalazi u nadglednom načinu rada. U nadglednom načinu može se pristupiti cijelom statusnom registru SR. Zastavice u sistemskom bajtu su S, T, l2, i l0. Slika 6.19 prikazuje organizaciju 16-bitnog statusnog registra SR. nagledni bajt SR
u bi 5
b!3
s
T
korisnički bajt SR
•H
H
b7
'a
'1
bo
X
'o
N
Z
V
c
Zastavice: C (Carry) - zastavica prijenosa V (Overflow) - zastavica preljeva (aritmetičkog) Z (Zero) - zastavica nule N (Negative) - zastavica negativna vrijednost X (Extend) - zastavica proširenja L,\) l0 (Interrupt Mask) - prekidne zastavice S (Supervisor) - nadgledna zastavica T (Trace Mode) - zastavica praćenja
SI. 6.19 Organizacija statusnog registra SR i značenje zastavica
Spomenuli smo već da procesor ima dva načina rada: nadgledni i korisnički način rada. Objasnimo u čemu je razlika i kako se iz jednog načina rada prelazi u drugi način rada. Slika 6.20 prikazuje dijagram stanja kojim se opisuju ta dva načina rada te načini prijelaza iz jednog u drugo stanje. Upuštanjem u rad procesora - iznimkom najviše razine RESET (u računarskom žargonu kažemo "resetiranjem") procesor se postavlja u nadgledni način rada. Bitna značajka tog načina rada jest da procesoru stoje na raspolaganju sve instrukcije koje se nalaze u skupu strojnih instrukcija - zato ćemo taj način rada proglasiti povlaštenim ili privilegiranim načinom rada. Indikacija da se procesor nalazi u povlaštenom, tj. nadglednom načinu rada je stanje zastavice S - ona je postavljena (ima vrijednost 1). Usput, spomenimo da se upuštanjem u rad briše zastavica praćenja T (T = 0) i time se onemogućuje izvođenje programa korak po korak, a prekidne zastavice l0 -1 2 poprimaju vrijednost 111 i time se procesor štiti od zahtjeva za prekid (osim razine zahtjeva 7). Dijagram stanja za MC 68000
reset
zastavica
zastavica S=0
RTE (instrukcija)
SI. 6.20 Dijagram stanja načina rada za MC 68000
Nadgledni način rada namijenjen je obično programima koji su sastavni dio operacijskog sustava. Procesor može prijeći u manje povlašteni način rada koji se naziva korisnički način
S, RIBARIČ - GRAĐA RAČUNALA
151
r
tako da u nadglednom načinu instrukcijom pristupi sistemskom ili nadglednom bajtu statusnog registra SR i obriše zastavicu S (postavi je u 0). Na primjer, povlaštenom instrukcijom
EORI #MASK, SR gdje je MASK usputni 16-bitni podatak koji ima vrijednost 2000 (heksadekadno) koji će s operacijom ISKLJUČIVO ILI sa sadržajem registra SR zastavicu S postaviti u 0. Slika 6.21 objašnjava kako se zastavica S postavlja u 0. Instrukcija je povlaštena jer se njome pristupa sistemskom bajtu registra SR. zastavica S b15
b13
T
sadržaj statusnog registra SR
b8
1
'2
'o
b7
bO
X
N z
V
c
b8
0 0
vrijednost MASK
1 0 0 0 0 0 0 0 0 0 0 0
0 0
bO
b7 rezultat instrukcije EORI
T
0
'2
'l
"o
X
N
z
V
c
\ zastavica S
SI. 6,21
Logička operacija ISKLJUČIVO ILI između MASK i sadržaja statusnog registra SR ima za posljedicu brisanje zastavice S
Brisanjem zastavice S procesor prelazi u korisnički način rada. Korisnički način rada je manje privilegiran, a to se ogleda u tome što se u tom načinu rada ne mogu izvoditi privilegirane instrukcije. Taj je način rada predviđen za izvođenje korisničkih programa. Kako znamo koje su to privilegirane instrukcije? Privilegirane instrukcije su one instrukcije koje operacijskom sustavu dopuštaju pristup podacima i registrima kojima se ostvaruju funkcije raspoređivanja zadataka (engl. task scheduling) i rukovanja iznimkama ili prekidima (engl. exception/interrupt handling). Izvođenjem takvih instrukcija utječe se na stanje procesora i stanje svih korisničkih programa. U programskom priručniku za procesor MC 68000 svaka takva instrukcija označena je kao privilegirana instrukcija. Što će se dogoditi ako se u korisničkom načinu rada pokuša izvesti privilegirana instrukcija? Prvo, ona se neće izvršiti, ali će izazvati iznimku koja se naziva "povreda privilegiranosti" (engl. Privilege violations). Tijekom obrade te iznimke, ovisno o funkciji operacijskog sustava, obično se prekida i odgađa (suspendira) daljnje izvođenje takvog korisničkog programa s pratećom porukom daje došlo do povrede privilegiranosti. Vratimo se dijagramu stanja načina rada. Brisanjem zastavice S procesor se našao u manje povlaštenom korisničkom načinu rada. On je namijenjen izvođenju korisničkih programa. Procesor ostaje u tom načinu rada i jedino iznimkom ili prekidom može se vratiti u nadgledni način rada. Važno je znati da se programi kojima se obrađuju iznimke ili prekidi izvode u povlaštenom nadglednom načinu rada. Nakon obrade iznimke ili prekida povlaštenom se instrukcijom RTE (Return from Exception) rekonstruira stanje (sadržaj statusnog registra SR i programskog brojila PC)
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
procesora koje je bilo neposredno prije prihvaćanja iznimke ili prekida. Na taj se način procesor vraća u korisnički način rada - u stanje u kojem je bio neposredno prije prihvaćanja prekida. adrese mmmm -4 m mmm -3 m mm m -2 m m m m -1
USP (korisničko kazalo stoga)
32 - bitni registar A7
krisnički stog
n n n r> - 8 n nnn-7 nnnn-6 n nnn-5 n ri n n - 4 nnnn-3 n nnn-2 n n n n -1
SSP (nadgleđno kazalo stoga)
n nnn n nnn+1
32 - bitni registar A7'
nnnn+ 2 nnnn+3 n n ri n + 4
nadgledni (sistemski) stog
Si. 6.22 Stanje stogova i kazala stoga neposredno prije grananja u korisnički potprogram
Naravno, ako se iznimka ili prekid dogodila u nadglednom načinu rada, procesor će se instrukcijom RTE vratiti u taj isti način rada (petlja označena s RTE; slika 6.20). U skladu s našim scenarijem, procesor se nalazi u korisničkom načinu rada. Korisnički stog je potencijalno aktivan i na njegov vrh pokazuje aktivno korisničko kazalo stoga USP (adresni
5.RIBARICI- GRAĐA RAČUNALA
153
registar A7). Registar USP sadržava 32-bitnu adresu mmmm. Nadgledni je stog organiziran negdje drugdje u radnoj memoriji. Naravno, prostori dodijeljeni korisničkom stogu i nadglednom stogu ne smiju se prekrivati. Budući da se procesor nalazi u korisničkom načinu rada, nadgledna stožna struktura je neaktivna ili "zamrznuta". "Zamrznuti" 32-bitni sadržaj nadglednog kazala stoga SSP (adresni registar A7') je nnnn. Slika 6.22. prikazuje stanje stogova neposredno prije grananja u korisnički potprogram. USP
mmmm-4
mmmm-4 mmmm-3
povratna adresa iz potprograma
mmmm-2
PC [31:0] - povratna adresa
mmmm-1 mmmm mmmm+ 1 mmmm+ 2
korisnički stog
l :
:
—,
n nnn-8 nnnn-7 n n n n -6 n nnn-5 n n n n -4 nnnn-3 n nnn-2 n n n n -1
SSP
nnnn n nnn+1 n nnn+2 nnnn+ 3 n nnn+ 4
SL 6,23 Stanje stogova i kazala stogova neposredno nakon grananja u korisnički potprogram
Izvođenjem instrukcije JSR SUBR (slika 6.17) prenosi se upravljanje s korisničkog programa na korisnički potprogram. Procesor i dalje ostaje u korisničkom načinu rada a tijekom
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
prijenosa upravljanja na aktivan stog (a to je korisnički stog) pohranjuje se 32-bitna povratna adresa. Sadržaj korisničkog kazala stoga umanjuje se za 4 (stog raste u smjeru padajućih adresa). Nadgledna stožna struktura i dalje je"zamrznuta". Slika 6.23 prikazuje stanje stogova neposredno nakon grananja u potprogram.
SL 6.24 Stanje stogova neposredno nakon prihvaćanja prekida
Za vrijeme izvođenja potprograma ulazno-izlazna jedinica generirala je zahtjev za prekid On se prekidnim linijama , IPLO, IPL1 i IPL2 (IPL - Interrupt Priority Level) prosljeđuje proce-
soru. Aktivno stanje (0) na tim trima linijama određuje razinu zahtjeva za prekid: linija IPLO doprinosi razini "težinom"2°, linija IPL 1 21 i linija IPL2 doprinosi ukupnoj razini zahtjeva za
5. RIBARICI - GRAĐA RAČUNALA
155
prekid težinom 22. Na primjer, ako je IPL0 = 0, IPL1 = Q i ako je (PL2 - 1, onda je razina zahtjeva za prekid 3. Uz pretpostavku daje razina zahtjeva za prekid veća od razine prekida kodirane prekidnim zastavicama l1 i l2 u statusnom registru SR (pri čemu ako je l0 = 1, zastavica doprinosi težini 2°, ^ s težinom 2\ i l2 s težinom 22) zahtjev za prekid bit će prihvaćen. Za naš će primjer, ako je razina zahtjeva za prekid 3, on biti prihvaćen za sljedeće kombinacije stanja prekidnih zastavica: l2 ^ lQ = 0 0 0 (kodirana razina 0), 0 0 1 (kodirana razina 1) i 0 1 0 (kodirana razina 2). Zahtjev za prekid je prihvaćen. Prekid kao vrsta iznimke obrađuje se u nadglednom načinu rada procesora. Trenutni se sadržaj statusnog registra SR interno privremeno pohranjuje u, za korisnika,„nevidljivi" interni registar. Zastavica S u statusnom registru SR se automatski postavlja u 1. Procesor, automatski, u okviru svojih "kućanskih poslova" pohranjuje minimalni kontekst (povratnu adresu i sadržaj statusnog registra, i to onaj koji je bio neposredno prije prihvaćanja prekida interno pohranjen) na aktivan stog. Aktivan stog je nadgledni stog (korisnički stog je sada "zamrznut"). Na nadgledni će se stog pohraniti 6 bajtova: četiri bajta koji čine 32-bitnu povratnu adresu i 2 bajta - sadržaj statusnog registra SR. Obratite pozornost da će u tako pohranjenom sadržaju statusnog registra SR zastavica S biti jednaka 0 jer je neposredno prije prihvaćanja prekida procesor bio u korisničkom načinu rada. Sadržaj nadglednog kazala stoga umanjuje se za 6. Slika 6.24 prikazuje stanje stogova neposredno nakon prihvaćanja prekida. Uočavamo da se na vrhu nadglednog stoga nalazi pohranjen minimalni kontekst, a na vrhu korisničkog stoga imamo pohranjenu povratnu adresu koja omogućuje povratak iz korisničkog potprograma u korisnički (glavni) program. Izvodi se prekidni program kojim se poslužuje uzročnik prekida. Posljednja instrukcija u prekidnom programu (slika 6.17) je povlaštena instrukcija RTE. Njezinim se izvođenjem s vrha nadglednog stoga uzima minimalni kontekst i raspoređuje se u statusni registar SR (stanje procesora neposredno prije prekida) i programsko brojilo PC (povratna adresa za povratak u korisnički potprogram). Slika 6.25 prikazuje stanje stogova nakon vraćanja iz prekidnog programa. Vidimo da je sadržaj nadglednog kazala stoga SSP povećan za 6 te da 4 bajta programskog brojila PC i dva bajta statusnog registra SR nisu više elementi nadglednog stoga (ostaje samo trag izvođenja RTE instrukcije). Zahvaljujući vraćanju "starog" sadržaja statusnog registra SR natrag u SR procesor je ponovo u korisničkom načinu rada i izvodi (preostale) instrukcije iz korisničkog potprograma. Izvođenjem posljednje instrukcije u potprogramu RTS s vrha korisničkog stoga (nadgledni stog je "zamrznut") uzima se povratna adresa i smješta se u programsko brojilo PC. Upravljanje se vraća na glavni korisnički program. Slika 6.26 prikazuje stanje stogova neposredno nakon povratka iz potprograma. Ako usporedimo sliku 6.22, koja prikazuje stanje stogova i kazala stoga neposredno prije grananja u korisnički potprogram, i sliku 6.26 (Stanje stogova neposredno nakon vraćanja iz potprograma), vidimo da su stanja stogova i sadržaji kazala stogova jednaki: (USP) = mmmm, (SSP) = nnnn, samo što je ostao trag izvođenja u skladu s našim scenarijem - sadržaji memorijskih lokacija mmmm -1, mmmm - 2, mmmm - 3, mmmm - 4 u memorijskom prostoru predviđenom za korisnički stog te sadržaji memorijskih lokacija od nnnn - 1 do nnnn - 6 koje su predviđene za nadgledni stog (slika 6.27). Naglasimo još jednom da sadržaji spomenutih memorijskih lokacija nisu više elementi niti korisničkog, niti nadglednog stoga.
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
USP m mmm -4
m m m m -4 m mmm -3
korisnički stog
SR [15:8] SR [7:0] PC [31 :24] PC [23:16] PC [15:8] PC [7:0]
nnnn-1
SSP
•
• -
. -
-
• ••
\
nadgleđni stog
—r——:—— . '
/
-
„ , •
•
»
,
.
bajt
SI. 6.25 Stanje stogova neposredno nakon izvođenja R T E instrukcije
5. RIBARICI - GRAĐA RAČUNALA
PC [31 :24] PC [23: 16] PC [15:8] mmmm-1
PC [7:0]
—
USP
mmmm —
m mmm+1
i^^&sšMMmam, korisnički stog
5R [15:8] SR [7:0] PC [31 :24] PC [23:16] n nnn-2
PC [15:8]
n n n n -1
PC [7:0]
SSP
nnrin
~ ~ "
"..
"
.i
... •
•
— •
.
nadgledni stog
Si. 6.26 Stanje stogova neposredno nakon vraćanja iz potprograma
157
124
6. POGLAVLJE: UPRAVLJAČKA JEDINICA
Si. 6.27 Usporedba stanja stogova; a) stanje stogova i kazala stogova USP i SSP prije izvođenja programa; b) stanje stogova i kazala stogova USP i SSP nakon izvođenja programa
5.RIBARICI- GRAĐA RAČUNALA
159
7. POGLAVLJE
SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE 7.1. PUT PODATAKA I UPRAVLJAČKA JEDINICA U 6. smo se poglavlju upoznali s osnovnim funkcijama upravljačke jedinice procesora. Opis njezinih funkcija bio je na razini strojnih instrukcija i nismo se upuštali u podrobnosti izvedbe upravljačke jedinice. U ovom ćemo poglavlju opisati dva osnovna pristupa izvedbi upravljačke jedinice i time čitatelju predstaviti izravnu vezu između strojnih instrukcija i sklopovlja koje tumači te instrukcije i generira upravljačke signale koji pobuđuju sklopove potrebne za izvršavanje instrukcija. Procesor, koji se sastoji od dviju funkcijskih jedinica: aritmetičko-logičke i upravljačke jedinice, možemo predočiti i kao složeni digitalni sustav koji ima dvije sastavnice: put podataka (engl. datapath) i upravljačku jedinicu (engl. control unit). Put podataka
predstavlja složenu
sklopovsku strukturu koja se sastoji od sklopova koji izvršavaju aritmetičke i logičke operacije, registara za privremeno pohranjivanje operanada i rezultata te prijenosnih putova podataka (jedne ili više internih sabirnica). Svaka od tih sastavnica puta podataka ima jednu ili više "upravljačkih točaka" u koje se dovode upravljački signali kojima se određuje (mikro)operacija koja će se izvesti na podacima koji se upravo nalaze na putu podataka. Upravljačka jedinica generira upravljačke signale i upućuje ih putu podataka. Oni ulaze u upravljačke točke i određuju operaciju i vrijeme izvršenja operacije te usmjeravaju podatke na putu podataka. Upravljačka jedinica pomoću upravljačkih signala na taj način konfigurira put podataka u skladu sa strojnom instrukcijom, odnosno programom. Slika 7.1 prikazuje jednostavan procesor predočen dvjema sastavnicama: putom podataka i upravljačkom jedinicom. Put se podataka u ovom jednostavnom procesoru sastoji od skupa registara opće namjene koji služi za privremeno pohranjivanje operanada i rezultata, prijenosnih putova organiziranih kao interne sabirnice, dvije jedinice F1 i F2 koje obavljaju osnovne aritmetičke i logičke operacije, operacije posmaka te multipleksora koji usmjeravaju podatake na putu podataka. Upravljačkim signalima na upravljačkim ulazima multipleksora 1 izabire se koji će se podaci usmjeriti prema skupu registara opće namjene, a
160
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
put podataka
upravljačka jedinica
a) izlaz izbor registra 1 za čitanje izbor registra 2 za čitanje
[data out)
skup registara opće namjene
izbor registra za upis
izlaz (data out)
ulaz za podatke [data in)
piši [write) b)
SL 7.1 Jednostavan procesor ; a) put podataka i upravljačka jedinica; b) skup registra izveden kao jednoulazna i dvoizlazna memorija
5.RIBARICI- GRAĐA RAČUNALA
161
signalima na upravljačkim ulazima multipleksora 2 određuju se podaci koji će biti usmjereni prema jedinicama F7 ili F . Pomoću upravljačkih signala koji se dovode u upravljačku točku u skupu registara opće namjene specificiraju se registri koji će biti izvorišta operanada ili registar koji će poslužiti kao odredište za rezultat, odnosno određuje se hoće li se izvesti operacija čitanja ili pisanja. Slika 7.1 b) prikazuje izvedbu skupa registara opće namjene koji je na putu podataka izveden kaojednoulazna i dvoizlazna memorija (engl. one write port & two read ports). Upravljačke točke dodijeljene jedinicama F1 i F2 služe za izbor aritmetičke ili logičke operacije i operacije posmaka. Logičkim vrijednostima upravljačkih signala i trenutkom njihovog generiranja upravljačka jedinica dinamički konfigurira put podataka u skladu sa zahtjevima instrukcije čije je izvođenje u tijeku. Na slici 7.1 uočavamo i signalne linije koje su usmjerene od puta podataka prema upravljačkoj jedinici - tim se linijama dojavljuju stanja koja mogu nastupiti izvođenjem aritmetičkih ili logičkih operacija u jedinicama F1 i F2, npr. rezultat je nula, rezultat je negativan, dogodio se preljev kod aritmetičke operacije ili prijenos iz najznačajnije bitovne pozicije rezultata (engl. carry). Put podataka za jednostavne izvedbe procesora može se predočiti kao linearni put podataka koji je jednak za sve instrukcije, pri čemu upravljački signali određuju hoće li se ili neće dogoditi aktivnost na određenom dijelu puta podataka. Složenije izvedbe procesora imaju put podataka organiziran kao protočni put podataka
(engl. pipelined data path) kojim je
omogućeno da se istodobno više strojnih instrukcija u različitim fazama izvođenja izvršava na putu podataka. Složeni suvremeni procesori (superskalarni procesori) imaju razgranate putove podataka koji dopuštaju istodobno izvođenje više strojnih instrukcija u različitim granama puta podataka. Uz sve to, svaka od tih grana puta podataka može biti ostvarena kao protočni put podataka, odnosno protočna grana puta podataka. Očito je da tako složen put podataka zahtijeva kompleksnu upravljačku jedinicu koja svojim signalima mora rukovoditi podacima i operacijama u svim protočnim granama puta podataka. Primjer 7.1. Put podataka obično uključuje ove glavne sastavnice: • skup registara (registre opće namjene) i privremene registre; • aritmetičko-logičku jedinicu, odnosno sklopove koji obavljanju aritmetičke i logičke operacije; • posmačni sklop; • internu sabirnica (ili više njih); • posebne (upravljačke) registre (npr, registar vektora iznimaka, privremeni registar za pohranjivanje stanja procesora tijekom izvođenja nekih upravljačkih instrukcija); • programsko brojilo PC koje se također može nalaziti na putu podataka i na taj način pojednostavnjuje računanje efektivne adrese operanda ili odredišta. No u procesorima koji imaju vrlo velike performanse, programsko brojilo ima posebne sklopove za povećanje njegova sadržaja i računanje efektivne adrese operanada (rezultata) pa se postiže preklapanje računanja adrese s operacijama u aritmetičko-iogičkoj jedinici. Izvedba puta podataka izravno utječe na performansu procesora. Jedno od mjerila uspješnosti izvedbe puta podataka jest vrijeme potrebno za izvođenje temeljne operacije na putu
162
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
podataka - vremenski cikius puta podataka
(engl. data path cycle time). On mora biti sto je
moguće kraći. Temeljna operacija na putu podataka sastoji se od dohvata (čitanja) operanada iz skupa registara opće namjene, izvođenja npr. aritmetičke operacije na njima te pohranjivanja rezultata natrag u jedan od registara u skupu registara. Ocijenimo vremenski ciklus puta podataka za temeljnu operaciju na putu podataka: R[1]:= R[2] + R[3] za jednostavan procesor sa slike 7.1. a). Da bi se izvela ova temeljna operacija, upravljačka jedinica mora generirati sljedeće upravljačke signale: • upravljački signal za izbor registra R2 i upravljački signal za izbor registra R3 u skupu registara opće namjene te upravljački signal kojim se skupu registara nalaže operacija čitanja. Skup registara opće namjene izveden je kao jednoulazna i dvoizlazna memorija (engl. one write port & two read ports) pa je o m o g u ć e n istodobni pristup
• • • •
dvama ope rand i ma, ali i upis rezultata u istoj periodi signala vremenskog vođenja (slika 7.1 b)); upravljački signal koji se dovodi u upravljačku točku (upravljački ulaz multipleksora 2) i kojim se operandi upućuju u jedinicu F^ upravljački signal kojim se u jedinici F1 aktivira sklop za zbrajanje (zbrajalo); upravljački signal koji se dovodi u upravljačku točku (upravljački ulaz multipleksora 1) kojim se rezultat usmjerava prema skupu registara opće namjene; upravljački signal za izbor odredišnog registra R1 i signal kojim se nalaže upis rezultata u taj registar (operacija "piši").
Slika 7.2 prikazuje vremensku skladnost generiranih upravljačkih signala tijekom jedne periode signala vremenskog vođenja kojom je podržana opisana temeljna operacija. Vidimo da se ova operacija izvodi u jednoj periodi signala vremenskog vođenja (engl. single clock cycle). Mnoge jednostavnije strojne instrukcije mogu se izvesti u jednoj periodi signala vremenskog vođenja koja odgovara vremenskom ciklusu puta podataka. No složenije strojne instrukcije, posebno one iz skupa instrukcija CISC (Complex Instruction Set Computer) procesora zahtijevaju veći broj perioda signala vremenskog vođenja, odnosno veći broj osnovnih vremenskih ciklusa puta podataka (engl. multicycle operation). <
perioda signala vremenskog vođenja
izbor F1 (multipleksor 2) izbor zbrajala
izbor odredišnog registra "piši"
SL 7.2 Vremenska skladnost upravljačkih signala za temeljnu operaciju R[1]:= R[2] + R[3]
5.RIBARICI- GRAĐA RAČUNALA
163
2. DVA OSNOVNA NAČINA OBLIKOVANJA UPRAVLJAČKE JEDINICE Tijekom relativno kratkog, ali burnog povijesnog razvoja arhitekture računala iskristalizirala su se dva osnovna pristupa oblikovanja upravljačke jedinice procesora: i) sklopovski pristup; ii) mikroprogramski pristup. U sklopovskom se pristupu upravljačka jedinica promatra kao sekvencijalni logički sklop ili konačni automat (engl. finite-state machine) koji generira sljedove upravljačkih signala kao odgovor na iz memorije pribavljenu strojnu instrukciju, možebitne vanjske uvjete i stanje zastavica statusnog registra (slika 7.3). Uobičajeni ciljevi u oblikovanju takvim pristupom su minimizacija broja sklopovskih
komponenti
i postizanje što je moguće veće brzine dje-
lovanja. Ostvarivanje prvog cilja - minimizacija broja sklopovskih komponenti u izvedbi upravljačke jedinice opravdana je kada se zna da upravljačka jedinica zauzima velik dio površine silicijskog čipa (ukupna raspoloživa površina silicijskog čipa kreće se od oko 50 mm2 za 16-bitne mikroprocesore do oko 500 mm2 za višejezgrene procesore). Primjerice, upravljačka jedinica 8-bitnog procesora MC 6800 zauzimala je oko 58% cjelokupne površine procesorskog čipa, 16-bitni procesor MC 68000 treba oko 69% površine silicija za upravljačku jedinicu, a za neke 32-bitne procesore upravljačka jedinica zauzima više od 80% površine čipa. S druge strane, ne smije se zanemariti i potrošak snage, naime veći broj komponenti i sve veća brzina sklopovlja, odnosno viša frekvencija signala vremenskog vođenja, prouzrokuje sve veći potrošak snage, a to izaziva velike probleme vezane za hlađenje procesorskog čipa. Na primjer, Intelov procesor 80386 (1989.) radio je na frekvenciji 25MHz i imao potrošak od 4.9 W, dok je Pentium 4 Prescott (2004.) radio na frekvenciji 3.6 GHz i ima potrošak snage 103 W (otprilike kao klasična žarulja s žarnom niti). Jasno je da se zauzećem većeg dijela procesorskog čipa upravljačkom jedinicom smanjuje prostor za izvedbu puta podataka koji izravno utječe na performansu procesora (višestruke aritmetičke i logičke jedinice, protočna izvedba, razgranati protočni putovi podataka). Jednom kada je upravljačka jedinica realizirana sklopovskim pristupom, jedini način za izvedbu bilo kakve promjene u njezinom ponašanju zahtijeva potpuni redizajn. Takva se jedinica obično naziva "čvrsto ožičena"(engl. hardwired).
7.3 Shematski prikaz sklopovske izvedbe upravljačke jedinice
164
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Mikroprogramiranje predstavlja alternativni pristup oblikovanju upravljačke jedinice procesora. Slika 7.4 prikazuje strukturu mikroprogramirane upravljačke jedinice. Središnja građevna sastavnica upravljačke jedinice je upravljačka memorija (ili mikroprogramska memorija) (engl. control memory) u kojoj su pohranjeni "upravljački signali" u formatu poput strojnih instrukcija u programu. U tom obliku pohranjene upravljačke signale nazivamo mikroinstrukcijama. Sljedovi mikroinstrukcija čine jedan ili veči broj programa koji se nazivaju mikroprogramima. Upravljačka memorija mikroprogramirane upravljačke jedinice pohranjuje više mikroprograma: Svakoj strojnoj instrukciji iz instrukcijskog skupa odgovara jedan mikroprogram koji če se pobuditi na temelju operacijskog koda strojne instrukcije i, možebitno, na temelju vanjskih uvjeta ili stanja zastavica statusnog registra. Izvođenjem mikroprograma pribavljat če se mikroinstrukcije (upravljački signali) iz mikroprogramske memorije i upućivat će se upravljačkim točkama u putu podataka. Zaključimo, mikroprogramska memorija sadržava skup mikroprograma kojima se oponaša (emulira) skup strojnih instrukcija procesora. Neki autori (M. Flynn, i M. D. MacLaren, L. L. Rakoczi) ovako realiziranu upravljačku jedinicu zorno predočavaju i nazivaju "računalo u računalu" (engl. computer-within-computer) jer, vidjet ćemo uskoro, upravljačka jedinica tijekom izvođenja mikroprograma prolazi kroz "mikrofazu - pribavi" - kada se dohvaća mikroinstrukcija i "mikrofazu - izvrši" - kada se mikroinstrukcija izvršava, odnosno kada upravljački signali aktiviraju sklopove na putu podataka.
put podataka
Si. 7.4 Struktura mikroprogramirane upravljačke jedinice
5.RIBARICI- GRAĐA RAČUNALA
165
Mikroprogramski pristup izvedbi upravljačke jedinice omogućuje bolji i sistematični dizajn jer su upravljački signali "formatirani" u mikroinstrukcije, a izmjena upravljačkih signala ili slijeda upravljačkih signala svodi se samo na promjenu sadržaja jedne ili više memorijskih lokacija mikroprogramske memorije. Zbog načina izvedbe u kojem su upravljački signali "ugrađeni" u neku vrstu "softvera"tj. programa niske razine, ovako se oblikovana upravljačka jedinica naziva mikroprogramska (engl. microprogrammed), ali i firmwired (za razliku od sklopovske izvedbe koja se naziva i hardwired). Mnogi autori ističu mikroprogramski pristup kao najbolju metodu oblikovanja upravljačke jedinice. Mikroprogramirana jedinica je, međutim, skuplja od sklopovski realizirane upravljačke jedinice, a vrlo često i sporija zato što zahtijeva dodatno vrijeme za pribavljanje mikroinstrukcije iz mikroprogramske memorije (vrijeme potrebno za mikrofazu - pribavi). Procesori CISC arhitekture koji imaju veliki i raskošan skup strojnih instrukcija, u načelu, imaju upravljačku jedinicu realiziranu mikroprogramiranjem. Procesori RISC arhitekture koji imaju mali skup jednostavnih (ali ekstremno brzih) strojnih instrukcija koriste sklopovski realiziranu upravljačku jedinicu.
7.3. SKLOPOVSKA UPRAVLJAČKA JEDINICA Sklopovski pristup izvedbi upravljačke jedinice može se temeljiti na: i) standardnom pristupu oblikovanja sekvencijalnih logičkih sklopova (ili konačnih automata) uporabom tablica stanja i primjenom kombinacije građevnih sastavnica sa značajkama niskog stupnja integracije - SSI (Small Scale Integration, npr. osnovni logički sklopovi) i sastavnica sa značajkama srednjeg stupnja integracije - MSI (Medium Scale Integration, npr. brojila, dekoderi);
ii) uporabi elemenata za kašnjenje za generiranje upravljačkih signala i njihovu vremensku sinkronizaciju; iii) uporabi generatora upravljačkih vremenskih impulsa (ili generatora sljedova) (engl. timing pulse generator, sequencer) i kombi nacijskih sklopova.
Naravno, u izvedbi suvremenih procesora građevne sastavnice temelje na tehnologiji vrlo visokog stupnja integracije VLSI. Slika 7.5 prikazuje organizaciju upravljačke jedinice koja je ostvarena na temelju standardnog pristupa i primjenom građevnih sastavnica kao što su osnovni logički sklopovi, dekoderi, multipleksori, registri i brojila. Instrukcijski dekoder tumači operacijski kod instrukcije i pobuđuje odgovarajuću izlaznu liniju (jednu od 2n linija, gdje je n broj bitova operacijskog koda). Na temelju pobuđene linije, vanjskih uvjeta i/ili stanja zastavica u statusnom registru te na temelju povratnih signala iz sklopovske upravljačke matrice, sklopovi za generiranje sljedećeg stanja pobuđuju signale koji odgovaraju vremenskom slijedu izvođenja elementarnih operacija koje se nazivaju mikrooperacije (u kontekstu upravljačke jedinice termin mikrooperacija označava jednostavnu, primitivnu, skoro nedjeljivu operaciju koja je izravno i u potpunosti podržana sklopovljem, npr. postavljanje podatka na internu sabirnicu, prijenos podataka između dva registra, inkrementiranje sadržaja registra ili brojila, aktiviranje sklopa u aritmetičkologičkoj jedinici). Sklopovska upravljačka matrica na temelju signala iz sklopova za generiranje sljedećeg stanja oblikuje upravljačke signale koji se dovode u upravljačke točke na
166
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
putu podataka i pobuđuju odgovarajuće mikrooperacije. Kao stoje već spomenuto, jedan dio upravljačkih signala dovodi se natrag sklopovima za generiranje sljedećeg stanja. osnovni signal vremenskog vođenja
SI. 7.5 Organizacija upravljačke jedinice ostvarena na temelju standardnog pristupa oblikovanja sekvencijalnih sklopova
7.3.1. IZVEDBA UPRAVLJAČKE JEDINICE UPORABOM GENERATORA SLJEDOVA - ANALIZA SLUČAJA U ovom ćemo potpoglavlju sustavno opisati postupak oblikovanja upravljačke jedinice procesora koja se temelji na uporabi generatora sljedova, odnosno generatora upravljačkih vremenskih impulsa. Prije negoli krenemo u opis postupka, prikažimo izvedbu upravljačkih signala za mikrooperaciju koja će se najčešće pojavljivati na putu podataka. To je mikrooperacija prijenosa sadržaja između dva registra - jednog izvorišnog registra Rm (slika 7.6.) i jednog odredišnog registra Rn. Pretpostavit ćemo da je prijenosni put za podatke interna sabirnica IntBUS; (slika 7.6). Važnu ulogu u prijenosu imaju upravljačke točke na koje se dovode upravljački signali C1 i C2. Upravljačka točka na koju se dovodi upravljački signal C1 realizirana je sklopovima s tri stanja (engl. three-state gate). Takav sklop (slika 7.7 a1)) funkcionira "normalno" kada je upravljački ulaz C aktivan (logička "1"), tj. prosljeđuje ulaznu binarnu vrijednost na izlaz. No ako je upravljački signal C neaktivan (logička "0"), izlaz je električki odspojen, tj. izlazni otpor je jednak vrlo velikom otporu bez obzira na vrijednost ulaznog signala A (je li logička "0" ili "1"). Tada se sklop nalazi u trećem, odnosno neaktivnom stanju. Ovisno o izvedbi sklopa s tri stanja može se ponašati i kao invertor (engl. three-state invertergate) (slika 7.7 a2) i a4)) ili biti neinvertirajući (engl. three-state buffergate) (slika 7.7 al) i a3)). Osim toga, sklop s tri stanja može imati upravljački ulaz C takav daje on definiran kao aktivan kad je u logičkoj "0" (slika 7.7 a3) i a4)). Pojednostavljeno, sklop s tri stanja možemo promatrati kao zasun koji je otvoren i "propušta" signal s ulaza na izlaz ako je stanje njegovog upravljačkog signala aktivno (slika 7.7 b)).
5. RIBARICI - GRAĐA RAČUNALA
167
Vratimo se slici 7.6. Aktiviranjem signala C1 „postavlja" se sadržaj registra Rmna sabirnicu IntBus. Druga upravljačka točka, na koju se dovodi upravljački signal C 2 ,je"puni registar"(englJoad register) - aktivan signal na tom ulazu ima za posljedicu unos podatka u registar Rn. Slika 7.8 prikazuje valne oblike upravljačkih signala C1 i C2 kojima se ostvaruje prijenos sadržaja iz registra Rm u Rn. Za opis mikrooperacija koristit ćemo notaciju sličnu RTL-u (Register Transfer Language) - sklopovskom jeziku za opisivanje sklopovlja. Tako, na primjer, prijenos između registara predočit ćemo s Rm Rn. Obično se uz opis mikrooperacije s lijeve strane ispisuje i logički uvjet koji mora biti zadovoljen da bi se mikrooperacija izvela. Operaciju prijenosa sadržaja između registara Rm-> Rn preko interne sabirnice možemo opisati u dva koraka: C:R 1 m IntBUS C2: IntBUS -> Rn b31
b30
b2
b1
bO
IntBUS
SI. 7.6 Sklopovska izvedba mikrooperacije prijenosa podataka između dva registra posredstvom interne sabirnice
Prije oblikovanja upravljačke jedinice procesora pogledajmo njegovu strukturu (slika 7.9). To je vrlo jednostavan 32-bitni akumulatorsko orijentiran procesor s jednom internom sabirnicom. Pretpostavit ćemo da se skup strojnih instrukcija sastoji od samo 8 instrukcija koje su prikazane u tablici 7.1.
168
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Y=A ako je C=1
Y=A a koje C=1 Y
Y=veliki izlazni otpor (treće stanje) ako je C=0
Y=veliki izlazni otpor (treće stanje) ako je C=0
a 2)
al)
Y=A ako je C=0
Y=Aakoje C=0 Y
Y
Y=veliki izlazni otpor (treće stanje) ako je C=1
Y=veliki izlazni otpor (treće stanje) ako je C=1
a4)
a3) a)
Y
A
C=0
C=1
C=0
C=1 b)
SI. 7.7 Sklop s tri stanja; a) izvedbe sklopa s tri stanja; b) tumačenje ponašanja sklopa s tri stanja
R - IntBUS
t IntBUS - R_
SI. 7.8 Valni oblici upravljačkih signala C1 i C2 kojima se ostvaruje prijenos sadržaja iz registra Rm u Rn
5.RIBARICI- GRAĐA RAČUNALA
DB0-DB31
adresna sabirnica
SI. 7.9 Struktura jednostavnog 32-bitnog procesora
169
170
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
^
^
—
.
.
.
ldaX
M[X]
staX
A
addaX
A + M[X] - • A ; zbroji
andaX
A • M[Xj
coma
A
A; izvedi jedinični komplement
jmpX
X
PC; granaj na instrukciju koja se nalazi na ciljnoj adresi X
jmpzX
ako je A = 0 onda X
shra
posmak sadržaja akumulatora A udesno
-M
A; sadržaj memorijske lokacije X premjesti u akumulator A M[X]; sadržaj akumulatora A pohrani na memorijsku lokaciju X
A; izvedi logičko 1
PC; uvjetno grananje
Tablica 7.1. Skup strojnih instrukcija ne koristi se b31
b29
b23
operacijski kod
bO
24-bitno adresno polje
SI. 7.10 Format instrukcije za jednostavan 32-bitni procesor
Sve su instrukcije 32 bita duljine. Slika 7.10 prikazuje format instrukcije. Vidimo da je polje operacijskog koda duljine 3 bita - jednoznačno određuje 8 instrukcija, dok je adresno polje 24-bitno i time određuje izravno adresirljivi prostor veličine 16 M 32-bitnih riječi (224). Bitovi b24 - b28 ne koriste se u instrukciji te mogu poslužiti za možebitno povećanje izravno adresirljivog prostora ili proširenje skupa instrukcija (u nekoj novoj verziji procesora). Mali skup instrukcija i čvrsta duljina strojne instrukcije značajka je procesora RISC arhitekture. Naš procesor, međutim, nije RISC procesor - akumulatorsko je orijentiran i ima aritmetičke i logičke instrukcije koje nisu vrste registar-registar (vidi poglavlje 3.). Činjenica da su sve instrukcije jednake duljine pojednostavit će sklopovlje koje podržava fazu PRIBAVI jer će ona biti jednaka za sve instrukcije. Na slici 7.9 vidimo da aritmetičko-logička jedinica (ALU) ima dva ulaza P i Q. Na ulaz P izravno je priključen 32-bitni akumulator A, dok se na ulaz Q dovodi podatak koji je trenutno postavljen na 32-bitnu Internu sabirnicu IntBUS. Aritmetičko-logička jedinica na izlazu ima interni ALU registar (IntRegALU) u kojem se privremeno pohranjuje rezultat aritmetičko-logičke operacije (upravljački signal C15) koji će se aktiviranjem upravljačkog signala C6 postaviti na internu sabirnicu (slika 7.9). Na taj je način uklonjen neželjeni utjecaj izlaza sklopovlja aritmetičko-logičke jedinice na podatke koji se nalaze na internoj sabirnici. Upravljačke točke na putu podataka koje su realizirane logičkim sklopovima s tri stanja označene su na slici 7.9 kružićima, a upravljačke točke za unos podataka u registre ili specifikaciju operacije u aritmetičko-iogičkoj jedinici označene su podebljanom vertikalnom crticom na kojoj završava vrh strelice linije upravljačkog signala. Opišimo aktivnosti tijekom faze PRIBAVI i odredimo njihov vremenski slijed: 1. korak: PC MAR; prenesi sadržaj 24-bitnog programskog brojila PC u memorijski adresni registar MAR;
5.RIBARICI- GRAĐA RAČUNALA
171
Vremenski slijed aktivnosti za 1. korak faze PRIBAVI je: O,: PC-HntBUS i = 1,2,... izlazi su iz generatora sljedova (slika 7.11). Uočavamo da su izlazi iz generatora sljedova . i = 1, 2,n, impulsi koji su vremenski pomaknuti tako da se međusobno ne preklapaju. Nakon n uzastopce generiranih impulsa ponavlja se periodično slijed generiranih signala
w
w
stop
w
clock
w
generator sljedova (modul n)
reset
w •
w
clock = signal vremenskog vođenja
T
h—H
3
perioda sljedova (modul n)
SI. 7.11 Generator sljedova (generator upravljačkih vremenskih impulsa)
2. korak: M[MAR] MDR; pročitaj sadržaj memorijske lokacije čija je adresa iz MAR postavljena na adresnu sabirnicu ABO- AB23. Pribavljeni sadržaj pohrani u MDR; Vremenski slijed upravljačkih signala kojim se izvodi 2. korak faze PRIBAVI je: 3: čitaj sadržaj memorijske lokacije M <£4 čitaj sadržaj memorijske lokacije M i pohrani sadržaj u MDR; Ovdje smo predvidjeli da operacija vremenski odgovara trajanju dvaju impulsa generatora sljedova što je opravdano jer se može očekivati da je vrijeme pristupa radnoj memoriji (memorijskoj jedinici računala) dulje negoli je vrijeme potrebno za izvođenje mikrooperacije na putu podataka. Tijekom 4 unosi se podatak sa (vanjske) sabirnice podataka DBO - D B 3 1 u MDR.
172
7.
POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
3. korak: PC +1 —• PC i MDR(OP) IR; inkrementiraj sadržaj programskog brojila PC i prenesi tri najznačajnija bita koja predstavljaju operacijski kod instrukcije u instrukcijski registar IR; Ove se dvije mikrooperacije mogu izvesti istodobno tj. paralelno jer je sklop za inkrementiranje programskog brojila PC dodijeljen lokalno PC-u i za tu operaciju se ne koristi interna sabirnica IntBUS. Vremenski slijed za 3. korak faze PRIBAVI je: PC +1 PC, MDR(OP) IntBUS IntBUS IR 4. korak: dekodiranje operacijskog koda; Vremenski slijed za 4. korak je: 7: dekodiranje operacijskog koda Trajanje faze PRIBAVI odgovara vremenu trajanja sedam upravljačkih vremenskih impulsa: - 7. Uz pretpostavku da je vrijeme trajanja jednog upravljačkog vremenskog impulsa jednako periodi signala vremenskog vođenja (clock; slika 7.11), a frekvencija tog signala je tako izabrana da njegova perioda (T= 1/f) odgovara vremenu izvođenja osnovne mikrooperacije, onda faza PRIBAVI zahtijeva vrijeme 7 xT.
C0 C, C2 C3 C4 C5 C6 C7 C8 C9 C,o C„
add
ALU upravljanje
P + Q; zbroji
and
ALU upravljanje
P-Q
com
ALU upravljanje
p
Read
Upravljanje memorijom
čitanje (Read)
Write
Upravljanje memorijom
pisanje (Write)
^MDR
Upravljanje sabirnicom
MDR
^ALU
Upravljanje sabirnicom
IntRegALU -> IntBUS
Ea
Upravljanje sabirnicom
A
E
Upravljanje sabirnicom
PC
Upravljanje sabirnicom
IR
Upravljanje registrom
IntBUS
A
Upravljanje registrom
IntBUS
PC
L,r
Upravljanje registrom
IntBUS
IR
j
C,3
^MAR
Upravljanje registrom
IntBUS
MAR
|
C,4
"M ' DR "'ALU
Upravljanje registrom
IntBUS
MDR ili (DB0-DB31)
Upravljanje registrom
ALU
Inc
Upravljanje registrom
PC + 1
Sh
Upravljanje registrom
posmak udesno akum. A
C,5 C„ C,7
pc E ir
La Lpc
Tablica 7.2. Popis upravljačkih signala
ii ] j ,
IntBUS
IntBUS IntBUS IntBUS
IntRegALU PC
i
j
it
f [
MDR I j
5.RIBARICI- GRAĐA RAČUNALA
173
Da bi se podržala faza PRIBAVI i faza IZVRŠI za svaku od strojnih instrukcija za naš procesor, upravljačka jedinica mora generirati upravljačke signale C0 - C i dovesti ih u upravljačke točke na putu podataka.Tablica 7.2. sadržava popis upravljačkih signala, njihove simbole i mikrooperacije koji oni pobuđuju. Tablica 7.2. nužna nam je za dizajn upravljačke jedinice. Upravljački signali kojima će biti aktivirane mikrooperacije za cjelovitu fazu PRIBAVI su: Vremenski trenutak Upravljački signali Mikrooperacija 01 ,L
C8 Co, C I,J
PC-HntBUS IntBUS - • MAR
03
C3 C3, C14 C16, C5 C5,C12 -
čitanje mem. lokacije (DB0-DB31) MDR PC + 1 PC, MDR(OP) IntBUS IntBUS -HR dekodiranje op. koda
Upravljačka jedinica generirajući sljedove upravljačkih signala: C8 - (C8, C 13 )- C3 - (C3, C14) (C16, C5) - (C5, C12) u trenucima određenim s 1 - 7 izvest će fazu PRIBAVI. Opišimo fazu IZVRŠI za svaku strojnu instrukciju: instrukcija fdaX; operacijski kod = 000 1. korak: MDR (ADRESA)
MAR; 24-bitnu adresu operanda iz MDR prenesi u MAR
(Opaska: neposredno nakon završetka faze PRIBAVI u registru MDR nalazi se 32-bitna instrukcija čiji je format prikazan na slici 7.10.) Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: 0>8: MDR(ADRESA) IntBUS 09: IntBUS MAR 2. korak: M[MAR]
MDR
Vremenski slijed aktivnosti za 2. korak faze IZVRŠI je: 10: čitaj (Read) sadržaj memorijske lokacije M n: čitaj (Read) sadržaj memorijske lokacije M i pohrani sadržaj u MDR; 3. korak: MDR
A; prenesi operand u akumulator A
Vremenski slijed aktivnosti za 3. korak faze IZVRŠI je: 0 12 : MDR-•IntBUS d>13: IntBUS A Upravljački signali kojima će biti aktivirane mikrooperacije za cjelovitu fazu IZVRŠI za instrukciju ldaX su: Vremenski trenutak
Upravljački signali C5
Mikrooperacija MDR IntBUS
C5,C13 C3 C3,C14 C5
IntBUS MAR čitanje mem. lokacije (DB0-DB31) MDR MDR IntBUS
13
C5,C10
IntBUS-» A
174
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Faza IZVRŠI za strojnu instrukciju IdaXtraje 6 vremenskih intervala koji odgovaraju trajanju upravljačkog vremenskog impulsa pa je ukupno vrijeme potrebno za izvođenje instrukcije IdaX jednako -7 odnosno 13 vremenskih intervala (od toga su 4 vremenska intervala "potrošena" na pristup (radnoj) memoriji, odnosno više od 30% vremena trajanja instrukcijskog ciklusa). instrukcija staX; 1. korak: MDR(ADRESA)
operacijski kod = 001 MAR; 24-bitnu adresu operanda iz MDR prenesi u MAR
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je:
MDR(ADRESA) -> IntBUS
09:
IntBUS
2. korak: A
MAR
MDR; sadržaj akumulatora A smjesti u MDR
Vremenski slijed aktivnosti za 2. korak faze IZVRŠI je:
A - • IntBUS
On:
IntBUS-•MDR
3. korak: MDR - • M[MAR]; pohrani sadržaj MDR registra u memoriju Vremenski slijed aktivnosti za 3. korak faze IZVRŠI je: 12:
piši (Write); pohrani sadržaj na memorijsku lokaciju
13:
piši (Write); pohrani sadržaj na memorijsku lokaciju
Upravljački signali kojima će biti aktivirane mikrooperacije za cjelovitu fazu IZVRŠI za instrukciju staX jesu: Vremenski trenutak
Upravljački signali
Mikrooperacija
08
C5
MDR - • IntBUS
%
C5,C13
IntBUS-•MAR
C7
<Ž>n
C7,C14
IntBUS - • MDR
12
C.4 CA4
Write Write
13
A
IntBUS
Instrukcija staX također zahtijeva 13 vremenskih intervala za svoje izvođenje. instrukcija addaX;
operacijski kod = 010
1. korak: MDR(ADRESA) - • MAR; 24-bitnu adresu operanda iz MDR prenesi u MAR Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: Os:
MDR (ADRESA)-•IntBUS
9:
IntBUS - • MAR
2. korak: M[MAR] - • MDR; dohvati operand iz memorije Vremenski slijed aktivnosti za 2. korak faze IZVRŠI je: 10:
čitaj (Read) sadržaj memorijske lokacije M čitaj (Read) sadržaj memorijske lokacije M i pohrani sadržaj u MDR
3. korak: A + MDR - • A; zbroji sadržaj akumulatora A i operand iz MDR-a
5.RIBARICI- GRAĐA RAČUNALA
175
Vremenski slijed aktivnosti za 3. korak faze IZVRŠI je: MDR-^ lntBUS;P + Q IntRegALU 12" 13* IntRegALU IntBUS IntBUS A 14' Upravljački signali kojima će biti aktivirane mikrooperacije za cjelovitu fazu IZVRŠI za instrukciju addaX su: Vremenski trenutak
Upravljački signali
*io <3>11 <1>12
C3 c 5' c 0' c15
13
14
Mikrooperacija MDR IntBUS IntBUS MAR čitanje mem. lokacije (DB0-DB31) MDR IntBUS MDR, P + Q IntRegALU IntRegALU IntBUS IntBUS A
Instrukcija adda X izvodi se u 14 vremenskih intervala, pri čemu svaki interval odgovara vremenu trajanja upravljačkog vremenskog impulsa. instrukcija anda X; 1. korak: MDR(ADRESA)
operacijski kod = 011 MAR; 24-bitnu adresu operanda iz MDR prenesi u MAR
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: 08: MDR (ADRESA) IntBUS 9: IntBUS MAR 2. korak: M[MAR]
MDR
Vremenski slijed aktivnosti za 2. korak faze IZVRŠI je: O10:
čitaj (Read) sadržaj memorijske lokacije M
n:
čitaj (Read) sadržaj memorijske lokacije M i pohrani sadržaj u MDR;
3. korak: A • MDR
A; (logička operacija I)
Vremenski slijed aktivnosti za 3. korak faze IZVRŠI je: MDR IntBUS; P - Q • IntRegALU (logička operacija I)
"5
QC 10
o o
12
13
14
13
C3 c3« c14 c 5' cS ' c15 c"6 c „ c 10
Mikrooperacija MDR -> IntBUS IntBUS MAR čitanje mem. lokacije (DB0-DB31) MDR IntBUS MDR, P • Q IntRegALU IntRegALU IntBUS IntBUS A
176
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
instrukcija coma; 1. korak: A
operacijski kod = 100
A; jedinični komplement
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: Og:
IntRegALU
09:
IntRegALU
O10:
IntBUS
IntBUS
A
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: Vremenski trenutak
Upravljački signali
Mikrooperacija
C2,C15
P - * IntRegALU
0>9
C6
d>10
C6,C10
IntRegALU IntBUS
IntBUS A
Faza IZVRŠI za instrukciju coma traje tri vremenska intervala, odnosno instrukcija coma zahtijeva 10 vremenskih intervala. instrukcija jmpX; 1. korak: MDR(ADRESA)
operacijski kod = 101 PC
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: Vremenski trenutak
Upravljački signali
0>8
C5
%
C 5 ,C„
Mikrooperacija MDR(ADRESA) IntBUS
IntBUS PC
Instrukcija jmpX je "brza" instrukcija koja zahtijeva samo 9 vremenskih intervala. instrukcija jmpzX; 1. korak: MDR(ADRESA)
operacijski kod = 110 PC ako je A = 0 inače nema promjene sadržaja PC-a
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: Vremenski trenutak Upravljački signali O
CJ
0>9
ako je A= 0 onda C5, C n
instrukcija shra; 1. korak: Shr A
Mikrooperacija MDR(ADRESA) IntBUS
PC
operacijski kod =111 A
Vremenski slijed aktivnosti za 1. korak faze IZVRŠI je: Vremenski trenutak Upravljački signali 8
IntBUS
C17
Mikrooperacija Shr A
A; posmak udesno
Slika 7.12 prikazuje organizaciju sklopovske upravljačke jedinice s generatorom sljedova. 3-bitni operacijski kod se iz instrukcijskog registra IR šalje na ulaz instrukcijskog dekodera. Instrukcijski dekoder je kombinacijski sklop koji ima n = 3 ulaza i 2n = 8 izlaza. Svaki od izlaza odgovara jednoj od 8 strojnih instrukcija. Dekoder se još naziva i "jedan od 2n" čime asocira da je samo jedan od 2n izlaza aktivan (logičko"1") za neku određenu n-bitnu kombinaciju na njegovom ulazu. Primjerice, ako je na ulazu u instrukcijski dekoder binarna kombinacija 000 (operacijski kod instrukcije ldaX), onda će biti aktivan izlaz označen na slici s l0. Ako je na ulazu binarna kombinacija 100 (operacijski kod instrukcije coma), onda će biti
S. RIBARIČ - GRAĐA RAČUNALA
aktivan samo izlaz l4 (slika 7.12). Na slici 7.12 vidimo da se izlazi iz instrukcijskog dekodera (l Q - l7)"susreću"s izlazima iz generatora sljedova u dijelu koji je označen kao"kombinacijski sklopovi". Izlaz iz tog dijela su upravljački signali C0 - C17 tako da opravdano možemo pretpostavljati da se sinteza upravljačkih signala temelji na logičkim kombinacijama izlaza iz instrukcijskog dekodera i izlaza iz generatora sljedova. Zbog toga možemo postaviti hipotezu da se upravljački signali C i = 0, 1,2,..,, 17 mogu opisati logičkom jednadžbom oblika: 16 {f
77
y=i V
m=0
\
(7.1)
m
/
gdje 5) označava logičku operaciju ILI a • logičku operaciju I, pri čemu je m = 0,1, 2,..., 7 izlaz iz instrukcijskog dekodera, a j = 1,2,3, ...,16 izlaz iz generatora sljedova. Za upravljačke signale koji se generiraju i za potrebe faze PRIBAVI pretpostavit ćemo da je uz <£., j = 1, 2,..., 7 drugi član operacije logičko I uvijek jednak "1" (tijekom aktivnosti u vremenskim intervalima <&. j = 1,2,..., 6,7 izlaz iz instrukcijskog dekodera nije definiran niti je važan). start stop
generator sljedova (po modulu 16)
clock reset
CD,
instrukcijski dekoder
Ida X
w
staX
V
addaX
w
arida X
w
coma jmp X
CD.
A=0 kombinacijski sklopovi
w w
jmpzX shra
b31
w
UT c„ c
bO
c
TT c17
/R instrukcijski registar 51. 7.12 Organizacija sklopovske upravljačke jedinice s generatorom sljedova
Pogledajmo je li hipoteza valjana. Na primjer, pogledajmo kada je upravljački signal C3 aktivan za fazu IZVRŠI pojedinih strojnih instrukcija: Za instrukciju ldaX; aktivan izlaz iz instrukcijskog dekodera l0 vrijedi: U fazi IZVRŠI za instrukciju ldaX, tijekom upravljačkih vremenskih impulsa 10 i biti aktivan upravljački signal C3 (vidi opis faze IZVRŠI za ldaX): C3 = 1010 + n l0; ovdje + označava logičku operaciju ILI
treba
178
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Za instrukciju stoX; aktivan izlaz iz instrukcijskog dekodera
ne zahtijeva se signal C3.
Za instrukciju adda X: aktivan izlaz iz instrukcijskog dekodera l2 vrijedi: С = Ф 10 lI2 + Ф 11 I2* ^3
Za instrukciju onda X: aktivan izlaz iz instrukcijskog dekodera I vrijedi: C 0 (3 I + 0 11 I 3 ^3 = ^10 Ostale strojne instrukcije u fazi IZVRŠI ne rabe upravljački signal C3, međutim, on se zahtijeva tijekom faze PRIBAVI, i to: c3 = a > 3 . i + o 4 - i . Ako sada objedinimo sve gornje izraze za C3 dobivamo: C = 0 3 • 1 + 4 • 1 + 0 10 'ol + O
l+O I ^+1 1 '2l +^ O I ^+11 I3 ' ^ 1 0 '2 ^ 1 0 '3 !
n 'o
odnosno c 3 = 0 3 + 0 4 + O10 (l„ + l2 + l3) + O,, (l0 +l2 + y .
(7.2)
Ako sada usporedimo logički izraz za C3 vidimo da je zaista oblika koji odgovara obliku logičke jednadžbe (7.1). Na temelju logičke jednadžbe (7.2) za upravljački signal C3 možemo jednostavno i izravno sintetizirati taj upravljački signal. Slika 7.13 prikazuje kombinacijski dio upravljačke jedinice u kojem je oblikovan upravljački signal C3. Ф,
Ф.
^10
Ф
11
ф
kombinacijski sklopovi
SI. 7.13 Kombinacijski dio upravljačke jedinice (sinteza upravljačkog signala С
5.RIBARICI- GRAĐA RAČUNALA
179
Kako bi izgledala sinteza upravljačkih signala samo za fazu PRIBAVI? Na temelju analize aktivnosti u fazi PRIBAVI dobili smo ovakav rezultat: Vremenski trenutak Upravljački signali Mikrooperacija PC IntBUS C IntBUS MAR 13 čitanje mem. lokacije c (DB0-DB31) MDR PC + 1 PC, MDR(OP) IntBUS IntBUS IR dekodiranje op. koda 4> Slika 7.14 prikazuje kombinacijski dio upravljačke jedinice s detaljem koji se odnosi samo na sintezu upravljačkih signala potrebnih tijekom faze PRIBAVI. Na slici vidimo da je sklopovima u ravnini"l" dovedena logička "1" na jedan od dva ulaza - ona se može smatrati kao izlaz iz bistabila FB (naziva se Fetch bistabil) kojim se označava stanje ili faza PRIBAVI. Dekodiranje operacijskog koda, kao posljednja aktivnost u fazi PRIBAVI (stanje bistabila FB = 1), obavlja se u upravljačkoj jedinici tijekom 7. Kada upravljačka jedinica prijeđe u fazu IZVRŠI, izlaz bistabila FB se automatski resetira, odnosno postavlja u"0". CD,
C3
CD,
CD,
c5
O,
Qc
(D,
...
c8
cu
c13
c14
c16
SI. 7.14 Kombinacijski dio upravljačke jedinice (sinteza dijela upravljačkih signala potrebnih za fazu PRIBAVI)
180
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Uočavamo da kombinacijski sklopovi upravljačke jedinice imaju pravilnu strukturu - sastoje se od prve ravnine logičkih sklopova I, a zatim od ravnine logičkih sklopova ILI. Pravilna struktura ovog oblika podsjeća na strukturu koju poznajemo kao programirljiva logička polja PLA (Programmable Logic Array) u kojima se prema potrebama korisnika ostvaruju veze među sklopovima u "I" i "ILI" ravnini. Slika 7.15 ilustrira jednostavan troulazni PLA sklop koji ima u Travnini 3 logička sklopa I, a u ravnini"ILI"samo dva logička sklopa ILI. Sklop ima dva izlaza. Naravno, ovo je samo ilustracija - današnji stupanj tehnologije dopušta izvede'Ti "ILI" ravnina sa stotinama tisuća logičkih sklopova. programirljive veze
programirljive veze
SI. 7.15 Jednostavan PLA sklop
Pri kažimo kako izgleda detalj sinteze upravljačkih sklopova za fazu IZVRŠI za instrukcije jmpX i jmpzX. (Opaska: izlaz iz instrukcijskog dekodera l5 (slika 7.12) aktivan je tijekom faze j IZVRŠI za instrukciju jmpX, odnosno l6 za instrukciju jmpzX). Na temelju opisa upravljačkih j signala za instrukciju jmpX: Vremenski trenutak
Upravljački signali
Mikrooperacija MDR(ADRESA)
3>
C 5 ,c„
IntBUS
IntBUS -> PC
i upravljačkih signala za instrukciju jmpzX: Vremenski trenutak
Upravljački signali
<*> a>
C C5, ako je A= 0 onda C n
Mikrooperacija MDR(ADRESA)
IntBUS
IntBUS -> PC
možemo odrediti kombinacijski dio upravljačke jedinice (slika 7.16). Vremenski najzahtjevnije strojne instrukcije su addaX i anda X (14 vremenskih intervala^ zatim im slijede staXi IdaX(13 vremenskih intervala), coma (10 vremenskih intervala), jmm X\jmpzX(9 vremenskih intervala) i shra (8 vremenskih intervala). Uočavamo da su vremen-l ski najzahtjevnije upravo one strojne instrukcije koje u fazi IZVRŠI pristupaju memoriji] Na primjer, instrukcija addaX ima jedan od operanada u memoriji i mora ga tijekom faze] IZVRŠI dohvatiti iz memorije. Jednako tako, vidimo da, nažalost, obavezne instrukcije a ]
izmjenu podataka između procesora i memorije (staXi ldaX) imaju relativno dugo vrijeme izvođenja. Kada bi radna memorija svojom brzinom (vremenom pristupa) pratila brzinu sklopova u procesoru, onda bismo mogli smanjiti vrijeme izvođenja instrukcija staX \lda X za dva vremenska intervala (jedan za fazu PRIBAVI i jedan za fazu IZVRŠI) pa bismo tako ubrzali izvođenje tih instrukcija za nešto više od 15%. 0O O
(Dq V
" l " a k o je A=0
SI. 7.16 Kombinacijski dio upravljačke jedinice (sinteza dijela upravljačkih signala potrebnih za fazu IZVRŠI za instrukcije jmpX\ jmpzX)
182
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
instrukcija $taX;
operacijski kod = 001
Vremenski trenutak
Upravljački signali
C5,c13
aktivan izlaz instrukcijskog dekodera ft Mikrooperacija MDR IntBUS IntBUS MAR A-•IntBUS IntBUS -+MDR Write Write
10 n 12
4>13 /cfaXi staXsu: = 1 + T =# J+ J 12 1. 13 1 11 8 V T 8 'l T • 1 : j 1 'i 1 1 ^10 1 I C,o
•
0
9 1
12 0
13 0
•
7.3.2. SKLOPOVSKE SASTAVNICE UPRAVLJAČKE JEDINICE OSTVARENE NA TEMELJU GENERATORA SLJEDOVA Na slici 7.12 prikazana je organizacija sklopovske upravljačke jedinice s generatorom sijedova. Prikažimo sklopovsku izvedbu pojedinih sastavnica.
73.3. INSTRUKCIJSKI DEKODER Tablica 7.3. prikazuje tablicu kombinacija ili tablicu istinitosti (engl. truth table) za dekoder.
A
B
c
'o
I,
«2
'3
<4
l5
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
0
1
1
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
1
Tablica 7.3. Tablica istinitosti za dekoder
'7
]
S. RIBARIČ - GRAĐA RAČUNALA
183
Slika 7.17 prikazuje izvedbu instrukcijskog dekodera. c c
B B A A
r i >
l=ABC
I =ABC
r i > =ABC
= ABC
I4 = A B C
l5= A B C
= ABC
l=ABC
C C B B A A
SI. 7.17 Instrukcijski dekoder
7.3.4. GENERATOR SLJEDOVA PO MODULU N Slika 7.11 prikazuje generator sljedova vremenskih upravljačkih impulsa. On se može realizirati uporabom prstenastog brojila (engl. ring counter) koje se dobiva ako se posmačnom registru izlaz spoji s ulazom (slika 7.18). Drugi je način primjena brojila po modulu n i dekodera (slika 7.19).
184
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
posmak udesno (signal vremenskog vođenja)
T„
T,
T0
T1
T
T2
T n-1, posmačni registar
CD
SL 7.18 Izvedba generatora sljedova uporabom prstenastog brojila
T„
T,
T2
15
signat vremenskog vođenja SL 7.19 Izvedba generatora sljedova uporabom brojila po modulu n i dekodera
Slika 7.20 prikazuje izvedbu generatora sljedova koja je prilagođena funkciji upravlja jedinice. Osnovnom sklopu pridodana je upravljačka logika (RS bistabil s logičkim sklo vima I i ILI).
S. RIBARIČ - GRAĐA RAČUNALA
CD CD CD 2
3
185
CD
^ 1 6
reset SI. 7.20 Izvedba generatora sljedova (za potrebe upravljačke jedinice procesora)
Postavljanjem signala "start" u logičku jedinicu započinje generiranje sljedova vremenskih upravljačkih impulsa u ritmu signala vremenskog vođenja (clock) - omogućeno je brojilo i dekoder. Aktiviranjem upravljačkog signala "stop" zaustavlja se rad generatora. Upravljačkim signalom "reset" vraća se generator u početno stanje i započinje generiranje sljedova od upravljačkog vremenskog impulsa. Za potrebe upravljačke jedinice generator sljedova generira signale 0 1 - 0 1 6 (modul 16). Na temelju analize trajanja strojnih instrukcija za naš model procesora, vidjeli smo da instrukcije traju različiti broj vremenskih intervala upravljačkih impulsa: addaXi anda X (14 vremenskih intervala), sta Xi Ida X (13 vremenskih intervala), coma (10 vremenskih intervala), jmpXi jmpzX(9 vremenskih intervala) i shra (8 vremenskih intervala). Budući da svaka nova faza PRIBAVI započinje s vremenskim upravljačkim signalom <1^, da bismo ubrzali rad procesora, umjesto "praznog hoda" od stvarnog kraja tekuće instrukcije do novog vremenskog upravljačkog signala resetirat ćemo generator sljedova. Slika 7.21 prikazuje način kako se smanjuje "prazan hod"za pojedine instrukcije. Na slici 7.21 vidimo, na primjer, da se za dekodirane instrukcije jmpX i jmpzX (izlazi l5 i l6 iz instrukcijskog dekodera, slika 7.12) koje traju svaka po ukupno 9 vremenskih intervala, generira signal "reset" sinkrono sa O10 koji se dovodi na upravljački ulaz generatora sljedova. Na taj se način "uštedjelo" vrijeme od do 0 16 , odnosno 6 vremenskih intervala. Za najbržu strojnu instrukciju shra koja traje 8 vremenskih intervala postiže se ubrzanje za 7 vremenskih intervala jer se generator sljedova resetira tijekom 9.
186
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
instrukcijski dekoder
SL 7.21
Način ubrzanja rada procesora smanjivanjem "praznog hoda"
73.5. GENERATOR SIGNALA VREMENSKOG VOĐENJA Za realizaciji generatora sljedova trebamo i generator signala vremenskog vođenja (clock)Na slici 7.22 prikazana je izvedba oscilatora s kristalom (astabil s kristalom) koji daje veliku stabilnost frekvencije osciliranja ("frekvencije clocka"). kristal
D
>
9-L
t>
SI. 7.22 Izvedba generatora signala vremenskog vođenja
>
Q
Q
clock
S. RIBARIČ - GRAĐA RAČUNALA
187
7.4. MIKROPROGRAMIRANA UPRAVLJAČKA JEDINICA M.V. VVilkes je 1951. opisao izvedbu mikroprogramirane upravljačke jedinice kojoj su osnovne značajke pravilna struktura, modularnost i velika prilagodljivost. Mikroprogramiranje, kao što smo već spomenuli, predstavlja sustavnu metodu izvedbe upravljačke jedinice i omogućuje jednostavnu promjenu skupa strojnih instrukcija. Promjena instrukcija postiže se jednostavnom izmjenom sadržaja mikroprogramske memorije.
SI. 7.23 Pojednostavljeni model procesora
188
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Izvedbu mikroprogramirane upravljačke jedinice prikazat ćemo na pojednostavljenom modelu procesora koji je prikazan na slici 7.23. Put podataka temelji se na trima internima sabirnicama: lijevoj sabirnici operanada (L), desnoj sabirnici operanada (R) i sabirnici rezultata koju ćemo nazivati i glavna sabirnica (MB). Sve su interne sabirnice širine 16 bita. Procesor je akumulatorsko orijentiran - ima dva 16-bitna akumulatora: akumulator A koji je spojen na sabirnicu operanada L i akumulator B koji je spojen na sabirnicu operanada R. Akumulator B ima kao izlaz"pravu" vrijednost (B) ili jedinični komplement (£?). Oba akumulatora kao odredišta rezultata ili operanada imaju i vezu s glavnom sabirnicom MB. Programsko brojilo PC i statusni registar SR svojim su izlaznim linijama priključeni na desnu sabirnicu R. Pretpostavit ćemo da je programsko brojilo PC 16-bitno. Izlaz 16-bitne aritmetičko-logičke jedinice spojen je na ulaz posmačnog sklopa. Izlaz posmačnog sklopa S dovodi se na glavnu sabirnicu MB. Na glavnu sabirnicu priključenje i kombinacijski sklop ZT (Zero Tester) za ispitivanje je li rezultat koji je trenutno na glavnoj sabirnici MB jednak 0. Na slici opažamo da su označeni i pristupi glavnoj sabirnici IN i OUT koji predstavljaju osnovu za realizaciju izmjene podataka s vanjskim svijetom. Upravljačka jedinica ima strukturu mikroprogramirane jedinice. Ona zahtijeva svoj interni signai vremenskog vođenja i to, u našem slučaju, trofazni signal s fazama P(0), P(1) i P(2). Tijekom P(0) odvijaju se aktivnosti koje odgovaraju fazi "mikro-izvrši", P(1) odgovara prijenosu adrese sljedeće mikroinstrukcije u mikroprogramski adresni registar H, a tijekom P(2) pribavlja se mikroinstrukcija iz upravljačke (mikroprogramske) memorije CM (faza"mikro-pribavi") i smještava u mikroinstrukcijski registar F. Postojanje "privatnog" signala vremenskog vođenja koji je namijenjen mi krop rog ram i ranoj upravljačkoj jedinici opravdava predodžbu jedinice kao "računala u računalu". Slika 7.24 prikazuje podrobniju organizaciju upravljačke jedinice. Podsjetimo se, u potpoglavlju 7.2. napisali smo da svakoj strojnoj instrukciji odgovara jedan mikroprogram pohranjen u upravljačkoj memoriji. Početna adresa mikroprograma određuje se na temelju operacijskog koda strojne instrukcije. Adresa svake sljedeće mikroinstrukcije u mikroprogramu može se dobiti na sljedeće načine (slika 7.24): i) povećanjem sadržaja mi kro programskog adresnog registra H (registar H potpuno se opravdano naziva i mikroprogramsko brojilo jer pokazuje na sljedeću mikroinstrukciju); i i) prijenosom adresnog polja CNA {Control Next Address) iz pribavljene mikroinstrukcije u registar H; i i i) prijenosom adresnog polja CNA iz pribavljene mikroinstrukcije uz utjecaj stanja zastavica iz statusnog registra SR na vrijednost adrese (izlaz iz logike za grananje u mikroprogramu). Prema funkciji bitovi mikroinstrukcije mogu se grupirati u sljedeća tri polja: i) polje namijenjeno upravljačkim funkcijama, odnosno polje upravljačkih signala koj se izravno ili preko dekodera dovode u upravljačke točke na putu podataka; ii) polje za upravljanje slijedom mikroinstrukcija; iii) polje namijenjeno očuvanju prilagodljivosti, na primjer reprogramiranju upravljačke jedinice. U našem slučaju je to tzv. emit polje koje sadržava konstantu čija se vrijednost može proslijediti na lijevu sabirnicu L.
S. RIBARIČ - GRAĐA RAČUNALA
vanjski uvjeti
189
uvjeti (zastavice statusnog registra SR)
SI. 7.24 Prikaz podrobnije organizacije mikroprogramirane upravljačke jedinice
Slika 7.25 prikazuje format mikroinstrukcije. Mikroinstrukcija je duljine 32-bita. Potrebno je napomenuti duljina riječi procesora (8,16,32 ili 64- bita) nema izravne veze s duljinom mikroinstrukcije. Naš procesor je 16-bitne arhitekture, a format mikroinstrukcije je 32-bitni. polje za određivanje sljedeće mikroinst.
polje namjenjeno upravljačkim funkcijama
emit polje
A
^
b
b27 b26 b25 b24 b23
b29
3, CA
CB
2
3
COP
CSH
2 ! 2
k SI. 7.25 Format mikroinstrukcije
b19 b]8 bi 7 b16 b,5 b,4 b13 CMB
CAB
3
2
CBB
CNA
CST
2 „ 32 bita
2
b8 b7
,
6
b0 EM
•1
8
190
7 . POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Svaki bit ili grupa bitova u pojedinim poljima CA - CST mikroinstrukcije određuje pojedine mikrooperacije koje će se izvesti na određenom dijelu puta podataka. Tako na primjer, dvobitno polje CA određuje mikrooperacije prijenosa sadržaja akumulatora A i 8-bitne konstante iz emit polja EM na lijevu sabirnicu L. Tablica 7.4. prikazuje vrijednosti bitova b30 i b31 mikroinstrukcije (polje CA) i odgovarajuće mikrooperacije.
00
Nema prijenosa na lijevu sabirnicu L
01
F(EM) - 0 L(0-7,8-15); konstanta iz emit polja smještava se na 8 manje značajnih linija (LSB) sabirnice L
10
0 - F(EM) L(0-7,8-15); konstanta iz emit polja smještava se na 8 značajnijih linija (MSB) sabirnice L
11
A
L; na L se smještava 16-bitni sadržaj akumulatora A |
Tablica 7.4. Upravljanje lijevom sabirnicom L
Tako, na primjer, dvobitna kombinacija 01 u polju CA pribavljene mikroinstrukcije pobuđuje mikrooperaciju kojom će se 8-bitna konstanta sadržana u emit polju mikroinstrukcije postaviti na osam manje značajnih linija lijeve sabirnice (značajnijih osam linija L poprimaju vrijednost 0). Tablica 7.5. prikazuje mikrooperacije koje su određene trobitnim poljem CB koje služi za upravljanje prijenosom na desnu sabirnicu R.
000
Nema prijenosa na desnu sabirnicu R
001
B R; prijenos 16-bitnog sadržaja akumulatora B na desnu sabirnicu (R)
010
B R ; prijenos jediničnog komplementa sadržaja akumulatora B na desnu sabirnicu R
011
PC R; prijenos sadržaja programskog brojila PC na desnu sabirnicu
100
SR R ; prijenos sadržaja statusnog registra SR na desnu sabirnicu
101
Ne koristi se (predviđeno za nadogradnju)
...
Ne koristi se (predviđeno za nadogradnju)
j
111
Ne koristi se (predviđeno za nadogradnju)
I
Tablica 7.5. Upravljanje desnom sabirnicom R
j
5. RIBARIĆ - GRAĐA RAČUNALA
191
Tablica 7.6. opisuje dvobitno polje COP koje se odnosi na upravljanje aritmetičko-logičkom jedinicom (u našem je slučaju to samo sklop potpuno zbrajalo).
00
Nema aktivnosti
01
Zbroji dva 16-bitna podatka s Cin (Carry In) = 0
10
Zbroji dva 16-bitna podatka sCjn(Carry In) = 1
11
Logička operacija I
ablica 7.6. Upravljanje aritmetičko-logičkom jedinicom
Tablica 7.7. prikazuje mikrooperacije pobuđene kombinacijom bitova u polju CSH (upravljanje posmačnim sklopom)
00
Q
MB, Q = S ;nema posmaka
01
Q
MB, Q = shr S ;posmak udesno za jedno mjesto
10
Q
MB, Q = shl S ;posmak ulijevo za jedno mjesto
11
Ne koristi se (predviđeno za nadogradnju)
Tablica 7.7. Upravljanje posmačnim sklopom
Tablica 7.8. opisuje trobitno polje CMB. Ono određuje vezu glavne sabirnice MB s ostalim sastavnicama procesora.
{
000
Nema prijenosa
}
001
MB
A ;prijenos 16-bitnog podatka sa sabirnice MB u akumulator A
i j
oio
MB
B prijenos 16-bitnog podatka sa sabirnice MB u akumulator B
011
MB
PC ;prijenos 16-bitnog podatka sa sabirnice MB u PC
i i
ioo
MB
SR prijenos 16-bitnog podatka sa sabirnice MB u statusni registar SR
i j f j
ioi
MB OUT/prijenos 16-bitnog podatka sa sabirnice MB prema ulazno-izlaznom podsustavu
110
IN
!
ni
MB ;unos podatka iz ulazno-izlaznog podsustava
Ne koristi se (predviđeno za nadogradnju)
Tablica 7.8 Upravljanje glavnom sabirnicom MB
192
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Prije nego što opišemo značenje polja CAB (bitovi b i 8 - b i 9 mikroinstrukcije), CBB (bi6 - b i 7) i CNA (b8 - b13), trebamo nešto reći o kapacitetu upravljačke (mikroprogramske) memorije i mikroprogramskom adresnom registru (mikroprogramskom brojilu) H. Pretpostavit ćemo da je kapacitet mikroprogramske memorije 256 32-bitnih riječi i zato je mikroprogramski adresni registar H duljine 8 bita. Registar H organiziran je tako da se 6 bitova polja CNA (polje za određivanje sljedeće mikroinstrukcije) smještava na njegovih 6 značajnijih bitovnih pozicija 1-1(7-2), dok se dvije najmanje značajne bitovne pozicije H(1-0) određuju na temelju polja CAB i CBB (slika 7.26), i to tako da CAB utječe na bitovnu poziciju b1 registra H a CBB na najmanje značajnu bitovnu poziciju registra H. utjecaji - utjecaj CBB CAB H mikroprogramski adresni registar H
upravljačka (mikroprogramska) memorija CM (265 riječi; duljina riječi 32 bita)
/
b3i
. ..
32 b8
1r CNA
b0 mikroinstrukcijski registar F
SI. 7.26 Upravljačka memorija (mikroprogramska memorija) CM, mikroprogramski registar H i mikroinstrukcijski registar F
00
0->H(1)
01
1
10
SR(0)
H(1); vrijednost zastavice Z premješta se u H(1) j
11
SR(1)
H(1); vrijednost zastavice N premješta se u H(1)
H(1)
Tablica 7.9. Utjecaj na H(1)
Iz tablice 7.9. vidimo da na bitovnu poziciju H(1) mikroprogramskog adresnog registra može utjecati stanje zastavica koje su pohranjene u statusnom registru SR na pozicijama bO i b i , odnosno zastavice SR(0) i SR(1).
S. RIBARIČ - GRAĐA RAČUNALA
193
Zastavica SR(O) je zastavica Z, odnosno zastavico nule koja se automatski postavlja kada je rezultat neke aritmetičke ili logičke operacije jednak 0. Na stanje zastavice Z utječe izlaz iz sklopa za ispitivanje nule ZT (slika 7.23). Zastavica SR(1) je zastavica negativne vrijednosti N koja se automatski postavlja u 1 kada je rezultat neke aritmetičke ili logičke operacije negativan, odnosno kada je najznačajniji bit rezultata jednak 1 (u skladu s notacijom potpunog komplementa). Kad smo govorili o strojnim instrukcijama uvjetnog grananja, spomenuli smo da se odluka o grananju u programu temelji na stanju neke od zastavica u statusnom registru SR. Sada, na razini mikroprogramske izvedbe upravljačke jedinice vidimo da stanje zastavica može utjecati na grananje u mikroprogramu te se zahvaljujući tome mogu ostvariti i strojne instrukcije uvjetnog grananja (u obliku mikroprograma). Tablica 7.10. prikazuje utjecaj polja CBB (bitovne pozicije b16 - b i 7 mikroinstrukcije) na najmanje značajan bit registra H.
00
0
H(0)
01
1
H(0)
10
SR(1)->H(0)
11
MB(15) H(0); MB(15) je najznačajniji bit 16-bitne riječi koja trenutno na sabirnici MB
Utjecaj na H(0) Polje CST određuje utjecaj na zastavice SR(0) (zastavica Z) i SR(1) (zastavica N) (tablica 7.11.).
00
Nema utjecaja na zastavice
01
IF (ZT = 0) THEN (0 SR(0)) ELSE (1 SR(0)); utjecaj na zastavicu Z
10
MB(15)
11
MB(15) SR(1) AND (IF(ZT = 0) THEN (0 SR(0)) ELSE (1 ->SR(0)) ;složeni utjecaj - utjecaj na zastavicu Z i N
SR(1); utjecaj na zastavicu N
lablica 7.11. Utjecaj na statusni registar SR
U tablici 7.11. vidimo da se ovisno o binarnoj kombinaciji u polju CST utječe na zastavicu Z, zastavicu N ili na obje. Bitnu ulogu pritom ima sklop za ispitivanje nule ZT. On "osluškuje" glavnu sabirnicu MB i ako je svih šesnaest bitova podatka na MB jednako nuli, onda postavlja svoj izlaz ZT u jedan. Objasnimo, na primjer, što će se dogoditi ako je CST jednako 11.
194
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
U tom slučaju, ovisno o izlazu iz ZT postavit će se ili obrisati zastavica Z, ali istodobno će se ovisno o vrijednosti najznačajnijeg bita podatka na MB postaviti (ili obrisati) i zastavica N. S obzirom da se za prikaz brojeva koristi notacija dvojnog ili potpunog komplementa, postoji i definirani odnos između izlaza iz sklopa za ispitivanje nule ZT i vrijednosti najznačajnijeg bita MB(15). Taj je odnos prikazan u tablici 7.12.
1
1
Nedopuštena kombinacija - ne može istodobno biti izlaz iz ZT jednak 1 i najznačajniji bit rezultata 1
0
1
Rezultat je negativan
1
0
Rezultat je nula (MB15 - MB 0) = 0
0
0
Rezultat je pozitivan
Tablica 7.12. Odnos između izlaza iz sklopa za ispitivanje nule ZT i MB(15)
6-bitno polje CNA (b8 - b i 3 mikroinstrukcije) služi za određivanje šest najznačajnijih bitova mikroprogramskog adresnog registra H (slika 7.26): CNA H(7 - 2). 8-bitno polje EM (bO - b7 mikroinstrukcije) služi za pohranu 8-bitne konstante u samoj makroinstrukciji.Ta se 8-bitna vrijednost može proslijediti na lijevu sabirnicu L (vidi polje CA; tablica 7.4) i može se korisno upotrijebiti u izvedbi mikroprograma (kao što ćemo vidjeti u primjeru koji slijedi).
7.4.1. SIGNAL VREMENSKOG VOĐENJA MIKROPROGRAMIRANE UPRAVLJAČKE JEDINICE Mikroprogramirana upravljačka jedinica koja koristi uvjete za grananje u mikroprograma I zahtijeva svoj "privatni" interni trofazni signal vremenskog vođenja (slika 7.27). Ako usporedimo ovaj trofazni signal vremenskog vođenja s vremenskim upravljačkim signalima koje daje generator sljedova, vidimo da je taj trofazni signal, zapravo, signal dobiven s genera-] torom sljedova po modulu 3. Visoka razina faze P(0) određuje vrijeme u kojem se izvršava mikroinstrukcija - izvode se] mikrooperacije (jedna ili više njih) na putu podataka. To vrijeme odgovara trajanju faze] "mikro-izvrši". Faza P(1) odgovara vremenu potrebnom za oblikovanje i prijenos adrese u mikroprogram-j ski adresni registar H. U fazi P(2) pribavlja se mikroinstrukcija iz upravljačke (mikroprogramske) memorije CMij smještava se u 32-bitni mikroinstrukcijski registar F.To odgovara fazi"mikro-pribavi". Jedan se mikroinstrukcijski ciklus sastoji od faza "mikro-pribavi" faze prijenosa adrese] faze "mikro-izvrši".
S. RIBARIČ - GRAĐA RAČUNALA
195
perioda T faza P(0)
faza P(l)
faza P(2)
SL 7.27 Interni trofazni signal vremenskog vođenja: P(0), P(1) i P(2)
Primjer 73. Treba napisati mikroprogram za strojnu instrukciju Branch), i to za fazu IZVRŠI. Strojnom se i u akumulatoru A, drugi u akumulatoru B) uz notaciji dvojnog komplementa.
grananja CBR (Conditional dva broja (jedan da su brojevi predočeni u
i) ako je broj u akumulatoru A veći od broja u akumulatoru B, tada nema promjene ii) ako su brojevi jednaki, sadržaj programskog brojila PC se tijekom faze IZVRŠI inkrementira (povećava za 1); ili) ako je broj u A manji od broja u B, tada se t p brojila PC povećava za 2; s: /FA > B THEN IFA = B THEN IFA
PC = PCPC = PC+1 PC = PC + 2;
Pri pisanju mikroprograma za strojne instrukcije, odnosno oblikovanju skupa strojnih instrukcija, arhitekta-dizajner skupa instrukcija mora uzeti u obzir sva ograničenja koja postavlja sklopovlje na putu podataka procesora. Naravno, treba dobro poznavati i organizaciju mikroinstrukcijske riječi i značenje pojedinih polja u njoj. Naš jednostavni model mikroprogramiranog procesora na putu podataka, odnosno u aritmetičko-logičkoj jedinici nema sklop komparator (engl. digital comparotor) za
196
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
uspoređivanje vrijednosti dvaju binarnih podataka, štoviše, nema ni sklop za oduzimanje (oduzimalo), stoga usporedba sadržaja akumulatora A i B mora biti izvedena na sljedeći način: 1. Sadržaj akumulatora A postavi na lijevu sabirnicu L; 2. Jedinični komplement sadržaja akumulatora B (izlaz B) postavi na desnu sabirnicu R; 3. Aktiviraj potpuno zbrajalo u aritmetičko-logičkoj jedinici, i to tako da se izvede zbrajanje s Cm = 1; Izvođenjem koraka 1. - 3. tek smo dobili A - B. Odnos između sadržaja A i sadržaja B doznat ćemo na temelju stanja zastavica Z i N koje se automatski postavljaju na temelju rezultata A - B, odnosno izlaza iz sklopa za ispitivanja nule ZT i najznačajnijeg bita rezultata MB(15) (vidi tablicu 7.12). Jasno je, na primjer, ako je rezultat operacije A - B > 0 onda je A > B i zastavice su automatski postavljene tako da jeZ = 0 i N = 0, tj. rezultat je različit od 0 i pozitivan. Je li slijed aktivnosti definiran koracima 1. - 3. te utjecaj na zastavice Z i N (tj. SR(0) i SR(1)) podržan raspoloživim mikrooperacijama na putu podataka? Odgovor je da kombinacijom upravljačkih bitovima u poljima CA, CB, COP, CSH i CST možemo točno definirati ponašanje u skladu s koracima 1. - 3 . te postavljanje zastavica Z i N. Nakon što je (neizravno) ustanovljen odnos između sadržaja akumulatora A i B, mora se" osigurati izvođenje jedne od triju aktivnosti: i) aktivnosti koje određuje mikroinstrukcija koja će povećati sadržaj programskog brojila PC za jedan (slučaj A = B; zastavice Z = 1, N = G) i granati na mikroinstrukch ju koja upućuje na prvu mikroinstrukciju mikroprograma za fazu .PRIBAVI strojne ii) aktivnosti koje određuje mikroinstrukcija koja će povećati sadržaj programskog brojila PC za 2 (slučaj A < B; zastavice Z = 0, N = 1) i granati na mikroinstrukciju koja upućuje na prvu mikroinstrukciju mikroprograma za fazu PRIBAVI strojne iiSliiili^^ - •: ^ V/---'^ iii) nema aktivnosti - ne mijenja se sadržaj programskog brojila PC (slučaj A > B; stavice Z = 0, N ~ 0), već grana na mikroinstrukciju koja upućuje na prvu mikroL strukciju rnjkroprc^&ma za f a ^ P Na temelju točaka i) - iii) vidimo da stanje zastavica Z i N možemo iskoristiti za grana*4' u mikroprogramu ovisno o slučaju: A = B, A < B ili A > B (vidi polja CAB i CBB). Pretpostavit ćemo da 8-bitni operacijski kod 'yyyyyyyy' strojne instrukcije CBR odred» adresu prVe mikmlnMrute^^ mikroprograma u memoriji CM. Slika 7.28 prikazuje dijagram toka mikroprograma za fazu JZVRŠJ strojne instrukcije G
S. RIBARIČ - GRAĐA RAČUNALA
197
yyyyyyyy A—L; 8—R; aktiviraj zbrajalo s Cm = 1; S—Q; Q—MB; proslijedi A - B na MB
operacijski kodstrojne instrukcije CBR (početna adresa mikroprograma)
MB (15)—SR (1) AND (IF (2TT = 0)THEN (O—SR (0)) ELSE (1-SR (0)) SR (0)—H (1), SR (1)—H (0) (zastavice: Z = 0;N = 1)
A
H(1) = 0 H (0) = 1
EM—L; EM = 2 PC—R; aktiviraj zbrajalo
(zastavice: Z = 1; N = 0) A>B
H (1) = 1 H(0) = 0
(zastavice: Z = 0;N = 0) H(1)-0 H(0) = 0
ZN 'xxxxxx10'
A=B
0-L; PC-R aktiviraj zbrajalo
sC^O; S - Q ; Q—MB; MB-PC;
S—Q; Q—MB ; MB-PC;
0-H(l)
0—H (1) 0—H (0)
0—H (0)
xxxxxx00' Opaska: SR(0)-zastavica Z SR(D- zastavica N
SI. 7.28 Dijagram toka za mikroprogram za fazu zastavici Z, a SR(1) zastavici N
mikroinstrukcija koja upućuje na izvođenje mikroprograma za fazu PRIBAVI
!; Opaska: SR(0) odgovara
1. mikroinstrukcija (nalazi se na adresi 'yyyyyyyy' (binarno); npr. '00001000' - odgovara polje CA = 11 ;A L ;na L se smještava 16-bitni sadržaj akumulatora A; polje CB = 010 ; B - + R prijenos jediničnog komplementa sadržaja akumulatora B na desnu sabirnicu R; polje COP = 10 ; Zbroji dva 16-bitna podatka s Cln(Carry In) = 1; polje CSH = 00 ; Q MB, Q = S ;nema posmaka; polje CMB = 000 ; Nema prijenosa s glavne sabirnice u neki od registara; polje CAB = 10 ; SR(0) H(1) ;vrijednost zastavice Z premješta se uH{1) jK>ljeCBB = 1 0 ;SR(1) H(0) ; w y e d n o s t z ^ seuH{0) polje CST = 1 1 ; M8(15) SR{1) AND (/F(ZT = 0} THEN (0 SRtO)); s l o v n i utjecaj na zastavicu N i Z; polje CNA='xxxxxx'(binarno) ;npn '010000'polje EM ='00000000' ;8-bitna
SR(0)) ELSE (1
198
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
Prva mikroinstrukcija izgleda ovako:
r
0 0 0 0 0 0 1 0 1 0 1 1 0 1 o 0 0 0 0 0 0 0 0 0 0
0 1
2. mikroinstrukcija (nalazi se na adresi 01000001 pri čemu je šest značajnijih bitova adrese određeno poljem CNA iz prve mikroinstrukcije, a dva najmanje značajna bita adrese su određena sa stanjem zastavica Z = 0 i N =1) /ova mikroinstrukcija izvršava se kada je AH(0); polje CST = 00 ; nema utjecaja na zastavice u SR; • polje CNA='xxxxxx' (binarno) ;npr. '010000' - šest značajnijih bitova adrese sljedeće mikroinstrukcije; * polje EM ^ OOOOOOIO ; konstanta = Druga mikroinstrukcija izgleda ovako:
0 10
1 1 0 3. mikroinstrukcija {nalazi se na adresi 01000010 pri čemu je šest značajnijih bitova adre-J se određeno poljem CNA fz prve mikroinstrukcije, a dva najmanje značajna bita adrese] određena su stanjem zastavica Z = 1 i N =0) /ova mikroinstrukcija izvršava se kada j e j • polje CA = 01 ; F(EM)-0 L(0-7,8-15) ;konstanta iz emit (00000000) polja; smještava na 8 manje značajnih linija (LSB) sabirnice L; • polje CB = 011 ; PC R ;prijenos sadržaja programskog brojila PC na des sabirnicu R; • polje COP= 10 ; Zbroji dva 16-bitna podatka s (^(Carrv In) = 1; • polje CSH = 00 ;G MB, Q = S ;nema posmaka; • polje CMB = 011 ; MB PC ;prijenos 16-bitnog podatka sa sabirnice MB u PC; • polje CAB = 00 ; 0 H(1); • polje CBB = 00 ; 0 - > H(0); • polje CST=00 ; nema utjecaja na zastavice u SR; • polje CNA='xxxxxx' (binarno) ;npr. '0100007 - šest značajnijih bitova adrese slj€ će mikroinstrukcije; • polje EM ='00000000'
S. RIBARIČ - GRAĐA RAČUNALA
0 0 0
M
199
0 0 Sli 0
Slika 7.29 prikazuje dio sadržaja upravljačke (mikroprogramske memorije) koji odgovara mikroprogramu za strojnu instrukciju CBR. Vidimo da se sve tri mikroinstrukcije mikroprograma za fazu IZVRŠI za strojnu instrukciju granaju na adresu 01000000. Na toj se adresi nalazi mikroinstrukcija koja upućuje izvođenje na mikroprogram koji podržava fazu PRIBAVI. upravljačka (mikroprogramska) memorija CM(sadržaj) adresa: 00001000
CNA EM 11 010 10 00 0 0 0 # t o n 010000 00000000 •
777777
01000001 0*000010
01 011 01 00 011 00 0000 ^10000 M V.: 0i o n 010000 m -"
"---
•
-
. . .
M m m m m
.
Ž2ŽZŽZ00 •
1. mikroinstrukcija mikroprograma za fazu PRIBAVI SI. 7.29
pokažimo kako se ta v r ^ m ^ s t o
«^Izvođer^
ikdm^ntar;
; prva mikroinstrukcija - adresa mikroinstrukcije je '00001000'
početak sekvence s ;c /GP(1)/
/G P(2)/ /CA(3) P(0)/ /CB(2) P(0)/
'00001000' H, 1 G; P(1) - prijenos adrese u H ; adresa prve; mikroinstrukcije određena je operacijskim kodom strojne instrukcije - ;operac«jski kod instrukcije CBR je'00001000' CM(H) F; faza "mikro-pribavi" A L; na L se smještava 16-bitni sadržaj akumulatora A B-+ R; prijenos jediničnog komplementa sadržaja akumulatora B na desnu; sabirnicu R
/C0P(2) P(0)/ /CSH(0)P{0)/ /CMB(0) P{0)/ /CST{3) P(0)/ /CA8(2) P{1)/ /C88(2) P(1)/
L + R + C^ ;zbroji dva 16-bitna podatka s C.m (Cany fn) - 1 Q-+MB,Q = S; nema posmaka NOP; nema prijenosa s glavne sabirnice u neki Gdtegistara f MB{15) SR(1)>4ND(/F(2T=0) 7H£N{<) ->. SR(0})a5£(1 SR(0)); složen* utjecaj - utjecaj na zastavicu Z i N SR{0) H{1) ;vrijednost zastavice 2 SR(1) H{0) vrijednost zastavice N premješta se u H(0)
/G P(2)/
/CBB(0)P(1)/ /G P{1)/
0-+H(0) F(CNA) H(7~ 2); F(CNA) = 010000
S. RIBARIČ - GRAĐA RAČUNALA
201
7.5. NANOPROGRAMIRANA UPRAVLJAČKA JEDINICA Mikroprogramiranje je za 16-, 32- i 64-bitne procesore CISC arhitekture standardan pristup oblikovanju upravljačke jedinice. Oblikovanje upravljačke jedinice predstavlja jednu od kritičnih faza oblikovanja procesora. Da bi se smanjila površina na čipu što je zauzima upravljačka jedinica, često se upotrebljava organizacija mikroprogramske strukture u dvije razine. U prvoj se razini strojna instrukcija dohvaćena iz memorije interpretira mikroprogramom koji je pohranjen u upravljačkoj (mikroprogramskoj) memoriji CM. iz instrukcijskog
upravljački signali Si. 7.30 Organizacija dvorazinske upravljačke jedinice koja se zasniva na mikro- i nanoprogramiranju
Mikroinstrukcija se ne dovodi izravno u upravljačke točke na putu podataka, već se koristi kao kazaljka za pristup upravljačkoj memoriji u drugoj razini. Ta se upravljačka memorija naziva nanoprogramska memorija (nCM; slika 7.30) i u njoj su pohranjene nanoinstrukcije. Bitovi nanoinstrukcije koriste se za izravno upravljanje na putu podataka. Slika 7.30 prikazuje dvorazinsku organizaciju upravljačke jedinice koja se zasniva na mikro- i nanoprogramiranju. Razina nanoprogramske upravljačke jedinice izvedena je bržim sklopovima, a sama nanoprogramska memorija je manjeg kapaciteta u odnosu na mikroprogramsku memoriju. U bržoj nanoprogramskoj memoriji pohranjuju se najčešće upotrebljavani nanoprogrami - sijed ovi nanoinstrukcija. Dvorazinskom upravljačkom jedinicom postiže se i ušteda u veličini upravljačke memorije u odnosu na jednorazinsku (mikroprogramsku) izvedbu. Na primjer, pretpostavimo da se jednorazinska upravljačka memorija sastoji od Hm riječi (mikroinstrukcija) koje su duljine N + [log 2 H m ], gdje je N broj upravljačkih bitova a [log 2 H m ] broj bitova potreban za povratnu adresu ([x] označava gornju cjelobrojnu vrijednost od x). Kapacitet upravljačke memorije za jednorazinsku izvedbu je: S ^ H J N + Pog.Hj)
U dvorazinskoj izvedbi mikroprogramska memorija CM (slika 7.30) također pohranjuje H^ mikroinstrukcija, pri čemu se sada N upravljačkih bitova prosljeđuje nanoprogramskoj memoriji nCM. Nadalje, svaka mikroinstrukcija u CM je duljine |"log2Hn], gdje je Hn broj nanoinstrukcija jer mikroinstrukcija, zapravo, predstavlja adresu za nanoinstrukcijsku memoriju. Uz pretpostavku da ima vrlo mali broj grananja (ili čak uopće i nema) u nanoprogramu, možemo ocijeniti ukupni kapacitet memorije dvorazinske izvedbe: S2 = H m ( P o g 2 H j + pog 2 H n l) + H n N, gdje je flog 2 H m ] broj bitova adresnog polja potreban za sljedeću adresu mikroinstrukcije, [log2Hn] broj bitova u mikroinstrukciji potreban za adresiranje nanomemorije i konačno N duljina nanoinstrukcije, odnosno broj upravljačkih bitova koji se dovode na put podataka. Pretpostavimo da su svi bitovni uzorci u nanoprogramskoj memoriji različiti tako da svaki uzorak predstavlja jedinstveno upravljačko stanje pridruženo skupu strojnih instrukcija. U tom slučaju možemo napisati da je Hn = r x H , pri čemu je r omjer između jedinstvenih upravljačkih stanja i ukupnog broja upravljačkih stanja potrebnih za implementaciju svih strojnih instrukcija. Uvrstimo Hn = r x Hm u izraz za S2, dobivamo ukupni kapacitet dvorazinske izvedbe mikroprogramirane upravljačke jedinice: S2 = H m (Pog 2 HJ + [ l o g 2 r H m l ) + rH m N, = Hm ( P o g 2 H j + [log 2 r ] + p 0 g 2 Hm ] ) + r Hm N, S2 = H m (2pog 2 H m l + p o g 2 r l + rN).
5. RIBARIČ - GRAĐA RAČUNALA
203
instrukcijski registar IR
upravljački signali SI. 731 Organizacija dvorazinske upravljačke jedinice za MC 68000
7.6. FORMATI MIKROINSTRUKCIJA - HORIZONTALNO I VERTIKALNO MIKROPROGRAMIRANJE Format mikroinstrukcije, odnosno organizacija polja upravljačkih bitova u mikroinstrukciji, mora biti takav da omogući: i) djelotvorno grupiranje i dodjeljivanje upravljačkih bitova pojedinim sklopovskim strukturama na putu podataka, ii) uvezivanje mikroinstrukcija u mikroprogram - djelotvoran prijenos upravljanja s jedne mikroinstrukcije na drugu (engl. microinstruction sequencing), iii) prilagodljivost reprogramiranju - jednostavnu izmjenu mikroprograma. Prethodno se navedene funkcije trebaju ostvariti sa stoje moguće manjim brojem bitova u mikroinstrukciji, stoje moguće manjim brojem mikroinstrukcija od kojih se sastoji mikroprogram te u stoje moguće kraćem vremenu izvođenja mikroprograma. Prva dva zahtjeva odnose se na kapacitet mikroprogramske memorije, odnosno na zahtjeve zauzeća dijela površine čipa od strane mikroprogramirane upravljačke jedinice, a treći se zahtjev odnosi na brzinu (a time i na performansu) procesora. Pristupi formatiranja mikroinstrukcija, odnosno organizacije mikroinstrukcija, kojima se teži zadovoljavanju postavljenih zahtjeva su sljedeći: i) izravno upravljanje, ii) grupiranje bitova, iii) višestruki formati.
204
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
7.6.1 IZRAVNO UPRAVLJANJE U ovom pristupu format mikroinstrukcije je takav daje svaki njezin bit (nazivamo ga i upravljački bit jer određuje hoće li se određena mikrooperacija izvesti) jednoznačno dodijeljen svakoj od mikrooperacija koje se mogu izvesti mikroprogramiranom procesoru. To znači da je duljina mikroinstrukcije određena ukupnim brojem raspoloživih mikrooperacija. Uz to, formatu mikroinstrukcije pridodana su polja bitova koja se odnose na uvezivanje mikroinstrukcija i em/f polje. Format mikroinstrukcije koji se temelji na izravnom upravljanju prikazan je na slici 7.32 Svaki bit mikroinstrukcije koji je izravno dodijeljen mikrooperaciji određuje hoće li se mikrooperacija izvesti (bit ima vrijednost 1) ili neće (vrijednost bita je 0). p bitova adresa sljedeće mikroinstrukcije
n bitova, n-odgovora broju mikrooperacija
emit polje -•H-
H h
r"i -nJ
-H-
0 : nop
1 : M01 0 : nop
0 : nop 1 : MOn
1 : M02
MO - mikrooperacija
SI. 7.32 Format mikroinstrukcije s izravnim upravljanjem
Glavne prednosti ovakve organizacije mikroinstrukcije jesu mogućnost potpunog iskorištenja potencijalnog paralelizma na razini mikrooperacija (istodobno se izvode sve mikrooperacije kojima je dodijeljen bit s vrijednosti 1) te velika prilagodljivost pri izmjeni mikroprograma (bez zahtjeva za promjenom organizacije mikroinstrukcije). Mikroinstrukcije ovog tipa ne zahtijevaju sklopove za dekodiranje pojedinih njezinih sadržaja, odnosna grupe upravljačkih bitova. Nedostatak ovakvog pristupa je velika duljina mikroinstrukcije. Naime, ako mikroprogram i ran i procesor ima veliki skup mikrooperacija koji se sastoji od stotinu i više mikro- j operacija, onda je i duljina mikroinstrukcije velika. S druge strane, zbog ograničenja broj» I istodobno izvodljivih mikrooperacija (posebice u arhitekturi procesora koji se temelji na ] klasičnom von Neumannovom modelu) postavlja se pitanje o isplativosti uporabe tato j dugih mikroinstrukcija u kojima će većina bitova imati vrijednost 0 (što znači za određen« j mikrooperaciju daje neaktivna - nop - "no operation").
7.6.2. GRUPIRANJE BITOVA - MINIMALNO KODIRANJE (ENGL. MINIMAL ENCODING) Ovom se organizacijom mikroinstrukcije teži smanjiti njezina duljina, i to dvama načinima] grupiranja upravljačkih bitova: i) grupiranjem upravljačkih bitova koji se odnose na mikrooperacije koje će se uviji istodobno izvesti,
S. RIBARIČ - GRAĐA RAČUNALA
205
ii) grupiranjem upravljačkih bitova koji se odnose na mikrooperacije koje se međusobno isključuju. U slučaju i) moguće je grupi takvih istodobno izvodljivih mikrooperacija dodijeliti samo jedan upravljački bit. Ako je njegova vrijednost jednaka 1, onda će se izvesti istodobno sve mikrooperacije koje su mu dodijeljene. Na taj se način smanjuje duljina mikroinstrukcije, ali i gubi prilagodljivost. Grupiranjem upravljačkih bitova koji se odnose na mikrooperacije koje se međusobno isključuju, moguće je umjesto r upravljačkih bitova (gdje je r broj takvih mikrooperacija u grupi) koristiti samo [log 2 r] upravljačkih bitova, gdje |~x] označava gornju cjelobrojnu vrijednost od x. Na primjer, ako aritmetičko-logička jedinica (ALU) podržava šesnaest različitih (mikro)operacija (zbrajanje, oduzimanje, logičko I, logičko ILI,..., uključujući i onu kada nema aktivnosti - nop) i ako izvodi samo jednu od tih operacija istodobno, onda umjesto šesnaest upravljačkih bitova dovoljna su četiri. Svaka njihova 4-bitna kombinacija jednoznačno određuje mikrooperaciju ALU: 0000 - nop (ALU nije aktivna), 0001 - zbroji dva operanda i bit prijenosa Cjn = 0, 0010 - zbroji dva operanda i bit prijenosa Cjn = 1, 0011 - oduzmi dva operanda,
1110 - logička operacija ILI 1111- logička operacija Isključivo ILI. Slika 7.33 prikazuje organizaciju mikroinstrukcije koja se temelji na grupiranju bitova. grupiranje mikrooperacija koje se međusobno isključuju grupiranje mikrooperacija koje se izvode istodobno
adresa sljedeće mikroinstrukcije
emit polje -M-
г-П-i
ГИ1
-n-
1
0: nop 1 : istodobno se izvode MOP1,MOP3, MOP4, MOP7,...
0: пор 1 : istodobno se izvode MOP2, MOP3, MOP7, MOP8,...
0000 пор 0001 MOP9 0010 МОРЮ 1110 M022 1111
M024
SL 7.33 Format mikroinstrukcije koja se temelji na pristupu grupiranja bitova
PH
-u-
206
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
U slučaju grupiranja mikroopercija koje se međusobno isključuju potrebno je grupi upravljačkih bitova dodijeliti dekoder kojim se n kombinacija upravljačkih bitova dekodira u jedan od 2n mogućih izlaza. Na taj se način pobuđuje jedna od mogućih 2n mikrooperacija u grupi. Primjerice, 4-bitna kombinacija upravljačkih bitova za mikrooperacije koje se odnose na ALU dekodira se dekoderom četiri-na-šesnaest.
7.6.3. VIŠESTRUKI FORMATI MIKROINSTRUKCIJA Osnovna značajka ovog pristupa formatiranju mikroinstrukcija jest relativno kratka mikroinstrukcija duljine 16 ili 32 bita kojom se specificira maksimalno do četiri mikroopeacije. Mikroinstrukcije koriste različite formate za pojedine tipove mikrooperacija tako da svojom organizacijom odgovaraju formatu (strojnih) instrukcija na ISA razini. Na primjer, skup mikroinstrukcija koji koristi četiri različita formata može imati sljedeće formate mikroinstrukcija: i) format 0 (slika 7.34) kojim se određuje mikrooperacija prijenosa podataka između sastavnica na putu podataka, ii) format 1 (slika 7.35) koji određuje do tri mikrooperacije koje se odnose na ALU (zbrajanje, oduzimanje, logičke operacije, posmak), pristup memoriji ili inkrementiranju programskog brojila, iii) format 2 (slika 7.36) kojim se određuju mikrooperacije maskiranja operanda ili dijela operanda na ulazu u ALU, iv) format 3 (slika 7.37) kojim se određuju mikrooperacije grananja u mikroprogramu. Na slici 7.34 vidimo da se dva najznačajnija bita mikroinstrukcije rabe za specifikaciju formata mikroinstrukcije - 00 određuje format 0. U tom se slučaju sljedećih pet značajnijii bitova tumači kao "operacijski kod" mikrooperacije iz skupa mikrooperacija za prijenos podataka. Preostala polja upravljačkih bitova određuju izvorišta i odredišta podataka kop sudjeluje u prijenosu. Ukupna duljina mikroinstrukcije je 20 bita. Usporedite ovaj format mikroinstrukcije s formatom strojne instrukcije RISC procesora (poglavlje 3). 2 bita
5 bitova
6 bitova
6 bitova
b, b6
'
v
"
format
^ mop
b,
" operand 1
b,
I — ne koristise operand 2
00 - format 0 SI. 7.34 Format 0 mikroinstrukcije
Mikroinstrukcija (slika 7.34) tumači se na sljedeći način: ako je b19 b18 = 00 tada je format 0, ako je format 0 onda je mikroopercija (mop) (b13 - b17) iz skupa mikrooperacija za prijenos i polje operanda 1 (b7 - b i 2) je adresa izvorišta podatka a
5. R1BARIČ - GRAĐA RAČUNALA
207
polje operanda 2 (bi - b6) je adresa odredišta podatka, /bit bO se ne koristi/. Format 0 mikroinstrukcije određuje samo jednu istodobno izvršljivu mikrooperaciju. 2 bita
b,9
5 bitova
2 bita
b„ b12
b,8 b,7
K
1 bit
6 bitova
b
,o bs
ne koristi se format
mopl
mop2
mop3
modifikator
01 - format 1 SL 7.35
Format 1 mikroinstrukcije
Na slici 7.35 prikazanje format 1 mikroinstrukcije. U tom slučaju vidimo da se formatom 1 određuju do tri istodobno izvršljive mikrooperacije. Mikroinstrukcija (slika 7.35) tumači se na sljedeći način: ako je b i 9 b i 8 = 01 tada je format 1 ako je format 1 onda je mikroopercija 1 (mop 1) (b13 - b i 7) iz skupa mikrooperacija {add, sub, or, exor, shr, shl,...} mikrooperacija 2 (mop 2) ( b l l - b12) iz skupa mikrooperacija {read M, write M} mikrooperacija 3 (mop 3) (blO) koja određuje inkrementiranje programskog brojila polje modifikatora (b4 - b9) određuje iznos posmaka (broj mjesta) ako je mikrooperacija mop 1 shr ili shl (operacija posmaka udesno ili ulijevo) /bitovi bO - b3 se ne koriste/. Slika 7.36 prikazuje format 2 mikroinstrukcije. Njome se određuje samo jedna mikrooperacija, i to mikrooperacija maskiranja jednog od operanada na ulazu u ALU. Mikroinstrukcija (slika 7.36) se tumači na sljedeći način: ako je b19 b18 = 10 tada je format 2 ako je format 2 onda je mikrooperacija mop iz skupa mikrooperacija maskiranja onda se bdl tumači kao granica i1# a bd2 kao granica i2 maskiranje se izvodi na sljedeći način: AOUT := AIL mask AIR [ii ... i2] bit pozicije u AIL od i^ pozicije (ulijevo) i i pozicije (udesno) prenose se bez izmjene; bit pozicije od i do i2 poprimaju u rezultatu vrijednost ulaza AIR /AIL označava operand na lijevom ulazu u ALU, AIR operand na desnom ulazu u ALU, a AOUT izlaz iz ALU nakon operacije maskiranja/
208
7. POGLAVLJE: SKLOPOVSKA I MIKROPROGRAMSKA IZVEDBA UPRAVLJAČKE JEDINICE
2 bita
b
b
19
18
5 bitova
b
bi3 b12
!7
6 bitova
6 bitova
b7
b
1 bit b1
e
b0
ne koristi se format
bd 1
mop
bd 2
10-format 2 SI. 7.36. Format 2 mikroinstrukcije
Slika 7.37 prikazuje format 3 mikroinstrukcije. On je namijenjen za uvjetna i bezuvjetna grananja u mikroprogramu. Mikroinstrukcija (slika 7.37) tumači se na sljedeći način: ako je b l 9 b18= 11 tada je format 3, ako je format 3 onda je mikroopercija (mop) (bi3 — b17) iz skupa mikrooperacija uvjetno i bezuvjetno grananje u mikroprogramu polje (bO - b12) je odredišna (ciljna) adresa grananja. 2 bita
5 bitova
13 bitova
N—— b
!9
b
,B
format
b
b
,7
mop grananja
,3
b12
odredišna adresa
11 - format 3 SI. 7.37 Format 3 mikroinstrukcije
Mikroinstrukcije koje koriste višestruke formate zahtijevaju složenije sklopove za dekodH ranje - prvo se treba dekodirati polje koje određuje format mikroinstrukcije, a zatim i po-j Ije bitova koje se odnosi na jednu od mikrooperacija iz skupa mikrooperacija. Tumačenje] ovog drugog polja upravljačkih bitova ovisi o rezultatu dekodiranja prethodnog polja.
7.6.4. HORIZONTALNO I VERTIKALNO MIKROPROGRAMIRANJE Usko u vezi s formatom mikroinstrukcija, odnosno organizacijom mikroinstrukcije, nailazimo i na dva pojma: horizontalno mikroprogramiranje i vertikalno m ikroprog ra miranje. j Značajke horizontalnog mikroprogramiranja jesu: i) mikroinstrukcija je duga riječ koja se sastoji od 64 pa sve do nekoliko stotina bitova ii) mikroinstrukcijom se omogućuje veći broj različitih resursa procesora (funkcijsl jedinica, registara, putova podataka) tako da se njima upravlja nezavisno - mikr< stukcija određuje veći broj mikrooperacija koje se izvode istodobno, iii) mikroinstrukcije formata u skladu s horizontalnim mikroprogramiranjem dopusti mikroprogrameru specifikaciju upravljanja na razini pojedinih mikrooperacija.
S. RIBARIČ - GRAĐA RAČUNALA
209
Na temelju značajki i) - iii) možemo zaključiti da pristup formatiranju mikroinstrukcija izravnim upravljanjem odgovara horizontalnom mikroprogramiranju. Vertikalno mikroprogramiranje ima sljedeće značajke: i) mikroinstrukcije su obično male duljine - od 16 iii 32 bita, ii) mikroinstrukcija obično specificira jednu ili dvije mikrooperacije i zato ne dopušta mikroprogrameru iskorištavanje potencijalnog paralelizma na razini mikrooperacija, iii) umjesto specifikacije većeg broja istodobno izvršljivih mikrooperacija mora se koristiti uvezivanje mikroinstrukcija koje onda određuju skup ili slijed mikrooperacija.
S. RIBARIČ - GRAĐA RAČUNALA
211
8. POGLAVLJE
ARITMETIČKOLOGIČKA JEDINICA 8.1. UVOD: BIT, RIJEČ, BAJT I ZNAKOVI Najmanja količina informacije koja se može pohraniti i kojom se računalo može služiti jest bit (engl. bit). Računalo pohranjuje informaciju u obliku grupe bitova koja se naziva riječ (engl. word). Broj bitova u riječi različit je za različita računala. Tako govorimo o računalu koje ima 4-, 8-, 16-, 32- 64- ili 128-bitnu riječ. Grupa od 8 bitova naziva se bajt (engl. byte). Za današnje procesore kažemo da su bajtno orijentirani procesori jer im je duljina riječi višekratnik od 8 bita. Primjer 8.1. Prvi mikroprocesor Intel4004(1971.godine) imaojeduljinu riječi od4bita, Mikroprocesori prve generacije (kraj 1971.) bili su 8-bitnL Mikroprocesor Intel 8086 (1978.) imao je duljinu riječi od 16 bita. Računalo VAX 11/780 (1978.) bilo je 32-bitno. Treća je generacija mikroprocesora 32-bitna, dok je četvrta generacija 64-bitna. Grafički procesori i procesori za posebne namjene (VLIW, multimedijski) imaju duljinu riječi od 128 bitova i više. Alfanumerički znakovi (A - Z, a - z, 0 - 9, simboli *, -, +,!, ?, itd.) predočeni su u računalu binarnim uzorcima koji se mogu pohraniti i kojima se može baratati u računalu. ASCII (American Standard Code for information Interchange) obično se koristi za kodiranje alfanumeričkih znakova. Svaki je alfanumerički znak predočen 7-bitnim kodom tako da je ukupno 128 znakova, od čega je 96 znakova "normalnih" koji su ispisni, tj. mogu se ispisati (engl. printing characters), a 32 znaka su neispisni znakovi za upravljačke funkcije (npr., BS (engl. backspace) - pomak za jedno mjesto unatrag, LF (engl. line feed) - novi redak, CR (engl. carriage return) - povrat na početak retka i si.). Tablica 8.1. prikazuje skup vrijednosti znakova ASCII. Osim 7-bitnog ASCII koda koristi se i 8-bitni EBCDIC (Extended Binary Coded Decimal Interchange Code).
212
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
0
1
2
3
4
5
6
7
000
001
010
011
100
101
110
111
0 0000
NULL
DCL
0
@
P
1 0001
SOH
DC1
SP j
1
A
Q
a
2 0010
STX
DC2
2
B
R
b
q r
3 0011
ETX
DC3
#
3
c
s
c
s
EOT
DC4
$
4
D
T
d
t
5 0101
ENQ
NAK
%
5
E
U
e
u
6 0110
ACK
SYN
&
6
F
V
f
V
7 0111
BEL
ETB
7
G
w
g
w
8 1000
BS
CAN
8
H
X
h
X
9 1001
HT
EM
( )
9
1
Y
i
y
A 1010
LF
SUB
*
:
J
z
j
z
B 1011
VT
ESC
+
#
K
[
k
}
C 1100
FF
FS
t
<
L
\
1
1
D 1101
CR
GS
-
=
M
]
m
}
E 1110
so
RS
>
N
A
n
~
F 1111
SI
US
7
O
o
DEL
4 0100
u
/
1
P
Tablica 8.1. ASCII kod
8.2. PRIKAZ BROJEVA 8.2.1. PRIKAZ CIJELIH BROJEVA Golema većina današnjih računala koristi pozicijski brojevni sustav s bazom 2 (binarni brojevni sustav), iako postoje izvedbe posebnih računala koja za prikaz brojeva koriste simboličke prikaze (npr. rezidualni brojevni sustav u kojem se broj prikazuje ostacima dijeljenja dekadskih brojeva prim brojevima). Opseg cijelih brojeva (engl. integer) proteže se na područje cijelih negativnih brojeva, nule i područje cijelih pozitivnih brojeva. U računalu se upotrebljavaju različiti načini za prikaz cijelih brojeva: i) predznak-apsolutna vrijednost (engl. signed and magnitude); ii) jedinični ili nepotpuni komplement (engl. one's complement); iii) potpuni ili dvojni komplement (engl. two's complement). Način prikaza predznak-apsolutna vrijednost je, na prvi pogled, najprirodniji način prikaza brojeva. Broj duljine n bitova u tom prikazu upotrebljava krajnje lijevi bit (najznačajniji bit) kao bit predznaka. Ako je najznačajniji bit 0 (nula), onda je broj pozitivan, a ako je 1 (jedan), onda je broj negativan. Vrijednost broja određena je s preostalih n-1 bitova. Opseg vrijednosti cijelih brojeva v(x) u tom prikazu je: -(2n1 -1) ^ v(x) ^ +(2n~1 -1). U ovom načinu prikaza postoje i dvije nule - nula s pozitivnim predznakom i nula s negativnim predznakom.
S. RIBARIČ - GRAĐA RAČUNALA
213
Prikaz jediničnim iii nepotpunim komplementom dopušta prikaz nenegativnih brojeva na uobičajen način tako da je najznačajniji bit 0. Negativni broj iste apsolutne vrijednosti dobiva se komplementiranjem svih n bitova pozitivnog broja. Podsjetimo se, komplementiranje je operacija kojom se zamjenjuju vrijednosti binarnih znamenki u broju - nule jedinicama i jedinice nulama. Opseg prikaza cijelih brojeva u tom prikazu je: -(2n1 -1) 55 v(x)
214
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
Prikaz brojeva u notaciji potpunim ili dvojnim komplementom najčešće je korišteni način prikaza cijelih brojeva u računalu u posljednja četiri desetljeća. Navedimo neka svojstva brojeva predočenih u dvojnom komplementu: i) dvojni komplement je zaista "pravi" komplement jer vrijedi da je+X + (-X) = 0; ii) postoji samo jedna nula 000...00; iii) pozitivan broj ima najznačajniji bit 0, negativni broj ima najznačajniji bit 1; iv) opseg prikaza brojeva je od -2n~1 do +2n_1 -1; v) dvojni komplement dvojnog komplementa od X je X. Pogledajmo što se događa ako se povredi opseg prikaza brojeva u dvojnom komplementu. To se događa ako se izvede operacija koja generira rezultat čija vrijednost prekoračuje opseg vrijednosti. Pretpostavimo da su brojevi predočeni 8-bitnim kodom. U tom je slučaju opseg vrijednosti od -128 do +127. Što će se, na primjer, dogoditi ako zbrojimo X = 98 i Y = 62? 01100010 +00111110 10100000
f
8-bitni rezultat koji smo dobili je negativan (!): -96, očito da je rezultat pogrešan jer zbrajanjem dvaju pozitivnih brojeva ne možemo dobiti negativan rezultat. Prekoračili smo definirani opseg vrijednosti koji se može prikazati s 8 bitova, naime ispravan rezultat (160) je izvan opsega prikaza. Dogodio se preljev (engl. arithmetic overflow). Preljev se obično označava sV i definiranje na sljedeći način: V = (a • bn-1 • n-v s ,) +v (a • n-7 b •n s- 1 " J, v n-1 n-1 gdje su a n i bn^ najznačajniji bitovi operanada, tj. bitovi predznaka i sn-1 najznačajniji bit rezultata, odnosno bit predznaka rezultata. Oznake + i • označavaju logičku operaciju ILI, odnosno logičku operaciju I. Provjerimo je ii zaista V = 1 u prethodnom primjeru: an l = 0, bn^ = 0 i V = 1 - dogodio se preljev.
= 1, iz čega slijedi
Preljev se može definirati i pomoću prijenosa jedinice u najznačajniji bit rezultata Cn^ i prijenosa jedinice iz najznačajnijeg bita rezultata Cn (slika 8.1): v = cn.,©c, gdje © označava logičku operaciju ISKLJUČIVO ILI. U opisanim prikazima cijelih brojeva možemo pretpostaviti da je binarni zarez postavljen iza najmanje značajne binarne znamenke, stoga ćemo u literaturi naći da se ovi prikazi brojeva nazivaju i prikazi brojeva sa čvrstim (nepomičnim) binarnim zarezom (engl. fixed-point numbers). q
C ^
najmanje značajan bit
U tt najznačajniji bit
SI. 8.1 Prijenos Cn_1 i Cn
S. RIBARIČ - GRAĐA RAČUNALA
215
Čvrsti se binarni zarez može postaviti bilo gdje u odnosu na binarne znamenke, npr. ispred najznačajnije binarne znamenke ili između dviju binarnih znamenki: X
rvl
X
n-2 . . . X 0 '
X
1 X-2 -
X
-m
gdje je x.; i = -m, -m +1,..., 0,1, ...,n-1, iz skupa binarnih znamenki {0,1}. U tom slučaju vrijednost broja v(x) dobiva se kao: n-1
-m
f=0
/=-1
Znamenke lijevo od binarnog zareza predstavljaju cijeli broj. Znamenke desno od binarnog zareza predstavljaju razlomački dio. Primjer 8.3. 8-bitni broj predočenje prikazom sa čvrstim binarnim zarezom 0111,0011 odredimo njegovu vrijednost: Vrijednost dijela broja lijevo od čvrstog binarnog za reza :1 x 2° + 1 x 21 + 1 x 22 + 0 x 23 = 7. Vrijednost razlomačkog dijela je: 0 x 2'1 + 0 x 2'2 + 1 x 2"3 + 1 x 2 4 = 0.125 + 0.0625 = 0.1875. Vrijednost broja je: 7.1875.
8.2.2. PRIKAZ BROJEVA S POMIČNIM ZAREZOM (FLOATING-POINT NUMBER) Brojevi s pomičnim zarezom upotrebljavaju se u računanju na području znanosti, gdje se vrijednosti brojeva kreću u vrlo širokom rasponu: od vrlo malih vrijednosti (npr. 212°) do vrlo velikih vrijednosti (npr. 2+120). Viši programski jezici dopuštaju definiranje varijabli tipa real i one mogu imati vrijednosti između dva slijedna cijela broja. U računalu su ti brojevi predočeni u obliku brojeva s pomičnim (binarnim) zarezom. Broj se u tom načinu prikaza sastoji od dva dijela (slika 8.2): i) eksponenta; ii) mantise; e a eksponent k
mantisa •) broj s pomičnim zarezom
SI. 8.2 Broj s pomičnim zarezom predočen u obliku a x r*
Možemo ga predočiti u obliku: a x re, gdje je a mantisa (naziva se još i argument), r j e izabrana baza brojevnog sustava (engl. radix; base) i e je eksponent. Broj s pomičnim zarezom u računalu se pohranjuje slijedom bitova koji definiraju dva polja - polje eksponenta e i polje mantise (argumenta) a. Vrijednost baze r eksplicitno se ne pohranjuje u računalu. Sljedeće značajke oblikuju prikaz brojeva s pomičnim zarezom: i) ukupan broj bitova kojim se predočava broj s pomičnim zarezom; ii) način predočavanja mantise (npr. potpuni komplement, predznak-apsolutna vrijednost, ...);
216
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
ill) način predočavanja eksponenta (npr. notacija vrijednost + prekoračenje (engl. excess notation) /naziva se još suvišakn, gdje je n iznos prekoračenja/, predznak- apsolutna vrijednost); iv) broj bitova dodijeljen mantisi, broj bitova dodijeljen eksponentu; v) razmještaj mantise i eksponenta. Dogovorno je mantisa broja s pomičnim zarezom uvijek normalizirana (osim kada je vrijednost broja nula). Normalizirani zapis mantise takvog je oblika da se podrazumijeva položaj binarnog zareza poslije prvog (ili vodećeg) bita, koji ima vrijednost 1, osim onda kada su istodobno eksponent i razlomački dio jednaki 0. To znači da je normalizirana mantisa u opsegu: 1.000...0 do 1.111... 11 što znači daje njezina vrijednost -2 < v(x) ^-1, ili v(x) = 0 ili 1
SI. 8.3 Prikaz opsega vrijednosti normalizirane mantise
Primjer 8.4. Pretpostavimo da je rezultat neke operacije brojevima s pomičnim zarezom: 1111.0011... 1 x 2e, gdje je e neka vrijednost eksponenta. Rezultat se mora prikazati s normaliziranom mantisom: 1.1110011... 1 x 2e+3 (Iz digitalne elektronike i osnova informatike znamo da množenje binarnog broja s 23 = 8 odgovara posmaku broja ulijevo za tri binarna mjesta.) Postupkom normalizacije mantise postiže se veća točnost prikaza broja. Na primjer, pretpostavimo da imamo nenormaliziranu mantisu koju možemo predočiti s osam bitova: 0.00010101 10111. U tom slučaju bitovi 0111 iza crte | ne mogu biti prikazani zbog raspoložive duljine mantise od 8 bita. No ako upotrijebimo normaliziranu mantisu, u njezinoj se vrijednosti pojavljuju i "odrezani" bitovi - broj je predočen točnije: 1.01010111 x 2 A
S. RIBARIČ - GRAĐA RAČUNALA
217
Brojevi s pomičnim zarezom moraju predstavljati pozitivne i negativne vrijednosti brojeva. Naravno, i vrijednosti eksponenta mogu biti pozitivne i negativne - ovisno o vrijednosti broja koji prikazuju. Mantisa mora imati takav oblik koji dopušta i prikaz predznaka - to može biti notacija predznak-apsolutna vrijednost, jedinični komplement ili dvojni komplement. Mantisa za prikaz brojeva u skladu s IEEE standardom (ANSI/IEEE Std 754) predočava se u notaciji predznak-apsolutno vrijednost Eksponent se u IEEE standardu za jednostruki format (engl. single format) predočava u notaciji sa suviškom 127 (naziva se još i ekces 127 ili vrijednost + prekoračenje). U jednostrukom proširenom formatu (engl. single extended format) i dvostrukom formatu IEEE (engl. double format) koristi se notacija sa suviškom 1023, dok se u formatu četverostruke točnosti (engl. quad precision format) koristi suvišak 16383. Slika 8.4 prikazuje jednostruki format broja s pomičnim zarezom u skladu sa standardom IEEE. Na slici je sa S označen bit predznaka za mantisu, s E je označen 8-bitni eksponent i s F je označen razlomački dio normalizirane mantise (23 bita). (Opaska: razlomački dio se naziva u engleskom fractional part i zato nosi oznaku F.) Napomenimo da se vodeći bit (najznačajniji bit normalizirane mantise) 1 ne pojavljuje eksplicitno u prikazu (slika 8.5). Razlomački dio F zajedno sa "skrivenim" vodećim bitom oblikuje vrijednost mantise: 1 .F. Općenito, IEEE format brojeva s pomičnim zarezom formalno je definiran ovako: X = (-1) s x2 EB x1.F, gdje je S predznak (Oza pozitivne brojeve; 1 negativne brojeve), E je eksponent predočen u notaciji sa suviškom B i F je razlomački dio mantise. Broj koji ima vrijednost 0 (nula) predočava se u formatu IEEE tako da su polja E i F istodobno 0. U tom slučaju, budući da se radi o vrijednosti broja 0, mantisa nije normalizirana i podrazumijeva se da je vodeći bit jedna 0. Ovisno o vrijednosti bita S govorimo o pozitivnoj nuli (S = 0) i negativnoj nuli (S = 1).
eksponent
razlomački dio normalizirane mantise -M"
1 bit
8 bitova
23 bita
SI. 8.4 Jednostruki format broja s pomičnim zarezom (IEEE standard) — "skriveni" vodeći bit
eksponent 1 bit
8 bitova
1.
razlomački dio normalizirane mantise 23 bita
SI. 8.5 Jednostruki format broja s pomičnim zarezom sa "skrivenim" vodećim bitom normalizirane mantise
Slika 8.6 prikazuje dvostruki format broja s pomičnim zarezom (engl. double/long IEEE format) koji je duljine 64 bita.
218
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
-a1 bit'
11 bitova
-M-
52 bita
SI. 8.6 Dvostruki format broja s pomičnim zarezom (IEEE standard)
Eksponent može imati pozitivnu i negativnu vrijednost. On se u standardu IEEE oblikuje L notaciji sa suviškom pa E nikad nije negativan. Primjer 8.5. Prikažimo dekadski broj +14,25 u jednostrukom IEEE formatu broja s pomičnim zarezom. Zapišimo +14,25 u binarnom obliku: 1110,01...0 Pretvorimo binarni broj u normaliziran oblik: 1,11001...0 x 23,
Bit predznaka S je 0 (broj je pozitivan). Eksponent +3 zapišimo u notaciji sa suviškom 127 (u skladu s IEEE standardom): 3+127=130=10000010. Konačni oblik broja (vodeći bit normalizirane mantise se ne upisuje u format) je: S E F 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| 1|
8
I
23
Prikažimo dekadski broj - 0,00048828125 u jednostrukom IEEE formatu broja s pomičnim zarezom. Zapišimo 0,00048828125 u binarnom obliku: 0,00000000001 ...0 Pretvorimo binarni broj u normalizirani oblik: 1,000....00 x 2 1 1
Bit predznaka S je 1 (broj je negativan). Eksponent -11 zapišimo u notaciji sa suviškom 127: - 1 1 + 1 2 7 = 1 1 6 = 01110100 Konačni oblik broja (vodeći bit normalizirane mantise ne upisuje se u format) jest: S E F 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
8
23
Vrijednost brojeva predočenih u IEEE formatu brojeva s pomičnim zarezom određuje se ovako: X = (-1) s x2 EB x1.F, gdje je, ponovimo još jednom, S predznak (0 za pozitivne brojeve; 1 negativne brojeve), E je eksponent predočen u notaciji sa suviškom B i F je razlomački dio mantise.
S. RIBARIČ - GRAĐA RAČUNALA
219
Na primjer, za prvi slučaj predočenog broja iz Primjera 8.5. vrijedi: X = (-1)° x 2130"127 x 1.11001 ...0 = 1.110010 0...0 x 2 3 , X = 1110,010 X = 14 + 0.25 = 14,25 (dekadno) Tablica 8.2. prikazuje osnovne značajke jednostrukog, dvostrukog i četverostrukog IEEE formata brojeva s pomičnim zarezom. Značajke
Jednostruki format
Dvostruki format
Četverostruki format
Ukupna duljina
32 bita
64 bita
128 bita
S - predznak
1 bit
1 bit
1 bit
E - eksponent
8 bita
11 bita
15 bita
Maksimalna vrijednost E
255
2047
32767
Vodeći bit
1
1
1
F - razlomački dio
23 bita
52 bita
111 bita
Notacija sa suviškom (za eksponent)
127
1023
16383
Opseg prikaza brojeva
IO 38 - 1038
10308 - 10308
Nije specificiran
iablica 8.2. Osnovni IEEE formati brojeva s pomičnim zarezom Standard IEEE za svaki od formata brojeva s pomičnim zarezom određuje i vrijednost broja. Na primjer, vrijednosti brojeva u dvostrukom formatu jesu: • ako je E = 2047 i F * 0, tada je X = NaN (Nota Number) - zapis nije broj; • ako je E = 2047 i F = 0, tada je X = (-1)s x oo (beskonačno); • ako je 0 < E < 2047, tada je X = (-1 )s x 2E 1023 x 1 .F; • ako je E = 0 i F * 0, tada je X = (-1 )s x 21023 x 0.F; • ako je E = 0 i F = 0, tada je X = (-1)s x 0 (nula). Vidimo da i ovdje ovisno o vrijednosti bita S imamo pozitivnu i negativnu nulu.
8.2.3. BINARNO KODIRANI DEKADSKI BROJEVI Kodovi ASCII i EBCDIC dopuštaju i prikaz dekadskih znamenaka. Za prikaz dekadskih znamenaka (0 - 9) upotrebljava se, međutim, i 4-bitni kod BCD (Binary Coded Decimal). U tom je prikazu svaka dekadska znamenka predstavljena 4-bitnim binarnim brojem (tablica 8.3.), i to tako daje skup vrijednosti određen binarnim kombinacijama od 0000 do 1001. Vrijednosti veće od 1001 nisu dopuštene jer je baza sustava 10. Višeznamenkasti dekadski broj predstavlja se binarno kodiranim znamenkama. Na primjer, broj 6790 se u kodu BCD predstavlja kao: 0110 0111 1001 0000 6 7 9 0 Uvriježeni način predstavljanja dekadskih brojeva u računalu jest standardni format koji se temelji na upakiravanju dekadskih brojeva pa je u jednoj riječi upakirano n znamenaka dekadskog broja; nje duljina riječi podijeljena sa 4.
220
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
Dekadska znamenka
Kod BCD
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001
Tablica 8.3. Kod BCD
8.3. BINARNA ARITMETIKA U ovom odjeljku podsjetiti ćemo se, ukratko, na ono što smo naučili iz osnova informatike -na osnovne aritmetičke operacije binarnim brojevima i na sklopove koji te operacije izvode. J
8.3.1. ZBRAJANJE DVAJU BINARNIH BROJEVA Osnovna i najjednostavnija aritmetička operacija u računalu jest zbrajanje dvaju binarnih brojeva. Ona počiva na osnovnom pravilu zbrajanja dviju binarnih znamenaka: 0+0= 0 0 + 1=1 1 +0 = 1
1 + 1 = 0 s bitom prijenosa 1 Bit prijenosa (engl. carry) prenosi se na značajnije mjesto u binarnom broju i sudjeluje u operaciji zbrajanja znamenaka na značajnijem mjestu. Sklop za zbrajanje dvaju binarnih znamenaka jest kombinacijski sklop i naziva se poluzbrajalo HA (engl. half adder). Na temelju pravila zbrajanja možemo napisati tablicu istinitosti (ili tablicu kombinacija) te na temelju nje realizirati sklop. Tablica 8.4. prikazuje tablicu istinitosti, a slika 8.7 sklop poluzbrajalo. Na temelju tablice istinitosti možemo napisati logičke funkcije za poluzbrajalo: S =x • y + x • y, C = x • y.
S. RIBARIČ - GRAĐA RAČUNALA
Ulazx
Ulazy
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
221
Izlaz S (suma) 1[ Bit prijenosa C
Tablica 8.4. Tablica istinitosti za poluzbrajalo
Izravnom uporabom potonjih logičkih funkcija dobivamo shemu sklopa (slika 8.7 b)). Logički izraz za S predstavlja operaciju sume po modulu 2 i može se implementirati funkcijom ISKLJUČIVO ILI: (x® y) (slika 8.7 c). X
w
w S (suma) poluzbrajalo HA
w
w C (bit prijenosa) a)
~7
x
xy
y S=xy+xy
xy
C=xy
J b)
x
S-x©y
y
C=xy HA,
SI. 8.7 Poluzbrajalo; a) Poluzbrajalo kao "crna kutija"; b) Sklop; c) Sklop s izvedbom pomoću sklopa ISKLJUČIVO ILI
222
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
Poluzbrajalo je, nažalost, od male koristi kada se trebaju zbrojiti dva n-bitna broja u jednom koraku i kada se u obzir mora uzeti i bit prijenosa s manje značajnog mjesta Cjn. Zbog bita prijenosa, koji zapravo predstavlja treću binarnu znamenku koja sudjeluje u operaciji zbrajanja na nekoj bitovnoj poziciji dvaju n-bitnih brojeva, trebamo koristiti sklop koji zbraja tri binarne znamenke: dvije znamenke na bitovnoj poziciji ijednu binarnu znamenku koja predstavlja bit prijenosa s manje značajne bitovne pozicije Cjn. Takav se sklop, podsjetimo se, naziva potpuno zbrajalo FA (engl. full adder). Tablica 8.5. prikazuje tablicu istinitosti za potpuno zbrajalo, a slika 8.8 sklop. Ulazx
Ulazy
Ulaz C.in
Izlaz S (suma)
Izlaz Cout„
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
Tablica 8.5. Tablica istinitosti za potpuno zbrajalo
Sklop je dobiven na temelju logičkih funkcija koje se dobivaju iz tablice istinitosti: S = x*y-C. + x -7y * Cin + x *y - Cin J ' in + x-y*C. in Cout = x*y*C. * tn + x - y*- C .in + x - y* - C .in + x y' C i.n Prisjetimo se digitalne elektronike - uporabom K-tablice može se izraz za C ^ zapisati u minimiziranom obliku: Cout = x y' + x-C in + 'y - Ctn Iz digitalne elektronike znamo da je: S = Cin © (x © y) C
ou,=Cin-(x©y)
+
x
-y
S. RIBARIČ - GRAĐA RAČUNALA
X
w S (suma)
potpuno
y
zbrajalo
<=ni
FA
>w
w
C wt (bit prijenosa)
a)
out
x
x
y'
y'
Cm
C.in b)
SI. 8.8. Potpuno zbrajalo; a) Potpuno zbrajalo FA kao "crna kutija"; b) Sklop
223
224
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
Potpuno zbrajalo može se izvesti s dva poluzbrajala (slika 8.9).
S=Cin©(x©y)
x
y
x©y
"A
CJx©y)
"outl
xy HA,
HA, kCout=Cln(x©y)+xy
xy SI. 8.9 Potpuno zbrajalo izvedeno s dva poluzbrajala
8.3.2. PARALELNO ZBRAJALO Paralelno zbrajalo zbraja n-bitnu riječ A i n-bitnu riječ B u jednom koraku. Paralelno se zbrajalo sastoji od n potpunih zbrajala. Kažemo da se paralelno zbrajalo sastoji od n stupnjeva. Bit prijenosa Cout svakog potpunog zbrajala predstavlja Cjn u stupanj koji se nalazi lijevo od njega. Slika 8.10 prikazuje n-bitno paralelno zbrajalo sastavljeno od n popunih zbrajala. an-1, bn-1,
SI. 8.10 Paralelno zbrajalo
a2
b2
^
b,
a
0
b0 C (C^
S. RIBARIČ - GRAĐA RAČUNALA
225
Ovdje smo upotrijebili izraz "paralelno zbrajalo" jer se podrazumijeva da će se n zbrajanja izvesti gotovo istodobno, za razliku od serijskog zbrajala u kojem se obavlja cjelokupno zbrajanje samo u jednom stupnju bit po bit (slika 8.11). Paralelno zbrajalo je za faktor n brže u odnosu na serijsko zbrajalo. No računanje i dobivanje rezultata paralelnim zbrajalom u praktičnoj je izvedbi usporeno zbog efekta propagacije bita prijenosa kroz stupnjeve paralelnog zbrajala. O tome ćemo nešto kasnije kad ćemo opisati zbrajalo s predviđanjem bita prijenosa (engl. carry-lookahead).
8.3.3. SERIJSKO ZBRAJALO Slika 8.11 prikazuje izvedbu serijskog zbrajala. U posmačnim registrima A i B pohranjeni su n-bitni operandi čiji se bitovi posmakom udesno prosljeđuju jednom stupnju potpunog zbrajala. Rezultat zbrajanja svake bitovne pozicije pohranjuje se (i posmiče) u posmačnom registru A, a D bistabil pamti bit prijenosa iz prethodne operacije zbrajanja bitova.
SI. 8.11 Serijsko zbrajalo
226
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
8.3.4. ODUZIMANJE DVAJU BINARNIH BROJEVA Osnovno pravilo oduzimanja dvaju binarnih znamenaka glasi: 0-0 = 0 1 -0 = 1
1-1=0 0 - 1 = 1 uz posudbu 1 s značajnije bitovne pozicije Vidimo da prve tri operacije daju kao rezultat jedan bit (0 ili 1). Kod posljednjeg se slučaja, kada je umanjitelj (suptrahend) veći od umanjenika (minuenda), oduzimanje se može izvesti samo ako posudimo jedinicu (uzmemo zajam) sa značajnije bitovne pozicije. Naravnog ta jedinica posuđena sa značajnije bitovne pozicije vrijedi 2 puta više, tj. 2. Oduzimanjem 1, u tom slučaju, dobivamo rezultat 1. Označimo s D razliku, odnosno diferenciju (rezultat oduzimanja), a s B posudbu (B od engl. borrow). Na temelju osnovnog pravila za oduzimanje možemo napisati tablicu istinitosti (tablica 8.6.). / Ulazx
Ulazy
Izlaz D (razlika)
Bit posudbe B
0
0
0
0
0
1
1
1
1
0
1
0
1
1
0
0
Tablica 8.6. Tablica istinitosti za poluoduzimalo
Na temelju tablice istinitosti dobivamo sljedeće logičke funkcije: ^ D = x-y + x-y B = x • y. Ako na trenutak izraze za D i B usporedimo sa S i C (za poluzbrajalo), uočavamo da se jedino razlikuju B i C jer je C = x • y. Sklop koji podržava prethodne dvije logičke funkcije za operaciju oduzimanja naziva se poluoduzimalo HS (engl. half-subtractor). Slika 8.12 prikazuje izvedbu poluoduzimala HS. Slično kao u slučaju potpunog zbrajala, uporabom dvaju poluoduzimala može se dobiti potpuno oduzimalo FS (engl. full-subtractor) (slika 8.13).
S. RIBARIČ - GRAĐA RAČUNALA
D (razlika)
B (bit posudbe)
a)
D=xy+xy
B—xy
x
x
y
y b)
SI. 8.12 Poluoduzimalo; a) Poluoduzimalo HS kao "crna kutija"; b) Sklop
SI. 8.13 Potpuno oduzimalo sastavljeno od dva poluoduzimala
227
228
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
8.3.5. ODUZIMANJE POMOĆU KOMPLEMENTA BINARNOG BROJA Oduzimanje se može izvesti operacijom zbrajanja dvojnog ili potpunog komplementa umanjitelja (suptrahenda). Dvojni komplement operanda B dobiva se tako da se njegovom jediničnom komplementu pribroji Cjn = 1 (slika 8.14). Shematski to predočuje slika 8.14. Slika 8.15 prikazuje potrebnu preinaku paralelnog zbrajala da bi se dobilo i paralelno oduzimalo. Upravljačkim signalom C = 1 sklopovi ISKLJUČIVO ILI generiraju jedinični komplement operanda B (umanjitelj), zbrajanjem s A uz Cjn = 1 u prvom stupnju; Cjn = C dobiva se rezultat A - B. Kad je upravljački ulaz C = 0, sklop djeluje kao paralelno zbrajalo.
/
s
n
jedinični komplement
/
C =1 paralelno zbrajalo
bit posudbe A-B SI. 8.14 Shematski prikaz oduzimanja operacijom zbrajanja potpunog komplementa 3
n-1 bn-!
SI. 8.15 Paralelno zbrajalo i oduzimalo
a2 b2
ai b"i
S. RIBARIČ - GRAĐA RAČUNALA
229
8.3.6. PARALELNO ZBRAJALO S PREDVIĐANJEM BITA PRIJENOSA (ENGL. CARRYLOOKAHEAD) Pri zbrajanju dvaju binarnih brojeva paralelnim zbrajalom svi bitovi oba operanda raspoloživi su istodobno, međutim, bitovi prijenosa u pojedine stupnjeve nisu raspoloživi u istom trenutku. Rezultat, tj. suma ovisi o bitovima operanada, ali i o bitovima prijenosa C. na ulazu u svaki stupanj paralelnog zbrajala. Bit prijenosa C koji je ulaz u /-ti stupanj ovisi o rezultatu koji generira potpuno zbrajalo u / - 1 stupnju i bit će raspoloživ tek kada taj stupanj paralelnog zbrajala obavi operaciju. Rezultat /-1 stupnja ovisi o rezultatu 1-2 stupnja itd.To znači da će izlaz iz paralelnog zbrajala, koji je kombinacijski sklop, postati stabilan i valjan tek kada najznačajniji stupanj zbrajala (n -1 stupanj) na ulazu bude imao stabilan bit prijenosa i s njim obavi operaciju zbrajanja najznačajnijih bitova operanada. Iz toga slijedi daje vrijeme kada će izlazi iz paralelnog zbrajala postati stabilni jednako vremenu propagacije bita prijenosa kroz sve stupnjeve paralelnog zbrajala i vremenu zbrajanja u jednom potpunom zbrajalu. Ukupno vrijeme propagacije bita prijenosa jednako je umnošku vremenu kašnjenja jednog logičkog sklopa i broju logičkih sklopova kroz koje bit prijenosa prolazi. U jednom stupnju paralelnog zbrajala signal koji odgovara bitu prijenosa prolazi kroz logički sklop I i ILI (slika 8.9). Ako se paralelno zbrajalo sastoji od n stupnjeva, onda je ukupno vrijeme propagacije signala koji odgovara bitu prijenosa jednako n x (2 x td), gdje je t d vrijeme kašnjenja jednog logičkog sklopa. Ukupno vrijeme koje je potrebno da bi n-bitno paralelno zbrajalo generiralo valjani rezultat je: t
adder
=
t
f
+ n X
(
2 x
U
gdje je t f vrijeme u kojem jedan stupanj paralelnog zbrajala, tj. potpuno zbrajalo (FA) obavi operaciju zbrajanja. Na temelju ove kratke analize vidimo da je kašnjenje u propagaciji bita prijenosa važan faktor koji ograničava brzinu paralelnog zbrajala. Za procesore koji se služe 32-, 64- ili 128-bitnim operandima, brzina paralelnog zbrajala koje ima 32, 64 ili 128 stupnjeva može predstavljati bitni ograničavajući faktor performanse procesora (ne zaboravimo da se paralelno zbrajalo kao sastavni dio aritmetičko-logičke jedinice nalazi na putu podataka). Postoje sljedeće mogućnosti ubrzanja rada paralelnog zbrajala: upotreba bržih sklopova (vrijeme kašnjenja t d što je moguće kraće), uporaba sklopova za predviđanje bita prijenosa ili oboje. Brzina sklopova tehnološki je uvjetovana i postavlja granice koje se ne mogu prekoračiti. Paralelno zbrajalo s dodatnim sklopovima za predviđanje bita prijenosa svrstavamo u razred brzih zbrajala (engl. fast adder). Uporabom sklopova za predviđanje bita prijenosa skraćuje se vrijeme propagacije signala koji odgovara bitu prijenosa i ono postaje neovisno o broju stupnjeva n paralelnog zbrajala. Paralelno zbrajalo s predviđanjem bita prijenosa kojim smanjuje vrijeme propagacije signala bita prijenosa ima složeniju sklopovsku strukturu od strukture paralelnog zbrajala. Promotrimo sklop potpunog zbrajala (/-ti stupanj paralelnog zbrajala) na slici 8.16 i definirajmo dvije nove binarne varijable, odnosno dva signala: P, = x,©y, G = x
i
i-Vi'
Signal P. se naziva signal propagacije bita prijenosa (engl. carry propagate) zato što opisuje logičke uvjete propagacije bita prijenosa s ulaza u /-ti stupanj na njegov izlaz, a signal G. naziva se signal generiranja bita prijenosa (engl. carry generate) jer definira uvjete generiranja bita prijenosa u /-tom stupnju neovisno o bitu prijenosa na njegovom ulazu.
230
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
x. P.
y.
"i+1
SI. 8.16 /-ti stupanj paralelnog zbrajala s označenim varijablama P i G.
Izlazni je signal bita prijenosa koji se prenosi stupnju / + 1 paralelnog zbrajala (slika 8.16): C1=Gi
(P,.Ci).
+
(8.1)
Suma je: (8.2)
S. = P . ® C Na sličan se način može izraziti Cj+2za stupanj i+2: 'Ci+2 =
G
+ P i+1
(
i+,"
C
(8.3)
J<
Ci+uvrstimo (P.i+l •(8.1), (G.i +vdobivamo: (P. ako za C.+1 u prethodnom izrazu 2 = Gi+l + izraz i • C))) C
/
i.3 = G i+2 + * Ci+2>Ci+3 = Gi+2 + (P M -(G i+1 + (Pi+,-(Gi + (P,.Ci))))) = G. , + (R , • G. .) + (R , • P. , • G,) + № • P. , • P. • C.)
Odnosno za stupanj i + 3:
(8.4)
Nastavljanjem prethodno navedenog postupka može se izraziti i C ^ - bit prijenosa iz najznačajnijeg stupnja paralelnog zbrajala n -1 (C^ = Cn) kao suma produkata logičkih funkcija P i G. Na primjer, za 4-bitno paralelno zbrajalo s predviđanjem bita prijenosa imamo: C, = G0 + (P0-C0) C2 = G, + (P, • C,) = G, + (P, • (G0 + (P0 • Q ) ) = G, + (P, • G„) + (P, • P0 • Q CJ = GJ + (P2.G1) + (P2.P1-Gfl) + (P 2 -P | .P 0 -C 0 ) C4 = Cout = G3 + (P3.G2) + (P 3 .P 2 -G l ) + (P 3 .P 2 .P l -G 0 ) + (P 3 .P 2 .P 1 .P 0 .C 0 )
(8.5); (8.6) I (8.7) (8.8) |
Slika 8.17 prikazuje sklop za predviđanje bita prijenosa za 4-bitno paralelno zbrajala Izlazi iz sklopa jesu bitovi prijenosa C1 do C 4 = C ^ . Što smo dobili? Sklop za predviđanje bitova prijenosa je dvorazinski logički sklop (jedna razina logički sklop I, druga razina logički sklop ILI). Kašnjenje u generiranju svih bitova prijenosa potrebnih za operaciju zbrajanja paralelnog zbrajala neovisno je o broju stupnjeva paralelnog zbrajala i iznosi 2 x td. Vrijeme potrebno za dobivanje valjanog rezultata zbrajanja je 2 x t d + t f gdje je t d kašnjenje logičkog sklopa, a t f vrijeme potrebno za operaciju zbrajanja u jednom stupnju paralelnog zbrajala. Vidimo da brzina generiranja rezultata paralelnog zbrajala sada ne ovisi o broju stupnjeva n. Jednako tako, iz logičkih izraza za bitove prijenosa (8.5) - (8.8) vidimo da su
S. RIBARIČ - GRAĐA RAČUNALA
231
na samom početku izvođenja operacije raspoložive sve varijable, naime P, i G.; i = 0, 1, 2,... generiraju se samo na temelju bitova operanada, a početna vrijednost bita prijenosa C0 unaprijed je određena. P3 P2 P,
p
o
G, G0 C0
P3 P2 P1 P0 C0
P3P2P10 G
^4 ^out PPG 3 2 1
p3G2
P2 P1 P0
c0
PPG 2 10
^ FZ
PP
c
P,G0
P
oC0
P3 P2 P, P0 G3 G2 G, G0 C0 SI. 8.17 Sklop za predviđanje bita prijenosa za četverobitno paralelno zbrajalo
232
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
Slika 8.18 prikazuje izvedbu četverobitnog paralelnog zbrajala sa sklopom za predviđanje bita prijenosa.
a
3
b
3
a
2
b
2
a
!
b
1
a
0
b
0
SI. 8.18 Izvedba četverobitnog paralelnog zbrajala sa sklopom za predviđanje bita prijenosa
8.3.7 MNOŽENJE U usporedbi sa zbrajanjem i oduzimanjem, množenje dvaju binarnih brojeva složenija je operacija koja zahtijeva kompleksnije sklopove. Različiti se algoritmi množenja rabe u računalima. U ovom ćemo potpoglavlju razmotriti prvo jednostavniji slučaj množenja dvaju nepredznačenih (engl. unsigned) brojeva. Pod nepreznačenim binarnim brojem podrazumijevamo cjelobrojne pozitivne binarne brojeve. Nakon toga, objasnit ćemo postupak množenja brojeva u notaciji potpunog ili dvojnog komplementa koji je najrasprostranjeniji postupak množenja. 8.3.7.1. M N O Ž E N J E N E P R E D Z N A Č E N I H B R O J E V A Već smo u poglavlju 2. spomenuli da se množenje može izvesti uzastopnim operacijama zbrajanja i posmaka. Razmotrimo to podrobnije. Postupak množenja dvaju n-bitnih nepredznačenih binarnih brojeva ručno na papiru, postupkom "olovka i papir" (engl. pend andpaper) predstavlja osnovnu podlogu za izvedbu množenja u računalu. Postupak, analogno ručnom postupku množenja dekadskih brojeva, možemo opisati na sljedeći način: Ispituju se bitovi množitelja (multiplikatora) započevši od najmanje značajnog bita. Ako je trenutno promatrani bit množitelja jednak 1, onda se množenik(multiplikand) prepisuje« predstavlja parcijalni produkt (jedinica množitelja množi se množenikom i daje množenic npr. 1101x1=1101). Ako je promatrani bit jednak 0, onda se zapisuje n nula (parcijalni produkt je 0000, za slučaj 4-bitnog broja; 1101 x 0 = 0000). Nakon toga se ispituje sljeded bit množitelja, međutim, sada prepisujemo množenik (ili nule) tj. parcijalni produkt, započevši na poziciji koje je jedno mjesto ulijevo u odnosu na prethodni zapis. Postupak ponavljamo sve dok nisu svi bitovi množitelja skenirani. Kada su svi parcijalni produkti oblikovani oni se zbrajaju i daju rezultat množenja.
S. RIBARIČ - GRAĐA RAČUNALA
233
Primjer 8.6. Želimo izračunati umnožak dvaju nepredznačenih 4-bitnih brojeva: 1100 x 1101, pri čemu je 1100 množenik (multiplikand), a 1101 množitelj (multiplikator). 1100
12 (10)
x1101 1100 0000 1100
X
1 3(10)
1. korak: najmanje značajan bit množitelja je 1, prepisuje se množenik 2. korak: drugi bit množitelja je 0, upisuje se 0000 s posrnakom ulijevo 3. korak: treći bit množitelja je 1, prepisuje se množenik s posmakom ulijevo
1100 10011100
4. korak: četvrti bit množitelja je 1, prepisuje se množenik s posmakom ulijevo 5. korak: zbrajamo parcijalne produkte (rezultat: 156(10))
Opisani postupak množenja nije podesan za izravnu realizaciju u računalu jer zahtijeva pohranjivanje parcijalnih produkata i nakon toga njihovo zbrajanje. Uz male preinake opisani postupak postaje podesan za implementaciju u računalu. Preinačeni se postupak može opisati sljedećim algoritmom: 1. korak: postavi brojilo na vrijednost n (broj binarnih znamenki nepredznačenih brojeva); 2. korak: sadržaj registara parcijalnih produkta duljine 2n bita postavi inicijalno u 0; 3. korak: ispitaj krajnji desni bit množitelja (inicijalno je to najmanje značajan bit). Ako je on jednak 1, onda pribroji množenik najznačajnijim n bitovima registra parcijalnih produkata; 4. korak: posmakni sadržaj registara parcijalnih produkata udesno za jedno mjesto; 5. korak: posmakni množitelj zajedno mjesto udesno; 6. korak: umanji brojilo za 1 i ako nije jednako 0, izvrši ponovo korake 3.-6. Ako je brojilo jednako 0, onda je u registru parcijalnih produkata rezultat množenja. Primjer 8.7. Ilustrirajmo algoritam na primjeru: 1100 x 1101. 1. korak: brojilo ima vrijednost 4; 2. korak: registar parcijalnih produkata duljine 2n - 8 bita postavljen je u 0: 0
0
0
0
0
0
0
0
3. korak: krajnji desni bit množitelja 1101 je 1; pribrajamo množenik sadržaju registra parcijalnih produkata na n značajnijih mjesta: 1
1
0
0
0
0
0
0
4. korak: posmičemo sadržaj registara parcijalnih produkata zajedno mjesto udesno: 0
i
1
0
0
0
0
0
5. korak: posmičemo množitelj za jedno mjesto udesno i dobivamo: 0110 6. korak: sadržaj brojila umanjujemo za 1: n = 3. Budući da je n različito od 0 vraćamo se na korak 3.
234
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
3. korak: krajnji desni bit (sada već posmaknutog) množitelja 0110 je 0; 4. korak: posmičemo sadržaj registara parcijalnih produkata zajedno mjesto udesno: 0
0
1
1
0
0
0
0
5. korak: posmičemo množitelj zajedno mjesto udesno i dobivamo: 0011 6. korak: sadržaj brojila umanjujemo za 1: n - 2. Budući da je n različito od 0 vraćamo se na korak 3; 3. korak: krajnje desni bit množitelja 0011 je 1; pribrajamo množenik sadržaju registra parcijalnih produkata na n značajnijih mjesta: 0
0
1
1 1 0
1
0
0
0
0
0
0
0
0
0
Dobivamo: 1
1
1
1
4. korak: posmičemo sadržaj registara parcijalnih produkata zajedno mjesto udesno: 0
1
1
1
1
0
0
0
5. korak: posmičemo množitelj zajedno mjesto udesno i dobivamo: 0001 6. korak: sadržaj brojila umanjujemo za 1: n - 1. Budući da je n različito od 0 vraćamo se na korak 3; 3. korak: krajnji desni bit množitelja je 1; pribrajamo množenik sadržaju registra parcijalnih produkata na n značajnijih mjesta: 0
1
1
1
1
1
0
0
Dobivamo: 1 0 1 1 1 0 0
1 0 1
1
0
0
0
1 0 1
1
0
0
0
1
0
0
0
4. korak: posmičemo sadržaj registara parcijalnih produkata za jedno mjesto udesno: 1
0
0
1
1
1
0
0
5. korak: posmičemo množitelj zajedno mjesto udesno i dobivamo: 0000 6. korak: sadržaj brojila umanjujemo za 1: n = 0. U registru parcijalnih produkata nalazi se rezultat: 10011100= 156{10)
S. RIBARIČ - GRAĐA RAČUNALA
235
8.3.7.2. M N O Ž E N J E BROJEVA P R E D O Č E N I H U NOTACIJI DVOJNOG KOMPLEMENTA Do sada opisani postupci množenja vrijede samo za nepredznačene brojeve. Množenje brojeva s predznakom (engl. signednumber) može se izvesti tako da se oba operanda pretvore u pozitivne brojeve, pomnože i onda, ako je to potrebno, preoblikuju tako da produkt ima odgovarajući predznak. Kad su brojevi predočeni u notaciji dvojnog komplementa, množenje zahtijeva dodatni korekcijski korak, i to ako: • je množitelj Y negativan (korekcijski faktor je dvojni komplement množenika X pomnožen s 2n), • je množenik X negativan (korekcijski faktor je dvojni komplement množitelja Y pomnožen s 2n), • su i množenik X i množitelj Y negativni (korekcijski faktori su tada 2n X i 2nY). Primjer 8.8. Dva su 5-bitna binarna broja 01111 i 10011 predočena u notaciji dvojnog komplementa: X = 01111 = + 15{10) i Y = 10011 = -13(10) Izračunajmo produkt X x Y: 01111 X 10011 Y (izražen u dvojnom komplementu) 01111 Prvi parcijalni produkt 01111 Drugi parcijalni produkt 00000 Treći parcijalni produkt 00000 Četvrti parcijalni produkt 01111 Peti parcijalni produkt 0100011101 Netočan rezultat Dobili smo netočan rezultat koji zahtijeva korekciju. Iznos korekcije za naš slučaj (negativan je množitelj) je dvojni komplement množenika X pomnožen s 2n. Dvojni komplement množenika je 10001. Podsjetimo se množenje s 2ft znači posmak broja za n = 5 mjesta ulijevo. Korekcijski faktor je: 1000100000. Korigirajmo netočan rezultat: 0100011101 Netočan rezultat 1000100000 Korekcijski faktor 1100111101 Rezultat Rezultat je 1 1 0 0 1 1 1 1 0 1 = -195 (točno!)
8.3.7.3. B O O T H O V A L G O R I T A M A. D. Booth je 1951. predložio algoritam za množenje binarnih brojeva predočenih u notaciji dvojnog komplementa. Algoritam vrijedi za slučaj dva pozitivna broja, za slučaj kada je jedan od njih negativan i kada su oba negativna. Osim toga, algoritam ubrzava postupak množenja (u odnosu na "klasičan" pristup), ne zahtijeva korekciju i podesan je za sklopov-
236
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
sku implementaciju. Slika 8.19 prikazuje dijagram toka za Boothov algoritam. Na temelju slike 8.19 opišimo algoritam. Inicijaliziraju se registri: n-bitni registar A postavlja se u 0, u n-bitni registar M smješta se množenik (multiplikand), a u n-bitni registar Q množitelj (multiplikator). Registar Q modificiran je tako da je njegovom najmanje značajnom bitu Q0 (krajnje desnom) pridodan još jedan bistabil koji odgovara poziciji Q r Inicijalno Q^ postavljenje u 0. Brojilo C inicijalno je postavljeno na n (broj bitova operanda). Rezultat množenja (duljine 2n) pojavit će se u registarskoj kaskadi A-Q.Tijekom izvođenja ispituju se bitovi i Q . Ako su vrijednosti tih dvaju bitova jednake 0-0 ili 1-1, tada se bitovi kaskade sastavljene od A-CJ-Oj posmiču zajedno mjesto udesno. Treba pripaziti, posmakje aritmetički, što znači da se sadržaj posmiče tako da se bit predznaka (A^) posmiče na poziciju A ^ ali ostaje sačuvan i na poziciji A (vidi 3.poglavlje). Slika 8.20 ilustrira aritmetički posmak udesno u kaskadi A-Q-Q f početak )
Sf. 8.19 Dijagram toka za Boothov algoritam
S. RIBARIČ - GRAĐA RAČUNALA
registar A
A , 1
1
0
0
0
registar Q
A
o
'1
0
Q
0
Q
ci
n 1
0
•
1
0
0
0
237
0
0
1
—
•
Q.i 0
a) registar A
An-1, 1
1
1
0
0
()
1
A0 0
registar Q Q
—
•
Q
oi
n-1
0
0
1
0
0
0
0
0
Q, 1 •
b) SI. 8.20 Aritmetički posmak udesno u kaskadi A-Q-Q, a) prije aritmetičkog posmaka udesno, b) poslije aritmetičkog posmaka udesno
Ako se ispitane vrijednosti bitova Q0 i Q } međusobno razlikuju, onda se množenik pribraja (kombinacija: Q0 Q = 01) sadržaju registra A ili oduzima (kombinacija: Q0 Q^ = 10) od A. Nakon toga se sadržaj kaskade A-Q-Q^ posmiče aritmetičkim posmakom udesno za jedno mjesto. Nakon aritmetičkog posmaka (za bilo koju od kombinacija 0-0,1-1,0-1 ili 1-0) umanjuje se za 1 sadržaj brojila C. Ako C nije jednako 0, nastavlja se postupak ispitivanja bitova Q0 i Q r Kad brojilo C postane 0, postupak završava i rezultat množenja nalazi se u registarskoj kaskadi A-Q. Zahvaljujući ispitivanju dvaju susjednih bitova i slijedu nula ili slijedu jedinica u množitelju, ubrzava se množenje (izvodi se samo operacija aritmetičkog posmaka međurezultata). Primjer 8.9. Ilustrirajmo Boothov algoritam za množenje dvaju 5-bitnih binarnih brojeva iz Primjera 8.8:01111 i 10011 predočena u notaciji dvojnog komplementa: X = 01111 = + 15(10) i Y = 10011 =-13 {10) Izvođenje Boothova algoritma prikazat ćemo tablicom 8.7. A
G
00000
10011
0
c
Komentar
5
Inicijalizacija
10001
10011
0
5
Q 0 Q, = 10 A«- A - M ; M = 01111 (+15)
11000
11001
1
4
Aritmetički posmak udesno
3
Q0Q-, = 1 1 Aritmetički posmak udesno
11100
01100
1
01011
01100
1
00101
10110
0
2
Aritmetički posmak udesno
00010
11011
0
1
0,0., = 00 Aritmetički posmak udesno
A«- A + M
238
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
A
Q
Q,
10011
11011
0
11001
11101
1
c
Komentar Q
oQ-i
=
1
°
A<-A-M 0
1100111101
Aritmetički posmak udesno Rezultat (-195)
Tablica 8.7. Izvođenje Boothovog algoritma (X = 01111; Y = 10011)
Slika 8.21 prikazuje blok-shemu množila temeljenog na Boothovom algoritamu. Kružićima su označene upravljačke točke u koje se dovode upravljački signali C. Na primjer, C0 • C1 = 1 pobudit će aritmetički posmak udesno kaskade A-Q-Q }t dok će C6 • C7 = 1 proslijediti rezultat množenja.
SI. 8.21 Blok-shema množila temeljenog na Boothovom algoritmu
S. RIBARIČ - GRAĐA RAČUNALA
239
Za ubrzanje množenja u računalima koriste se posebne izvedbe množila kao što su: • množilo sastavljeno od polja potpunih zbrajala; • množila temeljena na tablici preslikavanja (engl. look-up table); • množila s brzim posmačnim sklopovima; • množila sastavljena od zbrajala s očuvanjem bita prijenosa (engl. carry save adder) koja su povezana u kaskadu.
p7
p6
r
J
/
p5
p4
r
p3
p2
SI. 8.22 Množilo sastavljeno od polja potpunih zbrajala
Objasnimo kako se dobiva struktura brzog množila koje je sastavljeno od dvodimenzionalnog polja potpunih zbrajala. Zanimljivo je da je jednostavno dobivamo na temelju osnovnog pravila za množenje dvaju n-bitnih nepredznačenih binarnih brojeva ručnim putem tehnikom "olovka i papir" (engl. pencil andpaper). Neka su množenikX = x3x2 x1 x0 i množitelj Y = y3 y2 y1 y0, njihov produkt je (vidi Primjer 8.6.): x
x 2
y3 x 3y0 x 2 y, x ,y 2 x 0y3
y2 x 2y0 x ,y, x 0y2
x
x
3 y,
3y2
x
2y2
x2y3 P5
x
,y 3 p4
x x
3y3
P6
x
3
p
3
p2
,
y, x
,y 0 Vi
p,
X
o
y0 Vo
Po
1. parcijalni 2. parcijalni 3. parcijalni 4. parcijalni rezultat
produkt produkt produkt produkt
240
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
Produkti pojedinih binarnih znamenaka x. y. zapravo predstavljaju logičku funkciju I: x •y . Budući da su nam svi bitovi obaju operanada raspoloživi, sve produkte binarnih znamenaka možemo istodobno dobiti pomoću dvodimenzionalnog polja dvoulaznih logičkih sklopova I (slika 8.23). Izlazi iz logičkih sklopova I dovode se na odgovarajuće ulaze potpunih zbrajala u skladu s postupkom računanja sume parcijalnih produkata. Tako se, na primjer, najmanje značajan bit rezultata dobiva izravno kao izlaz iz logičkog sklopa I koji "računa"x0y0. Vrijednost P1 dobiva se kao: (x1 -y0) + (x0 • + 0; gdje + označava operaciju zbrajanja itd.
SI. 8.23 Dvodimenzionalno polje logičkih sklopova I koje istodobno generira n2 produkata binarnih znamenaka
Slika 8.22 prikazuje 4-bitno množilo za nepredznačene binarne brojeve koje je sastavljeno od polja potpunih zbrajala. Uočavamo pravilnu strukturu sastavljenu od potpunih zbrajala i logičkih sklopova I. Takva uniformna struktura množila podesna je za izvedbu u tehnologiji visokog stupnja integracije (LSI ili VLSI).
8.3.8. DIJELJENJE Svrha je dijeljenja dvaju cjelobrojnih binarnih brojeva D/V, gdje je D djeljenik (dividend), a V djelitelj (divizor), dobivanje kvocijenta Q tako da vrijedi D = Q x V + R, gdje je R ostatak, pri čemu vrijedi 0 ^ |R| < V. Najjednostavnija i intuitivna metoda dijeljenja je metoda "olovka i papir". Postupak dijeljenja sličan je postupku koji se provodi u dekadskom sustavu: najprije se pokuša "ide" li djelitelj u isti toliki broj najznačajnijih bitova djeljenika. Ako ne "ide", spušta se sljedeća znamenka djeljenika itd. Binarno je dijeljenje jednostavnije nego što je to dekadsko, zato što su znamenke kvocijenta Q nule i jedinice pa nije potrebno procjenjivanje koliko puta "ide"djelitelj u djeljenik ili u djelomični ostatak.
S. RIBARIČ - GRAĐA RAČUNALA
241
Primjer 8.10. Neka je djeljenik D nepredznačeni binarni broj D = 1111101 i neka je djelitelj V također nepredznačeni binarni broj 101. Dijeljenje metodom "olovka i papir" izvodi se na sljedeći način: 1111101:101 = 11001 -101
0101 >101
000 101 -101
000 Iz postupka vidimo da se dijeljenje svodi na uzastopno uspoređivanje djeljenika ili djelomičnog ostatka s djeliteljem, oduzimanja djelitelja od djelomičnih ostataka te posmaka djelitelja. Oduzimanje se može zamijeniti zbrajanjem dvojnog komplementa djelitelja (V+ 1). Kvocijent Q se računa bit po bit u vremenu. U svakom se koraku /, djelitelj V posmiče udesno i ima vrijednost 2 V te se uspoređuje s djelomičnim ostatkom R.. Bit kvocijenta q. postavlja se na 1 ako je 2 V manje ili jednako R : Novi se djelomični ostatak Rj+1 dobiva kao: R.1+,1<- R\ - M q 2 V. Metoda dijeljenja nepredznačenih binarnih brojeva "olovka i papir", s malim se preinakama može, kao što je to bio slučaj i kod množenja, implementirati u računalu. Modifikacija se sastoji od posmicanja djelomičnog ostatka ulijevo od djelitelja. U tom se slučaju novi djelomični ostatak dobiva kao: Rr+1, <-2R.-q.V I M Slika 8.24 prikazuje dijagram toka postupka dijeljenja nepredznačenih brojeva koji je prikladan za strojnu izvedbu. Djelitelj je smješten u registar M, a djeljenik u registar Q. U svakom se koraku kaskada registara A-Q posmiče ulijevo za jedno mjesto. M se oduzima od A da bi se utvrdilo "ide" li A u djelomični ostatak. Ako "ide" tada se najmanje značajan bit registra Q, tj. bit Q0 postavlja u 1. Inače, Q0 je nula i M se mora pridodati natrag sadržaju registra A da bi obnovio prijašnju vrijednost. Brojilo C dekrementira se za 1 i postupak se ponavlja n koraka. Na kraju postupka kvocijent Q nalazi se u registru Q, a ostatak dijeljenja u registru A. Postupak prikazan na slici 8.24 naziva se postupak dijeljenja obnavljanjem djelomičnog ostatka (engl. restoring division) jer se odluka o tome "ide" li djelitelj ili "ne ide" u djeljenik, odnosno djelomični ostatak ne donosi unaprijed, već se zasniva na vrijednosti njihove razlike. Ako je razlika između djelomičnog ostatka i djelitelja negativna, tada treba djelomični ostatak obnoviti ponovnim pribrajanjem djelitelja. Malom se preinakom postupka dijeljenja obnavljanjem - uklanjanjem koraka obnavljanja djelomičnog ostatka i dopuštanjem da djelomični ostatak bude negativan dobiva algoritam dijeljenja bez obnavljanja. U tom se slučaju korak obnavljanja R.«- R. + V i sljedeći korak oduzimanja Rj+1 2R.-Vstapaju ujedan korakRj+1 2R. +V.
242
8. POGLAVLJE: ARITMETIČKO-LOGIČKA JEDINICA
SI. 8.24 Dijagram toka za dijeljenje nepredznačenih binarnih brojeva
Slika 8.25 prikazuje blok-shemu sklopovske izvedbe djelila koja je slična onoj za Boothovo množilo. U registru M pohranjuje se djelitelj. Registri A i Q prvo se upotrebljavaju za početno pohranjivanje djeljenika (duljine 2n), a zatim se A i Q koriste za pohranjivanje djelomičnog ostatka. A i Q posmiču se ulijevo, a u najmanje značajno mjesto registra Q, tj. Q0, pohranjuje se bit kvocijenta dobiven u svakom koraku algoritma. Na kraju dijeljenja rezultat (kvocijent) je u registru 0, a ostatak u registru A.
S. RIBARIČ - GRAĐA RAČUNALA
243
C,
SI. 8.25 Blok-shema djelila
Prethodno opisani postupak može se uz dodatne preinake upotrijebiti i za dijeljenje negativnih binarnih brojeva predočenih u dvojnom komplementu: 1. korak: djelitelj se smješta u registar M, a djeljenik u A-Q registar. Djeljenik (ako je negativan) mora biti izražen u dvojnom komplementu duljine 2n bita; 2. korak: posmakni A-Q ulijevo za jedno mjesto; 3. korak: ako M i A imaju isti predznak, izvedi operaciju A <- A - M, inače A <- A + M; 4. korak: potonja se operacija smatra uspješnom ako je predznak rezultata operacije jednak predznaku podatka u A prije operacije: • ako je operacija uspješna ili ako su (A = 0 AND Q = 0), postavi Q0 u jedan; • ako je operacija neuspješna i (A * 0 OR Q * 0), onda postavi Q0 u nulu i obnovi prijašnju vrijednost registra A; 5. korak: ponavljaj korake 2 - 4 onoliko puta koliko je bitovnih pozicija u Q; 6. korak: ostatak dijeljenja je u A. Ako su predznaci djelitelja i djeljenika jednaki, tada je ispravan kvocijent u 0, inače je ispravan kvocijent dvojni komplement sadržaja registra Q.
Primjer 8.11. Prikažimo postupak dijeljenja (tablica 8.8.) dvaju binarnih brojeva predočenih u notaciji dvojnog komplementa. Djeljenik je 4-bitni broj 0111= 7(10) a djelitelj je također 4-bitni broj 1101 = -3.... A 0000
Q
Komentar
0111
Inicijalizacija; M = 1101 - djelitelj; djeljenik je u notaciji dvojnog komplementa smješten u A-Q
0000
1110
Posmakni A-Q ulijevo;
1101
1110
Predznaci A i M su različiti; izvedi operaciju A
0000
1110
Operacija iz prethodnog koraka je neuspješna, predznak A se promijenio - postavljamo Q0 u 0 i obnavljamo sadržaj A
0001
1100
Posmakni A-Q ulijevo
1110
1100
Predznaci A i M su različiti; izvedi operaciju A
0001
1100
Operacija iz prethodnog koraka je neuspješna, predznak A se promijenio - postavljamo Q0 u 0 i obnavljamo sadržaj A
0011
1000
Posmakni A-Q ulijevo
0000
1000
Predznaci A i M su različiti; izvedi operaciju A «- A + M
0000
1001
Operacija iz prethodnog koraka je uspješna, predznak A nije se promijenio - postavljamo Q0 u 1
0001
0010
Posmakni A-Q ulijevo
1110
0010
Predznaci A i M su različiti; izvedi operaciju A
0001
0010
Operacija iz prethodnog koraka je neuspješna, predznak A se promijenio - postavljamo Q0 u 0 i obnavljamo sadržaj A
A + IVI
A+ M
A+ M
Tablica 8.8. Postupak dijeljenja dvaju binarnih brojeva predočenih u notaciji dvojnog komplementa
Predznaci djeljenika i djelitelja su različiti pa je stoga ispravan rezultat potpuni komplement sadržaja registra Q,tj. 1110 (-2 (dekadno)) a ostatak je 1. Vidimo da se postupak dijeljenja, iako je složeniji od postupka množenja, temelji na istim općim načelima. Postupak dijeljenja može se također ubrzati uporabom tzv. brzih djelila koja koriste brza zbrajala, oduzimala i brze sklopove za posmak. Brza djelila mogu se, poput brzih množila, izvesti kombinacijskim sklopovima organiziranim u dvodimenzionalna polja sastavljenim od potpunih oduzimala ili potpunih oduzimala i zbrajala.
8.3.9. POSMAK U 3. smo se poglavlju već upoznali s osnovnim operacijama posmaka, i to s: logičkim posmakom ulijevo, logičkim posmakom udesno, aritmetičkim posmakom udesno, kružnim posmakom ulijevo ili udesno. Slike 8.26 a) - e) podsjećaju nas na navedene operacije (zbog jednostavnosti smo operacije posmaka ilustrirali s 8-bitnim operandima; slike označene s ij
5. R1BARIČ - GRAĐA RAČUNALA
245
pokazuju stanje registara neposredno prije, a one s ii) stanje neposredno nakon posmaka). Na slikama vidimo da smo u operacije posmaka uključili i jedan bistabil (zastavicu prijenosa C {engl. carry) statusnog registra), međutim, nije nužno njezino sudjelovanje u tim operacijama (posebno u slučaju kružnog posmaka). zastavica C
1
b7
b0
1
1 0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
b0 1
0
b0 0
ii) a)
b7 1 b7 0
1
0
0
0
0
i) 1
1
0
0
0
C
ii) b)
c) c 0
b7 1
b
1 0
0
0
0
0
o 1
i)
c 1
b7 1
bo
0
0
0
0
0
1
0 «-I
ii) d)
c 0
b7 1
b
1 0
0
0
0
0
o 1
0
b0 0
i) c 1
b7 w 0
1
1
0
0
0
ii) e) SI. 8.26 Logički posmak, aritmetički posmak udesno i kružni posmak a) logički posmak ulijevo, b) logički posmak udesno, c) aritmetički posmak udesno, d) kružni posmak ulijevo, e) kružni posmak udesno
246
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
Već znamo da posmicanje /i-bitno nepredznačenog broja x za k mjesta ulijevo odgovara množenju njegove vrijednost s 2k, što daje vrijednost 2kx uz pretpostavku se ta nova vrijednost dade predstaviti s k bita. Zanimljivo je da slično vrijedi i za posmicanje ulijevo predočenih i brojeva predočenih dvojnim komplementom uz uvjet da n-bitni broj ima k +1 znamenke jednake na značajnijim mjestima. Potrebno je obratiti pažnju na to daje logičko posmicanje nepredznačenih brojeva i brojeva u notaciji dvojnog komplementa udesno različito. Posmicanje nepredznačenog broja udesno za k mjesta znači dijeljenje njegove vrijednost s 2k. Logičko posmicanje udesno broja u notaciji dvojnog komplementa ne funkcionira jer će negativni broj promijeniti predznak zato što će se na njegovim značajnijim mjestima pojaviti nule. Aritmetički posmak udesno rješava problem - očuvanjem bita predznaka dobiva se prava vrijednost prvotna vrijednost broja podijeljena s 2k. Primjer 8.12. Ilustrirajmo kako logički posmaci utječu na dobiveni rezultat ako su brojevi predočeni kao nepredznačeni i kao brojevi predznak-apsolutna vrijednost te kao brojevi u dvojnom komplementu (slika 8.27).
1
0
0
1
1
1
0
1
1
0
0
1
a)
0
0
1
0
1
1
0
1
0
1
1
1
c)
0
1
1
1
0
0
1
0
b)
d)
b„ 1
0
0
1
1
1
0
1
1
0
0
1
0
1
0
1
0
1
0
1
1
1
g)
e)
0
1
0
1
1
b0 1
1
1
1
0
f) SI. 8.27 Operacija posmaka nepredznačenih i predznak-apsolutna vrijednost brojeva a) nepredznačeni broj: v(x) = 15710, b) logički posmak udesno za k = 2 mjesta: v(x) = 3910, c) predznak-apsolutna vrijednost: v(x) = -2910, d) posmak udesno za k = 2 mjesta: v(x) = +3910 (pogrešan rezultat), e) dvojni komplement: v(x) = -99 (0 , f) posmak udesno za k = 2 mjesta: v(x) = +39 10 (pogrešan rezultat), g) dvojni komplement: v(x) = -9910, h) aritmetički posmak udesno za k = 2 mjesta: v(x) = -2510
Iz primjera posmaka vidimo i to da operacija posmaka uključuje preuređenje svih bitov? u riječi koja se posmiče. Iz toga slijedi da će izvedba sklopova za posmak (nazivat ćemo ga posmačnisklop) biti nešto složenija od sklopova za zbrajanje ili oduzimanje.
S. RIBARIČ - GRAĐA RAČUNALA
247
Posmačni sklop (engl shifter) osnovna je sastavnica na putu podataka koja sudjeluje u logičkim operacijama, ali i u aritmetičkim operacijama (množenje, dijeljenje) i njegova brzina izravno utječe na performansu procesora. Posmačni sklopovi mogu se izvesti dvojako: i) kao sekvencijalni digitalni sklopovi - dvosmjerni posmačni registri (posmak ulijevo, posmak udesno) s paralelnim ulazom; ii) kao kombinacijski sklopovi; Izvedbe posmačnog sklopa na temelju posmačnog registra u načelu se kod računala izbjegavaju zbog male brzine. Naime, za posmak ulijevo ili udesno za svako pojedino bitovno mjesto zahtijeva se jedna perioda signala vremenskog vođenja. Pri izvedbi posmačnog sklopa, kao kritične komponente na putu podataka u procesoru, prednost se daje kombinacijskim sklopovima kod kojih je vrijeme trajanja operacije posmaka neovisno o iznosu posmaka (zajedno ili više bitovnih mjesta). Slika 8.28 prikazuje izvedbu 4-bitnog posmačnog sklopa koji se zasniva na multipleksoru kao kombinacijskoj građevnoj komponenti. Prema stanju upravljačkih ulaza multipleksora H0 - H2 određuje se posmak ulaznog 4-bitnog podataka a3 - a0.Tablica 8.9. prikazuje stanja izlaza iz posmačnog sklopa ovisno o upravljačkim ulazima HQ - H2.
SI. 8.28 Izvedba posmačnog sklopa multipleksorima
Ako si predočimo multipleksor kao prekidač koji može, u našem slučaju, biti u jednom od osam položaja (slika 8.29), ovisno o vrijednosti upravljačkih ulaza H0 - H2 lako ćemo predstaviti način funkcioniranja sklopa. Naime, istodobno je jednak položaj svih četiriju "prekidača" i ulazni signali koji su priključeni upravo na te položaje prekidača prosljeđuju se na izlaz.
248
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
H2
Izlaz iz posmačnog sklopa
1
Nema posmaka: F3 = a3; F2 = a2; F1 = a,; F0 = a0
0
0
0
0
0
1
Posmak udesno za jedno mjesto
0
1
0
Posmak ulijevo za jedno mjesto
0
1
1
Posmak udesno za dva mjesta
1
0
0
Posmak ulijevo za dva mjesta
1
0
1
Posmak udesno za tri mjesta
1
1
0
Posmak ulijevo za tri mjesta
1
1
1
Fo-F 3 = 0
Tablica 8.9. Djelovanje posmačnog sklopa ovisno o upravljačkim ulazima H 0 - H2
1=0
1=0 .2 6
O O o
6
.2 6 6 O O
O
/
^' izlaz F,
O
/
^r izlaz F,
O2 6 6 o o o
3
/ 1r
1=0 9 6A 6i .2
o
izlaz F,
4
o O
O
/
O
^' izlaz F„
SI. 8.29 Način djelovanja kombinacijskog posmačnog sklopa - položaj prekidača odgovara upravljačkoj kombinaciji H2 = 1, H1 = 1, H0 = 0 (posmak ulijevo za tri mjesta)
Slika 8.30 prikazuje načelnu izvedbu 32-bitnog posmačnog sklopa koji se temelji na muL tipleksoru koji ima 64 32-bitna ulaza ijedan 32-bitni izlaz. Osim toga, ima šest upravljačkih ulaza - pet za specifikaciju iznosa posmaka ijedan za određivanje smjera posmaka (ulijevo ili udesno). Ovako izvedeni sklop vrlo je složen, posebno ako se želi izvesti tako da podržava kružni i aritmetički posmak, te se zato koriste praktičnije izvedbe sklopa u više razina. Primjer 8.13. Procesor MC 68000 ima izveden posmačni sklop na temelju multipleksora, ali tako da podržava samo posmake za jedno bitovno mjesto (ulijevo i udesno) u jednoj periodi signala vremenskog vođenja. To je i osnovni razlog zašto su njegove strojne instrukcije posmaka i kružnog posmaka vremenski zahtjevne. One zahtijevaju 8 + 2k perioda signala vremenskog vođenja, gdje je k iznos posmaka (broj bitovnih mjesta). Na primjer, kružni posmak udesno za 23 bitovna mjesta zahtijeva 54 periode signala vremenskog vođenja. Pažnja, umjesto kružnog posmaka udesno za 23 mjesta, možemo izvesti operaciju kružnog posmaka ulijevo za 9 mjesta i dobit ćemo jednak rezultat, ali u vremenu od 26 perioda, ušteda je pritom 28 perioda signala vremenskog vođenja.
S. RIBARIĆ - GRAĐA RAČUNALA
249,
32-bitni procesor MC 68020, nasljednik procesora MC 68000, koristi brzi sklop za posmak ~ bačvasti posmačni sklop (engl. barrel shifter) koji operacije posmaka i kružnog posmaka obavlja u vremenu od 8 - 12 perioda signala vremenskog vođenja neovisno o iznosu posmaka k.
8.3.10 BAČVASTI POSMAČNI SKLOP U arhitekturi 32- i 64-bitnih procesora nalazimo posebne posmačne sklopove koji se nazivaju bačvasti posmačni sklopovi. Njihova je osnovna značajka, kao što smo već spomenuli u Primjeru 8.13., da posmak obavljaju u jednako kratkom vremenu neovisno o iznosu posmaka kf tj. broju bitovnih mjesta za koje se operand posmiče. Slika 8.31 prikazuje jednostavnu strukturnu podlogu za izvedbu bačvastog posmačnog sklopa koja se temelji n a n x n prospojnoj matrici (engl. crossbar) sastavljenoj od n2 sklopova s tri stanja, n je duljina riječi (operanda) koja se posmiče. Podsjetimo se, sklop s tri stanja ponaša se kao sklopka koja ovisno o stanju upravljačkog ulaza "propušta" struju ili "ne propušta" (poglavlje 7. Sklopovska i mikroprogramska izvedba upravljačke jedinice). Ulaz u posmačni sklop je operand - riječ duljine šest bita X = x 5 x 4 x 3 x 2 x 1 x0 a izlaz također 6-bitna riječ Y = y5 y4 y3 y2 y, y 0 .Trobitnim upravljačkim ulazom S = s2 s1 s0 određuje se iznos posmaka. Zapravo, sklop prikazan na slici 8.31 predstavlja sklop za kružni posmak. Na primjer, ako upravljački ulaz S ima vrijednost 2(10) (s2 s1 s0 = 010), onda će se ulaz x5 x4 x3 x2 x, x0 transformirati u izlaz xQ y4, x1 y5, x2 y0, x3 y , x4 y2, x5 y3 (slika 8.31; deblja linija) što odgovara kružnom posmaku X za dva mjesta udesno. Ako se, međutim, želi izvesti posmačna jedinica koja će podržati i ostale operacije posmaka, onda se zahtijevaju dodatni ulazi koji će definirati vrijednost bitova na krajevima posmaknute riječi. Slika 8.32 ilustrira kružni posmak.
250
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
Zahvaljujući pravilnoj strukturi, sklop sa slike 8.31 podesan je za izvedbu u tehnologiji visokog stupnja integracije VLSI.
iznos posmaka
upravljački ulaz S
x - ulaz y - izlaz
SI. 8.31 Crossbar izvedba sklopa za kružni posmak
X
5
X
4
X
3
X
2
X
1
x
o
L+
X
a) prije kružnog posmaka udesno za 2 mjesta
X
o
X
5
X
4
X
3
X
2
i
i
i
i
i
i
y5
y„
y3
y2
y,
y,
b) nakon kružnog posmaka udesno za 2 mjesta SI. 8.32 Ilustracija kružnog posmaka Slika 8.33 prikazuje bačvasti posmačni sklop kao "crnu kutiju" koja podržava logički posamak ulijevo i udesno te kružni posmak ulijevo i udesno.
S. RIBARIĆ - GRAĐA RAČUNALA
S.
a
o
a
l
a
2
S
i
S
o
C
0
C C a
n-1
a
251,
, 2
•
n
a
„+l
a
n+2
a
2n-1
C
B<
n-1
SI. 8.33 Bačvasti posmačni sklop kao "crna kutija"
"Crna kutija" ima dva n-bitna ulaza za podatke: A = a n} an 2 ... a1 a0 i B = a2rvl a2n 2 ... an+1 an, jedan n-bitni izlaz C = c n c n 2 ... c1 c0 te upravljački ulaz S = S S.t... S0. Upravljački ulaz S određuje iznos posmaka OsSsn.Točnije, vrijednostSdefinira broj bitova ulaza B koji će se pojaviti na izlazu C ulančan s dijelom bitova ulaza A. Na primjer, ako je S = 0, tada se na izlazu C pojavljuje slijed bitova jednak slijedu na ulazu A: cn-tt c n-2, ...c,1 c 0 =a n-1,a n-2 a,1 an0. Za S = k\ 0 < k <; n dobiva se (slika 8.34): C
n-1
C
n-2
C
1
C
0 ~~ a n - 1 + k 3 n - 2 + k ' " 3 1 + k
3
0+k
što znači da ulaz B doprinosi izlazu C svojim k najmanje značajnim bitovima (koji su u izlazu C smješteni na k najznačajnijih bitovnih pozicija). ulaz B
ulaz A
a_ , 3 . _ . . . a _a ,a 2n-l 2n-2 n+2 n+1 n
a
, a _a _ . . . n-1 n-2 n-3
a^d.a.a,. 3 2 1 0
izlaz C, za k=3
Ako je S = n, tada je C = B = a2n_, a2n.2 a2rv3... an+1 an. SI. 8.34 Izlaz C iz bačvastog posmačnog sklopa za S = k = 3
Što smo time postigli? Pretpostavimo da je sada A = B, dakle na oba ulaza dovodimo isti slijed bitova. U tom slučaju izlaz C za neku vrijednost S = k 0
252
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
Pretpostavimo sada da je ulaz B = 0 = a2n1 a2n 2 a2n 3... an+1 an = 0000000....0000. Za S = k; 0 < k ^ n dobiva se: 0 0...0 0 a n a n 2... ak, što odgovara logičkom posmaku udesno za k mjesta. Ako postavimo na ulaz A sve nule, a na ulazu B imamo operand a n l a^... a1 a0 i izaberemo S = k, dobit ćemo: ak l ... a 2 a,a 0 00... 0, što odgovara logičkom posmaku za n - k mjesta ulijevo. Relativno jednostavnim preinakama bačvasti posmačni sklop podržat će i aritmetički posmak udesno. ulazB a
, . . . a . a . a . a -
n-1
3 2 10
ulaz A a
,a
, . . . a , a _ a
n-1 n-2
a
3 2 11 0n
izlaz C, za k=3 SI. 8.35 Kružni posmak udesno za k = 3
8.4. ARITMETIČKE OPERACIJE BROJEVIMA S POMIČNIM ZAREZOM Zanimljivo je da su aritmetičke operacije zbrajanja i oduzimanja bj&jeva s pomičnim zarezom složenije od operacija množenja i dijeljenja. Razlog tomu je što se kod množenja i dijeljenja brojeva s pomičnim zarezom operacije s eksponentom i mantisom izvode potpuno odvojeno i neovisno. No pri zbrajanju i oduzimanju brojeva s pomičnim zarezom obavezne su dodatne operacije poravnavanja opera nada i normalizacije rezultata što zahtijeva interakciju između eksponenta i mantise. Primjer 8.14. Ilustrirajmo zbrajanje dvaju brojeva s pomičnim zarezom U X = (-1 )S1 x 2E1 x 1 .F1 i Y = (-1 )S2 x 2 x 1 .F2, pri čemu je X = (-1)° x 2'1 x 1.000 = +2"1 x 1.000 i Y = (-1)1 x 2 2 x 1.110 = - 2 2 x 1.110 1.000 x 2 1 + -1.110 x 2'2 Da bismo mogli zbrojiti ta dva broja, oni moraju biti poravnani, odnosno njihovi eksponenti moraju biti jednaki. Poravnanje se izvodi tako da se mantisa broja s manjom vrijednošću eksponenta (-1.110 x 2~2) posmiče udesno (dijeli s dva), a istodobno se povećava vrijednost njegova eksponenta sve dok eksponenti obaju brojeva ne postanu jednaki: 1.000 x2"* + (-0.111) x 2 1
S. RIBARIĆ - GRAĐA RAČUNALA
253,
Sada kad su eksponenti jednaki možemo mantise zbrojiti: 1.000 X * 1
+ (-0.111) x 2 ° 0. 001 X 2~1 Nakon toga mora se rezultat normalizirati: 1.000 x 2~4 i provjeriti je li se dogodio preljev ili podljev eksponenta. Ako pretpostavimo da se za eksponent koristi notacija sa suviškom 127, onda nema ni preljeva ni podljeva jer je 127 -126. U sljedećem bi koraku trebali zaokružiti normalizirani rezultat. No budući da je rezultat predočen točno sa četiri znamenke, nema potrebe za zaokruživanjem. Ako je dobiveni rezultat izražen većim brojem binarnih znamenaka od broja predviđenih znamenaka za predočenje rezultata (u našem slučaju je to 4), potrebno je "odsjeći" bitove rezultata i zadnju znamenku rezultata zaokružiti. Postoje različite tehnike zaokru^anja, npr. zaokruživanje najbližem broju, zaokruživanje odsijecanjem i pozitivno usmjereno zaokruživanje. Provjerimo jesmo li dobili točan rezultat: X je 0.5(10) i V = - 0.4375(10}, X + Y = 0.0625{10). Naš rezultat je 1.000 x l 4 , odnosno 1/16 = 0.0625. Postupak zbrajanja ili oduzimanja brojeva s pomičnim zarezom možemo sažeti u sljedeće korake: 1. korak: Raspakiraj svaki od operanada na predznak, eksponent i razlomački dio. Obrati pozornost na posebnu vrstu operanada kao što su nula, beskonačno i NaN (Not a Number) - zapis nije broj. 2. korak: Poravnaj dva broja: posmakni mantisu broja koji ima manji eksponent udesno za |E1 - E | mjesta, gdje su E., i = 1,2, vrijednosti eksponenata. 3. korak: Postavi eksponent rezultata Er na vrijednost max(Ei; E2). 4. korak: Ako je riječ o operaciji zbrajanja i ako su predznaci obaju operanada jednaki: S1 = S2, zbroji razlomačke dijelove. Ako je riječ o operaciji oduzimanja i ako je S1 * S2, zbroji razlomačke dijelove. U drugim slučajevima oduzmi razlomačke dijelove. 5. korak: Normaliziraj dobiveni rezultat posmicanjem udesno ili ulijevo i istodobnim povećavanjem (ili smanjivanjem) vrijednosti eksponenta Er. Provjeri je li se dogodio podljev ili preljev vrijednosti eksponenta. Ako je, signaliziraj iznimku. 6. korak: Zaokruži mantisu na odgovarajući broj bitova. Slika 8.36 prikazuje, u skladu s prethodno opisanih šest koraka, pojednostavljenu sklopovsku izvedbu zbrajala (oduzimala) za brojeve s pomičnim zarezom. Operacije množenja i dijeljenja brojeva s pomičnim zarezom ne razlikuju se mnogo od operacija brojeva s čvrstim binarnim zarezom. Množenje dvaju brojeva s pomičnim zarezom izvodi se tako da se eksponenti dvaju operanada zbroje, a njihove mantise pomnože: ((-1 )S1 x2 E1 x 1 .F,) ((-1 ) S2 x 2E2x 1 .F2) = ±2 E1+E2 (1 .F1 x 1 .F2).
254
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
operand X
operand Y
raspakiravanje predznaci S1 S2
eksponenti E1
mantise
E2
zbroji/od uzmi
F1
F2
zamjena mjesta & komplementiranje
V oduzimalo upravljačka jedinica
MUX poravnavanje mantisa
V zbrajalo
normalizacija i zaokruživanje
+/-
i predznak
eksponent
mantisa
pakiranje
izlaz SI. 8.36 Pojednostavljeni prikaz sklopovske izvedbe zbrajala (oduzimala) za brojeve s pomičnim zarezom
Primjer 8.15. Prikažimo primjer množenja brojeva O.5(10) i - O.4375(10) koji su predočeni u notaciji brojeva s pomičnim zarezom: +2A x 1.000 i - 2~2 x 1.110. 1. korak: Zbrojimo eksponente E^ i E2: (-1) + (-2) = -3. Ako želimo prikazati eksponent u notaciji suviškom 127, onda je vrijednost eksponenta (-3) +127 = 124.
S. RIBARIĆ - GRAĐA RAČUNALA
255,
2. korak: Pomnožimo mantise: 1.000 x 1.110 0000 1000 1000 1000 1110000 Produkt je 1.110000 x 2 3 , moramo ga izraziti sa četiri znamenke 1.110 x 2~3. 3. korak: Trebamo provjeriti je !i rezultat normaliziran i utvrditi da se nije dogodio ni preljev, ni podljev eksponenta. Vidimo da je produkt već u normaliziranom obliku i da je 127 ^ -3 > -126, što znači da se nije dogodio ni preljev, ni podljev eksponenta. 4. korak: Zaokruživanje rezultata nije promijenilo rezultat ("odsjekli" smo tri najmanje značajne nule u prikazu rezultata). 5. korak: Budući da se predznaci operanda razlikuju, predznak rezultata je negativan. Dobivamo konačni rezultat: -1.110 x 2 3 . Provjerimo je li dobiveni rezultat točan: (0.5(10}) x (~ 0.4375(10)) = - 0.21875. Pretvorimo dobiveni rezultat -1.110 x 2 3 u dekadski broj: -1.110 x 2 3 ^ - 0.00111 te dobivamo - (2* + 2 A + 2 5 ) = - (0.125 + 0.0625 + 0.03125) = - 0.21875. Dijeljenje brojeva s pomičnim zarezom slično je množenju i odvija se u skladu s izrazom: ((-1 )S1 x 2E1 x 1 .F,) /((-1 )S2 x 2E2 x 1 .F2) = ±2 E1E2 (1 .F1 / 1 .F2). Vidimo da se eksponenti oduzimaju, a mantise dijele kao i u slučaju brojeva predočenih čvrstim binarnim zarezom. I ovdje se rezultat dijeljenja mantisa mora normalizirati i zaokružiti. Jednako tako, treba ispitati je li se dogodio preljev (eksponent je prevelik) ili podljev (eksponent je premali). Slika 8.37 daje pojednostavljeni prikaz sklopovske jedinice za množenje i dijeljenje brojeva s pomičnim zarezom. Vidimo da je sklopovlje puno jednostavnije od onog za zbrajanje i oduzimanje brojeva s pomičnim zarezom.
256
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
operand X
operand Y
raspakiravanje predznaci
mantise
eksponenti
množenje/dijeljenje
V +/-
množi ili dijeli
upravljačka jedinica
normalizacija i zaokruživanje
"V +/-
predznak
eksponent
mantisa pakiranje
•
izlaz
SI. 8.37 Pojednostavljeni prikaz sklopovske jedinice za množenje i dijeljenje brojeva s pomičnim zarezom
8.5. OBLIKOVANJE JEDNOSTAVNE ARITMETIČKOLOGIČKE JEDINICE - ANALIZA SLUČAJA Aritmetičko-logička jedinica (ALU) je višefunkcijski digitalni sklop. Ona izvodi aritmetičke i logičke operacije, ali se vrlo često upotrebljava i za računanje efektivne memorijske adrese izvorišta operanada ili odredišta rezultata, posebice ako procesor ima veliki broj načina adresiranja, od kojih su neki vrlo složeni. U ovom ćemo se potpoglavlju upoznati prvo s jednim pristupom oblikovanju jednostavne aritmetičko-logičke jedinice, točnije njezinog dijela koji izravno podržava osnovne aritmetičke i logičke operacije, a nakon toga tim sklopovima pridružiti posmačni sklop i sklopove za generiranje zastavica (Z, V, N i C).
S. RIBARIČ - GRAĐA RAČUNALA
i
257
_i a)
7
b) SI. 8.38 /-ti stupanj ALU a) i povezivanje stupnjeva u kaskadu b)
Jednostavnu aritmetičko-logičku jedinicu možemo promatrati kao sklop koji ima pravilnu strukturu koja se sastoji od identičnih stupnjeva povezanih u kaskadu. Svaki je stupanj odgovoran za aritmetičke ili logičke operacije najednom bitu operanda.To znači da će se jednostavna aritmetičko-logička jedinica koja se koristi n-bitnim (cjelobrojnim) operandima sastojati od n takvih stupnjeva. Svaki se od njih u funkcijskom smislu može prikazati kao daje sastavljen od aritmetičke i logičke sekcije (slika 8.38 a)). Povezivanje stupnjeva u kaskadu ostvaruje se pomoću linija bita prijenosa C. i Cj+1 (slika 8.38 b)). Ulazi a. i b.t su ulazi bitova operanada u /-ti stupanj, a S^ S1 i S2 su upravljački ulazi koji se upotrebljavaju za izbor različitih aritmetičkih i logičkih operacija. Multipleksor na izlazu iz /-tog stupnja na temelju stanja upravljačkog signala S2 prosljeđuje rezultat aritmetičke ili logičke operacije na izlaz Fr Podjela stupnja aritmetičko-logičke jedinice na aritmetičku i logičku sekciju samo je funkcionalna jer se pri oblikovanju jednostavne ALU koristi sljedeći pristup:
258
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
i) prvo se oblikuje sklopovlje aritmetičke sekcije neovisno o logičkoj sekciji; ii) zatim se određuju logičke operacije koje se mogu izvesti sklopovima iz aritmetičke sekcije; iii) izvode se preinake na sklopovima da bi se mogle izvoditi sve željene logičke operacije. Zahvaljujući takvom pristupu oblikovanju ALU smanjuje se složenost i broj sklopova u svakom stupnju ALU.
8.5.1. ARITMETIČKA SEKCIJA Osnovna građevna sastavnica aritmetičke sekcije jednog stupnja ALU je potpuno zbrajalo. Povezivanjem n stupnjeva ALU jedinice u kaskadu dobiva se paralelno zbrajalo koje istodobno zbraja dva operanda duljine n bitova. Već znamo da se izlazi iz potpunog zbrajala (jednog stupnja paralelnog zbrajala) mogu opisati Booleovim jednadžbama: Fi-ci©(x.eyi) ci+1 = C. • (x. © y.) + x. • y. Željeli bismo da jednostavna ALU ovisno o kombinaciji na njezinim ulazima (n bitni operandi X i Y, bit prijenosa u najniži stupanj ALU Cjn i stanja upravljačkih signala S^ S1 i S^ izvodi osam sljedećih operacija koje su prikazane u tablici 8.10. -Jilifev
izlaz F
Ulazi Y
X
Y
0
Zbrajanje: F = X + Y
X
Y
1
Zbrajanje s bitom prijenosa: F = X + Y + 1
X
Jedinični komplement:?
0
F= X+ Y
X
Y
1
Oduzimanje: F = X + / + 1
X
0
0
Prijenos: F = X
X
0
1
Inkrementiranje: F = X +1
X
Sve jedinice: 111...111
0
Dekrementiranje: F = X -1
X
Sve jedinice: 111...111
1
Prijenos F = X
Tablica 8.10. Osam osnovnih funkcija aritmetičke sekcije ALU
Iz tablice 8.10. vidimo da smo prilagodbom operanda na ulazu Y i izborom vrijednosti bita prijenosa u najniži stupanj ALU Cjn, ostvarili, osim zbrajanja, oduzimanje, inkrementiranje operanda X, dekrementiranje operanda X, zbrajanje operanda X i jediničnog komplementa operanda Y te prijenos, odnosno prosljeđivanje operanda X s ulaza na izlaz. Da bi se paralelnim zbrajalom, sastavljenim od n potpunih zbrajala, moglo izvoditi navedenih osam operacija, potrebni su dodatni logički sklopovi koji na ulazu Y priređuju operand. Slika 8.39 a) prikazuje sklop za priređivanje bita operanda na ulazu Y kao crnu kutiju. Na primjer, da bi se izvela operacija oduzimanja, operand na ulazu Y mora se pretvoriti u jedinični komplement i, još uz to, bit prijenosa u najmanje značajan stupanj potpunog zbrajala treba biti
S. RIBARIČ - GRAĐA RAČUNALA
259
Cjn = 1:F = X + V + 1 . Pomoću upravljačkih signala S0 i S, priređuju se bitovi operanada na ulazu Y u skladu s tablicom istinitosti (tablica 8.11).
S, 0 0 1 1
S0 0 1 0 1
Ulaz: bit operanda
Izlaz iz sklopa za priređivanje y{
b.i b.i
0 bi
b.1
bi
b.1
1
Tablica 8.11. Priređivanje bita operanda na ulazu Y
Slika 8.39 b) prikazuje izvedbu sklopa za priređivanje bita operanda y.. Sklop za priređivanje bita operanda moramo pridružiti svakom potpunom zbrajalu u svakom stupnju aritmetičke sekcije. Na slici 8.40 prikazana je aritmetička sekcija ALU.
bit operanda
sklop za priređivanje bita operanda
>y,
upravljački ulazi a) bit operanda
b) SI. 8.39 Sklop za priređivanje bita operanda y. kao "crna kutija" a) i sklop za priređivanje bita operanda b)
Na slici 8.40 vidimo da najznačajniji stupanj aritmetičke sekcije ALU ((n - 1)-ti stupanj) ima osim izlaza Fn_1 i izlaz Cout = Cn.To je bit prijenosa koji ima posebno značenje i ALU ga upućuje u zastavicu C statusnog registra. S ovom smo fazom oblikovanja završili predviđene aktivnosti definirane u koraku (i) - oblikovali smo sklopove aritmetičke sekcije neovisno o logičkoj sekciji.
260
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
1. stupanj aritmetičke sekcije
n 1
~
n-ti stupanj aritmetičke sekcije
F
SI. 8.40 Aritmetička sekcija ALU
8.5.2. LOGIČKA SEKCIJA Logičke operacije rukuju bitovima operanada izdvojeno i svaki se bit operanda promatra kao logička, binarna varijabla. Logička sekcija treba podržati četiri osnovne logičke operacije I, NE, ISKLJUČIVO ILI i ILI. U skladu s pristupom oblikovanju ALU, radi ograničenja površine na silicijskom čipu i potroška snage, tražimo mogućnost upotrebe logičkih sklopova u aritmetičkoj sekciji za izvedbu logičkih operacija (korak (ii)). Na taj se način aritmetička i logička sekcija pojedinog stupnja stapaju u jednu sekciju. Upravljački signal S2 upotrijebit ćemo za izbor logičkih (S2 = 1) ili aritmetičkih operacija (S2 = 0).
S. RIBARIĆ - GRAĐA RAČUNALA
261,
8.5.2.1. LOGIČKA OPERACIJA ISKLJUČIVO ILI Ako pretpostavimo da je ulazni bit prijenosa C. u svakom stupnju 0, onda potpuno zbrajalo s funkcijom F( = C. © (x. © y.) pri C. = 0 daje F. = 0 © (x. © y.) = x. © y. i dobili smo logičku funkciju ISKLJUČIVO ILI jer vrijedi da je općenito 0 © x = x. Kako možemo osigurati da bitovi prijenosa na ulazu u svaki stupanj ALU budu 0? Jednostavno - tako da na ulaz C. svakog stupnja dovedemo signal koji smo dobili kao logičko IS2 i izlaza koji odgovara bitu prijenosa generiranog u prethodnom stupnju /-1. (slika 8.41). Budući da je S2 = 1 za logičke operacije, jasno je da će logička kombinacija S2- C. osigurati da ulazni bit prijenosa u svaki stupanj bude 0. Takvim smo sklopovskim zahvatom potkrijepili i tvrdnju da logičke operacije rukuju bitovima operanada izdvojeno i da dobiveni rezultat operacije u /-1 nema utjecaj na ishod logičke operacije u /-tom stupnju. U skladu s našom izvedbom vrijedi da će vrijednost upravljačkih bitova S2 = 1,S1 = 0iSQ = 1 odrediti logičku operaciju ISKLJUČIVO ILI. Naime, kombinacija S1 = 0 i S0 = 1 (tablica 8.11) određuje da će na ulazu Y biti neizmijenjene vrijednosti operanda B = b f r l b ^ —b1 b 0 tako daje izlaz iz svakog i-tog stupnja jednak a. © b r
SI. 8.41 Prilagodba bita prijenosa C za logičke operacije
262
8.5.2.2.
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
L O G I Č K A OPERACIJA NE Što će se dogoditi ako su vrijednosti upravljačkih signala S2 = 1, S1 = 1 i S0 = 1 ? Kombinacija S = 1 i SQ = 1 (tablica 8.11) određuje da će sklop za priređivanje bita operanda y bit tako priređen da je jednak 1. Uz uvjet da je C. = 0 (to je postignuto sa S2 = 1), izlaz iz stupnja / F je: F. = C. © (a. © y), pri čemu je C. = 0 i y. = 1 ._Dobivamo: F. = 0 © (a. © 1), odnosno F. = ~af jer iz Booleove algebre znamo da je (x. © 1) = x.. Kombinacija S2 = 1, S1 = 1 i SQ = 1 određuje logičku operaciju NE.
8.5.2.3.
L O G I Č K A O P E R A C I J A ILI Za realizaciju logičke funkcije ILI poslužit ćemo se kombinacijom upravljačkih signala S2 = 1, Sj = 0 i S0 = 0. Stanja S^ = 0 i S0 = 0 (tablica 8.11) osigurat će daje priređeni bit operanda na ulazu y. jednak 0, tako da će se, uz C = 0 i y. = 0 izvesti operacija prijenosa bita operanda a; na izlaz F.. Ako sada izvedemo sklopovsku preinaku - dodavanjem dvoulaznog sklopa logičko ILI - na ulazu x. u svaki stupanj tako da, uz uvjete S2 = 1, S1 = 0 i S0 = 0, izvedemo operaciju a. + b. (+ ovdje označava logičku operaciju ILI), onda ćemo prosljeđivanjem te vrijednosti kroz svaki stupanj potpunog zbrajala dobiti logičku funkciju ILI dvaju n-bitnih operanada. Slika 8.42 prikazuje potrebnu sklopovsku preinaku da bi se realizirala logička operacija ILI. C=0
a
0
i
+ b
i
w X '
->
/ FA
F.=a.+b. i i i w
Vi
Si. 8.42 Sklopovska preinaka potrebna da bi se realizirala logička operacija ILI
8.5.2.4.
LOGIČKA OPERACIJA I Logičku operaciju I realizirat ćemo uporabom kombinacije upravljačkih signala S2 = 1, S, = 1 i S0 = 0. Što ćemo dobiti na izlazu F.? Pogledajmo: F{ = C. © (x. © y.) uz C = 0 na ulazu za drugi operand ,tj. y., (zahvaljujući tome stoje S1 = 1 i S0 = 0) imamo bf dobit ćemo: Fj = a.© = (a. • b.) + (a • 5) Oni koji se još sjećaju digitalne elektronike i Booleove algebre, prepoznat će potonju logičku funkciju kao funkciju ekvivalencije. Nju nažalost nismo predvidjeli kao logičku operaciju u ALU. Upotrijebit ćemo je, međutim, za izvedbu logičke operacije I. Iz izraza za logičku ekvivalenciju vidimo da je njezin prvi član (a. • b), zapravo, logička operacija koju želimo. Kako ukloniti drugi član u izrazu? Poslužit ćemo se jednim trikom - uvest ćemo pomoćnu logičku varijablu K. koju ćemo na ulazu za prvi operand u svako potpuno zbrajalo upotrijebiti za operaciju: K.i + a, i
S. RIBARIĆ - GRAĐA RAČUNALA
263,
Sada izraz za F. glasi: F.i = A(K. + a.) © b. =jK+a) •b +1 (K+a.) • b. =Ž Č. • a • F +i K.i • b. + ia.i• b. i i' i i r / i i i i i Što ćemo dobiti ako je K. = bi Dobiva se: F. = b. - a. - b. + b. • b. + a. • b.. Vidimo da su prvi i drugi član izraza jednaki nuli i da je Fj = a. • b . Dobili smo logičku operaciju I. Slika 8.43 prikazuje preinaku i-tog stupnja jednostavne ALU jedinice koja je potrebna za realizaciju logičke I operacije.
SI. 8.43 Preinaka /'-tog stupnja jednostavne ALU da bi se dobila logička operacija I Slika 8.44 prikazuje konačnu izvedbu /-tog stupnja jednostavne ALU.
SI. 8.44 Konačna izvedba /-tog stupnja jednostavne ALU
264
8. POGLAVLJE: AR1TMETIČKO-LOGICKA JEDINICA
Ako pridružimo oblikovanim sklopovima ALU posmačni sklop, na primjer onaj oblikovan pomoću multipleksora (slika 8.28), sklopove za otkrivanje preljeva (V = C n © Cn1) i nule (Z = F ?+Fn2+... Fj+ FJ dobivamo potpunu višefunkcijsku n-bitnu ALU koja izvodi aritmetičke operacije (zbrajanje, oduzimanje, inkrementiranje, dekrementiranje), logičke operacije (I, ILI, NE, ISKLJUČIVO ILI), operacije posmaka (posmakza jedno ili dva mjesta ulijevo ili udesno) te generira zastavice Z (nule), V (preljeva), C prijenosa (C = C^) i zastavicu N (indikatora kada je rezultat aritmetičke ili logičke operacije ili operacije posmaka takav daje najznačajniji njegov bit jednak 1). Slika 8.45 prikazuje višefunkcijsku ALU, na primjer 16-bitnu, i upravljačke signale kojima se određuju aritmetičke i logičke operacije te operacije posmaka. upravljački bitovi (izbor operacije posmaka)
prema statusnom registru SL 8.45 Jednostavna višefunkcijska ALU
S. RIBARIČ - GRAĐA RAČUNALA
265
9. POGLAVLJE
MEMORIJSKI SUSTAV 9.1. UVOD Memorija ili spremnik (engl. storage) je vrlo važna sastavnica računarskog sustava. U skladu s von Neumannovim modelom računala, instrukcije, podaci, međurezultati i rezultati pohranjuju se u memoriji i pozivaju iz memorije. Vrijeme koje se troši na komunikaciji između procesora i memorijske jedinice u velikoj mjeri utječe na performansu računarskog sustava. Procesor bi trebao imati brzi i neprekidni pristup memorijskoj jedinici vrlo velikog kapaciteta gdje su pohranjeni programi i podaci i time omogućiti izvođenje programa brzinom koja je uvjetovana samo brzinom sklopova u procesoru. Nažalost, memorija koja bi radila jednakom brzinom kao i procesor i imala kapacitet nekoliko desetaka ili stotina giga bajtova (GB; giga = 230) znatno bi povećala cijenu računarskog sustava i pogoršala odnos njegove performanse i cijene. Odnos između brzine procesora i memorije možemo izraziti pomoću latentnosti (engl. latency) ili vremena odgovora koje je općenito definirano kao vrijeme koje protekne između započinjanja i završetka nekog događaja. Tako, na primjer, procesor Intel Pentium 4 (2001. godina) ima latentnost 15 ns, dok je latentnost brzog memorijskog modula DDR SDRAM (Double Data Rate Synchronous DRAM) 52 ns, dakle više od tri puta veća. Pod latentnosti memorije podrazumijeva se vrijeme koje protekne između zahtjeva što ga procesor upućuje memorijskoj jedinici i primitka podatka iz nje. Drugi problem koji susrećemo u memorijskom sustavu jest kapacitet memorije. Sve složeniji operacijski sustavi i uporaba računarskog sustava za rješavanje sve složenijih problema, uporaba prijateljskih grafički orijentiranih korisničkih sučelja, napredniji oblici interakcije čovjeka i računala (glasom - sinteza i raspoznavanje govora, pokretom - raspoznavanje gestikulacija, emocijama - raspoznavanje emocija korisnika), multimedijske aplikacije i si., zahtijevaju velike kapacitete memorijskih jedinica koji se mjere desecima ili više stotina GB. Sve to pogoršava odnos performanse i cijene sustava. Naime, memorijski modul kapaciteta od nekoliko desetaka ili stotina GB s latentnosti 0.25 ns bio bi vrlo skup. Problem latentnosti i kapaciteta memorije rješava se upotrebom memorijske hijerarhije. Memorijsku hijerarhiju u računarskom sustavu čine različite memorijske jedinice koje se razlikuju po latentnosti, kapacitetu i cijeni.
9.2. MEMORIJSKA HIJERARHIJA Na temelju latentnosti (umjesto latentnosti možemo govoriti o brzini memorije, odnosno vremenu pristupa (engl. access time)), kapaciteta i cijene memorije u računarskom sustavu
^ 266
9. POGLAVLJE: MEMORIJSKI SUSTAV
mogu se identificirati četiri glavne hijerarhijske razine (slika 9.1): i) registri procesora ili skup registara opće namjene; ii) priručna memorija (engl. cache) razine 1 (izvedena na samom procesorskom čipu), razine 2 (izvedena na samom procesorskom čipu) i razine 3 (opcija) realizirana na samom procesorskom čipu ili, pak, izvan procesorskog čipa; iii) glavna ili radna memorija; iv) sekundarna memorija.
SI. 9.1 Memorijska hijerarhija
Registri procesora obično su organizirani kao male ekstremno brze, više pri stup ne (npr. jednoulazne i dvoizlazne) memorijske jedinice ostvarene na procesorskom čipu. Imaju brzinu istog reda veličine kao i sklopovi procesora, a kapacitet im se kreće od npr. 16 ili 32 pa sve do nekoliko stotina i više riječi. Registri procesora, organizirani kao višepristupna memorijska jedinica oblikuju skup registara opće namjene (engl. general-purpose register fiie) koji služi za privremeno pohranjivanje operanada, međurezultata i rezultata. Slika 9.2 prikazuje izvedbu skupa registara opće namjene koji ima jedna ulazna vrata (upisna vrata; engl. vvriteport) i dvoja izlazna vrata za čitanje (engl. readport). Takva izvedba (vidi poglavlje 7J omogućuje da se istodobno dohvate (čitaju) sadržaji dvaju registara te da se novi sadržaj upisuje u neki od registara iz skupa. Ulazima broj registra 1 i broj registra 2 (s\\ka 9.2) izabiru se dva registra koji se istodobno čitaju, a ulaz broj registra služi za izbor registra koji sudjeluje u operaciji pisanja. Potrebno je napomenuti da je, ako se želi omogućiti u istoj periodi signala vremenskog vođenja čitanje i pisanje u isti registar, potrebno dodatno sklopovlje. Priručna memorija (engl. cache) je većeg kapaciteta u usporedbi sa skupom registara opće namjene i nije nužno sporija. Ona je korisniku "nevidljiva" ili "skrivena" (riječ cache je francuskog podrijetla i označava skrivanje ili skrovito mjesto za pohranjivanje), a logički je smještena između skupa registara opće namjene, odnosno registara procesora i glavne memorije. Fizički priručna memorija može biti smještena na samom procesorskom čipu (obično su to priručna memorija razine 1 (engl. cache level 1) i razine 2 dok se priručna memorija razine 3 obično ostvaruje izvan procesorskog čipa. Zahvaljujući razvoju VLSI tehnologije moguće je ostvariti sve tri razine priručne memorije na samom procesorskom čipu. Funkcionalno, priručna memorija može biti izvedena kao memorija za pohranjivanje instrukcija i podataka (tzv. i&D cache; Instruction&Data cache) ili kao izdvojena instrukcijska priručna memorija (engl. I cache) te kao izdvojena priručna memorija podataka (engL
S. RIBARIĆ - GRAĐA RAČUNALA
267,
D cache). Kapacitet priručne memorije kreće se od nekoliko desetaka ili stotina kilo bajta (KB; kilo = 210) pa sve do nekoliko mega bajtova (MB; mega = 220). Napomenimo da je priručna memorija vrlo važna arhitektonska značajke procesora i računala te da ona značajno doprinosi povećanju performanse procesora. 'ću
^
'c
čT
<-
SI. 9.2 Izvedba skupa registara opće namjene s jednim upisnim vratima i s dvojim izlaznim vratima
^ 268
9. POGLAVLJE: MEMORIJSKI SUSTAV
Glavno ili rodna memorija (naziva se i primarna memorija) prilično je brza memorija velikog kapaciteta u kojoj se pohranjuju aktivni programi i podaci. Bez obzira što je glavna memorija realizirana poluvodičkom tehnologijom sličnoj onoj koja se rabi za izvedbu skupa registara opće namjene ili priručne memorije, ona je zbog velikog kapaciteta (nekoliko desetaka ili stotina GB) i zbog toga što je izvedena tako da je fizički izdvojena od procesora sporija od prethodnih dvaju memorija u hijerarhiji, i to od dva do pet i više puta. Sekundarna memorija vrlo je velikog kapaciteta (reda nekoliko stotina GB ili nekoliko tera bajtova (TB; tera = 240) ili čak stotina TB ali puno sporija u odnosu na glavnu memoriju. Vrijeme pristupa za memorijske jedinice u toj razini hijerarhije mjeri se ms (milisekunda = 10~3 s). Tipični su predstavnici ove vrste memorija magnetski diskovi, magnetske vrpce i optički diskovi (CD-ROM - compact disk read-only memory i DVD-ROM - digital versatile disk read-only memory). Da bismo dobili osjećaj za odnose između kapaciteta i brzine memorija u pojedinim hijerarhijskim razinama, poslužit ćemo se podacima koji su bili tipični u 2006. godini (tablica 9.1.). Razina
1
2
3
4
Vrsta memorije
Registri ili skup registara
Priručna memorija
Glavna ili radna memorija
Sekundarna memorija (jedinica diska)
Kapacitet
< 1 KB
< 16MB
< 512 GB
> T (tera) B
Tehnologija
Višeulaznoizlazna memorija CMOS
Na procesorskom čipu ili izvan procesorskog čipa realizirana memorija CMOS SRAM
CMOS DRAM
Magnetski disk
Vrijeme pristupa (ns)
0.25 - 0.5
0.5 - 25
50 - 250
5 000 000
Opaska: oznaka B označava bajt Tablica 9.1. Tipične vrijednosti vremena pristupa i kapaciteta memorije za četiri memorijske razine.
Spomenuli smo daje i cijena jedan od faktora koji definira odnose u memorijskoj hijerarhiji. Ona se obično izražava po jedinici kapaciteta - na primjer, tipična cijena po 1 MB pojedine vrste memorije iznosi za priručnu memoriju na procesorskom čipu između 5 i 100 $, za priručnu memoriju ostvarenu izvan procesorskog čipa 1 - 100$, glavnu memoriju DRAM 0.1 $ i za jedinicu diska 0.001 $. Ovdje treba naglasiti da cijena poluvodičke memorije (hijerarhijske razine i) - iii)) jako varira i da više ovisi o ekonomskim faktorima i količini, odnosne obujmu proizvodnje, nego o stvarnoj cijeni tehnološke proizvodnje.
S. RIBARIĆ - GRAĐA RAČUNALA
269,
9.3. OSNOVNE ORGANIZACIJSKE I TEHNOLOŠKE ZNAČAJKE MEMORIJSKOG SUSTAVA Složenost memorijskog sustava ogleda se u organizacijskoj i tehnološkoj različitosti memorijskih komponenti koje su sastavnice četiriju memorijskih razina. Jedna od značajki je mjesto u računarskom sustavu na kojem se nalazi određena memorijska komponenta. Skup registara opće namjene obično se klasificira u tzv. lokalnu memoriju, odnosno memoriju koja je lokalno dodijeljena procesoru i nalazi se na procesorskom čipu. Priručna memorija razine 1 (u nekim izvedbama razine 2 i 3) također je smještena na procesorskom čipu. Priručne memorije razine 3 te glavna memorija ostvarene su izvan procesorskog čipa, ali se svrstavaju u internu memoriju računarskog sustava, za razliku od sekundarne memorije koja se klasificira kao eksterna, tj. vanjska memorija računarskog sustava. Razlog tomu je što se sekundarna memorija sastoji od perifernih uređaja (npr. jedinice diska ili vrpce) kojima procesor pristupa posredno preko ulazno-izlaznog sučelja. Osnovna značajka memorije u pojedinoj razini jest njezin kapacitet On se za internu memoriju izražava brojem bajtova ili riječi. Uobičajene duljine riječi izražene su u obliku 2j broja bitova (i ;> 3 je cijeli broj), tako da govorimo o riječima duljine 8, 16, 32, 64 ili 128 bita. Kapacitet vanjske memorije obično se izražava u bajtovima (na primjer, kapacitet DVD ROM-a je 4.7 GB). Jedna od značajki je i jedinica prijenosa (engl. unit transfer) koja je za internu memoriju jednaka širini sabirnice podataka. Obično širina (broj linija ili bitova) sabirnice podataka odgovara duljini riječi, ali to ne mora biti uvijek tako. Naime, sabirnica može biti vremenski multipleksirana tako da u dva ili više navrata prenosi dijelove jedne riječi. Jedinica prijenosa za vanjsku memoriju obično je blok koji se sastoji od više bajtova, odnosno riječi. Jedna od najvažnijih značajki memorije u svakoj od razina jest performansa. Ona se izražava trima parametrima: vremenom pristupa (engl. access time ili read access time), vremenom memorijske periode (engl. memory cycle time ili cycle time) i brzinom prijenosa podataka (engl. data-transfer rate ili memory bandwidth). Vrijeme pristupa memoriji obično se definira kao vrijeme koje protekne od trenutka kada memorija zaprimi zahtjev za čitanje nekog podatka do trenutka kada taj podatak postane raspoloživ na izlaznim priključcima memorije. Ovo se vrijeme sastoji od vremena koje je potrebno za lociranje zahtijevane memorijske ćelije (ili više njih) u memorijskom polju i vremena potrebnog da ti podaci postanu raspoloživi i preneseni na izlaze memorijske jedinice. Dogovorno se za vrijeme pristupa uzima vrijeme potrebno za čitanje sadržaja memorijske lokacije jer neke memorije imaju različita vremena pristupa za čitanje (engl. read access time) i pisanje (engl. write access time). Vrijeme memorijske periode koristi se za neke vrste memorija kod kojih se novi pristup ne može započeti prije negoli se ne obnovi ili osvježi sadržaj memorijske lokacije kojoj se prethodno pristupilo. U tom slučaju, minimalno vrijeme koje treba proteći između dva slijedna pristupa veće je od vremena pristupa i naziva se vrijeme memorijske periode. Maksimalna količina informacije koja se može prenijeti u jedinici vremena između memorije i ostalih komponenti računarskog sustava (npr. procesora ili DMA upravljačkog sklopa) naziva se brzina prijenosa ili memorijska pojasna širina i izražava se brojem bitova ili riječi u sekundi. Ona se može izraziti kao omjer:
^ 270
9. POGLAVLJE: MEMORIJSKI SUSTAV
gdje je w broj bitova koji se može istodobno prenijeti, a t M je vrijeme memorijske periode. Za slučaj kada je vrijeme memorijske periode jednako vremenu pristupa t M = t , tada je brzina prijenosa jednaka w / tA. Iznimno važna organizacijska značajka memorije jest način pristupa podacima. Ako se podacima može pristupiti u bilo kojem redoslijedu i ako je vrijeme pristupa jednako i neovisno o lokacijama kojima se pristupa, tad govorimo o memoriji s izravnim pristupom (engl. random access memory). (Opaska: u literaturi na hrvatskom jeziku može se naići i na naziv "memorija sa slučajnim pristupom" što je posljedica prevođenja izraza "random access" međutim, nije riječ o slučajnom pristupu jer je pristup memorijskoj lokaciji određen adresom.) Memorije s izravnim pristupom označavaju se kraticom RAM (Random Access Memory) i većina poluvodičkih memorija realiziranih u tehnologiji LSI/VLSI jesu tog tipa. Memorije kod kojih se memorijskim lokacijama može pristupiti samo unaprijed određenim slijedom i kod kojih vrijeme pristupa ovisi o mjestu memorijske lokacije na kojoj je podatak pohranjen nazivaju se memorije sa sekvencijalnim pristupom (engl. seriai-access memory ili sequential access memory). Memorije tog tipa su magnetski diskovi i vrpce te optičke memorije npr. CD-ROM ili DVD-ROM. U podrobnijoj klasifikaciji tipova memorije našli bismo i asocijativne memorije koje su također memorije s izravnim pristupom, ali kojima se pristupa ne na temelju adrese memorijske lokacije već na temelju njezina sadržaja ili dijela sadržaja, ili nekog svojstva podatka. Asocijativne su memorije tako organizirane da istodobno daju sve sadržaje memorijskih lokacija koje se podudaraju s upitom (npr. sadržajem, dijelom sadržaja ili svojstvom). Prema metodi pohranjivanja podataka, odnosno upisa podataka, memorije dijelimo na one koje su permanentne, što podrazumijeva da se jednom pohranjena informacija ne može lako i brzo promijeniti tijekom neposrednog korištenja (engl. on-line) u računarskom sustavu. Takve se memorije nazivaju ispisne memorije odnosno za njih se koristi udomaćena kratica ROM {Read-Only Memory). Zatim ih dijelimo na ispisne memorije čiji se sadržaj može promijeniti posredno (engl. off-line) obično izvan računarskog sustava - one se nazivaju program i rij ive memorije (npr. PRO M - Programmable ROM, EP ROM - Erasable Programmable ROM, EEPROM - Electrically Erasable Programmable ROM i si.). U ispisne memorije čiji se sadržaj može posredno mijenjati svrstava se i programirljivi CD koji se obično označava kao CD-R disk (CD - recordable). Memorije koje dopuštaju laku i neposrednu promjenu sadržaja (on-line) od strane procesora tijekom izvođenja programa nazivaju se upisno-ispisne memorije (engl. read-write memory). Budući da su upisno-ispisne memorije uobičajene u računarskom sustavu, ne koristi se nikakav pridjev uz njih jer se, kada se kaže memorija, misli upravo na tu vrstu memorije. Prema tehnologiji koja je osnova za tehničku izvedbu memorije razlikujemo poluvodičke memorije koje su ostvarene u LSI i VLSI tehnologiji, one realizirane na magnetskim medijima te one koje koriste optičke medije za pohranu podataka. Postoje i izvedbe sekundarnih memorija koje kombiniraju magnetski medij za pohranu i optičku tehnologiju za čitanje (engl. magneto-optical disk memory). Vrlo važna fizička značajka memorije je izbrisivost (engl. volatile), odnosno neizbrisivost (engl. non-volatile). Značajka izbrisivih memorija je da se pohranjeni sadržaji gube (brišu) prestankom napajanja memorijskog modula. Većina poluvodičkih tipova memorija izbri-
S. RIBARIĆ - GRAĐA RAČUNALA
271,
siva je iako postoje i poluvodičke memorije koje su neizbrisive kao što su EPROM (Erasable Programmable Read-Only Memory) i tzv. flash memorije. U neizbrisivoj memoriji ostaju sačuvani podaci i nakon što se isključi napajanje. Memorije koje se temelje na magnetskim ili optičkim medijima svrstavaju se u neizbrisive memorije. Osim već spomenutih poluvodičkih neizbrisivih memorija spomenimo i mask-programmedROM (Read-Only Memory) te porodice poluvodičkih memorija kao što su PROM (Programmable ROM) i EEPROM (Electriallly Erasable Programmable ROM). Flash memorija je poluvodička neizbrisiva memorija kapaciteta od 4 do 256 GB, od 100 do 1000 puta brža od magnetske diskovne memorije, manja od nje i otpornija na udarce ili trešnju (engl. shock resistant). No ona je za faktor 2 do 40 skuplja od diskovne memorije, ali još uvijek do 10 puta jeftinija od dinamičke RAM. Flash memorija koristi u izvedbi USB memorijskih štapića (engl. memory stick) ali i u mobilnim uređajima kao što su mobiteli, MP3"playeri", digitalne kamere i fotoaparati i si. Slika 9.3 prikazuje tipičnu memorijsku hijerarhiju u računarskom sustavu s okvirnim vrijednostima nekih organizacijskih i tehnoloških značajki. kapacitet mali
brzina
žlOOOB
< Ins
A velika
512KB - - MB 0.5-5ns
-MB--GB
500 GB
5 -15ns
< 10 ms
< 100 ms >TB
< 100 s veliki
mala
SI. 9.3 Simbolički prikaz memorijske hijerarhije u računarskom sustavu s nekim okvirnim vrijednostima organizacijskih i tehnoloških značajki
9.4. GLAVNA ILI RADNA MEMORIJA U skladu s von Neumannovim modelom računala sljedovi instrukcija (programi) i podaci, oboje svedeni na binarni kod, pohranjuju se u jednakom obliku i na jednak način u memorijskoj jedinici. Ovdje je potrebno razlikovati programe koji se upravo izvršavaju i njima pridružene podatke od ostalih programa (i pridruženih podataka) čije izvođenje nije
^ 272
9. POGLAVLJE: MEMORIJSKI SUSTAV
u tijeku. Zahvaljujući postojanju memorijske hijerarhije glavna ili radna memorija (često se naziva i primarna memorija; engl. main memory, primary memory) sadržava programe i njima pridružene podatke čije je izvođenje upravo u tijeku, dok su trenutno neaktivni programi pohranjeni u sekundarnoj memoriji. Obično se za te neaktivne programe kaže da "čekaju" između dva izvođenja u sekundarnoj memoriji da bi se razlikovali od programa koji su pohranjeni na neizbrisivim magnetskim ili optičkim medijima koji nisu sastavni dio računarskog sustava, ali se po potrebi intervencijom operatera mogu uključiti u sustav (u von Neumannovom računalu tzv. neaktivna memorija (engl. dead store)). Potrebno je napomenuti da bez obzira na postojanje memorijske hijerarhije u računarskom sustavu, npr. skupa registara opće namjene, priručnih memorija razine 1,2 i 3, za procesor je mjerodavna jedino slika programa u napredovanju koja se odražava u sadržaju giavne memorije. Za izgradnju glavne memorije upotrebljavaju se poluvodičke LSI/VLSI memorije s izravnim pristupom. S obzirom na osnovnu funkciju glavne memorije većina memorijskih modula, odnosno golema većina od ukupnog kapaciteta glavne memorije ostvarena je uporabom upisno-ispisne memorije s izravnim pristupom (RAM). Samo mali dio memorijskog prostora može zauzimati ispisna poluvodička memorija (ROM), i to za pohranu dijelova operacijskog sustava, biblioteke potprograma koji se vrlo učestalo rabe, funkcijskih tablica te konstanti. Memorijski čipovi s izravnim pristupom RAM temeljne su građevne komponente glavne memorije. Memorijski čipovi, zahvaljujući razvoju LSI/VLSI tehnologije, imaju kapacitet od nekoliko stotina bitova pa sve do nekoliko G bitova (Gb). S obzirom na trenutni razvoj VLSI tehnologije postoje procjene daje za kapacitet ostvaren na jednom čipu gotovo nedostižna granica od tera bita (Tb). (Opaska: s malim slovom b označavat ćemo bit.) Poluvodičke memorije mogu se razvrstati u dvije velike grupe: i) statički RAM (SRAM - Static Random Access Memory); ii) dinamički RAM (DRAM - Dynamic Random Access Memory). Statički se RAM sastoji od memorijskog polja sastavljenog od memorijskih ćelija koje se temelje na bistabilu. SRAM tipično zahtijeva šest tranzistora po bitu pohrane, odnosno po jednoj memorijskoj ćeliji. Memorijsku ćeliju možemo predočiti kao "crnu kutiju" koja ima upravljački ulaz kojim se određuje operacija (čitanje ili pisanje; R/W), ulaz za izbor, odnosno omogućavanje (Select) te jednobitni ulaz i jednobitni izlaz podataka (slika 9.4). Bez obzira na različite tehnološke podloge (MOS - Metal-Oxide Semiconductor, bipolarna) koje se koriste u izvedbi memorijskog čipa, memorijska ćelija ima sljedeća glavna svojstva: • ima dva stabilna stanja koja se upotrebljavaju za prikaz binarne 1 i 0; • omogućuje upis i pohranu (novog) stanja; • omogućuje čitanje pohranjenog stanja. Za razliku od statičke RAM, jednobitni se podatak u dinamičkoj RAM pohranjuje u jednotranzistorskoj memorijskoj ćeliji u obliku naboja u kondenzatoru. Operacija čitanja aktiviranjem tranzistora u ćeliji koji ima funkciju sklopke, tj. podizanjem napona linije retka - adresne linije (izvorno se tranzistor naziva engl. pass transistor), napon će se na kondenzatoru proslijediti na liniju podatka (slika 9.5).Time se, međutim, gubi naboj na kondenzatoru, odnosno briše pohranjeni sadržaj u ćeliji, tako da je to destruktivno čitanje. Da bi se očuvalo osnovno svojstvo memorije -nedestruktivna operacija čitanja, mora se neposredno nakon čitanja bita podatka izvesti ponovna operacija upisa podatka.To zahtijeva dodatno vrijeme tako da se kod DRAM razlikuje vrijeme pristupa tA od vremena memorijske periode tM, pri čemu vrijedi
S. RIBARIČ - GRAĐA RAČUNALA
273
t M > tA. Nadalje, zbog nesavršenosti kondenzatora naboj se postupno gubi i zato DRAM zahtijeva periodičko osvježavanje sadržaja pohranjenih u ćelijama. select
>
memorijska ćelija
ulaz podataka
^
•
izlaz podataka
R/W
SI. 9.4 Memorijska ćelija kao "crna kutija"
Pri oblikovanju čipova SRAM dizajneri su usredotočeni na brzinu i kapacitet, dok se kod DRAM posebna pozornost posvećuje cijeni po bitu i kapacitetu čipa (broju bitova). Za memorijske čipove temeljene na usporedivim tehnologijama vrijedi da gustoća (broj pohranjeni bitova) DRAM 4 - 8 puta u odnosu na SRAM (stoje i razumljivo ako za ćeliju dinamičkog RAM treba jedan tranzistor, a za SRAM treba šest tranzistora). No SRAM je 30 - 1 0 0 puta brži u odnosu na DRAM. Nažalost, približno je za isto toliko puta i skuplji. Na primjer, cijena SRAM memorije s vremenom pristupa 0.5 - 2.5 ns je od 2000 - 5000 USA $ po GB, dok je cijena DRAM memorije s vremenom pristupa od 50 - 70 ns po GB od 20 - 75 USA $ (podaci za 2008.). Zbog ovih se značajki obično SRAM upotrebljava za izvedbu priručne memorije, a DRAM je osnovna građevna komponenta glavne memorije.
linija retka adresna linija
C
linija podatka SI. 9.5 Jednotranzistorska MOS ćelija DRAM
Tablica 9.2. prikazuje usporedbu vremena memorijske periode i kapaciteta čipova DRAM za razdoblje od 1980. do 2006.
^ 274
9. POGLAVLJE: MEMORIJSKI SUSTAV
1j
Vrijeme memorijske periode (ns)
Godina
Kapacitet čipa
1980.
64 Kb
250
1983.
256 Kb
220
1996.
64 Mb
110
2000.
256 Mb
90
2004.
1 Gb
70
2006.
2 Gb
60
Opaska: oznaka b označava bit Tablica 9.2. Brzina i kapacitet DRAM za razdoblje od 1980. do 2006.
Prema načinu pristupa memorijskim ćelijama u memorijskom polju, odnosno načinu adresiranja, RAM ima sljedeću organizaciju: i) inearno adresiranje; ii) koincidentno adresiranje. Pri linearnom adresiranju memorijskih ćelija, odnosno lokacija u memorijskom polju čipa, adresira se uporabom adresnog dekodera "1 od N" koji je sastavni dio memorijskog čipa, pri čemu je N ukupan broj memorijskih lokacija u memorijskom polju. Na temelju aktivne izlazne linije iz adresnog dekodera "1 od N" izabire se w memorijskih ćelija, pri čemu w odgovara duljini riječi - broju bitova u izabranom retku memorijskog polja. Slika 9.6 daje shematski prikaz linearnog adresiranja. .
Slika 9.7 prikazuje SRAM 512 K x 8 bita, odnosno 512 KB, koji koristi linearno adresiranje. Čip ima 19 adresnih priključaka (A0 - A18), 8 priključaka za podatke (D 0 - D7) (linije podataka su dvosmjerne, kada se izvodi operacija čitanja (R/W= 1), onda se 8-bitni podaci prenose od memorije prema procesoru; kada je R/W= 0, izvodi se operacija pisanja - podaci iz procesora pohranjuju se u čipu SRAM), priključak za izbor čipa ChipSelect (CS) upravljački ulaz R/W i upravljački ulaz OutputEnable (OE) kojim se omogućuju pogonski sklopovi linija
S. RIBARIČ - GRAĐA RAČUNALA
275
podataka (engl. dato bus driver). Kada je OE u niskoj razini (logičko"0") i kada se izvodi operacija čitanja, omogućeno je postavljanje podataka iz SRAM na sabirnicu podataka. RAM-ovi većeg kapaciteta imaju obično koincidentno adresiranje jer linearni izbor za takve RAM-ove traži složeniji adresni dekoder koji mora biti izveden na memorijskom čipu. Slika 9.8 daje shematski prikaz memorijskog modula s koincidentnim načinom adresiranja. Ovakav se način organizacije memorijskog modula često naziva i 2 Vi D organizacija (D dimension). Ovdje vidimo daje memorija sastavljena od w memorijskih polja (ravnina) pri čemu svako memorijsko polje doprinosi po jedan bit w-bitnoj riječi. Svako memorijsko polje kapaciteta N bitova odgovara jednom čipu RAM. Većina DRAM-ova ima koincidentno adresiranje. ov
A0 A, A; A3 A4 A5 A6
+5V
i_L Vsi
V£
A adresne linije
A8 A, A A
,„ „
D0
D, D2 D, D4 D5 D6 D7
linije podataka
SRAM 512 Kx8
A,2 A,3 A„ A,5 A,6 A,7 A,8
ČŠ OE R/W
SI. 9.7 SRAM 512 K x 8 bita
w ravnina
w-bitna riječ
kapacitet N bitova SI. 9.8 Shematski prikaz modula s koincidentnim adresiranjem (2 V2 D organizacija)
^ 276
9. POGLAVLJE: MEMORIJSKI SUSTAV
> e>jeiepod je)s;6di juzejn ^
o* o
e>jeiPpod jBisiBsj ;uze|zr
\
>(;uuj3jdsnpdLU !uze|z!-0uze|n
o
CL O
^
o
in X
£ a* £
•
CM
ro u a 3 4-' VI
T3
c _o rtJ > ni o >N1 aj to o (^epaj) ^jjuuidjdsnpdtu lusajpe
pedms) )j!uuidjdsnpduj jusajpe
n SI.9.9 DRAM 1 6 M x 4 b i t a
Slika 9.9 prikazuje internu organizaciju 16 M x 4 bita (32 x 512 K x 4) DRAM. DRAM zahtijeva 24 adresne linije (224 = 16 M) da bi se pristupilo 16 M lokacijama u memorijskom polju (svaka lokacija pohranjuje 4 bita) pa je ukupni kapacitet DRAM 64 Mb. Za pristup memorijskoj lokaciji u memorijskom polju koriste se dvije 12-bitne adrese - adresa retka
S. RIBARIĆ - GRAĐA RAČUNALA
277,
i adresa stupca. Da bi se smanjila veličina kućišta čipa i broj priključaka, DRAM ima multipleksirane adresne linije (2 puta po 12 bita). Jedna polovina od ukupno 24 adresnih bitova namijenjena je za adresiranje retka, a druga polovina za adresiranje stupca u memorijskom polju. Adresa retka i adresa stupca dovode se na dekoder retka, odnosno dekoder stupca. Pristup 4-bitnoj memorijskoj lokaciji određen je "presjecištem" adresirane linije retka i adresirane linije stupca. Zbog multipleksiranja adrese retka i adrese stupca čip DRAM ima dva adresna međuspremnika u kojem privremeno pohranjuje adresu retka i adresu stupca. DRAM ima i dva dodatna upravljačka ulaza RAS (RowAddress Strobe) i CAS (Column Address Strobe) kojima se privremeno pohranjuje adresa retka i stupca u dva adresna međuspremnika. Slika 9.10 prikazuje vremenski dijagram čitanja dinamičke memorije. Uočavamo da se preko 12 adresnih linija vremenskim multipleksiranjem (prijenosom adrese retka i zatim prijenosom adrese stupca) prenosi 24-bitna adresa. adresa na adresnim sabirnicama (postavljaju procesor)
adresni priključci DRAM
R/W
4-bitni podatak nz izlazu DRAM (D,-D 4 )
trenutak zamjene adrese retka adresom stupca na linijama A 0 - A n
kraj sabirničkog ciklusa čitania RAS i CAS postaju neaktivni
SI. 9.10 Vremenski dijagram čitanja DRAM Ovisno o tehnološkoj izvedbi, memorijska ćelija DRAM zadržava pohranjeni podatak od 10 ms do 60 ms nakon što je bio podatak pohranjen. To znači da se sadržaj svake memorijske ćelije mora periodički osvježiti, unutar tog vremena, ponovnim upisom pohranjenog podatka. Osvježavanje se ne obavlja pojedinačno za svaku memorijsku ćeliju, već se osvježavaju istodobno svi sadržaji memorijskih ćelija u jednom retku. To se obavlja tako da DRAM interno generira adrese retka pomoću brojila osvježavanja (slika 9.9). Osvježavanje
^ 278
9. POGLAVLJE: MEMORIJSKI SUSTAV
DRAM-a izvodi se kada je CAS aktivan (postavljen u"0"), a RAS je u stanju logičke jedinice "1" (neaktivan). Takav se način osvježavanja naziva "osvježavanje CAS - prije - RAS". Potreba za periodičkim osvježavanjem dinamičke memorije povećava složenost sučelja procesor - DRAM memorijski modul. No neki memorijski čipovi DRAM imaju ugrađene sklopove za osvježavanje pa se s motrišta projektanta memorijskih modula ponašaju kao statičke memorije te se nazivaju pseudostatičke. Da bi se izgradio npr. memorijski modul kapaciteta 16 M x 32 bita, mora se koristiti osam DRAM 16 M x 4 bita čipova - svaki od njih doprinosi po četiri bita u 32-bitnoj riječi.
9.4.1 PROJEKTIRANJE MEMORIJSKOG MODULA Problem projektiranja memorijskog modula može se formalno definirati na sljedeći način: na temelju zadanih ili raspoloživih memorijskih čipova N x w-bita RAM, gdje je N broj wbitnih riječi (odnosno N x w je memorijski kapacitet raspoloživog čipa) treba projektirati memorijski modul koji se može opisati kao N'x w'-bita, pri čemu je N'a N i W. Drugim riječima, treba projektirati memorijski modul na temelju raspoloživih građevnih komponenti - memorijskih čipova N x w-bita RAM, koji se sastoji od polja p x q čipova N x w-bita RAM, pri čemu je p = [N7 N] i q = [w' / w], ([x] označava najmanji cijeli broj veći ili jednak x). Primjer 9.1. Ilustrirajmo problem projektiranja na sljedećem jednostavnom zadatku: raspoloživa građevna komponenta je statički RAM kapaciteta 128 bajtova, dakle 128 x 8 bita RAM (N = 128, w = 8). Na temelju tih raspoloživih komponenti želimo projektirati memorijski modul koji će biti kapaciteta 1 K 16-bitnih riječi (N'= 1024, w' = 16). Da bi se realizirao memorijski modul - ciljna memorija, potrebno je p x q = 1 6 memorijskih čipova, pri čemu je: p = [N7 N1 = [1024 / 1281 = 8 i q = [ w 7 w ] = f 16 / 8] = 2. (Opaska: obično su vrijednosti N, w, N' i w' izražene u obliku 2\ tako da je [xl = x (kao u našem slučaju). No ako je ciljani kapacitet memorijskog modula npr. 1000 8-bitnih riječi, tada imamo [1000 /1281 = [7,811 =8.) Prikažimo organizaciju memorijskog modula (ciljne memorije) 1K x 16 bita (slika 9.11a) uporabom građevnih komponenti 128 x 8 bita SRAM (slika 9.11b) koje koriste linearno adresiranje. Za realizaciju ciljne memorije potrebno nam je 16 memorijskih čipova SRAM. Svaki doprinosi po 128 8-bitnih riječi što znači da su dva čipa potrebna za 128 16-bitnih riječi. Takvih je parova SRAM (parove ćemo nazivati i skup; slika 9.12) potrebno 8 da bismo dobili željeni kapacitet memorijskog modula. Slika 9.12 prikazuje organizaciju memorijskog modula. Memorijski modul koristi deset adresnih linija (A0 - A9) pri čemu sedam najmanje značajnih adresnih linija (A0 - A6) označenih s A; slika 9.12) služi za izbor riječi u svakom čipu SRAM (27 = 128), dok se tri najznačajnija bita 10-bitne adrese dovode na adresni dekoder"1 od 8". Izlazima iz dekodera (CS0 - C57, pri čemu je aktivan izlaz iz dekodera logička 0) izabire se jedan od 8 skupova čipova (skup 0 - 7). Svaki od skupova doprinosi 128 16-bitnih riječi. Deset adresnih linija (A0 - A9), dakle služi za izbor 16-bitne riječi u projektiranom modulu. No ako memorijski modul želimo priključiti u računarski sustav koji npr. ima 32-bitnu adresnu sabirnicu (A0 - A31) i time određen ukupan izravno adresirljivi prostor od 4 G riječi (232), tada moramo memorijskom modulu pridodati adresni dekoder koji će dekodirati preostale 22 adresne linije (A10 - A31) da bi se jednoznačno definirao adresni potprostor koji će zauzimati
S. RIBARIĆ - GRAĐA RAČUNALA
279,
r projektirani memorijski modul. Na primjer, ako pretpostavimo da će modul biti smješten na 1024 najmanje značajne adrese izravno adresirljivog prostora, tada dodatni adresni dekoder "osluškuje" adresne linije A10 - A31 i ima aktivan izlaz samo ako su sve adresne linije A10 - A31 u logičkoj "0". Slika 9.13 prikazuje zahtijevanu sklopovsku preinaku. Izlaz iz logičkog sklopa ILI (označen sa SMM - Select Memory Module) je logička "0"samo ako su sve adresne linije A 1 0 - A31 u logičkoj"0". Aktivno stanje SMM = Označi izbor memorijskog modula. Izlazi iz logičkih sklopova ILI koji na ulazu imaju SMM i CSi; i = 0,1,... ,7 imaju aktivan izlaz (logičku "0") kada je SMM = 0 i CSi = 0 i na taj se način pristupa riječi u izabranom memorijskom modulu. W= 16 bita
ciljna memorija (memorijski modul)
N'=1K riječi
10 adresne linije
R/W
.16 dvosmjerna sabirnica podataka
a) R/W
7 adresne linije
cD _o 00 "D "O c o <0 «"O (O
memorijsko polje 128x8 bita
8 priključci podataka
CS priključak za izbor čipa
b) SI. 9.11 Prikaz ciljne memorije; a) memorijski modul; b) građevna komponente
280
9. POGLAVLJE: MEMORIJSKI SUSTAV
R/W skupO
čipO 128x8
CS ^
16
R/W
čip 1 128x8
8
i /
CS ~t skup 1 ^ R/W čip 2 128x8
16 R/W čip 3 128x8
8
i
/ /
CS
dvosmjerna sabirnica podataka
t skup 7 ^ RAV čip 14 128x8
16 ^ RAV čip 15 128x8
8
CS
SI. 9.12 Organizacija memorijskog modula 1K x 16 bita uporabom građevnih komponenti 1 2 8 x 8 bita SRAM
S. RIBARIĆ - GRAĐA RAČUNALA
281,
adresna sabirnica A31 A M . . . A n A10 A9 Ag . . . A2 A, A0
za izbor riječi u memorijskom modulu
С izbor riječi u skupu
za izbor adresnog potprostora
(izbor skupova 0 - 7)
izbor memorijskog modula SMM CS7
prema CS skupine 7
cso
prema CS skupine 0
Si. 9.13 Sklopovska preinaka potrebna za priključenje memorijskog modula u adresni potprostor 00000000,,. ne) - 000003FF,,
Primjer 9.2. Projektirajmo memorijski modul kapaciteta 1K 64 bita (slika 9.14 a)} uporabom građevnih komponenti tj. memorijskih čipova koji imaju koincidentno adresiranje i kapacitet 1Kb (organiziranih u memorijskom polju 32 x 32) (slika 9.14 b)). Odredimo broj potrebnih građevnih komponenti: p = [N7 N] = [1024/1024] = 1 i q = f w ' / w ] = [ 6 4 / 1] = 64. Potrebna su nam 64 memorijska ci pa. Slika 9.15 prikazuje organizaciju memorijskog modula. Svaki od memorijskih čipova doprinosi po jedan bit u 64-bitnoj riječi. Organizacija memorijskog modula je 21/2 D (vidi sliku 9.8). Uočavamo da građevna komponenta memorijski čip (slika 9.14 b)) ima dvije jednosmjerne 1-bitne linije podataka (data out; dota in). Ako se memorijski modul priključuje na dvosmjernu sabirnicu podataka, onda se trebaju dodatnim sklopovima parovi jednosmjernih linija pretvoriti u jednu dvosmjernu liniju. To se postiže uporabom posebnih sklopova koji se nazivaju dvosmjerni sabirnički pogonski sklopovi (engl. bus driver) ili dvosmjerna sabirnička pojačala koja se temelje na sklopovima s tri stanja. Slika 9.16 prikazuje detalj takvog sklopa (samo za jedan par linija podataka). Kada je upravljački signal R / W - 1 (operacija čitanja), omogućen je gornji sklop s tri stanja (slika 9.16 b)) i izlazni se 1-bitni podatak (data out) prosljeđuje na dvosmjernu sabirničku liniju podatka (podatak se usmjerava prema procesoru). Donji je sklop s tri stanja onemogućen i njegov je izlaz u stanju visoke impedancije (linija data in je električki odspojena od sabirničke linije podataka). Kada je upravljački signal R/ И / - 0 (operacija pisanja), aktivan je donji sklop s tri stanja (slika 9.16 c}) i ostvaren je protok podatka s dvosmjerne sabirnice na liniju data in. Istodobno se gornji sklop s tri stanja nalazi u stanju visoke impedancije.
^ 282
9. POGLAVLJE: MEMORIJSKI SUSTAV
w' = 64 bita
A, J "1 od 32" adresne linije
R/W
adresni dekoder stupca ciljna memorija (memorijski modul)
N'
1024
^
ai
"O o a» ti
" riječi
dato out izlazni podatak
4 - * -o £ čvn £ a> T3
32 x 32 bita
^
, 1
data in ulazni podatak
64/
CS
-1 od 32'
dvosmjerna sabirnica podataka
RAV b)
a) SI 9.14 a) memorijski modul kapaciteta 1K 64 bita; b) građevna komponenta - memorijski čip s koincidentnim adresiranjem 1K bita
dekoder
A1 -se
TtuJ
ćipO (32 x 32)
-f-
bit#0
R/W
R/W
dekoder
A1
čip 1 (32 x 32)
bit#l
£c <
64
i/> £
J
7<3 15
cs
S
RAV
dvosmjerna sabirnica podataka
TJ
A2 dekoder
A1
preostale adresne linije
.2 0) I0> i
r—
bi«63 RAV
1 >
čip 63 (32x32)
/
L
SL 9.15 Organizacija memorijskog modula 1K 64 bita
CS
S. RIBARIĆ - GRAĐA RAČUNALA
283,
R/W=T
data out
R/W = "1"
data in
dvosmjerna sabirnička linija podataka b)
R/W = "0"
data out
R/W = "0"
H-Cn!
data in
dvosmjerna sabirnička linija podataka
C) SI. 9.16 a) dvosmjeran sabirnički pogonski sklop (detalj); b) tok 1-bitnog podatka - operacija čitanja; c) tok 1-bitnog podatka - operacija pisanja
^ 284
9. POGLAVLJE: MEMORIJSKI SUSTAV
9.5. PORODICE DRAM Da bi premostili jaz između brzine procesora i memorije, posebno DRAM - koja ima veliki kapacitet, ali je u odnosu na brzinu sklopovlja procesora spora, proizvođači memorijskih komponenti pokušavaju različitim organizacijskim zahvatima u memorijskim čipovima kompenzirati relativno dugo vrijeme pristupa pa se stoga pojavljuju brojna poboljšanja dinamičkih RAM memorija: i) FPM DRAM (Fast Page Mode DRAM) - izvedba DRAM-a tako da se na temelju jedne adrese retka može pristupiti različitim pohranjenim podacima samo mijenjanjem adrese stupca. Vrijeme pristupa skraćuje se u slučaju pristupa lokacijama sa slijednim adresama; ii) EDO DRAM (Extended Data-Out DRAM) - uporabom upravljačkog ulaza Of (Output Enable) kojim se upravlja izlaznim međuspremnikom (slika 9.9) neovisno o upravljačkom signalu CAS, omogućeno je ranije započinjanje sljedećeg pristupa memoriji s tim da izlazni podatak iz DRAM bude još uvijek valjan. Drugim riječima, EDO DRAM može započeti dohvatom sljedećeg bloka podataka iz memorijskog polja istodobno sa slanjem prethodnog dohvaćenog bloka podataka procesoru; iii) DRAM je po svojoj prirodi asinkroni sklop koji ima asinkrono sučelje što znači da odgovara na promjene upravljačkih signala neovisno o internom signalu vremenskog vođenja. SDRAM (Synchronous DRAM) ima sinkrono sučelje i njegovo je djelovanje sinkronizirano internim signalom vremenskog vođenja. SDRAM je interno organiziran tako da ima veći broj memorijskih polja (memorijskih banaka) te sklopove za vremensko vođenje i složenije programirljive upravljačke sklopove od onih u FPM DRAM ili EDO DRAM, tako da omogućuju prijenos podataka u snopu (engl. burst mode) sa slijednih memorijskih lokacija. Veličina je snopa podataka kao i način rada SDRAM programirljiv. Na primjer, veličina snopa može biti 1,2,4 ili 8 podataka ili se može prenijeti tzv. cijela stranica od 512 ili 1024 podatka. Na primjer, SDRAM oznaka 5-1-1-1 prvi podatak nudi nakon pet perioda internog signala vremenskog vođenja, ali nakon toga sljedeća tri podatka daje nakon svake periode internog signala vremenskog vođenja; iv) DDR SDRAM (Double Data Rate Synchronous DRAM) je izvedba SDRAM tako da su podaci raspoloživi na rastućem i padajućem bridu internog signala vremenskog vođenja i time je povećana brzina prijenosa, odnosno memorijska pojasna širina za faktor veći od dva u odnosu na SDRAM. Na primjer, 256 Mb SDRAM oznake 48LC64M4A2 (100 MHz) tvrtke Micron ima brzinu prijenosa 133 Mbps (M bita u sekundi), dok 512 Mb DDR SDRAM oznake 46V128M4 (200 MHz) iste tvrtke ima brzinu prijenosa 400 Mbps; v) DDR2 SDRAM (Double Data Rate Two Synchronous DRAM) je poboljšana verzija DDR SDRAM i ima brzinu prijenosa od 800 Mbps pri frekvenciji internog signala vremenskog vođenja od 400 MHz; vi) DDR3 SDRAM je poboljšana verzija DDR2 SDRAM i podatke prenosi dvostruko većom brzinom u odnosu na DDR2 SDRAM, tj. 1,6 Gbps. DDR3 SDRAM imaju takvu gustoću pakovanja bitova da dosežu kapacitet od 8 Gb i služe za izgradnju memorijskih modula kapaciteta od 16 GB.
S. RIBARIĆ - GRAĐA RAČUNALA
285,
Primjer 9.3. DRAM čipovi izrađeni su jednakom tehnologijom kao i procesor i pakirani su u plastična ili keramička kućišta. Veći se broj takvih čipova smješta na tiskanu pločicu koja se kao memorijski modul uključuje u matičnu ploču npr. osobnog računala. Tako ostvareni memorijski moduli nose oznaku DIMM (Dual in-line memory module] i ovisno o broju priključaka (engl. pin) i vrsti memorijskih čipova kao građevnih komponenti nose različite oznake. Na primjer, 240 priključni DDR3 DIMM oznake PC-3 8500 ima 64-bitni put podataka, odnosno 72-bitni ako koristi kod za ispravljanje pogrešaka (ECC - Error Correcting Code) i kapacitet od 4 GB.
9.6. UBRZANJE RADA MEMORIJE Gustoća pakiranja (broj bitova po jedinici površine silicijskog čipa) i kapacitet memorijskih čipova DRAM i SRAM, zahvaljujući napretku tehnologije visokog stupnja, dramatično raste. Povećanje njihove brzine, međutim, nije takvo. Pojavom sve bržih procesora i porastom frekvencije signala vremenskog vođenja raskorak između brzine procesora i memorije sve je veći. Taj je raskorak izraženiji kada se koriste memorije temeljene na DRAM čipovi ma jer SRAM čipovi imaju veću brzinu kojom uspijevaju "pratiti" rad procesora, naročito ako je memorija ostvarena na samom procesorskom čipu kao priručna memorija razine 1 ili 2. Takva je memorija, međutim, malog i nedovoljnog kapaciteta. Latentnost memorije postaje usko grlo suvremenih računala. Postoje dva osnovna načina premošćivanja jaza ili raskoraka između brzine procesora i memorije: i) uporaba duljih memorijskih riječi; ii) istodobni dohvat više od jedne memorijske riječi. uža sabirnica
multipleksor
međuspremnik A /
A
'n
/
'n
/
' n
/
' n
1f memorija s internom duljinom riječi S-n SI. 9.17 Organizacija memorije koja ima internu duljinu riječi S • n
i) Memorija se može organizirati tako da je duljina interne memorijske riječi w višekratnik duljine riječi procesora n: w = S • n, pri čemu je S > 1 .Takva organizacija omogućuje dohvat ili pristup memorijskoj riječi duljine S • n bita tijekom jedne memorijske periode. Slika 9.17 prikazuje organizaciju takve memorije. Memorija mora imati brze sklopove koji tijekom operacije čitanja omogućuju pristup riječi duljine S - n bita te njezino rastavljanje na S dije-
^ 286
9. POGLAVLJE: MEMORIJSKI SUSTAV
lova koji se prosljeđuju procesoru, i to za vrijeme jedne memorijske periode. Tijekom operacije pisanja sklopovi moraju prihvatiti do S n-bitnih riječi, upakirati ih u jednu (S • n)-bitnu riječ i pohraniti je, i to za vrijeme jedne memorijske periode. ii) Memorija koja omogućuje istodobni dohvat više od jedne memorijske riječi naziva se memorija s prepletanjem (engl. interleaved memory). Memorija se sastoji od S memorijskih modula (koji se nazivaju i memorijskim bankama, engl. memory bank) M^ M v ..., M s ^ pri čemu je S = 2k (slika 9.18). Svaki od tih modula zauzima dio memorijskog adresnog prostora i ima svoje sklopove za dekodiranje adrese. Memo rij ski moduli su tako uređeni da i-ti modul sadržava samo one riječi kojima su adrese: p • S + i, pri čemu je 0 ^ p =s N -1, gdje je N broj riječi u jednom memorijskom modulu. Adresa koja se šalje memoriji duljine je m + 1 bita i ima oblik: a
m am-l
a
k+1 a k ak-l 3k-2 -
a a
i (y
pri čemu m - k + 1 najznačajnijih bitova adrese istodobno adresiraju po jednu riječ u svakom od S memorijskih modula. Kapacitet svakog pojedinom memorijskog modula je N = 2(m-k+1). vrlo široka sabirnica
adresa
m-k+1 bitova adrese
SI. 9.18 Organizacija memorije s prepletanjem
adresa
k bitova adrese
S. RIBARIĆ - GRAĐA RAČUNALA
287,
k najmanje značajnih bitova adrese ak-1 ak_2... a1 a^ služi za izbor svake od S dohvaćenih riječi. Istodobnim radom svih S memorijskih modula povećava se broj riječi kojima se može pristupiti tijekom jedne memorijske periode za faktor S. Slika 9.18 prikazuje organizaciju memorije s prepletanjem. Slika 9.19 prikazuje vremenski dijagram za memoriju s prepletanjem. Vidimo da se u vremenu koje odgovara vremenu pristupa jednom memorijskom modulu istodobno dohvaća S riječi koje se za vrijeme sljedećeg pristupa memoriji, a na temelju najmanje značajnih k bitova adrese prosljeđuju sa široke sabirnice na sabirnicu sustava. pristup 1
pristup 2
pristup 3
memorijski ^ modul
memorijski modul
memorijski modul
^
memorijski modul
M,
1
izlaz
i—i—i—i—i - • - i—i—i—i—i—ivrijeme
riječ 0
riječ 0
riječ 1
riječ s-1
riječ 1
riječ s-1
riječ 2 SI. 9.19 Vremenski dijagram za memoriju s prepletanjem
Ocijenimo ubrzanje rada tako organizirane memorije. Ako je vrijeme pristupa memorijskom modulu tA, odnosno ako je vrijeme memorijske periode t M i ako je pozivanje na memoriju takvo da su adrese slijedne: 0,1,2,..., odnosno q + 0, q + 1, q + 2,..., tada je vrijeme potrebno za dohvat (ili pristup) riječi: V^M/S' gdje je S broj memorijskih modula. No ako je pozivanje na memoriju takvo daje adresni slijed uniformno raspršen s faktorom raspršenosti r adresa: 0, r, 2r,..., odnosno q + 0,q + r,q + 2r,...,
^ 288
9. POGLAVLJE: MEMORIJSKI SUSTAV
pri čemu je r ^ S , tada je prosječno vrijeme pristupa riječi, odnosno vrijeme memorijske periode jednako: Vf=(|'xtM)/SAko je faktor raspršenosti r veći ili jednak S, tada jet Mef = t M i nema povećanja brzine memorije (naravno samo tijekom takvog slijeda adresa). Primjer 9.4. Pretpostavimo daje memorija s prepletanjem organizirana u 16 memorijskih modula ili banaka pri čemu je kapacitet svakog od modula jednak 4 M riječi. Sljedećim je parametrima opisana memorija: k = 4, S = 2 k = 16; i N = 2(m k+1) = 4M; (m - k + 1) = 22, m = 25. Adresa: a a ,... a, , a. a,, a.,... a,aft je: a,c a^... ac a,, a,a, ataA. ^ 0J 25 24 5 4 3 2 1 0 Modul MQ sadržava riječi kojima su adrese p S + i, pri čemu je i = 0: 0,16,32,64,..., 16 (222 -1). Modul M1 sadržava riječi kojima su adrese p S + i, pri čemu je i = 1: 1, 17, 33,65,..., 16 (222 ~1) + 1. m
m-1
k+1
k
k-1 k-2
i-ti memorijski modul M. sadržava riječi kojima su adrese: i, 16 + i, 32 + i, 64 + i,...., 16 (222 -1) + i. Značajnijih 22 bita adrese a25 a24... a5 a4 istodobno se dovodi na svih 16 memorijskih modula M0 do M15. Budući da je svaki od njih adresiran, svaki će od njih istodobno postaviti po jednu riječ duljine w bita na široku sabirnicu (slika 9.18), i to u vremenu koje odgovara vremenu pristupa jednom memorijskom modulu. Četiri najmanje značajna bita adrese a3a2 a1 a0 poslužit će za izbor jedne od riječi koja će se proslijediti na užu sabirnicu. Na primjer, ako adresni bitovi a25 a24... a5 a4 imaju vrijednosti 00001E (heksadekadno): a
25
0
a
24
0
a
23
0
a
22
0
3
21
0
3
20
0
3
19
0
3
18
0
3
17
0
3
T6
0
3
15
0
3
14
0
3
13
0
3
12
0
3
11
0
3
10
0
3
0
9
3
1
8
3
7
3
1
6
3
1
5
3
4
1 0
i ako se izvodi operacija čitanja, tada će na širokoj sabirnici postaviti istodobno šesnaest riječi kojima odgovaraju slijedne adrese započevši od 00001E do 00002D (zbog načina pohrane riječi u memorijskim modulima). Pomoću četiri najmanje značajna bita adrese a3a2 a1a0 izabirat će jedna od 16 raspoloživih riječi. Memorija s prepletanjem može poslužiti kao osnova za izvedbu protočne memorije (engl. pipeline memory) koja je preduvjet povećanja performanse procesora koji je realiziran kao protočni procesor (engl. pipeline processor) - o čemu će biti govora u kasnijim poglavljima. Postoji i jedan drugi pristup izvedbi protočne memorije koji se temelji na činjenici da se ukupno vrijeme koje odgovara latentnosti memorije može razdijeliti na vremena koja su potrebna za obavljanje pojedinih slijednih akcija u memorijskom modulu kao što su: dekodiranje adrese retka, čitanje retka iz memorijskog polja, upisivanje riječi ili prosljeđivanje riječi na izlaz (na temelju adrese stupca) i upisivanje riječi natrag u memorijsko polje (ako se to zahtijeva). Ako se svakom od tih slijednih koraka dodijeli autonomni sklop, koji se naziva protočni segment (engl. pipeline stage), novi pristup memoriji može započeti odmah nakon što se aktivnost prethodnog pristupa preseli na sljedeći protočni segment tako da je vrijeme pristupa jednako vremenu trajanja aktivnosti u jednom protočnom segmentu. Drugim riječima, ako je memorija izvedena tako da ima četiri protočna segmenta, onda je
S. RIBARIĆ - GRAĐA RAČUNALA
289,
latentnost četiri puta kraća od latentnosti "klasične" izvedbe memorije. Ovaj se pristup, uz dodatak protočnih segmenata za adresnu translaciju i protočnog segmenta za uspoređivanje bita valjanosti (vidi poglavlje Protočnost), koristi u izvedbi priručnih memorija.
9.7. KOD ZA ISPRAVLJANJE POGREŠAKA U primjeru 9.3. spomenuli smo kod za ispravljanje pogrešaka (ECC - Error Correcting Code). 0 čemu je riječ? Poluvodički memorijski moduli podložni su pogreškama. Posebno su osjetljive dinamičke memorije kod kojih se pristupom memorijskim ćelijama i nabijanjem kondenzatora izaziva pad napona na linijama za napajanje. Uz to, dinamičke su memorije osjetljive na radioaktivno zračenje. Plastična ili keramička kućišta u kojima su smješteni memorijski silicijski čipovi sadržavaju u tragovima radioaktivne materijale.Ti materijali zrače alfa čestice koje mogu "pokvariti" podatke pohranjene u ozračenim memorijskim ćelijama, odnosno izazvati gubitak naboja na kapacitetu neke ćelije. Općenito, pogreške u memorijskim modulima mogu se klasificirati na tzv. "tvrde" pogreške (engl. hard failure) i "meke" pogreške (engl. soft failure). Tvrde pogreške su one koje se odnose na fizičke neispravnosti jedne ili većeg broja memorijskih ćelija koje trajno ostaju u stanju "1" ili "0" ili pak mijenjaju nekontrolirano svoja stanja. Meke pogreške su one koje se događaju rijetko i nisu ponovljive te nisu posljedica fizičke neispravnosti memorijske ćelije. Primjer takve pogreške je promjena sadržaja memorijske ćelije uslijed alfa zračenja ili slučajnog pada napona. Da bi se povećala pouzdanost memorijskog sustava, a time i pouzdanost računarskog sustava, memorijske jedinice imaju posebne sklopove za otkrivanje 1 ispravljanje pogrešaka. Slika 9.20 prikazuje načelnu organizaciju memorijske jedinice sa sklopovima za otkrivanje i ispravljanje pogrešaka.
riječ (n+k)-bita
SI. 9.20 Organizacija memorijske jedinice sa sklopovima za otkrivanje i ispravljanje pogrešaka Tijekom upisa n-bitnog podatka u memoriju, na temelju njegovih bitova generira se kbitni ispitni kod (engl. check-bitcode) u generatoru ispitnog koda.Taj se ispitni kod također pohranjuje u memoriju. Dakle, u memoriji je pohranjen podatak i njemu pridružen ispitni kod, odnosno riječ duljine n + k bita. Kada se dohvaća (čita) pohranjeni podatak, onda se
^ 290
9. POGLAVLJE: MEMORIJSKI SUSTAV
k-bitni ispitni kod koristi za otkrivanje i ispravljanje pogreške, i to na sljedeći način: ponovo se n bita podatka koriste za novo generiranje ispitnog koda duljine k bita te se taj novo određeni kod uspoređuje s onim k-bitnim ispitnim kodom koji je pohranjen u memoriji tijekom upisa n-bitnog podatka. Usporedba daje jedan od tri ishoda u nastavku. i) Nije otkrivena pogreška. Dohvaćeni se n-bitni podatak smatra ispravnim podatkom i upućuje se na sabirnicu. ii) Pogreška je otkrivena, ali se može i ispraviti. Pogreška se ispravlja tako da se n-bitni podatak i bitovi za ispravljanje pogreške (engl. error correction bit) šalju u sklop za ispravljanje pogreške koji će generirati ispravan n-bitni podatak. Taj će se podatak proslijediti na sabirnicu. iii) Pogreška je otkrivena, ali se ne može ispraviti. Memorijska jedinica šalje poruku o neispravnom podatku. Zaštitni kodovi koji se koriste mogu biti kodovi za otkrivanje pogreška (engl. error-detecting code) i kodovi za otkrivanje i ispravljanje pogrešaka. Najjednostavniji kod koji se vrlo često koristi je paritetni kod (engl. parity code). Primjenom paritetnog kodiranja, utvrđuje se broj jedinica u riječi (podatku). Ako je broj jedinica neparan - riječ ima neparni paritet, inače riječ ima paran paritet. Kada se riječ pohranjuje u memoriju, pohranjuje se i paritetni bit (1 za neparni ili 0 za parni paritet riječi). Kada se riječ čita iz memorije, čita se i paritetni bit. Ako se paritet pročitane riječi ne podudara s pohranjenim bitom pariteta, dogodila se pogreška. Jednobitna paritetna shema može otkriti najviše jednu pogrešku u podatku. Ako su dva bita neispravna, 1-bitna paritetna shema ne može otkriti pogrešku. No takva shema otkriva pogrešku i u slučajevima kada se ona dogodila za neparan broj bitova. Kodovi za otkrivanje i ispravljanje pogrešaka u memorijskim se sustavima obično klasificiraju na temelju broja neispravnih bitova u riječi koji mogu biti otkriveni i broja bitova koji mogu biti ispravljeni. Tako govorimo o kodu za ispravljanje jedne pogreške SEC - Singleerror-correcting ili o kodu za ispravljanje jedne pogreške i otkrivanju dvostruke pogreške SEC-DED - Single-error-correcting - double-error-detecting. Kod SEC-DED većinom se rabi u memorijskim sustavima. Kodovi za otkrivanje i ispravljanje pogrešaka koji se rabe u memorijskim sustavima obično se temelje na modificiranim Hammingovim kodovima. Cijena koja se plaća da bi se kodovima za otkrivanje i ispravljanje pogrešaka povećala pouzdanost memorijskih sustava jest povećanje duljine memorijske riječi (ujedno i kapaciteta memorije). Tako se, na primjer, za 64-bitni podatak ako se koristi shema SEC (temeljena na modificiranom Hammingovom kodu) povećava duljina riječi za 7 bitova. Ako se za istu duljinu podatka (64 bita) rabi shema SEC-DED, zahtijeva se dodatnih osam bitova pa je ukupna duljina memorijske riječi 72 bita.
9.8. SEKUNDARNA MEMORIJA Sekundarna memorija, koja je obično naziv za jedinicu magnetskog diska, jedinicu magnetske vrpce i jedinicu optičkog diska, ima tri važne dobre značajke: vrlo veliki kapacitet, neizbrisivost i malu cijenu po pohranjenom bitu podatka. Nažalost, ima i jedan nedostatak - relativno veliko vrijeme pristupa (tablica 9.1.). Bez obzira na kapacitet glavne memorije koji je premašio sva očekivanja i snove programera u ranoj fazi razvoja računarskih sustava, njezin kapacitet nije dovoljan za pohranu podataka i programa koji su potrebni korisniku. Čak i uz pretpostavku da je moguće pohraniti takvu veliku količinu podataka, izbrisivost
S. RIBARIĆ - GRAĐA RAČUNALA
291,
glavne memorije, koja je ostvarena kao poluvodička memorija, predstavlja nepremostivu prepreku trajnoj pohrani. Izbrisivost poluvodičke memorije, odnosno gubitak sadržaja kod ispada napajanja, zahtijeva rezervnu pohranu (engl. back-up) podataka i programa i u slučaju kada kapacitet memorije nije središnji problem. Sekundarna memorija ostvarena kao magnetska diskovna memorija ima dvojaku ulogu - ona predstavlja proširenje glavne memorije (zahvaljujući konceptu virtualne memorije, poglavlje 11.) i služi za rezervnu pohranu podataka i programa. U ovom ćemo odjeljku opisati osnovne značajke magnetske diskovne memorije te se ukratko osvrnuti na magnetske vrpčaste memorije i optičke memorije.
9.8.1. MAGNETSKA DISKOVNA MEMORIJA Jedinica magnetskog diska predstavlja sustav za sebe. Ona se može promatrati kao sustav podijeljen na dva podsustava: i) podsustav koji čine fizičke komponente kao što su glave za čitanje i pisanje, ručice na kojima se nalaze glave, jedna ili više kružnih ploča presvučenih magnetskim materijalom (magnetski diskovi), specijalan istosmjerni DC (engl. direct current) elektromotor (engl. spindle motor) za okretanje osovine na kojoj su učvršćeni diskovi. Obično se ovaj podsustav naziva HDA (Head Disk Assembly) i sadržava još samo elektronički sklop AEM (Arm Electronics Module) koji ostvaruje sučelje upravljačke jedinice diska (engl. Disk Controller) i glave za čitanje i pisanje; ii) elektronički podsustav (engl. Drive Electronics) koji se sastoji od upravljačke jedinice diska, memorije, sklopova za zapis i čitanje podataka (engl. Recording Channel, Reading Channel), sklopova za upravljanje ručicama i sklopovima za upravljanje istosmjernim elektromotorom. Posebnu ulogu ima upravljačka jedinica diska. Ona pomoću sučelja ostvaruje vezu jedinice magnetskog diska s procesorom. Sučelje podržava rukovanje i izmjenu podataka, u skladu s protokolom, između jedinice magnetskog diska i procesora. Komunikacija se ostvaruje standardnim sučeljem kao stoje IDE (Integrated Drive Electronics), E-IDE (Enhanced IDE), SCSI (Small Computer System Interface), ATA (Advanced Technology Attachment) ili SATA (Serial ATA). Na taj se način ostvaruje relativno jednostavno logičko sučelje koje dopušta procesoru da promatra disk kao još jednu memorijsku jedinicu (istina, sporiju od glavne memorije) u računarskom sustavu. Upravljačka jedinica diska prima naredbe od procesora, raspoređuje izvršavanje tih naredbi i izvještava procesor o završetku operacija uzrokovanih tim naredbama. Upravljačka jedinica ostvaruje također sučelje s podsustavom HDA te pomoću sklopova za upravljanje ručicama (na kojim se nalaze glave za čitanje i pisanje) i sklopova za upravljanje istosmjernim elektromotorom izvodi postupak pretraživanja i nalaženje mjesta (sektora) na disku na kojem će se obaviti operacija čitanja (dohvata) ili pisanja (pohrane) podataka. Otkrivanje i ispravljanje pogrešaka (ECC) te formatiranje podataka također je jedan od temeljnih zadataka upravljačke jedinice diska. Uz to, upravljačka jedinica upravlja diskovnom priručnom memorijom (engl. disk cache) koju ima većina suvremenih diskovnih jedinica. Upuštanja diskovne jedinice u rad te njezino isključivanje također je u nadležnosti upravljačke jedinice diska. Upravljačka jedinica diska je, zapravo, računalo čiji je blok-dijagram prikazan na slici 9.21.
^ 292
9. POGLAVLJE: MEMORIJSKI SUSTAV
procesor
SI. 9.21 Blok-dijagram upravljačke jedinice diska
Primjer 9.5. Opišimo aktivnosti upravljačke jedinice diska tijekom čitanja. Nakon primitka naredbe za čitanje podataka s diska, upravljačka jedinica mora potražiti i naći zahtijevani blok podataka na disku, pročitati ga, obaviti provjeru ispravnosti i možebitno ispraviti pogreške, formatirati ga te pohraniti ga u spremnik, i konačno, obavijestiti procesor daje naredba obavljena.
S. RIBARIĆ - GRAĐA RAČUNALA
293,
9.8.2 ORGANIZACIJA PODATAKA NA DISKU Središnje građevne komponente magnetske diskovne jedinice jesu rotirajuća aluminijska ili staklena ploča presvučena magnetskim materijalom i pokretna ručica s glavom za čitanje i pisanje. Zahvaljujući magnetskom obliku zapisa diskovna je memorijska jedinica neizbrisiva što znači da pohranjeni podaci ostaju sačuvani i nakon prestanka električnog napajanja. Jedinica ima jednu do 12 kružnih ploča koje su pričvršćene na zajedničkoj osovini i vrte se brzinom od 3600 pa sve do 15000 okretaja u minuti (RPM - Revolutions Per Minute). Podaci se zapisuju na obje površine ploče tako da svaka ploča ima dvije glave za čitanje i pisanje. Promjer kružne ploče, ovisno o tipu diskovne jedinice, tipično se kreće od 2.5 do 9 cm. Primjerice, IBM-va diskovna jedinica Microdrive ima promjer od 1" (inch = 2.54 cm) i kapacitet 8 GB (2006. godina). staza 0 staza C-1
sektor N-1
sektor 0
sektor 1
sektor 2
SI. 9.22 Pojednostavnjeni prikaz organizacije jedne kružne ploče magnetskog diska Podaci su zabilježeni uzduž kružnih staza (engl. track) koje čine koncentrične kružnice. Broj staza kreće se od 10000 do 50000 po jednoj površini kružne ploče. Dogovorno, staze su numerirane tako da staza s najvećim polumjerom (vanjska staza) ima indeks 0. Indeks raste do staze s najmanjim radijusom koja ima indeks C-1, gdje je C ukupan broj staza. Sve staze s istim indeksom, ali na različitim kružnim pločama jedinice diska oblikuju cilindar (engl. cylinder). Staza nije fizički ugravirana u površinu diska već predstavlja prsten magnetizira-
^ 294
9. POGLAVLJE: MEMORIJSKI SUSTAV
nog materijala nad kojim na zračnom jastuku lebdi glava za čitanje ili pisanje (udaljena oko 0.01 |um od površine ploče). Širina staze je samo nekoliko mikrona (10"6 m) i ovisi o veličini glave za čitanje i pisanje te preciznosti njezinog radijalnog pozicioniranja. Svaka je staza podijeljena na sektore. Staza tipično sadržava od 100 do 500 sektora. Podaci pohranjeni u sektoru predstavljaju osnovnu jedinicu podataka koji se pohranjuju ili čitaju s diska. Sektor tipično pohranjuje 512 bajtova, iako ima izvedbi koje imaju sektore koji pohranjuju i 4096 bajtova. Slika 9.22. prikazuje organizaciju jedne kružne ploče diska. Na slici 9.22 vidimo da se staze ne protežu do samog središta kružne ploče zato što se vrlo kratke staze blizu središtu vrtnje ne mogu djelotvorno iskoristiti. Čak i uz to ograničenje, odnos duljina vanjske staze i unutarnje staze je 2:1. Različite duljine staza razlog su različitom broju sektora u stazama - unutarnje staze imaju manji broj sektora, dok vanjske staze imaju veči broj sektora. Sektor koji pohranjuje jedinicu podataka (npr. 512 bajtova) organiziran je tako da ima zaglavlje (engl. preamble) koje se sastoji od oko 10 bajtova i koje dopušta sinkronizaciju glavi za čitanje i pisanje, zatim sadržava tzv. adresnu značku (duljine nekoliko bajtova) koja označava kraj zaglavlja i početak podataka (npr. 512 bajtova korisničkih podataka kodiranih RLL (Run-Lenght-Limited) kodom tako da se fizički zapis sastoji od 544 bajtova). Zapisu podataka slijedi polje zaštite ECC (Error Correcting Code) tipično duljine oko 40 bajtova. Ovisno o izvedbi, zaštitnom polju može biti pridruženo polje cikličke zaštite CRC (Cyclic Redundancy Checksum) čime se povećava integritet korisničkih podataka. Između slijednih sektora u stazi postoji mali razmak (engl. intersector gap). Slika 9.23 prikazuje dio staze s podrobnijom organizacijom sektora.
polje zaštite širina \ \ staze \ 4-8 ^m
^--podaci —— adresna značka ^ ^ zaglavlje
SI. 9.23 Dio staze s prikazom organizacije sektora Svaki sektor je u diskovnoj jedinici određen fizičkom adresom PBA (Physical Block Address) koja se sastoji od broja cilindra (odnosno broja staze; između 0 i C - 1 , gdje je C ukupan broj staza na jednoj površini ploče), od broja površine, odnosno indeksa glave za čitanje i pisanje te od broja (indeksa) sektora (između 0 i N -1, gdje je N ukupan broj sektora u stazi). Takav se oblik adrese naziva još i CHS (Cylinder-Head-Sector) adresa. Na primjer, fizička adresa kojom se jednoznačno određuje podatak pohranjen na disku može biti C = 26300, H = 4 i S = 432. Adresa CHS, zapravo, predstavlja koordinate podataka u trodimenzional-: nom prostoru. Gustoća zapisa (Gb/cm2) ovisi o gustoći staza (broj_staza/cm) te o linearnoj gustoći bitova j uzduž staze (b/cm) i tipično se kreće od 3 do 10 Gb/cm2. Linearna gustoća bitova ovisi o '
S. RIBARIĆ - GRAĐA RAČUNALA
295,
čistoći magnetske površine i kakvoće zraka (ne zaboravimo da glava lebdi nad kružnom pločom) i iznosi od 50000 do preko 100000 b/cm. Da bi se postigla velika kakvoća površine i zraka, većina je diskovnih jedinica tvornički hermetički zatvorena da bi se spriječio ulazak prašine. Kada se govori o kapacitetu magnetske diskovne memorije, razlikuje se kapacitet formatiranog diska od neformatiranog. Proizvođači diskovnih jedinica isporučuju formatirane jedinice što podrazumijeva daje inicijalno upisana informacija o stazi i sektoru na svim površinama te daje provjereno jesu li svi sektori ispravni, odnosno mogu li se u njih upisivati, ali i čitati podaci. Ako usprkos uporabi koda za ispravljanje pogrešaka nije moguće ispravno pohraniti i pročitati podatke iz sektora, onda se taj sektor označava kao "loš" (engl. bod sector) tako da se može izbjeći njegovo korištenje od strane operacijskog sustava. Zbog postojanja, zaglavlja, adresne značke, polja zaštitnog koda, razmaka između sektora, rezervnih staza koje dopuštaju "popravak" neispravnih staza i sektora, kapacitet formatirane diskovne jedinice znatno je manji od kapaciteta neformatirane jedinice čija se procjena temelji na gustoći zapisa.
9.8.3. STATIČKI I DINAMIČKI PARAMETRI DISKOVNE JEDINICE Pod statičkim se parametrima magnetske diskovne jedinice podrazumijevaju parametri koji se odnose na njezin kapacitet: i) površinska gustoća izražava se brojem bitova po jedinici površine i računa se kao: 1 / (razmak između bitova x razmak između staza); ii) maksimalna površinska gustoća jest gustoća koja se odnosi na područje staze s najmanjim rad iju som; iii) maksimalna linearna bitovna gustoća jest bitovna gustoća zapisa po jedinici duljine za stazu s najmanjim radijusom; iv) prosječna bitovna gustoća je ukupan kapacitet površine podijeljen s ukupnom površinom predviđenom za zapis podataka; v) neformatirani kapacitet jest ukupan broj bitova po sektoru pomnožen s brojem sektora na disku; vi) formatirani kapacitet diskovne jedinice računa se kao: (broj_bajtova_podataka / sektor) x (broj_sektora / staza) x (broj_staza / površina) x (broj_površina); Primjer 9.6. Izračunajmo neformatirani kapacitet diskovne jedinice za koju su poznati sljedeći podaci: diskovna jedinica ima dvije kružne ploče s 20000 cilindara, prosječno 520 sektora po stazi te 544 bajtova po sektoru. Dvije kružne ploče imaju ukupno 4 površine za zapis podatka. Kapacitet neformatirane diskovne jedinice iznosi: 4 x 20000 x 520 x 544 = 2.263 x 1010 bajtova, odnosno izraženo u GB: (2.263 x IO 10 )/2 30 = 21.076 GB. Uz pretpostavku da se oko 10% od ukupnog kapaciteta gubi na razmake između sektora, zaglavlja, adresne značke i na područje zaštite (CRC i EEC) formatirani kapacitet diskovne jedinice bio bi oko 18 GB.
^ 296
9. POGLAVLJE: MEMORIJSKI SUSTAV
Dinamički parametri diskovne jedinice odnose se na vrijeme pristupa podacima tijekom operacije pisanja ili čitanja. Vrijeme pristupa određuje se na temelju triju operacija: i) pozicioniranje glave za čitanje i pisanje na odgovarajuću stazu.Ta se operacija naziva traženje (engl. seek), a vrijeme potrebno za postavljanje glave na željenu stazu naziva se vrijeme traženja (engl. seek time); ii) pristup željenom sektoru na stazi. Nakon što se glava nalazi na odgovarajućoj stazi, mora se pričekati da se željeni sektor na temelju rotacije ploče nađe pod glavom. Vrijeme potrebno da bi se ta operacija obavila naziva se rotacijska latencija (engl. rotational latency) ili rotacijsko kašnjenje. Jasno, ono ovisi o brzini vrtnje kružne ploče; iii) prijenos bloka podataka jest posljednja od triju operacija. Vrijeme koje je potrebno za prijenos bloka podataka naziva se vrijeme prijenosa (engl. transfer time). Ono ovisi o veličini sektora, brzini vrtnje i gustoći zapisa podataka na stazi. Vrijeme traženja ovisi o položaju gdje se glava za čitanje i pisanje nalazila kad je zaprimljen novi zahtjev te kako brzo može putovati s trenutne staze na željenu stazu. Ove su vrijednosti nepoznate te se koristi srednje ili prosječno vrijeme traženja. Prosječno se vrijeme traženja određuje na temelju ukupnog vremena potrebnog za sva moguća traženja i broja mogućih traženja. To vrijeme deklarirano od strane proizvođača diskova iznosi od 3 ms do 13 ms. Sličan je problem i s rotacijskom latencijom. Koristi se srednje vrijeme rotacijske latencije koje se računa kao vrijeme potrebno za rotaciju ploče za 180 stupnjeva. Na primjer, za brzinu vrtnje od 15000 RPM srednje vrijeme rotacijske latencije iznosi: 0.5 okreta /15000RPM = 0.5 okreta / (15000 RPM / (60 sekunda/minuta)) = 2.0 ms. Brzina prijenosa bloka podataka je između 70 i 125 MB/s. Kada diskovna jedinica koristi posebnu priručnu memoriju, tzv. disk cache brzina prijenosa povećava se na 375 MB/s i više. Vremenu pristupa koje se sastoji od navedenih triju vremena pridodaje se još i vrijeme upravljačke jedinice diska (engl. controller time) koje zahtijeva upravljačka jedinica za upravljanje diskom i za prijenos podataka između diska i memorije. Uz prethodno navedene dinamičke parametre koriste se još i vrijeme pristupa susjedno; stazi (engl. track-to-track access time) te brzina prijenosa podataka u snopu (engl. burst rate te brzina prijenosa podataka za neko određeno razdoblje (period) (engl. substained data rate). Brzina podataka u snopu odnosi se na maksimalnu brzinu prijenosa podataka jednom kada je glava za čitanje i pisanje prispjela na željeni sektor. Primjer 9.7. Odredimo prosječno vrijeme čitanja iii pisanja sektora koji se sastoji od 512 bajtova za diskovnu jedinicu koja ima sljedeće podatke: brzina vrtnje 15000 RPM, prosječno vrijeme traženja 3 ms, brzina prijenosa 125 MB/s i vrijeme upravljačke jedinice neka je 0.2 ms. Prosječno vrijeme pristupa jednako je sumi koju čine prosječno vrijeme traženja, prosječno vrijeme rotacijske latencije, vrijeme prijenosa i vrijeme upravljačke jedinice diska: 3.0 ms + (0.5 okreta /15000 RPM) + (512 bajtova / 125 MB/s) + 0.2 ms = 3.0 + 2.0 + 0.004 + 0.2 = 5.204 ms.
S. RIBARIĆ - GRAĐA RAČUNALA
297,
Primjer 9.8. Tablica 9.3. prikazuje tehničke značajke dviju diskovnih jedinica (Seagate ST31000340NS i Hitachi DK23DA). Tehničke značajke
Seagate ST31000340NS
Hitachi DK23DA40
Promjer kružne ploče (inč)
3.5
2.5
Kapacitet formatiranog diska (GB)
1000
40
Broj površina (glava)
4
4
Brzina vrtnje (RPM)
7200
4200
Prosječno vrijeme traženja (ms)
8.5
13
Minimalno vrijeme traženja (ms)
1.0
3
Sučelje, brzina prijenosa (MB/s)
SATA (Serial ATA), 375
ATA-5,100
Tipično područje primjene
Poslužitelj
Prijenosno računalo
Potrošak el. energije (W)
15
2.3
Tablica 9.3. Tehničke značajke dviju diskovnih jedinica
Jedna od važnih značajki diskovne jedinice jest njezina pouzdanost. Ona se izražava parametrom MTBF (Mean Time Between Failure) koji predstavlja statističku mjeru srednjeg vremena do kvara. Srednje vrijeme do kvara MTBF za suvremene diskovne jedinice iznosi više od 1000 000 sati što znači da se može očekivati da će diskovna jedinica raditi bez kvara više od 100 godina. Na primjer, MTBF za disk Seagate ST31000340NS iznosi 1200 000 sati.
9.8.4. PRIRUČNA DISKOVNA MEMORIJA (ENGL. DISK CACHE) Priručna diskovna memorija je memorija s izravnim pristupom koja se koristi da bi se smanjio broj pristupa disku. Načelo rada diskovne priručne memorije slično je onom kada procesor pristupa brzoj priručnoj memoriji umjesto sporijoj glavnoj memoriji (poglavlje 10.). Pojednostavnjeno, funkciju priručne diskovne memorije možemo opisati ovako: kad su potrebni podaci pohranjeni u određenom sektoru, s diska se dohvaćaju i susjedni sektori (ili čak svi sektori sa staze nad kojom je pozicionirana glava za čitanje i pisanje). Dohvaćeni sektori pohranjuju se u priručnu diskovnu memoriju. Ako se, zbog lokalnosti podataka i programa, sada zahtijevaju podaci koji se nalaze u slijednim sektorima koji su susjedni prethodno referenciranom sektoru (što znači da se nalaze se na istoj stazi), oni će biti dohvaćeni iz brze priručne diskovne memorije umjesto s diska. Ako se pohrane svi sektori jedne staze u priručnu diskovnu memoriju, skoro se u potpunosti eliminira vrijeme rotacijske latencije diska: kad upravljačka jedinica diska primi zahtjev za pristup sektoru na disku, ona prvo provjerava nalazi li se sektor s traženim podacima u priručnoj diskovnoj memoriji. Ako se sektor nalazi pohranjen u priručnoj diskovnoj memoriji, on se dohvaća iz memorije (operacija čitanja) ili se on modificira (operacija pisanja) u priručnoj diskovnoj memoriji. Naravno, u tom se slučaju ne pristupa sektoru na disku. Kad se dogodi da se traženi sektor nalazi u priručnoj diskovnoj memoriji, govorimo o pogotku priručne diskovne
^ 298
9. POGLAVLJE: MEMORIJSKI SUSTAV
memorije (engl. hit of disk cache), a mjeru pogotka izražavamo omjerom pogotka (poglavlje 10.). Eksperimentalno je utvrđeno da se omjer pogotka za priručne diskovne memorije kreće oko 90%. Operacija pisanja u sektor za koji je postignut pogodak obavlja se tako da se obavi modifikacija sektora u priručnoj diskovnoj memoriji, a sadržaj sektora na disku modificira se tek u fazi zamjene kada se taj trenutno nekorišteni (neaktivni) sektor vraća natrag na disk. Ova se tehnika obnavljanja sadržaja diska naziva„kopiranje nazad" (engl. copy back, writeback). Postupak kopiranja nazad opisan je u poglavlju 10. Kad se dogodi promašaj, odnosno kad se traženi sektor ne nalazi u priručnoj diskovnoj memoriji, onda se obavlja zamjena kojom se mora prvo napraviti mjesta za traženi sektor u diskovnoj priručnoj memoriji, i to tako da se neki neaktivni sektori (ili čak svi sektori jedne staze) vrate natrag na disk, a na njihovo mjesto pohrane traženi sektor i njegovi susjedni sektori (ili svi sektori u stazi). Diskovne jedinice imaju priručne memorije kapaciteta od 0.125 MB do 32 i više MB. Na primjer, diskovna jedinica Seagate ST31000340NS ima priručnu memoriju kapaciteta 32 MB, a Hitachi DK23DA40 priručnu memoriju kapaciteta 2 MB. (Primjer 9.8.). Ubrzanje rada diskovne jedinice uporabom priručne diskovne memorije značajno je jer je vrijeme potrebno za pretraživanje i dohvat sektora iz priručne memorije u usporedbi s prosječnim vremenom pristupa disku vrlo malo. Primjer 9.9, Ocijenimo ubrzanje rada diskovne jedinice s priručnom diskovnom memorijom Hitachi DK23DA40 iz primjera 9.8. Diskovna jedinica je kapaciteta 40 GB i ima prosječno 591 sektor po stazi. Sektor je veličine 512 B. Disk, odnosno 2 kružne ploče, rotiraju brzinom od 4200 RPM. Prosječno vrijeme traženja za diskovnu jedinicu iznosi 13.0 ms. Uz pretpostavku da se cijele staze pohranjuju u priručnu memoriju diskovne jedinice i daje omjer pogotka 90%, ocijenimo ubrzanje rada diskovne jedinice u odnosu na diskovnu jedinicu s jednakim parametrima ali bez priručne memorije. Prosječno vrijeme pristupa sektoru jednako je zbroju prosječnog vremena traženja i prosječnog vremena rotacijske latencije te vremena rotacije nad dijelom staze u kojem se nalazi sektor: 13.0 ms + (0.5 okreta/ 4200 RPM) + ((1 / 591) / 4200 RPM) = 13 + (0.5 okreta / (4200 RPM / 60 sekunda/minuta)) + (1 / 591) / (4200 RPM /60 sekunda/ minuta) = 13 ms + 7.14 ms + 0.02417 ms = 20.16 ms Vrijeme čitanje cijele staze (svih sektora u stazi) jednako je zbroju prosječnog vremena traženja i vremena potrebnog za jedan okret diska: 13.0 ms + 1 / (4200 RPM /60 sekunda/minuta) 13 ms + 14.28 ms = 27.28 ms Za omjer pogotka 90 % vrijedi da se deset pristupa sektoru na disku u trajanju 10 x 20.16 ms zamjenjuje pristupom priručnoj diskovnoj memoriji koja je trebala 27.28 ms za dohvat svih sektora sa staze. Ubrzanje iznosi: (10 x 20.16 ms) / 27.28 ms = 7.39
S. RIBARIĆ - GRAĐA RAČUNALA
299,
Stvarno je ubrzanje nešto manje jer smo zanemarili da latencije koje se odnose na pohranu i dohvat podataka iz priručne diskovne memorije i aktivnosti upravljačke jedinice diska.
9.9. POLJE DISKOVA RAID (REDUNDANT ARRAY OF INEXPENSIVE DISKS) U posljednja dva desetljeća prosječan se kapacitet diskova povećavao 70% godišnje, dok su se vrijeme pristupa i brzina prijenosa poboljšavali umjerenije - svega 7% godišnje. Razlozi tom umjerenijem poboljšanju brzine prijenosa jesu ograničenja koja postavljaju elektromehanička svojstva diska - brzina vrtnje kružnih ploča i postavljanje ručice s glavom za čitanje i pisanje na željenu stazu. Za ilustraciju napretka diskovne tehnologije navedimo da je krajem devedesetih godina prošlog stoljeća diskovna jedinica velikih performansi imala kapacitet 9 GB i brzinu vrtnje ploča 5400 RPM. Godine 2005. bile su raspoložive diskovne jedinice kapaciteta 500 GB i brzinu vrtnje 7200 RPM. Postoje primjene računarskog sustava koje zahtijevaju kapacitet diskovnih jedinica i brzinu prijenosa koje premašuju značajke postojećih najbržih i najvećih diskovnih jedinica. Izgradnja diskovnih jedinica još većeg kapaciteta i brzine tehnološki je ipak moguća, ali nije ekonomski opravdana. Ekonomski opravdano rješenje problema velikog kapaciteta i ubrzanje prijenosa podataka temelji se na uporabi višediskovnog sustava koji se sastoji od polja diskova (engl. disk array) kojima se pristupa paralelno. Podaci se pritom mogu raspoređivati po diskovima u polju na različite načine. U najjednostavnijoj izvedbi nema logičke povezanosti pojedinih diskovnih jedinica u polju. Svaka je diskovna jedinica zadržala svoj vlastiti identitet i može se adresirati nezavisno. Obično se takva organizacija naziva JBOD (Just-a-bunch of disks - samo nakupina diskova). U drugom načinu raspoređivanja cijelo se polje diskova promatra kao jedan logički adresni prostor koji je podijeljen na blokove čvrste duljine koji se nazivaju pojasne jedinice (engl. stripe unit). Te se pojasne jedinice smještaju na diskove u polju kružnim dodjeljivanjem (engl. round-robin) i oblikuju pojas (slika 9.24). Na taj se način datoteka koja je veća od jedne pojasne jedinice pohranjuje na veći broj diskova u diskovnom polju. Slika 9.24 prikazuje kako se četiri datoteke različitih veličina pohranjuju u polju diskova koje se sastoji od tri diska. Datoteka a sastoji se od četiri pojasne jedinice i "raspršena"je na sva tri diska tako da disk 0 sadržava dvije pojasne jedinice {al i a4), a preostala dva diska po jednu pojasnu jedinicu - a2 je na disku 1, a3 je na disku 2. Datoteka b, koja se sastoji od sedam pojasnih jedinica, raspršena je na također na sva tri diska tako da svaki od diskova sadržava više pojasnih jedinica. Datoteka cje mala i sastoji se samo od jedne pojasne jedinice koja je smještena na disku 2. Datoteka d sastoji se od tri pojasne jedinice koje su smještene na diskovima 0,1 i 2. Početni motiv organizacije podataka na disku u obliku pojasa koji se sastoje od pojasnih jedinica bio je paralelni prijenos podataka s više diskova i na taj način povećanje brzine prijenosa. Ubrzanje se postizalo ako je količina podataka koji se prenose bila dovoljno velika tako da su pojasne jedinice bile smještene na veći broj diskovnih jedinica u polju. Na primjer, ako se pristupa datoteci d koja se sastoji od tri pojasne jedinice (d1, d2 i d3) (slika 9.24), tada se istodobno mogu prenijeti podaci sa sva tri diska. Godine 1987. grupa znanstvenika s University of California, Berkeley, predložila je posebnu organizaciju polja diskova koju su nazvali RAID {Redundant Array of Inexpensive Disks) - za-
^
300
9. POGLAVLJE: MEMORIJSKI SUSTAV
lihosno (redundantno) polje jeftinih diskova. Proizvođači diskovnih jedinica zbog komercijalnih su razloga izmijenili naziv u Redundant Array of Independent Disks - zalihosno polje nezavisnih diskova.
pojasna jedinica
diskO
disk!
disk 2
al
a2
a3
a4
bi
b2
b3
b4
b5
b6
b7
cl
- pojas
SI. 9.24 Primjer smještanja četiriju datoteka, koje se sastoje od različitog broja pojasnih jedinica u polje od tri diskovne jedinice RAID se pojavljuje u šest osnovnih načina izvedbe: od RAID 0 do RAID 5. Svaki od načina izvedbe ima sljedeće tri značajke: i) operacijski sustav vidi RAID skupinu fizičkih diskovnih jedinica kao jednu logičku diskovnu jedinicu; ii) podaci su raspoređeni na fizičke diskovne jedinice u skupini; iii) zalihosni diskovni kapacitet upotrebljava se za pohranu zaštitnog koda koji jama oporavak podataka u slučaju kvara diskovne jedinice. RAID je djelotvorna zamjena za jednu veliku i skupu diskovnu jedinicu (SLED-Single Large Expensive Disk). Opišimo osnovne načine izvedbe RAID. RAID 0 je izvedba koja nema zalihosti pa nije prava članica porodice RAID. U toj su izvedbi podaci porazdijeljeni na sve diskove u polju. Diskovi su podijeljeni u pojasne jedinice koje predstavljaju osnovnu adresirljivu jedinicu. Pojasne jedinice mogu biti fizički blokovi, sektori ili neke druge jedinice podataka. One se smještaju na diskove kružnim dodjeljivanjem (engl. round-robin). Slika 9.25 prikazuje logičku diskovnu jedinicu i način smještanja pojasnih jedinica na četiri fizičke diskovne jedinice diskovnog polja RAID 0 kružnim dodjeljivanjem. Skup logički slijednih pojasnih jedinica, koji se preslikava tako da se točno po jedna pojasna jedinica dodijeli svakom disku u diskovnom polju, naziva se pojas. Ako imamo polje od k diskovnih jedinica, prvih se k logičkih pojasnih jedinica fizički pohranjuje u prvom pojasu, sljedećih k pojasnih jedinica u drugom pojasu itd. Prednost ovakve organizacije jest u tome što se na temelju jednog zahtjeva za prijenosom podataka s diska (ili prema disku) koji se sastoji od k slijednih logičkih pojasnih jedinica mogu paralelno prenijeti k pojasnih jedinica što u velikoj mjeri reducira vrijeme potrebno za prijenos podataka. Da bi se to ostvarilo, moraju biti zadovoljena dva uvjeta: i) mora biti osigurana pojasna širina prijenosnog puta između memorije i pojedinih diskovnih jedinica u polju, ii) količina podataka koja sudjeluje u prijenosu predočena logičkim slijednim pojasnim jedinicama mora biti puno veća od veličine pojasne jedinice.
S. RIBARIĆ - GRAĐA RAČUNALA
301,
logički disk
fizički disk 0
fizički d i s k !
fizički disk 2
fizički disk 3
pojasna jedinica 0
pojasna jedinica 0
pojasna jedinica 1
pojasna jedinica 2
pojasna jedinica 3
pojasna jedinica 1
pojasna jedinica 4
pojasna jedinica 5
pojasna jedinica 6
pojasna jedinica 7
pojasna jedinica 2
pojasna jedinica 8
pojasna jedinica 9
pojasna jedinica 3
pojasna jedinica 4 pojasna jedinica 5
pojasna jedinica 6 pojasna jedinica 7
programska oprema za upravljanje poljem diskova
pojasna jedinica 8 pojasna jedinica 9
SI. 9.25 Logička diskovna jedinica i četiri fizičke diskovne jedinice diskovnog polja RAID 0
Ako su zadovoljena potonja dva uvjeta, tada je paralelni prijenos podataka s višestrukih diskova puno brži od prijenosa s jednog diska velikog kapaciteta. U idealnom bi slučaju postignuto ubrzanje pristupa podacima iznosilo k puta, gdje je k broj diskova u polju. No uvišestručenje diskova ima negativan utjecaj na pouzdanost diskovnog sustava - srednje vrijeme do kvara MTBF sada je za faktor k kraće. U organizaciji diskovnog polja RAID 1 podvojeni su diskovi u diskovnom polju. Diskovno se polje sastoji od osnovnih diskova od kojih svaki ima svoju kopiju tzv. zrcaljeni disk (engl. mirroreddisk). U toj se organizaciji svaka logička pojasna jedinica preslikava na dva odvojena fizička diska - osnovni disk i njegov zrcaljeni disk (slika 9.26). diskO
disk ]
disk 2
disk3
osnovni diskovi
disk 4
^
disk 5
disk 6
disk 7
zrcaljeni diskovi
SI. 9.26 Organizacija RAID 1 diskovnog sustava
Slika 9.26 prikazuje primjer RAID 1 diskovnog sustava koji se sastoji od četiri osnovna diska i četiri zrcaljena diska. Zalihost takve organizacije je 100%, odnosno ako jedan disk ispadne iz rada, jednostavno se rabi zrcaljeni disk umjesto njega. Oporavak od posljedica ispada
^ 302
9. POGLAVLJE: MEMORIJSKI SUSTAV
postiže se instalacijom novog diska i kopiranjem sadržaja s odgovarajućeg zrcaljenog diska. Osim toga, RAID 1 nudi još jednu pogodnost: zahtjev za čitanjem može biti poslužen od strane jednog od dva diska (osnovnog ili zrcaljenog) koji sadržavaju iste podatke ovisno o tome koji od njih zahtijeva kraće vrijeme traženja i rotacijske latencije. Na taj se način može brzina čitanja skoro podvostručiti. Operacija pisanja zahtijeva obnavljanje sadržaja obje pojasne jedinice (na osnovnom disku i zrcaljenom disku), međutim, to se može izvesti paralelno tako da pisanje ne narušava performansu diskovnog sustava. U tom je slučaju vrijeme pohrane podatka na disk jednako onom koje odgovara disku s duljim vremenom traženja i rotacijske latencije. Jedan od osnovnih nedostataka RAID 1 jest njegova cijena - zahtijeva se dva puta veći diskovni prostor od onog koji određuje logički disk. ili drugim riječima - pola od ukupnog raspoloživog diskovnog kapaciteta troši se za postizanje zalihosti. Za razliku od RAID 0 i RAID 1 diskovne organizacije koje obično imaju pojasne jedinice veličine sektora, RAID 2 se koristi pojasnim jedinicama veličine riječi, bajta ili čak bita. Zalihost se u RAlD-u 2 postiže uporabom koda za ispravljanje pogrešaka (ECC). Na primjer, ako se rabi Hammingov kod (7,4), gdje je 7 broj bitova kodne riječi, a 4 broj bitova koji nose informaciju, tada se tri zaliha diska koriste za svaki od četiri diskova koji pohranjuju po jedan bit podatka (pojasna jedinica je veličine jednog bita). Općenito, vrijedi da Hammingov kod kojim se može ispraviti jedna pogreška (engl. single-bit error-correcting code) u n bitova podataka zahtijeva log2 n + 1 korekcijskih bitova. Na temelju 4 bita podataka (po jedan bit sa svakog diska podataka) računaju se tri korekcijska bita i svaki se od njih pohranjuje na po jedan od redundantnih diskova. Operacijom čitanja istodobno se pristupa svim diskovima u polju. Zahtijevani se podaci zajedno s korekcijskim kodom prosljeđuju upravljačkoj jedinici diskovnog polja. Ako se dogodila jednostruka pogreška, upravljačka će ju jedinica prepoznati i grešku trenutno ispraviti pa vrijeme pristupa neće biti produljeno. Tijekom operacije pisanja mora se pristupiti svim diskovima u polju (osnovnim i onim u koje se pohranjuje korekcijski kod). Organizacija RAID 2 obično zahtijeva da sve osovine pojedinih diskovnih jedinica budu sinkronizirane te da se glave svakog od diskova nalaze na istoj poziciji. Slika 9.27 prikazuje diskovnu organizaciju RAID 2 (4 bita podataka + 3 bita korekcijskog koda). RAID 2 se koristi u okolinama u kojima se očekuju česte pogreške. No u izvedbama koje imaju povećanu pouzdanost pojedinih diskova i diskovnih jedinica uporaba organizacije RAID 2 teško se može ekonomski opravdati. diskO
disk 1
disk 2
osnovni diskovi
SI. 9.27 Diskovna organizacija RAID 2
disk3
disk 4
^
disk 5
disk 6
diskovi na kojima se pohranjuju korekcijski kodovi
^
S. RIBARIČ - GRAĐA RAČUNALA
303
Diskovna organizacija RAID 3 koristi pojasne jedinice veličine bita i po tomu je slična organizaciji RAID 2. No umjesto uporabe Hammingovog koda koristi jednostavnu shemu paritetne zaštite pri čemu se računa paritetni bit za skupinu podatkovnih bitova. Paritetna zaštita pohranjuje se na odgovarajuću poziciju tzv. paritetnog diska. Na taj se način zahtijeva samo jedan zalihi disk (paritetni disk), i to bez obzira na to koliko ima osnovnih diskovnih jedinica. Slika 9.28 ilustrira takvu diskovnu organizaciju. U slučaju ispada iz rada jednog od osnovnih diskova pristupa se paritetnom disku i podaci se rekonstruiraju na temelju podataka s preostalih osnovnih diskova. Kad se diskovna jedinca, koja je ispala iz rada, zamijeni novom, podaci koji nedostaju mogu se ponovo pohraniti u toj diskovnoj jedinici. Na primjer, pretpostavimo da imamo diskovno polje RAID 3 od devet diskovnih jedinica: osam osnovnih i jedne paritetne. Svaki od osnovnih diskovnih jedinica pohranjuje po jedan od osam bitova podataka. Pojas čini osam bitova podataka dQ-d7 i paritetni bit p. Paritetna diskovna jedinica pohranjuje paritetni bit p koji se računa kao: p=
d0®d1®d2®d3®d4®d5®d6®d7,
gdje j e © logička operacija ISKLJUČIVO ILI. Pretpostavimo da je jedan od osnovnih diskova ispao iz rada, primjerice onaj koji pohranjuje bitove podataka dr Rekonstrukcija podataka izvodi se na sljedeći način: d3 = d0®d1®d2®d4®d5®d6®d7®p. Pokažimo daje to zaista tako: ako jednadžbi za p na obje strane pridodamo ®d3, dobivamo: , p®d3 = d0®d1®d2®d3®d4®d5®d6® d7® d3 p®d3 = dQ®d1®d2®d4®d5®d6®d7,jerjed3®d3
= 0.
Ako sada potonjoj jednadžbi s lijeve i desne strane dodamo © p , dobivamo: d3 = d0®d1®d2®d4®d5®d6®d7®p. Vidimo da se zaista sadržaj u pojasu podataka u bilo kojem od osnovnih diskova u polju može rekonstruirati na temelju preostalih podataka u pojasu. diskO
disk 1
disk 2
disk 3
disk 4
11
12
15
16
19
o s n o v n i diskovi
disk na k o j e m se p o h r a n j u j u paritetni b i t o v i
SL 9.28 Diskovna organizacija RAID 3
U diskovnoj organizaciji RAID 3 podaci su raspršeni u vrlo male pojasne jedinice pa stoga RAID 3 postiže vrlo velike brzine prijenosa. Jednim se zahtjevom izvodi istodobni prijenos podataka sa svih osnovnih diskova.
^ 304
9. POGLAVLJE: MEMORIJSKI SUSTAV
Diskovna organizacija RAID 4 (slika 9.29) slična je organizaciji RAID 3 po tome što za korekciju jednostrukih pogrešaka koristi jedan paritetni disk. No umjesto pojasne jedinice veličine bita koristi se sektor. Na primjer, ako je svaka pojasna jedinica duljine n bajtova, za sve se pojasne jedinice podataka u pojasu izvodi operacija ISKLJUČIVO ILI i dobiva se n bitova duga pojasna jedinica koja se pohranjuje na odgovarajuću poziciju paritetnog diska. Pri ispadu iz rada jednog od diskova mogu se rekonstruirati podaci pokvarene pojasne jedinice uz pomoć pripadne pojasne jedinice paritetnog diska. diskO
disk 1
disk 2
disk3
disk 4
p(0-3) p(4-7) p(8-11) P02-15)
paritetni disk
osnovni diskovi SI. 9.29 Diskovna organizacija RAID 4
Diskovna organizacija RAID 5 organizirana je slično kao i RAID 4, samo što su paritetne pojasne jedinice raspoređene po svim diskovnim jedinicama (slika 9.30). disk 0
disk 1
disk 2
disk 3
disk 4
p(0-3)
11
15 19 p(20-23)
p(28-31) SI. 9.30 Diskovna organizacija RAID 5
Osim šest osnovnih izvedbi diskovnih organizacija RAID postoji i više inačica, na primjer RAID 6 (organizacija sa zaštitom od dvostrukog kvara), RAID 0 + 1 (RAID 01) i RAID 1 + 0 (RAID 10) (složeni diskovni sustavi koji kombiniraju značajke RAID 0 i RAID 1) te RAID sustavi koji kombiniraju različite osnovne RAID izvedbe (RAID 0 + 5, RAID 5 + 0 (RAID 50), RAID 1 + 5 (RAID 15)).
S. RIBARIĆ - GRAĐA RAČUNALA
305,
9.10. SAVITLJIVI DISK (ENGL. FLOPPY DISK) Savitljivi disk ili disketa je zamjenjiva ili premjestiva (engl. removable) sekundarna memorija kojom se podaci mogu prenositi između računarskih sustava. U uporabi se savitljivi disk nalazi od šezdesetih godina prošlog stoljeća, ali zbog dugog vremena pristupa i malog kapaciteta danas je skoro zastarjela komponenta. Izvorno, disketa je bila izrađena na tankoj plastičnoj savitljivoj kružnoj ploči koja je bila presvučena magnetskim materijalom. Ploča je bila smještena u 8-inčnom kvadratnom zaštitnom ovitku. Kapacitet 8-inčne diskete (SSSD - Single Sided Single Density) bio je 300 KB. 8-inčne diskete DSSD (Double Sided Single Density) bile su kapaciteta 500 KB. Poslije 8-inčnih disketa pojavile su se 5 1/4-inčne diskete skromnog kapaciteta od svega 80 KB, te one 5 1/4-inčne DD (Double Density) kapaciteta 360 ili 800 KB. Nakon toga u uporabi su bile 3 1/2-inčne diskete kapaciteta 1.44 MB (u nekim su se izvedbama pojavljivale i diskete kapaciteta 2.88 MB). Disketa 3 1/2 inča, kapaciteta 1.44 MB imala je 80 staza s 18 sektora po stazi. Kružna se ploča okretala brzinom od 360 RPM što je samo oko 2 % - 4% brzine vrtnje magnetskog diska, a vrijeme latencije bilo je 166 ms. Gustoća zapisa bila je oko 17000 bita po inču. Pred sam kraj 20. stoljeća pojavile su se diskete 3 Vi inča HiFD (High capacity Floppy Disk) kapaciteta 150/200 MB. Disketna jedinica, koja se danas rijetko nalazi i u osobnim računalima, imala je glave za čitanje i pisanje, upravljane koračnim motorima, koje su kroz otvor na zaštitnom omotu pristupale magnetskom mediju. Glava je, za razliku od jedinica magnetskog diska, bila u fizičkom kontaktu s površinom kružne ploče. Da bi se spriječilo habanje glave, ali i magnetskog omotača, pogonski se motor automatski zaustavljao nakon određenog vremena neaktivnosti jedinice. Jedinicu diskete uspješno su zamijenile jedinice kao što su upisno-ispisne neizbrisive memorije kao što su USB (Universal Serial Bus) memorijski štapić (engl. USB memory stick) i optičke memorije.
9.11. MAGNETSKA VRPCA Jedinica magnetske vrpce jedna je od najstarijih i najjeftinijih premjestivih sekundarnih memorija sa sekvencijalnim pristupom. Ona se sastoji od tanke savitljive plastične vrpce presvučene magnetskim materijalom, obično upakirane u malu kasetu. Podaci se pohranjuju u digitalnom (binarnom) obliku u longitudinalnim stazama. Broj staza je za ranije izvedbe bio 9 - osam za pohranu jednog bajta podatka i jedna za paritetni bit. Današnje jedinice magnetske vrpce imaju nekoliko stotina staza. Kao i u slučaju magnetskog diska, podaci se čitaju i upisuju u blokovima koji se nazivaju fizičkim zapisima (engl. physical record). Blokovi na vrpci odvojeni su tzv. međuzapisnim razmacima. Nepokretna glava za čitanje i pisanje istodobno pristupa svim stazama na vrpci koja se kreće konstantnom brzinom. Brzina prijenosa podataka ovisi o gustoći zapisa i brzine vrpce. Na primjer, za jedinicu s 80 staza i gustoćom zapisa od 110 Kb po inču te brzinom vrpce od 50 inča/s maksimalna brzina prijenosa je 55 MB/s. Takva vrpca duljine 200 m ima kapacitet 8.661 GB, dok je vrijeme premotavanja cijele vrpce oko jedne minute. Magnetske vrpce danas se prvenstveno koriste kao memorija za rezervnu pohranu sadržaja s diskova te arhiviranje podataka. Razvojem tehnologije magnetskih diskova i padom njihove cijene uporaba je magnetskih vrpci u skoroj budućnosti upitna jer ih magnetski diskovi istiskuju iz uporabe.
^ 306
9. POGLAVLJE: MEMORIJSKI SUSTAV
9.12. OPTIČKE MEMORIJE 9.12.1. CD-ROM lako je optičko pohranjivanje informacija najstarija metoda koju je pračovjek koristio u svojim pećinskim crtežima, tek je 1980. James T. Russel razvio načela optičkog pohranjivanja informacija, a 1982. tvrtke Philips i Sony na tržište su plasirale prvi kompaktni disk CD {Compact Disk) koji je pohranjivao oko 650 MB audioinformacije. Optički disk ili kompaktni disk (slika 9.31) kao ispisna memorija CD-ROM promijenio je tehnologiju sekundarne memorije i predstavlja prenosivu memoriju velikog kapaciteta niske cijene. CD-ROM može pohranjivati od 650 MB pa sve do 900 MB podataka (što približno odgovara oko 400 tisuća stranica teksta) na jednoj strani čvrste plastične kružne ploče promjera 120 mm i debljine 1.2 mm, koja ima rupu promjera 15 mm u svom središtu. Površina ploče ima dugu spiralnu stazu "utisnutu" u polikarbonatnu ploču, presvučenu 125 nm debelim slojem aluminijskog reflektirajućeg materijala i prozirnim zaštitnim plastičnim slojem. Informacija je pohranjena u binarnom obliku uzduž spiralne staze koja se od unutrašnjosti rasprostire do oboda kružne ploče. Podaci su pohranjeni u obliku udubina (engl. pit) promjera 0.8 mikrona i izbočina (engl. land) između njih. Podaci se čitaju tako da staza obasja svjetlom valne duljine 0.78 mikrona koje emitira laserska dioda u glavi za čitanje. Laserske se zrake odbijaju od reflektirajućeg aluminijskog sloja. Kad zrake padnu na izbočinu, odnosno mjesto između dvije udubine, svjetlo se reflektira natrag i može se otkriti osjetnikom. Reflektirano je svjetlo u tom slučaju takvo da su zrake u fazi. Ako zrake pogode udubinu, oko pola od njih padne na izbočinu, a pola u udubinu. U tom slučaju reflektirane zrake prevaljuju različite duljine putova i razlikuju se po fazi te međusobno interferiraju. Udubine su takve da iznose 1/4 valne dužine laserskog svjetla pa će rezultat interferencije biti manji svjetlosni intenzitet detektiran osjetnikom. Promjene razine svjetlosnog intenziteta reflektirajućeg svjetla odgovaraju prijelazima na stazi - od izbočine na udubinu te od udubine na izbočinu. Podaci se na CD-ROM-u kodiraju na poseban način: izvorni 8-bitni podaci pretvaraju se u 14-bitni kod. Algoritam kodiranja je takav da se izabire 14-bitna kodna riječ koja nema dvije slijedne jedinice odvojene s manje od dvije nule. No najdulji je niz nula ograničen i iznosi 10. Na taj je način od mogućih 214 bi tovnih uzoraka raspoloživo za kodiranje 267 od kojih se koristi 256. Tako transformirani podaci kodirani NRZ {Non-Return-to-Zero) kodom upisuju se u obliku udubina i izbočina na površinu optičkog diska. U postupku čitanja 14-bitni kod se pretvara u izvorni 8-bitni uporabom tablice preslikavanja (engl. look-up table). Logička struktura podataka definirana je standardom, tzv. Red Book, (Crvena knjiga), Yellow Book (Žuta knjiga), Green Book (Zelena knjiga). Tako, na primjer, Yellow Book definira da grupa od 42 slijedna 14-bitna simbola tvori 588-bitni okvir (engl. frame), pri čemu svaki okvir sadržava 192 bita podataka (24 bajta). Preostalih se 396 bitova koristi za ispravljanje pogrešaka i upravljanje. Grupiranjem 98 okvira dobiva se CD-ROM sektor, pri čemu svaki sektor započinje zaglavljem (engl. preamble) koje se sastoji od 16 bajtova. Prvih dvanaest bajtova u zaglavlju služe CD čitaču za prepoznavanje početka CD-ROM sektora, sljedeća tri sadržavaju broj sektora dok zadnji bajt u zaglavlju označava jedan od dva načina rada (Mode 1 i Mode 2). Zaglavlju slijedi 98 okvira, odnosno jedan sektor, a sektoru 288 bajtova koda za ispravljanje pogrešaka (EEC). Brzine prijenosa podataka kreću se od 75 sektor/s, odnosno 153 600 B/s (za tzv. singlespeed CD-ROM u načinu 1), odnosno 175 200 B/s (način 2). Optički disk 32x CD-ROM ima brzinu prijenosa podataka 4 915 200 B/s (32 puta je brži od single-speed CD-ROM-a).
S. RIBARIĆ - GRAĐA RAČUNALA
307,
Vrijeme traženja obično je oko nekoliko stotina milisekundi pa se CD-ROM-ovi po svojim performansama ne mogu natjecati s magnetskim diskovima. CD-ROM-ovi se, međutim, koriste za distribuciju računalnih igara, filmova, enciklopedija, atlasa, instalacijskih programa i si.
SI. 9.31 Presjek CD (ili DVD) diska i struktura CD (ili DVD) optičkog sustava
9.12.2. CD-R, CD-RW I DVD Izrada CD-ROM-a zahtijevala je posebnu relativno skupu opremu za izradu tzv. master CD-ROM-a koji je poslužio za "tiskanje" kopija. Sredinom devedesetih godina pojavili su se CD pisači (engl. CD recorder) kao periferne jedinice računala. CD pisači, ne veći od CD jedinica za čitanje (engl. CD player), omogućili su korisnicima pohranu podataka. No za razliku od magnetskih diskova, jednom zapisan sadržaj na takvom CD-u ne može se mijenjati niti izbrisati. Takvi se kompaktni diskovi nazivaju CD-R odnosno CD-Recordables i tehnološki se razlikuju od "običnih" CD-ROM-ova. CD pisači posebnim izvorom laserskog svjetla (snage 8-16 mW) mijenjaju molekularnu strukturu posebnog sloja koji je nanesen na polikarbonatnu površinu diska i na taj način pohranjuju podatke (standard za CD-R je nazvan Orange Book - Narančasta knjiga). Ova se vrsta optičkih diskova naziva i WORM CD, odnosno Write-Once-Read-Many CD jer dopušta samo jednokratno zapisivanje podataka i naravno, višekratno čitanje tako pohranjenih podataka. Inačica CD-R, nazvana CD-ROM XA dopušta inkrementalno zapisivanje, odnosno pohranu podataka tako da je na istom kompaktnom disku moguće zapisivanje podataka u više navrata u različitim vremenskim intervalima (satima, danima, mjesecima...).
308
9. POGLAVLJE: MEMORIJSKi SUSTAV
Razvoj tehnologije optičkih diskova omogućio je kompaktne diskove koji dopuštaju brisanje te ponovni zapis podataka. Takvi se kompaktni diskovi nazivaju CD-RW, tj. ispisnoupisni CD. CD-RW-i koriste posebnu smjesu srebra (Ag), indija (In), antimona (Sb) i telura (Te) za sloj u kojem se podaci zapisuju. CD-RW pisači koriste lasere triju snaga. Laserskom zrakom najveće snage topi se smjesa koja se pretvara iz visoko reflektivne kristalne strukture u nisko reflektivnu amorfnu strukturu koja odgovara udubini. Srednjom se snagom laserske zrake amorfna struktura vraća u svoje prirodno kristalno stanje koje se tumači kao izbočina. Laserskom se zrakom najmanje snage samo čita zapis, odnosno na temelju intenziteta reflektirane zrake utvrđuje se stanje sloja za zapis. Neki se CD-RW-i temelje na optičkim i magnetskim svojstvima materijala koji se koristi u aktivnom sloju za zapis.Tanki se aktivni sloj sastoji od legure telura (Te), željeza (Fe) i kobalta (Co) koji mijenja polarizaciju reflektiranog laserskog svjetla ovisno o smjeru magnetiziranja. Početno, aktivni je sloj podvrgnut uniformnom magnetskom polju kojim seTeFeCo molekule poravnavaju i time određuju osnovni smjer polarizacije reflektiranog laserskog svjetla. Taj se osnovni smjer može promatrati kao kontinuirani niz bitova s vrijednosti 0. Tijekom upisivanja, impuls laserskog svjetla "pogađa" aktivni sloj i zagrijava ga te mu mijenja magnetska svojstva. Kad se točka površine zagrije na 300° C (tzv. Curieva temperaturna točka), površina gubi početna magnetska svojstva. Istodobnim aktiviranjem elektromagneta ispod diska mijenja se smjer magnetiziranja tako da je suprotan od onog početnog. Taj novi smjer ostaje kad se laser isključi i materijal ohladi. Takva mjesta u aktivnom sloju odgovaraju bitovima s vrijednosti 1. Disk se čita laserskom zrakom manje snage. Reflektirana laserska zraka ima različitu polarizaciju ovisno o smjeru magnetiziranja aktivnog sloja. T
.
.
Značajka
CD
DVD
Promjer diska [mm]
120
120
Debljina diska [mm]
1.2
1.2
Udaljenost između staza [\xm]
1.6
0.74
Gustoća staza [k staza/inč]
43
96
Brzina prijenosa [Mb/s]
1.2-4.8
11
Valna duljina laserskog svjetla [nm]
780
635 - 650
Kapacitet jednostranog i jednoslojnog diska [GB]
0.65 - 0.68
4.7
Tablica 9.4. Usporedba CD i D V D
Krajem devedesetih godina prošlog stoljeća pojavila se nova tehnologija diskova nazvanih DVD-ROM (Digital Versatile Disk; engl. versatile - svestran). DVD-ROM izgleda kao konvencionalan CD-ROM i temelji se na istoj tehnologiji, ali s poboljšanim parametrima. Na primjer, udubine su veličine 0.4 mikrona umjesto 0.8 mikrona, udaljenost između staza je 0.74 mikrona umjesto 1.6 mikrona (za CD-ROM), valna duljina laserskog svjetla je 0.635 0.650 mikrona umjesto 0.78 mikrona. Sve to je omogućilo povećanje kapaciteta DVD-a pa jednostrani DVD-ROM ima kapacitet 4.7 GB i brzinu prijenosa od 11 Mb/s. DVD-ROM-ovi pojavljuju se u različitim izvedbama kao jednostrani i jednoslojni (engl. Single-sided, singlelayer) kapaciteta 4.7 GB, jednostrani i dvoslojni (Single-sided, dual-layer) kapaciteta 8.5 GB,
S. RIBARIĆ - GRAĐA RAČUNALA
309,
dvostrani i jednoslojni (Double-sided, single-layer) kapaciteta 9.4 GB te dvostrani i dvoslojni (Double-sided, dual-layer) kapaciteta 17 GB. Tablica 9.4. daje usporedbu osnovnih tehničkih značajki CD i DVD. Upisno-ispisni DVD ostvaren je slično kao i CD-RW jer se temelji na istoj tehnologiji. Reljefna struktura aktivnog sloja (udoline i izbočine) mijenja se tako da se laserskom zrakom mijenjaju njegova optička ili magnetska svojstva. Postoji više standarda za upisnoispisne DVD-e: DVD-i koji su tipa WORM - jednokratan upis i višekratno čitanje definirani su standardima DVD-R i DVD+R, dok su "pravi" upisno-ispisni DVD-i opisani standardima DVD-RW i DVD+RW.
7
J
S. RIBARIĆ - GRAĐA RAČUNALA
311,
10. POGLAVLJE
PRIRUČNA MEMORIJA 10.1. UVOD U 9. poglavlju vidjeli smo da latentnost memorijske jedinice predstavlja osnovnu prepreku u povećanju performanse računarskog sustava. Latentnost memorijske jedinice je od tri do pet (i više) puta veća od latentnosti procesora. Podsjetimo se, pod pojmom latentnost podrazumijeva se vrijeme koje protekne između početka i završetka neke operacije. Jedan od načina premošćivanja jaza između brzine memorije i procesora u višerazinskom hijerarhijskom memorijskom sustavu (slika 10.1) jest uporaba priručne memorije (engl. cache memory), odnosno dvorazinske memorijske hijerarhije. Slika 10.1 prikazuje osnovnu zamisao organizacije koja se sastoji od priručne memorije M 1 i glavne memorija M2. Obratite pozornost na činjenicu da se između procesora i priručne memorije prenose podaci u obliku riječi, dok se između glavne memorije i priručne izmjenjuje blok podataka koji se naziva priručni blok ili linija (engl. line; cache line). Priručna memorija je brza memorija relativno malog kapaciteta i sadržava kopiju sadržaja dijela glavne memorije - tekuće aktivne se-
gmente programa i podataka. procesor
prijenos rijeci
priručna memorija M
prijenos bloka razina priručna memorija - glavna memorija
glavna memorija
J SI. 10.1 Shematski prikaz dviju razina: priručna memorija
- glavna memorija M 2
312
11. POGLAVLJE: VIRTUALNA MEMORIJA
Sljedeća niža razina u memorijskoj hijerarhiji je glavna memorija koja je sporija, ali puno većeg kapaciteta. Tipičan odnos brzine priručne memorije i glavne memorije jest 5 :1 pa priručna memorija svojom brzinom izravno podržava rad procesora. Slika 10.2 prikazuje internu organizaciju priručne memorije. Ona se sastoji od memorije za pohranu podataka (engl. cache data memory) (Opaska: ovdje se "podaci" podrazumijevaju u širem smislu što znači da se izraz odnosi i na podatke, i na instrukcije programa), memorije za pohranu značaka (engl. cache tag memory) i sklopova za upravljanje pristupom priručnoj memoriji. Kopija sadržaja dijela glavne memorije pohranjuje se u memoriji za pohranu podataka koja je organizirana u male blokove koji se nazivaju priručni blokovi ili linije. Svaki je priručni blok označen svojom bločnom adresom koja se naziva značka pa priručna memorija "zna" kojem dijelu glavne memorije odgovara dotični blok. Značke pridružene svakom priručnom bloku pohranjene su u memoriji za pohranu značaka. Glavna je memorija također razdijeljena na blokove koji su jednake veličine kao i priručni blokovi. pogodak
priručna memorija M,
SI. 10.2 Organizacija priručne memorije
Imamo, dakle, sljedeću organizaciju: glavna memorija, koja se sastoji od 2M slijednih riječi, razdijeljena je na slijedne blokove koji se sastoje od b riječi. To znači da glavna memorija ima BM2 = 2M / b blokova (obično je veličina bloka, odnosno broj riječi u bloku, b također potencija broja 2; b = 2m, pri čemu je m « M). Memorija za pohranu podataka (u priručnoj memoriji) sastoji se BM1 priručnih blokova ili linija koji su također veličine b = 2m. Svakom je priručnom bloku pridružena značka (pohranjena u memoriji za pohranu značaka) koja sadržava informaciju o adresi bloka pokazujući na početnu lokaciju odgovarajućeg bloka u glavnoj memoriji. Priručni blok (ili linija) i značka smještaju se u priručnoj memoriji na tzv. bločnipriključak (engl. s/of). Bločnih priključaka
S. RIBARIĆ - GRAĐA RAČUNALA
313,
u priručnoj memoriji ima BM1, pri čemu je BM1 jednak kapacitetu priručne memorije podijeljen s brojem riječi u bloku. Vrijedi B M 2 » BM1. Slika 10.3 prikazuje odnos između blokova u glavnoj memoriji i priručnih blokova (linija) te odnos između adrese bloka u glavnoj memoriji i odgovarajuće značke u memoriji za pohranu značaka. c>5 3 o "5 XI o.
O i rvim m vo r^ ' ' S 5 S S 2 S 5 : CO CO 0Q 00 CO co co co
r-v
o
o*
J2
< co
tO N (D
% 'i— JD
-O
==. o ~ CL
u
< <
-C &
o £ 0» E fO c >u 3
00
"O oo .
o o. o X! N
< LU
fN
o o
< 0_ N _ 3 .2. c ro" 'u ®
8 o
o o o o
£ o c (L) O. N £
o o o
¥
T3
rtj
ro < 00
(TJ
fN
fN
< <
5
<
00 o
a\
1o>1C OJ £
o o o
f0 c
T3
•Si
«36.
•si
8 _ o o
o o o o
o o o o o o
o o o o o o
«o o o o o
o o
o o o o
O
o o o o
o «— — ' O
o o o o
o o o o
O O O
o o o o o o o o o
o o o o o o o o o
r- O «- o o «o o o o o o o o o o o o o o
SI. 10.3 Pojednostavljeni prikaz odnosa između blokova u glavnoj memoriji i priručnih blokova (linija)
314
11. POGLAVLJE: VIRTUALNA MEMORIJA
Na slici 10.3 vidimo da priručna memorija, u ovom pojednostavljenom prikazu, pohranjuje osam priručnih blokova (linija), odnosno ima osam bločnih priključaka: BM1(0) - BM1(7). Priručni se blok sastoji od b = 4 riječi. Blokovi u glavnoj memoriji također su duljine b = 4 riječi. Uočavamo da se u bločnom priključku BM1(1) nalazi priručni blok s riječima 21, AA, FA i 91 (sve heksadekadno) koji je kopija sadržaja bloka u glavnoj memoriji s početnom 12-bitnom adresom: 100001111100. Vidimo, također, da je u znački (u memoriji za pohranu značaka) koja odgovara bločnom priključku BM1(1) pohranjeno deset značajnijih bitova koji predstavljaju upravo adresu bloka u glavnoj memoriji čiji je sadržaj prenesen u bločni priključak. Dva najmanje značajna bita adrese A1 i A0 (slika 10.3) ne pojavljuju se u znački, več služe za izbor jedne od četiri riječi u izabranom priručnom bloku (liniji). (Opaska: broj najmanje značajnih adresnih linija koje služe za izbor riječi u priručnom bloku ovisi o veličini priručnog bloka (linije), npr. ako je blok veličine 16 riječi, onda su za to potrebna četiri najmanje značajna bita adrese.) Primjer
10.1.
Da bismo zorno predočili način pristupa podatku koji je pohranjen u priručnoj memoriji, opišimo operaciju čitanja npr. treče riječi u bločnom priključku BM1(1) (slika 10.3). 12-bitna adresa 100001111110, koja odgovara trećoj riječi, dovodi se na adresne priključke priručne memorije. Deset se značajnijih bitova adrese: 1000011111 u sklopu za usporedbu znački uspoređuje sa značkama koje su pohranjene u memoriji za pohranu značaka. Ako se podudaraju značka i deset značajnijih bitova adrese, govorimo o pogotku što znači da se blok koji sadržava adresiranu riječ nalazi u priručnoj memoriji. U tom se slučaju dva najmanje značajna bita adrese: At = 1 i A0 = 0 koriste za izbor riječi u izabranom priručnom bloku te se podatak FA (heksadekadno) pojavljuje na izlazu priručne memorije. U slučaju kada je podudaranje adrese i značke neuspješno, govorimo o promašaju, što znači da se blok koji sadržava adresirani podatak ne nalazi u priručnoj memoriji. Što se tada događa, objasnit ćemo nešto kasnije. Prema načinu uključivanja priručne memorije u računarski sustav razlikuju se dvije glavne sheme. Jedna, koja se naziva "pogled sa strane" (engl. look-aside), je takva da su priručna memorija i glavna memorija izravno priključene na sabirnicu sustava (slika 10.4). Procesor započinje pristup memoriji postavljanjem adrese na adresnu sabirnicu i upravljačkim signalom R/W određuje vrstu sabirničkog ciklusa. Priručna memorija M 1 uspoređuje adresu na sabirnici sa značkama koje su pohranjene u memoriji za pohranu značaka. Ako je podudaranje uspješno (dogodio se pogodak), pristup će se okončati čitanjem ili pisanjem u priručnu memoriju. Pri svemu tome, glavna memorija M 2 neće sudjelovati. Potrebno je istaknuti da kad procesor generira zahtjev za pribavljanjem instrukcije ili dohvat podatka ili pak generira zahtjev za upis podatka u memoriju, on uvijek referencira lokaciju u glavnoj memoriji. Zapravo, procesor se "ponaša" kao da i ne zna da postoji priručna memorija - ona je za procesor "skrivena" (riječ "cache" je francuskog podrijetla i označava skrovito ili skriveno mjesto na kojem se pohranjuju zalihe hrane za "crne dane"). No ako se dogodio promašaj, odnosno neuspješno podudaranje adrese sa značkama - što znači da nema referenciranog bloka niti u jednom bločnom priključku priručne nriemorije - tada se ostvaruje pristup izravno glavnoj memoriji M2 i završava se upisom (R/W= 0) j čitanjem (R/W= 1) sadržaja referencirane memorijske lokacije. Kao odgovor na promašaj prenosi se blok podataka (onaj koji sadržava referencirani podatak) iz glavne memorije L
S. RIBARIĆ - GRAĐA RAČUNALA
315,
priručnu memoriju i smješta se u slobodni bločni priključak priručne memorije. Zajedno s podacima prenijet će se i adresa bloka koja će se pohraniti kao značka u odgovarajućem bločnom priključku. Prijenos bloka koji je male veličine odvija se vrlo brzo jer se koristi prijenos podataka u snopu (poglavlje 9.; Porodice DRAM).
( T ) pristup priručnoj memoriji ( 2 ) prijenos bloka podataka (prijenos podataka u snopu) ( 3 ) pristup glavnoj memoriji
SI. 10.4 Način uključivanja priručne memorije nazvan "pogled sa strane" (engl. look-aside)
Slika 10.5 prikazuje složeniji način uključivanja priručne memorije u računarski sustav. On se naziva "pogled kroz" (engl. look-through). Procesor ima izdvojenu lokalnu sabirnicu pomoću koje komunicira s priručnom memorijom i glavnom memorijom. Sabirnica sustava koristi se kao prijenosni put za komunikaciju s drugim jedinicama pa se stoga može istodobno ostvariti pristup priručnoj memoriji od strane procesora (put 1, slika 10.5) i pristup glavnoj memoriji u kojem ne sudjeluje procesor (npr. DMA prijenos; put 4, slika 10.5). U ovoj organizaciji priručne memorije procesor ne šalje automatski sve zahtjeve glavnoj memoriji (kao u slučaju organizacije "pogled sa strane") već to čini samo u kad se dogodi promašaj. Ovakva organizacija omogućuje izvedbu široke lokalne sabirnice kojom se povezuju procesor, priručna memorija i glavna memorija tako da se ostvaruje brži prijenos bloka podataka između glavne i priručne memorije. Na primjer, ako je širina lokalne sabirnice 128 bita i ako je veličina priručnog bloka 16 bajtova, tada će se blok prenijeti u jednoj periodi signala vremenskog vođenja, dok bi prijenos istog bloka preko 32-bitne sabirnice sustava (u organizaciji "pogled sa strane"zahtijevao četiri periode). Ova izvedba, međutim, zahtijeva složeniji upravljački sklop priručne memorije i upravljački sklop glavne memorije što se odražava na većoj složenosti i višoj cijeni izvedbe.
316
11. POGLAVLJE:
VIRTUALNA
MEMORIJA
(T) pristup priručnoj memoriji (2) prijenos bloka podataka (3) pristup glavnoj memoriji (4) pristup glavnoj memoriji u kojem ne sudjeluje procesor (npr. DMA) SI. 10.5 Način uključivanja priručne memorije nazvan "pogled kroz" (engl.
look-through)
10.2. DJELOVANJE PRIRUČNE MEMORIJE Mehanizam djelovanja priručne memorije možemo pojednostavnjeno opisati ovako (slika 10.6): kad procesor (CPU) generira zahtjev za pribavljanje instrukcije ili podatka (operacija čitanja) ili generira zahtjev za upisivanje podatka u memoriju (operacija pisanja), on se adresom poziva na lokaciju u glavnoj memoriji. (Opaska: pretpostavimo li daje procesor generirao adresu koja je u slučaju postojanja virtualne memorije (tj. razine glavna memorija - sekundarna memorija) virtualna ili logička adresa podatka ili instrukcije, ona će se pomoću adresnog translacijskog mehanizma virtualne memorije (poglavlje 11.) preoblikovati u stvarnu ili fizičku adresu. Iznimno postoje neke izvedbe priručne memorije koje dopuštaju pristup na temelju virtualne adrese.) Sklopovi za upravljanje pristupom memoriji (koji su pridruženi priručnoj memoriji) utvrđuju nalazi li se riječ koja se poziva u priručnoj memoriji, tj. utvrđuje se nalazi li se u nekom bločnom priključku priručne memorije blok koji upravo sadržava referenciranu riječ. To se utvrđuje uspoređivanjem znački sa značajnijim dijelom adresa (vidi Primjer 10.1.). Ako se tijekom uspoređivanja dogodi podudaranje, što znači daje blok koji sadržava referenciranu riječ u priručnoj memoriji - dogodio se pogodak (za takav blok kažemo da je aktivan). tada se preostali, manje značajni adresni dio koristi za izbor naslovljene riječi u bloku (ifi liniji), te se izvodi operacija čitanja ili pisanja na toj memorijskoj lokaciji priručne memorije Ako je riječ o operaciji čitanja, tada u tome ne sudjeluje glavna memorija, a referencira-
S. RIBARIĆ - GRAĐA RAČUNALA
317,
na se riječ dohvaća iz priručne memorije i pribavlja procesoru. Ako je, pak, bila operacija pisanja, tada se istodobno podatak upisuje u odgovarajuću lokaciju priručne memorije i u lokaciju glavne memorije. Takav se postupak trenutnog obnavljanja sadržaja glavne memorije naziva „pohranjivanje-kroz" (engl. store-through). Obnavljanje sadržaja glavne memorije može se obaviti i uporabom inačice pohranjivanja-kroz. Ona se naziva upisivanje u međuspremnik (engl. write buffer). Upis podatka u glavnu memoriju ostvaruje se pomoću upisnog međuspremnika i sklopova kojima se oslobađa procesor od izravnog obnavljanja sadržaja glavne memorije. Procesor nakon brzog upisa podatka u priručnu memoriju i upisni međuspremnik nastavlja s obradom. Istodobno se podatak iz upisnog međuspremnika prenosi u glavnu memoriju. Na taj se način uklanja kašnjenje zbog upisa, odnosno pristupa procesora glavnoj memoriji. Druga metoda obnavljanja sadržaja glavne memorije naziva se „kopiranje nazad" (engl. copy back, write back) i sastoji se od toga da se podatak upisuje samo u lokaciju u priručnoj memoriji, a da se upis označi posebnom zastavicom pridruženoj bloku. Ta se zastavica naziva „prljavi bit" (engl. dirty bit) i njome se označava blok koji će se morati upisati natrag u glavnu memoriju tijekom zamjene bloka. Zamjena bloka, kako ćemo vidjeti, događa se u slučaju promašaja. Priručni blok koji se samo čita i zato ima obrisan prljavi bit ne treba se tijekom zamjene upisivati natrag u glavnu memoriju jer su sadržaji tog priručnog bloka i odgovarajućeg bloka u glavnoj memoriji identični. Tehnikama „pohranjivanje-kroz" i „kopiranje nazad" rješava se dio problema koji je poznat pod nazivom „koherencija priručne memorije" (engl. cache coherence) o čemu će biti govora u nastavku, a svodi se na to da podatak s adresom A u priručnoj memoriji M 1 mora biti jednak podatku koji se na istoj adresi A nalazi u glavnoj memoriji M2. Ne zaboravimo da je slika sadržaja glavne memorije mjerodavna za stanje programa. Ako se za vrijeme operacije pisanja adresirana riječ ne nalazi u priručnoj memoriji (engl. write miss), što se onda događa? Postoje dva pristupa tom problemu: u jednom se podatak izravno upisuje u glavnu memoriju, sadržaj priručne memorije se ne mijenja i nema prijenosa bloka iz glavne memorije u priručnu memoriju (ta se tehnika izvorno naziva "write-no allocation" - upisivanje bez dodjele). U drugom se pristupu odgađa upis u memoriju da bi se prenio blok u priručnu memoriju i tek onda obavio upis u priručnu memoriju - ta se tehnika naziva dodjela upisa (engl. write allocation). Pristup dodjelom upisa ima prednost u odnosu na prvi pristup samo ako postoji više uzastopnih upisa u jednu ili više lokacija bloka. Općenito vrijedi da priručne memorije koje koriste tehniku pohranjivanje-kroz rabe upisivanje bez dodjele, a priručne memorije s tehnikom kopiranja nazad primjenjuju postu-
pak dodjele upisa. Sklopovi za upravljanje pristupom priručnoj memoriji utvrđuju nalazi li se adresirani blok u nekom od bločnih priključaka priručne memorije. To se utvrđuje na temelju podudaranja značajnijih bitova adrese (one koja odgovara adresi bloka; slika 10.3) sa značkama koje su pohranjene u memoriji za pohranu značaka. Utvrđivanje je li podudaranje uspješno mora se obaviti iznimno brzo tako da slijedno uspoređivanje adrese sa značkama ne dolazi u obzir jer bi znatno narušilo performansu memorijskog sustava. Da bi se ubrzao postupak podudaranja, memorija za pohranu značaka izvedena je kao asocijativna memorija koja dopušta istodobnu usporedbu adrese sa svim značkama. Podsjetimo se, asocijativna memorija je memorija s izravnim pristupom u kojoj se pohranjena riječ ne dohvaća na temelju adrese, već na temelju dijela ili cijelog njezinog sadržaja. Osim toga, asocijativna memorija dopušta istodobnu usporedbu dijela ili cijelog sadržaja svih njezinih lokacija sa zadanim bitnim uzorkom i indikaciju svih podudaranja sadržaja s tim zadanim bitnim uzorkom. U našem slučaju zadani bitni uzorak odgovara adresi bloka.
318
11. POGLAVLJE: VIRTUALNA MEMORIJA
SI. 10.6 Pojednostavljeni dijagram toka za operaciju čitanja i pisanja u priručnu memoriju
S. RIBARIĆ - GRAĐA RAČUNALA
319,
Ako je uspoređivanje adrese sa značkama bilo neuspješno, govorimo o promašaju. U tom se slučaju adresa prosljeđuje glavnoj memoriji. Modul za rukovanje u slučaju promašaja, na temelju informacije o zamjeni blokova, određuje koji se blok zamjenjuje u priručnoj memoriji blokom koji treba dohvatiti iz glavne memorije. Poslije ili tijekom prijenosa bloka, referencirana se riječ šalje procesoru. Pri prijenosu bloka iz glavne memorije u priručnu memoriju može se uštedjeti na vremenu ako se referencirana riječ prosljeđuje odmah nakon što je raspoloživa, ne čekajući da se cijeli blok prenese u priručnu memoriju (tehnika "punjenje-kroz"; engl. load-through). U dijagramu toka (slika 10.6) vidimo da se u tijekom operacije čitanja ili pisanja obnavlja i lista aktivnosti priručnih blokova. Ona je podloga za određivanje koji će priručni blok biti zamijenjen kad se dogodi promašaj.
10.3. PERFORMANSA PRIRUČNE MEMORIJE Ako u memorijskoj hijerarhiji izuzmemo skup registara opće namjene, tada je priručna memorija najbrža sastavnica u memorijskoj hijerarhiji. Želi se postići da srednje vrijeme pristupa memorijskom sustavu bude što je moguće bliže vremenu pristupa priručnoj memoriji. Da bi se to postiglo, broj uspješnih referenciranja priručne memorije mora biti što je moguće veći. Pod "uspješnim referenciranjem" podrazumijeva se referenciranje kojim je ostvaren "pogodak", odnosno referenciranje riječi koja se nalazi u bloku u priručnoj memoriji. Definirajmo omjer pogotka H (engl. hitratio) kao omjer broja referenciranja memorije u kojima je postignut pogodak i ukupnog broja referenciranja memorije: H = (broj referenciranja u kojima je postignut pogodak) / (ukupan broj referenciranja). Uz omjer pogotka često se rabi i mjera omjer promašaja (engl. miss ratio) koji je definiran kao 1 - H i označava se s MR. Performansa priručne memorije izražava se omjerom pogotka (ili omjerom promašaja). Što je omjer pogotka veći, veća je performansa priručne memorije. U nekom vremenskom intervalu možemo ocijeniti srednje vrijeme pristupa memorijskom sustavu tA za memorijski sustav s priručnom memorijom, na sljedeći način: t
A = tM,
X H +
(1-H)XtM2'
gdje je tM1 vrijeme pristupa priručnoj memoriji, tM2 vrijeme pristupa glavnoj memoriji i (1- H) omjer promašaja. Djelotvornost priručne memorije možemo ilustrirati sljedećim primjerom. Primjer 10.2. Neka je vrijeme pristupa glavnoj memoriji tM2 = 250 ns, a vrijeme pristupa priručnoj memoriji tM1 = 25 ns. Za omjer pogotka H = 0.98, što je vrijednost koja se nalazi u okviru tipičnih vrijednosti za priručne memorije, dobiva se srednje vrijeme pristupa memorijskom sustavu: tA = tM1 x H + (1- H) x tM2 = 25 x 0.98 + (1 - 0.98) x 250 tA = 24.5 + 5.0 = 29.5 ns Sustav bez priručne memorije imao bi (srednje) vrijeme pristupa memoriji tA = t M2 = 250 ns. Vidimo da se uvođenjem priručne memorije srednje vrijeme pristupa memorijskom sustavu popravilo skoro za jedan razred veličine.
320
11. POGLAVLJE: VIRTUALNA MEMORIJA
Visoka vrijednost omjera pogotka H koja se tipično kreće u rasponu od 0.90 do 0.98 temelji na lokalnim svojstvima programa i podataka. Zahvaljujući lokalnim svojstvima programa i podataka, broj poziva glavne memorije uvelike se smanjuje i referenciranje se usmjerava na brzu priručnu memoriju. Lokalnost u dinamičkom ponašanju programa očituje se u tome što slijed referenciranja memorijskih lokacija nije slučajan, već za vrijeme trajanja nekog vremenskog intervala program pokazuje težnju grupiranja poziva memoriji na malom dijelu od ukupnog adresirljivog prostora. Lokalnost se izražava vremenskom i prostornom sastavnicom. Vremenska lokalnost očituje se u tome što će program u bliskoj budućnosti, tijekom njegova izvođenja, referencirati u memoriji one programske objekte ili podatkovne objekte koje je referencirao i u bližoj prošlosti. Prostorna lokalnost iskazuje se u tome što će program referencirati u skoroj budućnosti one programske i podatkovne objekte koji imaju adrese bliske onim što su se upotrebljavale u bližoj prošlosti. Lokalnost je posebno izražena kad dijelovi programa imaju oblik programskih petlji, međusobno ugniježđenih petlji ili kad se samo nekoliko procedura (ili potprograma) ponavljano poziva. Obično se lokalnost izražava radnim skupom WS(f, h) koji predstavlja skup memorijskih lokacija ili blokova lokacija koje su u nekom vremenskom trenutku t bili referencirani u posljednjih h referenci ranja. Primjer 10.3. Neka je R = (20,19,20,20,19,19,20,20,21,4,5,6,20) slijed referenci ranja blokova. Radni skup WS(f, h) - W(6,4) je: t = 1 2 3 4 5 6 7 8... ( 2 0 , 1 9 , 2 0 , 2 0 , 1 9 , 1 9 , 20, 20, 2 1 , 4 , 5 , 6 , 2 0 ) ,
WS = {19, 20}. Od vremenskog trenutka t = 6 u oknu h = 4 (unatrag) bili su referencirani blokovi 19 i 20. Što je radni skup WS(t, h) s manjim brojem elemenata, to je lokalnost programa veća.
10.4. ORGANIZACIJA PRIRUČNE MEMORIJE Pri razmatranju i analizi različitih izvedbi priručnih memorija posebnu pozornost treba obratiti na sljedeće njezine značajke: i) način smještanja blokova u bločne priključke priručne memorije (engl. placement
policy; mapping function); ii) iii) iv) v)
način zamjene blokova (engl. replacement policy); veličinu bloka i kapacitet priručne memorije; način obnavljanja sadržaja glavne memorije (engl. update policy); način pribavljanja bloka iz glavne memorije (engl. memory fetch policy).
S. RIBARIĆ - GRAĐA RAČUNALA
321,
10.4.1. NAČIN SMJEŠTANJA BLOKOVA U BLOČNE PRIKLJUČKE PRIRUČNE MEMORIJE Prema načinu smještanja bloka iz glavne memorije u bločni priključak priručne memorije postoje tri glavne organizacije priručne memorije: • priručna memorija s potpuno asocijativnim preslikavanjem (engl. fully associative
mapping); • priručna memorija s izravnim preslikavanjem (engl. direct mapping); • priručna memorija sa skupnim asocijativnim preslikavanjem (engl. set associative
mapping). 10.4.1.1. PRIRUČNA MEMORIJA S POTPUNO ASOCIJATIVNIM PRESLIKAVANJEM Podsjetimo se da se priručna memorija, bez obzira na vrstu organizacije, sastoji od brojnih bločnih priključaka i da se u svakom bločnom priključku smješta blok (linija) od b slijednih riječi. Svakom je takvom bloku pridružena i značka koja se pohranjuje u priručnoj memoriji značaka. Priručna memorija s potpunim asocijativnim preslikavanjem može se nazvati i priručna memorija s potpunim pridruživanjem jer ima jednu prepoznatljivu značajku: priručni blok
ili linija veličine b riječi iz glavne memorije može se smjestiti u bilo koji slobodni bločni priključak priručne memorije. Na slici 10.7 shematski je prikazano potpuno asocijativno preslikavanje. Adresa kojom se referencira memorija sastoji se od dva dijela: k značajnijih bitova adrese koji čine značku i w manje značajnih bitova adrese koji služe za izbor jedne od b riječi u izabranom bloku. Na temelju značke utvrđuje se nalazi li se referencirani blok u priručnoj memoriji. Primjer 10.4. Neka je kapacitet glavne memorije 16 MB, a kapacitet priručne memorije 64 KB. Veličina bloka (linije) neka je 4 bajta. U tom slučaju imamo B M 2 = 1 6 M / 4 = 4 M blokova u glavnoj memoriji - od BM2(0) do BM2(4194303), odnosno BM2(4M -1). Broj bločnih priključaka priručne memorije je BM1 = 64K/4 = 16 K - od BM1(0) do BM1(16383), odnosno BM1(16K -1). Adresa je duljine 24 bita i organizirana je na sljedeći način: dva najmanje značajna bita A1 i A0 se koriste za izbor jedne od b = 4 riječi (bajta) u bloku, a preostala 22 adresna bita A23 - A2 označavaju jedan od 4M blokova. Značka (pohranjena u memoriji za pohranu značaka), koja je pridružena bloku koji se nalazi u bločnom priključku, duljine je 22 bita. Tijekom referenciranja memorije značajnijih 22 bita adrese uspoređuje se sa svim 22-bitnim značkama. Uspoređivanje se izvodi istodobnim podudaranjem sa svim značkama pohranjenim u memoriji značaka. Kad je ishod podudaranja uspješan, dva najmanje značajna bita adrese upotrebljavaju se za adresiranje riječi (bajta). li
Prednost priručne memorije s potpuno asocijativnim preslikavanjem jest velika prilagodljivost pri smještanju blokova iz glavne memorije u priručnu - blok se može smjestiti u bilo koji slobodni bločni priključak. Nedostatak takve organizacije je složena (i skupa) sklopovska izvedba za istodobno podudaranje sa značkama relativno velike duljine koja se temelji na asocijativnoj memoriji za pohranu značaka. Složenost izvedbe odražava se i na zahtjevima za površinom na čipu pa se priručne memorije s potpuno asocijativnim preslikavanjem mogu naći u izvedbama skupih procesora visokih performansi.
322
11. POGLAVLJE: VIRTUALNA MEMORIJA
SI. 10.7 Shematski prikaz potpunog asocijativnog preslikavanja
S. RIBARIĆ - GRAĐA RAČUNALA
323,
10.4.1.2. PRIRUČNA MEMORIJA S IZRAVNIM PRESLIKAVANJEM Da bi se smanjila cijena izvedbe priručne memorije i riješili problemi vezani za prostor na čipu, upotrebljava se priručna memorija s izravnim preslikavanjem (kraće: izravna priručna memorija). Njezina je osnovna značajka da se svaki blok glavne memorije može smjestiti u samo jedan točno određeni bločni priključak priručne memorije. Pravilo koje određuje koji je to bločni priključak jednostavno je: blok BM2(i) iz glavne memorije smješta se u bločni priključak BM1(j) priručne memorije pri čemu vrijedi: j = i (modulo B^), gdje je BM1 ukupan broj bločnih priključaka priručne memorije, j indeks bločnog priključka u priručnoj memoriji te i indeks bloka u glavnoj memoriji. «
« ^ ^ S c Ci G O f " i ""i i -O O. CD CD OD OD
SI. 10.8 Shematski prikaz organizacije izravne priručne memorije
5 S9š OD
324
11. POGLAVLJE: VIRTUALNA MEMORIJA
Slika 10.8 prikazuje organizaciju izravne priručne memorije. Vidimo da se blok iz glavne memorije može smjestiti samo u određeni bločni priključak priručne memorije. Primjer 10.5. Da bi si zorno predočili organizaciju izravne priručne memorije, odnosno način smještanja blokova u bločne priključke, pretpostavit ćemo vrlo jednostavan model sa sljedećim parametrima: kapacitet glavne memorije neka je samo 25 = 32 riječi, a kapacitet priručne memorije neka je 24 = 16 riječi. Blok neka se sastoji od b = 4 riječi, tako da imamo BM2 = 8 blokova u glavnoj memoriji i BM1 = 4 bloka, odnosno bločnih priključaka. Označimo blokove u glavnoj memoriji s: BM2(i), i = 0,1,..., 7. Označimo bločne priključke BM1(j), j = 0, 1,..., 3. U skladu s izravnim načinom preslikavanja imamo: • blok iz glavne memorije BM2(0); i = 0, smješta se u bločni priključak BM1(j): j = i (modulo BM1) = 0 (modulo 4) = 0; • blok iz glavne memorije BM2(1), smješta se u bločni priključak BM1(1); • blok iz glavne memorije BM2(2), smješta se u bločni priključak BM1(2); • blok iz glavne memorije BM2(3), smješta se u bločni priključak BM1(3); • blok iz glavne memorije BM2(4), smješta se u bločni priključak BMi(j): j = i (modulo BM1) = 4 (modulo 4) = 0; • blok iz glavne memorije BM2(5), smješta se u bločni priključak BM1(1); • blok iz glavne memorije BM2(6), smješta se u bločni priključak BM1(2); • blok iz glavne memorije BM2(7), smješta se u bločni priključak BM1(3); Slika 10.9 a) prikazuje izravno preslikavanje za ovaj jednostavan primjer. blok
glavna memorija M2 SI. 10.9a Prikaz jednostavnog modela izravne priručne memorije - izravno preslikavanje
S. RIBARIĆ - GRAĐA RAČUNALA
325,
značka (1bit) bločni priključak
b=4 rijeci
3
BJO)
2
3
BM1(D
2
3
B«,<2)
2
3
BM1<3)
0
1
2
0
1
0
1
0
1
priručna memorija Mt
B«(7)
glavna memorija M2 SL 10.9 b Prikaz jednostavnog modela izravne priručne memorije - pristup podatku u priručnoj memoriji s adresom 11110 (Primjer 70.5.)
Zapažamo da se zaista blok iz glavne memorije može smjestiti u samo jedan, točno određen bločni priključak priručne memorije. Odmah uočavamo i jedan od nedostataka takve organizacije - ako je bločni priključak već zauzet, a sljedeći blok se treba iz glavne memorije premjestiti u priručnu memoriju, i to prema j = i (modulo BM1) upravo u taj zauzeti bločni priključak, morat će se izvesti postupak zamjene blokova (oslobađanje bločnog priključka), iako u priručnoj memoriji postoje slobodni, neiskorišteni bločni priključci. Slika 10.9 a) prikazuje organizaciju takve izravne priručne memorije. Na primjer, pretpostavimo da se podatak nalazi na adresi 11110 u glavnoj memoriji. Blok u kojem se nalazi podatak u glavnoj memoriji je BM2 (7). Dakle, i = 7. Taj se blok može jedino preslikati u BM1(3) bločni priključakjer je 3 = 7 (modulo 4). Dva najmanje značajna bita adrese A1 = 1 i A0 = 0 služe za izbor riječi s indeksom 2 u bločnom priključku, bitovi A2 = 1 i A3 = 1 služe za izbor bločnog priključka (B (3)). Najznačajniji bit adrese A4 uspoređuje se s 1 -bitnom značkom (u ovom našem vrlo jednostavnom primjeru!) bločnog priključka
326
11. POGLAVLJE: VIRTUALNA MEMORIJA
koji je određen na temelju bitova A2 = 1 i A3 = 1. Ako je podudaranje postignuto, znači daje naslovljena riječ u bloku u određenom bločnom priključku priručne memorije. Ako je podudaranje neuspješno, na primjer, značka pridružena bločnom priključku 3 ima vrijednost 0, što znači da se u bločnom priključku nalazi blok BM2(3), tada treba se osloboditi bločni priključak tako da se blok BM2(3) (slika 10.9 b)) premjestiti u glavnu memoriju. Blok BM2(7) se dohvaća iz glavne memorije i smještava na oslobođeni bločni priključak pri tome se najznačajniji bit njegove 5-bitne adrese pohranjuje u značku. Primjer 10.6. Pretpostavimo nešto stvarnije parametre priručne memorije i glavne memorije: kapacitet priručne memorije neka je 64 KB. Veličina priručnog bloka (linije) neka je 4 bajta. Kapacitet glavne memorije neka je 16 MB. Broj bločnih priključaka priručne memorije je BM1 = 64 K / 4 = 16 K, odnosno 214. Broj blokova glavne memorije je BM2 = 16 M / 4 = 4 M, odnosno 222. Kako je organizirana adresa kojom se referencira memorija? Minimalna zahtijevana duljina adrese je 24 bita jer je 224 = 16 M. Sama 24-bitna adresa organizirana je na sljedeći način: 2 najmanje značajna bita (A1 - A0) služe za izbor bajta u bloku (liniji) jer blok sadržava 4 bajta. Četrnaest značajnijih bitova (A15 - A2) služe za referenciranje bločnog priključka (ima ih 214) a 8 najznačajnijih bitova adrese (A23 - A16) služe za uspoređivanje s 8 značaka pridruženim bločnom priključku. Duljina riječi memorije za pohranu značakaje8bita. Zašto je osam najznačajnijih bitova adrese namijenjeno uspoređivanju sa značkama? Izravnim preslikavanjem se 4 M blokova glavne memorije smješta u 16 K bločnih priključaka tako da su 256 blokova kandidati na jedan bločni priključak: 16 K x 256 = 214 x 28 = 222 - 4 M. Pretpostavimo da se podatak nalazi na adresi 11667210 (dekadno), odnosno B2070A (heksadekadno). U kojem se bloku glavne memorije nalazi podatak? Blok B^O) veličine 4 bajta nalazi se na adresi 0 - 3 (dekadno), blok BTAJ. M,(1) nalazi na adresi 4 - 7 (dekadno), blok B4MZJ2) nalazi na adresi 8 - 1 1 , itd. Podatak s adresom 11667210 (dekadno) nalazi se u glavnoj memoriji u bloku s indeksom 2916802. Bločni priključak u koji se može smjestiti blok BM2(2916802) je: j = i (modulo BM1) = 2916802 (modulo 16384) = 450, dakle, u BMI(450). Tijekom pristupa priručnoj memoriji osam se najznačajnijih bitova adrese uspoređuje s 8-bitnom značkom bločnog priključka koji je određen na temelju četrnaest bitova adrese (A1S - A ). Ako je podudaranje postignuto, znači daje naslovljena riječ u bloku u određenom bločnom priključku priručne memorije. Slika 10.10 prikazuje organizaciju 24-bitne adrese. B2
07
0A
b23
bi
1011 0 0 1 0
I«
0000 0111
-4. bitovi za uspoređivanje sa značkom
Sf. 10.10 Organizacija 24-bitne adrese
(Primjer 10.6.)
000010
10
4 adresa bločnog priključka
bO
k
adresa riječi u bloku
S.RIBARIĆ- GRAĐA RAČUNALA
327,
Ako sada usporedimo izvedbe priručnih memorija iz Primjera 10.4. (potpuno asocijativno preslikavanje) i iz Primjera 10.6. (izravno preslikavanje), možemo uočiti manju složenost sklopovlja za priručnu memoriju s izravnim preslikavanjem: za priručnu memoriju s potpunim asocijativnim preslikavanjem sklopovi trebaju podržati istodobno podudaranje dijela adrese s 22-bitnim poljima značaka.To znači da treba podržati istodobno 214 podudaranja 22-bitnih riječi. U slučaju priručne memorije s izravnim preslikavanjem na temelju adrese bločnog priključka (dio adrese A15 - A2) odabire se samo jedna 8-bitna značka koja se uspoređuje s 8 najznačajnijih bitova adrese.
10.4.1.3. PRIRUČNA MEMORIJA SA SKUPNIM ASOCIJATIVNIM PRESLIKAVANJEM Priručna memorija sa skupnim asocijativnim preslikavanjem (engl. set-associative mapping) čini kombinaciju prethodno opisanih dvaju načina smještanja blokova kojom se pokušavaju riješiti problemi vezani za izravno preslikavanje i problemi složenosti sklopovlja za potpuno asocijativno preslikavanje. Takva je priručna memorija na neki način kompromisno rješenje kojim se želi iskoristiti dobre značajke prethodnih dviju organizacija. Organizacija skupne asocijativne memorije može se opisati na sljedeći način: bločni priključci priručne
memorije organizirani su u skupine tako da mehanizam preslikavanja dopušta da se blok iz glavne memorije priključuje u bilo koji bločni priključak koji pripada odgovarajućoj skupini. Pretpostavimo da priručna memorija ima Bs skupina bločnih priključaka. Svaka se skupina sastoji odfcbločnih priključaka. Ukupno je Bs xk bločnih priključaka u priručnoj memoriji. Blok iz glavne memorije BM2(i) može se priključiti u bilo koji od k slobodnih bločnih priključaka skupine j, pri čemu je: j = i (modulo Bs). Drugim riječima, blok iz glavne memorije izravnim se preslikavanjem dodjeljuje određenoj skupini bločnih priključaka, a zatim se načinom potpuno asocijativnog preslikavanja smješta u slobodni bločni priključak u skupini. Broj bločnih priključaka u skupini predstavlja važnu arhitektonsku značajku i zato se često taj parametar upotrebljava za pobliži opis priručne memorije. Na primjer, govorimo o "dvoputnoj" asocijativnoj (engl. two-way associative cache memory) ili o "četvero put noj" asocijativnoj priručnoj memoriji ako ima dva, odnosno četiri bločna priključka u skupini. Primjer 10.7. Pretpostavimo da imamo priručnu memoriju koja ima BM1 = 128 bločnih priključaka organiziranih u 32 skupine B s = 32: Bs(0) - Bs(31) U svakoj skupini imamo BM1 / B s = 128 / 32 = 4 bločna priključka ("četveroputna"asocijativna memorija). Glavna memorija neka je kapaciteta 64 K riječi i organizirana je u BM2 = 64 K / b = 64 K / 16 = 4096 blokova, pri čemu je 6 = 16, odnosno imamo 16 riječi u bloku (liniji). Dakle, glavna memorija ima blokove BM2(0) - BM2(4095). Slika 10.11 prikazuje organizaciju takve memorije. Ilustrirajmo postupak preslikavanja. Neka je adresa referencirane riječi 4092 (dekadno) ili 0FFC (heksadekadno). Budući daje 16 riječi u bloku, indeks bloka u kojem se nalazi riječ je i = 255 jer je 4092 = 255 x 16 + 12. Blok BM2(255) može se priključiti na jedan od četiri slobodna priključka skupine j: j = i (modulo Bs) = 255 (modulo 32) = 31.
328
adresa (dekodna)
11. POGLAVLJE: VIRTUALNA MEMORIJA
blok
0
b=16 riječi
značka
BJ4095)
skupina
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
14
15
> B,{0)
Bs(1)
BS(2)
Bs(31)
priručna memorija M,
65535
glavna memorija M2 Sl.10.11 Organizacija 4-putne skupne asocijativne priručne memorije {Primjer 10.7.)
Slika 10.12 prikazuje organizaciju adrese za 4-putnu skupnu asocijativnu priručnu memoriju. Riječ u bloku odabire se na temelju četiri najmanje značajna bita adrese (A3 - A0). Pet bitova adrese A8 - A4 određuje skupinu, dok se sedam najznačajnijih bitova adrese A15 - A9 rabi za uspoređivanje sa 7-bitnim značkama. A
0
0
4
0
0
značka
1
1
1
A4A3
A 1
1
1
1
skupina
1
A„ 1
1
0
0
J^ izbor riječi u bloku J
adresa: OFFC 5L 10.12 Organizacija adrese za 4-putnu s k u p n u asocijativnu priručnu memoriju
Primjer 10.8. Glavna memorija neka je kapaciteta 16 MB i organizirana u blokove po 4 bajta (riječi). Priručna memorija neka je kapaciteta 64 KB organizirana tako da ima dva bločna pri-
S. RiBARIĆ - GRAĐA RAČUNALA
329
ključka po skupini (2-putna asocijativna memorija). Priručna memorija ima ukupno 64 K / 4 = 16 K bločnih priključaka. Budući da je organizirana kao 2-putna asocijativna memorija, ima B s = 1 6 K / 2 = 8K skupina. 24-bitna adresa organizirana je na sljedeći način: dva najmanje značajna bita adrese koriste se za izbor bajta riječi u bloku, 13 sljedećih bitova upotrebljava se za izbor skupine (8 K = 23 x 210), dok se 9 najznačajnijih bitova adrese koristi za uspoređivanje s poljem značaka. Razmotrimo u što će se transformirati skupna asocijativna priručna memorija za dva ekstremna slučaja. Pretpostavimo da raste broj priključaka po skupini, odnosno da se smanjuje broj skupina. Krajnji je slučaj kada priručna memorija ima samo jednu skupinu Bs = 1 i BM1 bločnih priključaka. U tom slučaju, u skladu sa značajkama skupne asocijativne priručne memorije, priručna memorija postaje memorija s potpunim asocijativnim preslikavanjem. Naime, nakon određivanje skupine: j = i (modulo Bs) = i (modulo 1) = 0, slijedi asocijativno preslikavanje u jednoj skupini koja se sastoji od BM1 bločnih priključaka. Ako, u suprotnom primjeru, pretpostavimo da broj skupina raste i dostiže BM1, tj. Bs = BM1, tada vrijedi: j = i (modulo B5) = i (modulo BM1), što znači da smo dobili organizaciju priručne memorije s izravnim preslikavanjem. Uporaba 2-putnih skupnih asocijativnih priručnih memorija najčešća je od organizacija koje se temelje na skupnim asocijativnim priručnim memorijama. Analize pokazuju da one značajno poboljšavaju performansu (omjer pogotka) u odnosu na priručne memorije s izravnim preslikavanjem. 4-putne skupne asocijativne memorije umjereno dodatno povećavaju performansu uz relativno malo povećanje cijene, dok daljnje povećanje broja bločnih priključaka po skupini ima mali učinak na performansu.
10.5. NAČIN ZAMJENE BLOKOVA Kad se novi blok iz glavne memorije treba prenijeti u priručnu memoriju i kad su svi dopušteni bločni priključci zauzeti, potrebno je donijeti odluku o tome koji se od blokova u priručnoj memoriji mora zamijeniti. U slučaju priručne memorije s izravnim preslikavanjem odluka je već unaprijed donesena - postoji samo jedan bločni priključak u koji se novi blok može priključiti, i to onaj s indeksom j = i (modulo BM1).To znači da se "stari" blok u bločnom priključku j zamjenjuje s novim blokom. No za priručne memorije s potpuno asocijativnim preslikavanjem i priručne memorije sa skupnim asocijativnim preslikavanjem odluka se temelji na algoritmu zamjene. Izbor algoritma zamjene i njegova izvedba središnje su pitanje u organizaciji priručne memorije jer način zamjene blokova izravno utječe na performansu memorijskog, a time i računarskog sustava. Da bi se postigla velika brzina, algoritam zamjene stranica mora biti implementiran sklopovski. Cilj primjene djelotvorne zamjene blokova jest postizanje što većeg omjera pogotka, odnosno smanjenje učestalosti pojavljivanja promašaja koji nastaje kad se referencira riječ u bloku koji se ne nalazi u priručnoj memoriji. Općenito vrijedi da omjer pogotka teži svojoj maksimalnoj vrijednosti ako se vremenski interval između dvaju uzastopnih promašaja maksimizira. Najčešće se rabe sljedeći algoritmi zamjene.
330
11. P O G L A V L J E :
VIRTUALNA
MEMORIJA
• FIFO (First-In-First-Out). Na temelju algoritma "prvi-unutra-prvi-van" izabire se blok za zamjenu koji je najranije "ušao" u priručnu memoriju, odnosno blok koji je najdulje u priručnoj memoriji. • LRU (Least Recently Used). Algoritmom LRU izabire se blok za zamjenu koji je u prručnoj memoriji najduže bez da bude referenciran. Naime, zahvaljujući vremenskoj lokalnosti programa, vrlo je malena vjerojatnost da će ponovo biti referencirana riječ u tom bloku. • NRU (Not Recently Used). Algoritmom se zamjenjuje blok koji nije u posljednje v r jeme bio referenciran u nadi i očekivanju da je malo vjerojatno da će biti korište» u bliskoj budućnosti. Definiranje vremenskog intervala koji odgovara „posljednjervremenu" ovisi o implementaciji. Algoritam NRU vrlo je često korišten kao aproksimacija algoritma LRU jer je jednostavniji za izvedbu. • LFU (Least Frequently Used). Algoritmom LFU zamjenjuje se blok koji je u posljednje vrijeme bio najmanje puta referenciran. • Random. Algoritam slučajne zamjene izabire slučajno blok za zamjenu u priručnci memoriji. Zanimljivo je da su analize pokazale da slučajna zamjena daje samo nešto slabije rezultate od triju prethodno navedenih algoritama. Primjer 10.9. Prikažimo na jednostavnom primjeru algoritme zamjene blokova FIFO i LRU za jednak slijed referenciranja blokova. Pretpostavimo da se tijekom izvođenja programa referenci ra šest različitih blokova. Označimo ih s A, B, C, D, E i F. Slijed referenciranja je: B, C, B, A, E, F, B, D, F, E, C, B, E. Slika 10.13 a) prikazuje slijed zamjena za FIFO algoritam, a slika 10.13 b) slijed zamjena za LRU algoritam. (Opaska: sa zvjedicom (*) označavamo blok koji je kandidat za zamjenu, a s (+) označavamo pogodak.) vrijeme t
1
redoslijed
2 B
B*
3 C
4 B
5 A
6 E
7 F
8 B
redoslijed
LRU
1
E
11
12
13
C
B
E
B*
B*
B*
F
F
F
F
F
F*
F*
E
c
c
c
c
c*
B
B
B
B
8
B
B
A
A
A
A*
D
D
D
D
D
D*
E
E
E
E*
E*
E*
C
C
C
©
©
8
9
10
11
12
13
E
C
B
E
2
3
7
4
6 F
B
0
F
©
B
C
B
A
B*
B*
B
8
B
B*
B
B
B
B*
C
C
C
c
C*
C*
C*
F
F
F
F
F
F
F*
F*
A
A
A
A*
D
D
D
D*
B
B
E
E
E
E*
E*
E
E
E
E
©
©
©
©
Opaska: Blok označen sa zvijezdicom kandidat je za zamjenu SI. 10.13
10 F
B*
© vrijeme t
9 D
Primjer a l g o r i t m a z a m j e n e F I F O i L R U
©
S. RIBARIĆ - GRAĐA RAČUNALA
331,
Pretpostavit ćemo da priručna memorija ima samo četiri bločna priključka te da su na početku izvođenja programa oni slobodni, odnosno prazni. Sa slike vidimo daje broj pogodaka za FIFO algoritam 4 a za LRU 5. Jasno je da na temelju jednostavnog primjera ne možemo ocjenjivati djelotvornost algoritama zamjene. Iscrpna ispitivanja pokazala su da FIFO algoritam i algoritam slučajne zamjene imaju skoro podjednake rezultate (omjere pogotka), dok LRU ima 10% do 15% veći omjer pogotka.
10.5.1. VELIČINA BLOKA I KAPACITET PRIRUČNE MEMORIJE Jedan od najvažnijih faktora koji utječu na omjer pogotka priručne memorije jest veličina bloka, odnosno linije i kapacitet priručne memorije. Pod veličinom bloka ili linije razumijeva se broj bajtova ili riječi koji je pridružen svakoj znački. Povećanjem veličine bloka, zahvaljujući lokalnosti programa, povećava se i omjer pogotka. Veličina bloka varira od nekoliko bajtova (riječi) do relativno velikih blokova od 64 ili 128 bajtova. No veći blok zahtijeva i dulje vrijeme njegova prijenosa između glavne memorije i priručne memorije. Pretjerana veličina bloka može imati za posljedicu tzv. onečišćenje priručne memorije koje se ogleda u tome što se neki podaci sadržani u bloku nikad ne upotrebljavaju. Za većinu procesora vrijedi da je veličina bloka jednaka veličini bloka podataka koji se inače prenosi između glavne i priručne memorije. Neki procesori, međutim, koriste subbločnu veličinu kao jedinicu koja se prenosi između glavne i priručne memorije. Kapacitet priručne memorije također utječe na omjer pogotka. Uz ostale nepromjenjive parametre priručne memorije općenito vrijedi da se omjer pogotka povećava ako se povećava kapacitet priručne memorije. Analize pokazuju da omjer pogotka brzo raste do neke prijelomne vrijednosti kapaciteta priručne memorije (npr., 32K ili 64K), a zatim je rast omjera pogotka vrlo usporen. To se objašnjava vremenskom lokalnosti programa: program adresira samo ograničeni broj riječi za vrijeme trajanja nekog vremenskog intervala. No ako je kapacitet priručne memorije tako velik da blokovi "žive" u priručnoj memoriji dulje nego što zahtijeva radni skup W(t, h), onda povećanje kapaciteta priručne memorije nema djelotvornog utjecaja na povećanje omjera pogotka. Priručna memorija može se klasificirati i prema broju njezinih razina koje ona zauzima u memorijskoj hijerarhiji pa pritom govorimo o jednorazinskoj i višerazinskoj priručnoj memoriji. Jednorazinska priručna memorija je u prvim računalima koji su koristili priručnu memoriju bila ostvarena kao brza memorija temeljena na većem broju čipova, naravno, izvan procesorskog čipa. Procesor je u tom slučaju komunicirao s priručnom memorijom preko vanjske sabirnice. Zahvaljujući razvoju tehnologije visokog stupnja integracije, moguće je bilo priručnu memoriju implementirati na samom procesorskom čipu (engl. on-chip cache). Bitna značajka takve izvedbe priručne memorije (koja se obično naziva "primarna" priručna memorija, odnosno L1 priručna memorija) jest njezina brzina te uklanjanje potrebe za dodatnim aktivnostima procesora koje se odnose na vanjsku sabirnicu (kad je postignut pogodak tijekom referenciranja memorije). Druga razina priručne memorije (L2) ostvarena je kao memorija većeg kapaciteta od priručne memorije L1, a može se ostvariti izvan procesorskog čipa ili na samom procesorskom čipu. Razlog uvođenja druge razine priručne memorije (naziva se još i "sekundarna" priručna memorija) očigledan je: kad ona ne bi postojala, procesor bi u slučaju promašaja morao pristupati glavnoj memoriji preko
332
11. POGLAVLJE: VIRTUALNA MEMORIJA
vanjske sabirnice. Zbog veće latentnosti glavne memorije i zbog manje propusnosti vanjske sabirnice takav se pristup odražava negativno na performansu sustava. Zahvaljujući razini L2 priručne memorije, procesor u slučaju promašaja u razini L1 priručne memorije pristupa razini L2 i na taj način smanjuje negativne efekte promašaja koji su neizbježni u jednorazinskoj priručnoj memoriji. Da bi se smanjio negativan utjecaj promašaja u sekundarnoj priručnoj memoriji, koji zahtijeva komunikaciju procesora s glavnom memorijom, uvodi se i treća razina priručne memorije L3. Današnji stupanj razvoja tehnologije visokog stupnja integracije dopušta da se i razina L3 priručne memorije kapaciteta od nekoliko MB, također, realizira na procesorskom čipu. Već smo spomenuli (poglavlje 9.) da priručna memorija može biti organizirana tako da se u njoj pohranjuju instrukcije i podaci (l&D priručna memorija, naziva se još i sjedinjena priručna memorija; engl. unified cache). Druga je organizacija priručne memorije, koja je češća, takva da se priručna memorija "rasprši" na dvije memorije, i to na priručnu memoriju koja pohranjuje samo instrukcije (instrukcijska ili i priručna memorija; engl. / cache) i priručnu memoriju koja sadržava samo podatke (priručna memorija podataka ili D priručna memorija; engl. D cache). Takva se izvedba priručne memorije naziva i harvardski tip priručne memorije. I&D priručna memorija je jednostavnija, dok raspršena izvedba priručne memorije dopušta istodobni pristup podacima i programu što je iznimno važno kad je procesor ostvaren kao protočni procesor (14. poglavlje). Primjer 10.10. Tablice 10.1. i 10.2. prikazuju osnovne značajke priručne memorije za procesor Motorola MPC7540 (Power PC ISA) i procesor ltanium-2 (EPIC ISA), tvrtke Intel. Motorola MPC7540
LI
L2
L3
Kapacitet
32 KB1 priručna memorija 32 KB D priručna memorija
256 KB l&D priručna memorija
1/2 MB l&D priručna memorija
Način smještanja blokova u bločne priključke
Skupna asocijativna (8-putna)
Skupna asocijativna (8-putna)
Skupna asocijativna (8-putna)
Veličina bloka (linije)
32 bajta
64 bajta
64 bajta
Algoritam zamjene blokova
Pseudo LRU
Dva različita pseudo slučajna
Dva različita pseudo slučajna
Način obnavljanja sadržaja glavne memorije
Pohranjivanje-skroz/ kopiranje nazad (programirljivo)
Poh ra njiva nje-skroz/ kopiranje nazad (programirljivo)
Pohranjivanje-skroz/ kopiranje nazad (programirljivo)
Detekcija/ispravljanje pogreške
Paritetni bit (jedan bit po bajtu)
Paritetni bit za značku i podatke
Paritetni bit za značku i podatke
Mjesto implementacije
Procesorski čip
Procesorski čip
Izvan procesorskog čipa
l
; >
Tablica 10.1. Osnovne značajke priručne memorije za procesor Motorola MPC7540 (Power PC ISA)
S. RIBARIĆ - GRAĐA RAČUNALA
333,
ltanium-2
LI
L2
L3
Kapacitet
16 KB1 priručna memorija 16 KBD priručna memorija
256 KB l&D priručna memorija
3 MB l&D priručna memorija
Način smještanja blokova u bločne priključke
Skupna asocijativna (4-putna)
Skupna asocijativna (8-putna)
Skupna asocijativna (24-putna)
Veličina bloka (linije)
64 bajta
128 bajta
128 bajta
Algoritam zamjene blokova
LRU
NRU
NRU
Način obnavljanja sadržaja glavne memorije
Pohranjivanje-skroz
Kopiranje nazad
Kopiranje r\azad
Detekcija/ispravljanje pogreške
ECC
ECC (SECDED)
ECC (SECDED)
Mjesto implementacije
Procesorski čip
Procesorski čip
Procesorski čip
Tablica 10.2. Osnovne značajke priručne memorije za Intel ltanium-2 (EPIC ISA)
10.5.2. NAČIN OBNAVLJANJA SADRŽAJA GLAVNE MEMORIJE U potpoglavlju 10.2. već smo opisali načine obnavljanja sadržaja glavne memorije. Ovdje ih još jednom samo navedimo: i) „pohranjivanje-kroz" (engl. store-through; write through) - najjednostavnija metoda u kojoj se sve operacije pisanja obavljaju u priručnoj memoriji i glavnoj memoriji i na taj se način osigurava da je sadržaj u glavnoj memoriji uvijek valjan; i i) upisivanje u međuspremnik (engl. write buffer) - inačica metode „ po hranjiva njeskroz"u kojoj se upis podatka u glavnu memoriju ostvaruje pomoću upisnog međuspremnika i sklopovlja kojim se oslobađa procesor od izravnog obnavljanja sadržaja glavne memorije; iii) „kopiranje nazad" (engl. copy back, write back) - sastoji se u tome da se podatak upisuje samo u lokaciju u priručnoj memoriji, a da se upis označi posebnom zastavicom pridruženoj bloku. Tijekom zamjene tako označenog bloka, on se upisuje natrag u glavnu memoriju i na taj se način obnavlja sadržaj glavne memorije. Problem s upisom „kopiranje nazad" jest u tome što prije zamjene označenog bloka sadržaj dijela glavne memorije nije obnovljen, odnosno valjan.
10.5.2. NAČIN PRIBAVLJANJA BLOKA IZ GLAVNE MEMORIJE Dva su osnovna načina pribavljanja blokova iz glavne memorije u priručnu memoriju: i) pribavljanje na zahtjev (engl. demand fetching); ii) pretpribavljanje.
334
11. POGLAVLJE: VIRTUALNA MEMORIJA
U slučaju pribavljanja na zahtjev, blok se prenosi samo onda kad procesor zahtijeva podatak (instrukciju) i kad se taj referencirani podatak ne nalazi u priručnoj memoriji, odnosno kad se dogodi promašaj. U načinu pretpribavljanja predviđa se sljedeći blok koji će biti potreban i on se tijekom besposlenog (engl. idle) ciklusa prenosi u priručnu memoriju. Zahvaljujući lokalnosti programa obično se sljedeći blok uzima kao blok koji neposredno slijedi aktivnom bloku (postupak se naziva OBL - One block look-a-head). Različiti su načini započinjanja pretpribavljanja bloka: • pretpribavljanje uvijek - ono dopušta najveći porast omjera pogotka, ali povećava memorijski promet, • pretpribavljanje u slučaju promašaja - uz zahtijevani blok pribavlja se još jedan, njemu susjedni blok, • privjesno pretpribavljanje (engl. togged prefetch) - pretpribavljanje novog bloka započinje pri prvom referenciranju podatka u već pretpribavljenom bloku.
10.6. KOHERENCIJA PRIRUČNE MEMORIJE U uskoj vezi s upisom podatka u priručnu memoriju i s obnavljanjem sadržaja glavne memorije jest problem konzistentnosti podataka, odnosno koherencije priručne memorije. Koherencija memorijskog sustava može se općenito i najjednostavnije opisati na sljedeći način: memorijski sustav koherentan je ako je vrijednost dobivena instrukcijom load uvijek vrijednost koju je posljednja instrukcija store pohranila na memorijsku lokaciju s istom adresom. Problem koherencije, odnosno nekonzistentnosti podataka, nastupa kad se podaci u memorijskom sustavu mogu mijenjati iz više od jednog izvora. Na primjer, u jedno procesors kom računarskom sustavu s priručnom memorijom konzistentnost podataka narušena je ako kopija podatka u priručnoj memoriji nije jednaka kopiji podatka u glavnoj memoriji. Primjerice, podatak u glavnoj memoriji obnovljen je metodom po hranjiva nj akroz, ali se nakon toga sadržaj te memorijske lokacije glavne memorije promijenio zbog ulazno-izlazne operacije (aktivnosti U/l kanala). Općenito, problem koherencije priručne memorije ne odnosi se samo na podatke (u užem smislu te riječi) već i na instrukcije (npr. kod operacijskog sustava sa zamjenom stranica; engl. page-swapping operation system). Problem koherencije priručne memorije posebno je izražen u multiprocesorskim sustavima u kojima svaki procesor ima i vlastitu priručnu memoriju. Osim toga, ima i pristup zajedničkoj glavnoj memoriji. U takvom sustavu problem nekonzistentnosti podataka nastupa zbog postojanja višestrukih kopija podataka koje procesori mogu lokalno (u svojim privatnim priručnim memorijama) mijenjati. Primjerice, ako je isti podatak pohranjen u više privatnih priručnih memorija pa jedan od procesora mijenja taj podatak u svojoj priručnoj memoriji, mora se ista promjena obaviti i u ostalim privatnim priručnim memorijama. Dakako, promjena se mora obaviti i u glavnoj memoriji. U računarskim sustavima koristi se protokol MESI (modified-exclusive-shared-invalid) kojim se osigurava koherencija priručne memorije. Protokol je prvenstveno bio namijenjen multiprocesorskim sustavima, ali se rabi i u jednoprocesorskim sustavima.
S. RIBARIĆ - GRAĐA RAČUNALA
335,
10.7. PRIRUČNA MEMORIJA-ANALIZA SLUČAJA PROCESOR MC 68030 32-bitni CISC procesor MC 68030 (tvrtka Motorola) ima na procesorskom čipu ostvarenu instrukcijsku priručnu memoriju i priručnu memoriju podataka, dakle riječ je o harvardskom tipu priručne memorije. Svaka od njih je veličine 256 bajtova i ima po 16 bločnih priključaka. Veličina bloka, odnosno linije je 16 bajtova (ili 4 duge riječi, pri čemu je duga riječ (engl. long word) naziv za 32-bitne riječi). Obje priručne memorije rabe izravno preslikavanje. Pristup priručnim memorijama omogućen je virtualnom (logičkom) adresom. Slika 10.14 prikazuje organizaciju instrukcijske priručne memorije. Blok je organiziran u tzv. četiri uloška, odnosno četiri duge riječi, i to tako daje omogućena zamjena pojedinačnog ulaska (4 bajta), što odgovara subbločnom prijenosu. U polju značke koja je pridružena svakom bločnom priključku nalaze se i 4 bita valjanosti V koji su pridruženi svakoj dugoj riječi u bloku. Bit valjanost služi za rješavanje problema nekonzistentnosti priručne memorije: ako se sadržaj memorijske lokacije u glavnoj memoriji promijenio (npr. uslijed aktivnosti U/l), obrisat će se bit valjanosti u znački koja odgovara dugoj riječi koja se nalazi u bločnom priključku koji sadržava blok iz glavne memorije u kojem je došlo do promjene. Pored subbločnog prijenosa, na poseban zahtjev sabirničkog upravljačkog sklopa ostvaruje se prijenos u snopu kojim se zamjenjuje cijeli blok, odnosno linija (16 bajtova). Značka se sastoji od 24 najznačajnijih bitova virtualne (logičke) adrese, bita FC2 (bita funkcijskog koda) koji se upotrebljava za razlikovanje pristupa u korisničkom i nadglednom načinu rada te od 4, već spomenuta, bita valjanosti V. Organizacija adresne riječi prikazana je također na slici 10.14. Adresni bitovi A3 - A2 služe za izbor jedne od 4 duge riječi u bloku. Adresni bitovi A7 - A4 upotrebljavaju se za izbor jednog od 16 bločnih priključaka. Adresni bitovi A31 - A8 i bit funkcijskog koda FC2 uspoređuju se u komparatoru sa značkama izabranog bločnog priključka. Pogodak se postiže kad se podudaraju adresni bitovi i FC2 sa značkom i kad je bit valjanosti V, određen na temelju A3 - A2, postavljen u 1. U slučaju pogotka izabrana se riječ (16 bita), određena adresnom linijom A ir iz priručne memorije prosljeđuje procesoru. U slučaju promašaja, odnosno nepodudaranja adresnog dijela i (ili) funkcijskog koda sa značkom ili u slučaju obrisanosti bita valjanosti V, sabirnički upravljački sklop započinje dohvat duge riječi u kojoj se nalazi zahtijevana instrukcija i puni odgovarajući ulazak (subblok) u priručnoj memoriji. Jednako tako, može se zahtijevati i prijenos u snopu koji će zamijeniti cijeli blok. Ako je došlo o podudaranja virtualne adrese sa značkom, a daje samo odgovarajući bit valjanosti obrisan (V = 0), dok su preostalih jedan ili više bitova valjanosti 1, izvest će se subbločni prijenos. Procesor MC 68030 ima zanimljivu značajku: kad započinje pristup odgovarajućoj priručnoj memoriji (instrukcijskoj ili priručnoj memoriji podataka), istodobno započinje i pristup sklopovima u memorijskoj upravljačkoj jedinici MMU (Memory Management Unit) koji preslikavaju logičku adresu u fizičku. Ako se dogodio pogodak (blok se nalazi u priručnoj memoriji), MMU potvrđuje pravo upisivanja te informacija se prenosi prema priručnoj memoriji i sabirničkom upravljačkom sklopu (operacija pisanja za priručnu memoriju podataka) ili se informacija iz priručne memorije prenosi procesoru (operacija čitanja). Napomenimo da se MMU nalazi na procesorskom čipu i da ima jednaku brzinu rada kao i procesor. U slučaju promašaja upotrebljava se već preslikana adresa u MMU i koristi se vanjski sabirnički ciklus da bi se pribavila instrukcija ili dohvatio podatak iz glavne memorije (npr. u slučaju
336
11. POGLAVLJE: VIRTUALNA MEMORIJA
operacije čitanja). Bez obzira na to nalazi li se zahtijevani podatak u priručnoj memoriji ili ne, MMU preslikava logičku adresu ufizičku.Obje operacije, pristup priručnoj memoriji i preslikavanje logičke adrese u fizičku u procesoru izvode se istodobno. Priručna memorija podataka ima jednaku organizaciju kao i instrukcijska priručna memorija. Priručna memorija za obnavljanje sadržaja glavne memorije upotrebljava tehniku pohranjivanja-kroz: pri pogotku kod operacije pisanja mijenja se sadržaj ulaska (duge riječi) u priručnoj memoriji podataka. Neposredno se ta promjena prenosi i glavnoj memoriji. U slučaju promašaja pri operaciji pisanja ne pristupa se priručnoj memoriji, već se podatak upisuje samo u glavnu memoriju. Prije rečeno ne vrijedi za instrukcijsku priručnu memoriju, budući da promjene njezina sadržaja od strane procesora tijekom izvođenja programa nisu dopuštene te stoga ne postoji mogućnost promašaja pri operaciji pisanja. 24 bita FC2
•
4 3 2
31
logička adresa
značka
izbor 1 od 16
izbor duge riječi
4 duge riječi = 16 bajtova polje značke
16 bločnih priključaka
V
V
V
V
V
V
V
V
V
V
V
V
JJ
r* r*
V
V
V
V
V
V
V
V
V
V
V
V
podaci sa sabirnice podataka instrukcijske priručne memorije
zamjena značke
pogodak ulaska komparator podudaranje (pogodak bloka) SI. 10.14 Organizacija instrukcijske priručne memorije
(duge riječi)
L_T podaci prema cache holding registru prema upravljačkoj logici priručne memorije
S. RIBARIĆ - GRAĐA RAČUNALA
337,
11. POGLAVLJE
VIRTUALNA MEMORIJA 11.1. UVOD Glavna memorija predstavlja jednu od kritičnih funkcijskih jedinica računala jer svojim značajkama bitno utječe na performansu cijelog računarskog sustava. U 9. smo poglavlju naglasili dvije bitne značajke glavne memorije: latentnost (brzinu memorije) i kapacitet. Problem latentnosti, odnosno nesklada u brzini sklopovlja procesora i glavne memorije rješava se priručnom memorijom (engl. cache memory) koja je podrobno opisana u 10. poglavlju. U ovom ćemo poglavlju opisati virtualnu memoriju (engl. virtual memory) kojom se prvenstveno rješava problem kapaciteta glavne memorije. (Opaska: riječ virtualan latinskog je podrijetla (lat. virtus) i opisuje nešto s vrlinama kao što su hrabrost, snaga, sposobnost djelovanja, no istodobno skriveno, koji se obično ne pojavljuje ali se može pojaviti.) Uporabom arhitektonskog koncepta - virtualne memorije ostvaruje se sljedeće: Glavna memorija se prividno pojavljuje kao memorija koja ima kapacitet sekundarne memorije i brzinu jednaku brzini najbrže (ili skoro najbrže) memorije u memorijskoj hijerarhiji. Uporaba sve složenijih operacijskih sustava, viših programskih jezika te razvoj složenih programskih sustava u višekorisničkim okruženjima koji su vrlo često namijenjeni i multimedijskim primjenama postavljaju iznimno velike zahtjeve u vezi s kapacitetom glavne memorije. Naime, iako današnji (2011.godina) računarski sustavi imaju glavne memorije kapaciteta više stotina MB ili više desetaka GB, mnoge primjene, posebno one u višekorisničkim okruženjima, zahtijevaju još veći kapacitet glavne memorije. Uz pretpostavku da se tehnološki dadu riješiti problemi izvedbe memorijskih modula vrlo velikog kapaciteta, kao što su fizička veličina modula, potrošak snage te hlađenje modula, još uvijek ostaje otvoreno pitanje odnosa performanse i cijene. Virtualna memorija, koja se sastoji od dviju memorijskih hijerarhijskih razina - glavne memorije i sekundarne memorije, stvara privid korisniku da je glavna memorija kapaciteta jednakog kapacitetu sekundarne memorije uz vrlo malo povećanje latentnosti u odnosu na "prvotnu" glavnu memoriju. Ne zaboravimo daje sekundarna memorija kapaciteta koji je za razred veličine veći u odnosu na kapacitet glavne memorije (tablica 9.1). Drugim riječima, virtualnom se memorijom dobiva puno veća izravno adresirljiva memorija od one koja u računarskom sustavu zaista fizički postoji. Osim toga, virtualna memorija ima još barem tri pozitivna popratna učinka: oslobađa korisnike od pisanja programa koji, uz to što rješavaju određeni problem, trebaju i upravljati razmještanjem programskih blokova uslijed nedostatka dovoljnog kapaciteta glavne memorije, programe čini neovisnima o konfiguraciji i kapacitetu fizičke (glavne) memorije u računarskom sustavu te uz vrlo kratko vrijeme pristupa memoriji postiže nisku cijenu po pohranjenom bitu (engl. cost per bit).
338
11. POGLAVLJE: VIRTUALNA MEMORIJA
11.2. FIZIČKI I VIRTUALNI ADRESNI PROSTOR Da bi se razumio i objasnio način djelotvornog rukovanja virtualnim memorijskim sustavom (u kojem su uključene najmanje dvije razine u memorijskoj hijerarhiji: glavna memorija M 2 i sekundarna memorija M 3 (slika 11.1) uz sudjelovanje procesora i operacijskog sustava), potrebno je razlikovati fizički adresni prostor i virtualni adresni prostor.
procesor
virtualna memorija
SI. 11.1 Virtualna memorija
Fizičku memoriju čini skup stvarnih, fizičkih memorijskih lokacija glavne memorije u kojima se pohranjuju instrukcije i podaci. Dakle, fizička memorija jest ona memorija koja je priključena na sabirnicu procesora, odnosno računala (npr. memorijski modul DIMM; 9. poglavlje). Adresa riječi ili bajta u fizičkoj memoriji naziva se memorijska adresa. Skup takvih adresa, koje se jednoznačno dodjeljuju fizičkim memorijskim lokacijama, predstavlja
fizički adresni prostor. Adresa (npr. ime za neku konstantu ili varijablu) koju upotrebljava programer ili koju generiraju program, proces ili dretva kao najmanja programska jedinica naziva se virtualna ili logička adresa. Adresa koju generira procesor tijekom prevođenja i izvođenja programa promatra se kao virtualna adresa jer se za nju ne zahtijeva niti nužno očekuje da referencira neku stvarnu lokaciju u fizičkoj memoriji. Skup virtualnih adresa čini virtualni adresni prostor.
S. RIBARIĆ - GRAĐA RAČUNALA
339,
OznačimosF = {0,1,2,nrvl}fizički adresni prostor,asV = {0,1,2, ...,n-1} virtualni adresni prostor. Zanimljivo je daje tijekom povijesnog razvoja (mikro)računarskih sustava odnos između veličine fizičkog i virtualnog adresnog prostora bio je trojak. i) Fizički adresni prostor F jednak je virtualnom adresnom prostoru V: m = n.Takvu značajku susrećemo u računarskim sustavima koji su se temeljili na 8-bitnim mikroprocesorima u kojima su fizički i virtualni adresni prostori veličine svaki po 64 KB. ii) Virtualni adresni prostor manji je od fizičkog adresnog prostora. Virtualni adresni prostor bio je ograničen širinom adresne sabirnice (brojem adresnih linija) procesora. Ona je, tipično, za 8-bitne (mikro)procesore bila 16-bitna i time određivala veličinu adresnog prostora od 64 K. Upotrebom posebnih arhitekturnih zahvata kao što su memorijske banke ili indeksno preslikavanje mogao se povećati fizički adresni prostor tako da je fizički adresni prostor F postao veći od virtualnog adresnog prostora V: m > n . Na primjer, virtualni adresni prostor bio je i dalje veličine 64 K, a fizička je memorija bila organizirana u osam memorijskih banaka - svaka po 64 K (n = 216; m = 23 x 216). iii) Virtualni adresni prostor veći je od fizičkog adresnog prostora. Pojavom 16-bitnih, 32-bitnih i 64-bitnih (mikro)procesora problem rukovanja memorijom mijenja se iz temelja. Svjesni potrebe velikog adresnog prostora arhitekti povećavaju širinu adresne sabirnice (mikro)procesora tako da se može izravno adresirati više desetaka G (230) ili T (tera) (240) bajtova. Primjerice, AMD Opteron X4 koristi 48 bitova, od potencijalno raspoloživih 64 bita za izvedbu virtualnog memorijskog prostora pa se virtualni adresni prostor sastoji od 256 T adresa. Stvarna, fizička glavna memorija koja je priključena na sabirnicu procesora jest puno manjeg kapaciteta unatoč padu cijene poluvodičkih memorija. U takvim se slučajevima adresa koju procesor postavlja na sabirnicu i referencira podatak ili instrukciju naziva i promatra kao virtualna adresa.
11.3. ADRESNO PRESLIKAVANJE Suvremena računala imaju virtualni adresni prostor puno veći od fizičkog adresnog prostora i u tom se slučaju upotrebljava koncept virtualne memorije. Programu se, prije njegova izvođenja, mora dodijeliti stvarni, fizički memorijski prostor. U suvremenim se računarskinrusustavima dodjeljivanje memorijskog prostora izvodi dinamički - tijekom izvođenja programa. U uskoj vezi s dinamičkom dodjelom memorijskog prostora jest preslikavanje virtualnog adresnog prostora V u fizički adresni prostor F. Formalno, preslikavanje se može opisati funkcijom t Ć V - > F U {<|>},
gdje je V = {0, 1, 2,..., n -1} virtualni adresni prostor, F = {0,1, 2,..., m -1} fizički adresni prostor, pri čemu je n » m, te (j) prazan skup. Opišimo funkciju f. Neka je a EV. Funkcija f definirana je na sljedeći način: f{a) = a'ako se podatak (u širem smislu te riječi, dakle podatak ili instrukcija) s virtualnom adresom a nalazi u fizičkoj (glavnoj) memoriji na adresi a'ia'G F), odnosno f(a) = {()>}, ako se podatak s virtualnom adresom a ne nalazi u fizičkoj (glavnoj) memoriji.
340
11. POGLAVLJE: VIRTUALNA MEMORIJA
Preslikavanje f(o) = a' označava pogodak, dok f(a) = {} promašaj (engl. missing-item fault). Slika 11.2 shematski prikazuje preslikavanje virtualnog adresnog prostora u fizički adresni prostor. virtualna adresa
SI. 11.2 Shematski prikaz preslikavanja virtualnog adresnog prostora u fizički adresni prostor
Mehanizam adresnog preslikavanja obavlja prethodno opisano preslikavanje. Ako je f(a) = a', pristupa se glavnoj memoriji, ako je f{a) = {())}, zahtijeva se prijenos podatka iz sekundarne memorije u glavnu memoriju. Slika 11.3 prikazuje pojednostavljenu organizaciju virtualnog memorijskog sustava. U slučaju promašaja, program koji je generirao virtualnu adresu a privremeno se suspendira, dok se zahtijevana riječ ne prenese iz sekundarne memorije u glavnu memoriju. Razlog suspenzije programa koji je izazvao promašaj je sljedeći: pristup sekundarnoj memoriju (disku) je spor u usporedbi s vremenom pristupa glavnoj memoriji (tablica 9.1.) te procesor neće čekati nekoliko stotina tisuća ili milijuna perioda signala vremenskog vođenja ne radeći ništa dok se ne obavi spori prijenos podataka, već će se operacijski sustav pobrinuti da se izvede prospajanje konteksta (engl. context switching) što podrazumijeva aktivnosti kojima se omogućuje pokretanje novog programa (procesa, dretve) uz prethodnu pohranu stanja "starog" programa (engl. program context), stanja procesa ili dretve koje je potrebno za ponovno pokretanje programa (procesa, dretve) koji je bio suspendiran. Novi se zadatak izvodi sve dok se ne prenese podatak, odnosno blok podataka koji sadržava i referencirani podatak, s diska u glavnu memoriju.
S. RIBARIĆ - GRAĐA RAČUNALA
L
341,
_l
SI. 11.3 Pojednostavnjeni prikaz organizacije virtualnog memorijskog sustava
Preslikavanje adrese iz virtualnog prostora u adresu fizičkog prostora ostvaruje se pomoću tablice adresnog preslikavanja (engl. mapping table). Tijekom izvođenja programa tablica adresnog preslikavanja sadržava fizičke adrese koje su pridružene odgovarajućim virtualnim adresama. To pridruživanje obavlja operacijski sustav koji je odgovoran i za promjene u tablici tijekom izvođenja programa.
11.3.1.
DENNINGOV MODEL VIRTUALNE MEMORIJE Postupak adresnog preslikavanja opisat ćemo na jednostavnom modelu virtualne memorije koji je predložio P. J. Denning (slika 11.4). Skrećemo pozornost na to da model u sebi ima namjerno ugrađenu nelogičnost koja će nas uputiti na pravilno rješenje problema adresnog preslikavanja. Virtualna se adresa a pohranjuje u registar virtualne adrese (slika 11.4). Njome se adresira element u tablici adresnog preslikavanja. Adresirani element u tablici preslikavanja može biti dvojak: 1. ako se podatak, određen virtualnom adresom, nalazi u fizičkoj (glavnoj) memoriji, tada element u tablici preslikavanja predstavlja njegovu fizičku adresu a'; 2. ako se podatak, određen virtualnom adresom, ne nalazi u fizičkoj (glavnoj) memo-
342
11. POGLAVLJE: VIRTUALNA MEMORIJA
riji (dogodio se promašaji), odgovarajući element neće sadržavati adresu lokacije u fizićkoj memoriji a', već će sadržavati adresu mjesta u sekundarnoj memoriji (npr. sektor na disku) gdje je podatak smješten. Dakle, osim adresnog dijela element u tablici adresnog preslikavanja mora sadržavati i informaciju o (ne)nazočnosti podatka u glavnoj memoriji.
SI. 11.4 Denningov model virtualne memorije
Mehanizam adresnog preslikavanja izvijestit će operacijski sustav daje došlo do promašaja time što će se zastavica Fault (slika 11.4) postaviti u jedan (Fault 1). Operacijski će sustav u tom slučaju izvesti odgovarajuće radnje: pohraniti stanje programa (procesa, dretve), suspendirati program (proces, dretvu), pokrenuti akcije za dohvat traženog podatka iz sekundarne memorije, pokrenuti novi program (proces, dretvu) te nakon što je traženi podatak prenesen u glavnu memoriju i upisana njegova fizička adresa u odgovarajuće mjesto u tablici preslikavanja, osvježiti informaciju o raspoloživosti podatka u glavnoj memoriji i,
S. RIBARIĆ - GRAĐA RAČUNALA
343,
konačno, nakon suspenzije novopokrenutog programa (procesa, dretve), ponovo aktivirati suspendirani program (proces, dretvu) koji je bio izazvao promašaj. Opisan Denningov model ima jednu nelogičnost U skladu sa slikom 11.4 možemo ustanoviti da virtualna adresa predstavlja pomaknuče (engl. offset) u odnosu na početni element u tablici adresnog preslikavanja pa tablica ima broj elemenata jednak broju adresa u virtualnom adresnom prostoru. Ako je tablica izvedena kao skup registara ili kao tablica u glavnoj memoriji, tada jeza izvedbu tablice preslikavanja potreban broj registara, odnosno broj memorijskih lokacija koji daleko premašuje kapacitet glavne memorije. Primjer 11.1. Ako za jednostavan Denningov model pretpostavimo da je kapacitet glavne memorije 256 KB te da je kapacitet sekundarne memorije 4 GB, onda tablica adresnog preslikavanja ima 4 G lokacija (elemenata). To znači da je umjesto uporabe tablice adresnog preslikavanja veličine 4 G elemenata logičnije ukloniti mehanizam adresnog preslikavanja i ne koristiti sekundarnu memoriju, već umjesto svega toga implementirati glavnu memoriju koja ima kapacitet 4 GB. Da bi mehanizam adresnog preslikavanja bio opravdan, potrebno je kapacitet, odnosno veličinu tablice adresnog preslikavanja smanjiti. Veličina tablice smanjit će se ako element u njoj sadržava adresu bloka podataka smještenog u glavnoj memoriji umjesto adrese pojedinačno referenciranog podatka. Rješenje za nelogičnost u Denningovom modelu nalazimo u dijeljenju virtualnog i fizičkog adresnog prostora u blokove. Prema tomu jesu li blokovi stalne ili promjenjive veličine, oni se nazivaju stranicama (engl. page), odnosno segmentima (blokovi promjenjive duljine) (engl. segment). Broj elemenata, odnosno broj registara ili lokacija potreban za izvedbu tablice adresnog preslikavanja određen je sada brojem blokova u virtualnom adresnom prostoru - po jedan se registar u tablici preslikavanja zahtijeva za svaki blok u virtualnom adresnom prostoru. Primjer 11.2. Neka je virtualna adresa duljine 32 bita, odnosno veličina virtualnog adresnog prostora je 232 = 4 G. Fizička adresa neka je duljine 26 bita, odnosno veličina fizičkog adresnog prostora je 226 = 64 M. Pretpostavimo da su virtualni ifizičkiadresni prostor podijeljeni na blokove čvrste duljine, dakle stranice, veličine 4 K riječi. U tom je slučaju veličina tablice adresnog preslikavanja jednaka: (veličina virtualnog adresnog prostora) / (veličina stranice), odnosno 4 G / 4 K = 232 / 212 = 220. Tablica adresnog preslikavanja ima 1 M elementa. Slika 11.5 prikazuje„popravljeni" Denningov model virtualne memorije koji je dobiven dijeljenjem virtualnog i fizičkog adresnog prostora na blokove čvrste duljine. Možemo uočiti da se tablica adresnog preslikavanja sada pretvorila u tablicu straničnogpreslikavanja koja ima za faktor veličine stranice manji broj elemenata (Primjer 11.2.).
344
11. POGLAVLJE: VIRTUALNA MEMORIJA
SI. 11.5 „Popravljeni" Denningov model virtualne memorije
Virtualna adresa koju generira procesor, bilo da se pribavlja instrukcija ili pak dohvaća ili pohranjuje podatak, organizirana je u dva dijela: značajniji adresni bitovi čine virtualni stranični broj (engl. virtualpage number), a manje značajni bitovi adrese predstavljaju pomaknute (engl. offset in page) u odnosu na početak stranice tako da određuje riječ u stranici. Fizička adresa organizirana je tako da su njezini manje značajni bitovi, koji odgovaraju pomaknuću, tj. adresi riječi u bloku dobiveni izravnim prijenosom dijela virtualne adrese (pomaknuća) u manje značajne bitove fizičke adrese, a značajniji se dio fizičke adrese (fizički stranični broj) dobiva adresnim preslikavanjem virtualnog straničnog broja u fizički stranični broj (slika 11.6). Adresno preslikavanje obavlja se tablicom straničnog preslikavanja. Slika 11.6 prikazuje organizaciju virtualne adrese za virtualnu memoriju prikazanu na slici 11.7 i njezino preslikavanje u fizičku adresu. U ovom smo jednostavnom slučaju pretpostavili da se virtualni adresni prostor sastoji od 32 bloka (stranice), a fizički adresni prostor od 8 blokova (straničnih okvira) te da je blok veličine 1 K riječi. Preslikavanje virtualne adrese ufizičkuadresu može se opisati na ovaj način (slika 11.5): 1. virtualna se adresa smješta u registar virtualne adrese; 2. zastavica Fault postavlja se u 0 (Fault 0);
S. RIBARIĆ - GRAĐA RAČUNALA
345,
3. virtualni se stranični broj dovodi na ulaz tablice straničnog preslikavanja i dohvaća (čita) se element iz tablice; 4. ako je postignut pogodak element iz tablice straničnog preslikavanja na koji pokazuje virtualni stranični broj, smješta se na značajnija mjesta u registru fizičke adrese (u polje označeno kaofizičkistranični broj; slika 11.5); 5. istodobno se pomaknuće iz registra virtualne adrese izravno prenosi u polje pomaknuća u registrufizičkeadrese; 6. ako nije postignut pogodak, što znači da se blok (stranica) s virtualnim straničnim brojem ne nalazi u glavnoj memoriji, zastavica Fault postavlja se u jedan (Fault 1) i pokreće se postupak rukovanja promašajem. virtualni stranični broj
r
^
^
14
10 9
3 bita H
0
10 bitova •H
H
fizički stranični broj 51.11.6 Organizacija virtualne i fizičke adrese tijekom preslikavanja p o m o ć u tablice straničnog preslikavanja (pojednostavljeno)
Uočimo još jedan detalj vezan za Denningov model virtualne memorije. Naime, u slučaju pogotka pristup podatku u glavnoj memoriji ostvaruje se u dva slijedna koraka - prvo se pristupa tablici straničnog preslikavanja da bi se dohvatila fizička adresa referenciranog podatka, a zatim se pristupa lokaciji u glavnoj memoriji gdje se nalazi referencirani podatak. Ako pretpostavimo da je tablica straničnog preslikavanja realizirana u glavnoj memoriji, možemo ustvrditi da privid o velikoj glavnoj memoriji (čiji je kapacitet prividno jednak kapacitetu sekundarne memorije) plaćamo, čak i u slučaju pogotka, dvostrukim pristupom glavnoj memoriji, odnosno dvostrukim vremenom pristupa memoriji. Naravno, dodatna cijena koju plaćamo je i „gubitak" dijela kapaciteta radne memorije koji je potreban za izvedbu tablice straničnog preslikavanja jer se svakom programu (ili procesu) u izvršavanju, u višeprogramskom načinu rada, treba dodijeliti po jedna tablica straničnog preslikavanja. Postoje različite tehnike kojima se smanjuje dio radne memorije namijenjen izvedbi tablica straničnog preslikavanja: i) uporaba raspršene tablice (engl. hash table) kojom se virtualni stranični broj preslikava u raspršenu tablicu uporabom jednostavne funkcije raspršenja (engl. hashing function) tako da struktura podataka potrebna za straničnu tablicu zahtijeva broj elemenata u tablici jednak broju fizičkih stranica (blokova), odnosno straničnih okvira u glavnoj memoriji. ii) uporaba višerazinskih tablica straničnog preslikavanja;
346
11. POGLAVLJE: VIRTUALNA MEMORIJA
iii) izvedba tablice straničnog preslikavanja kao asocijativne memorije u kojoj svaki element tablice sadrži oboje - virtualni stranični broj i fizički stranični broj te se pretražuje asocijativno. U tom slučaju tablica straničnog preslikavanja ima elemenata koliko ima i stranica u glavnoj memoriji. iv) tablice straničnog preslikavanja izvedene su straničenjem (vidi 11.4) tako da se i one nalaze u virtualnoj memoriji.
11.4. STRANIČENJE Već smo spomenuli da ako se virtualni adresni prostor ifizičkiadresni prostor podijele na jednake blokove stalne veličine, govorimo o virtualnoj memoriji sa straničenjem (engl. paging). Dogovorno ćemo uvesti sljedeću terminologiju: virtualni adresni prostor, koji odgovara adresnom prostoru sekundarne memorije, podijeljen je na stranice, pri čemu svaka stranica zauzima neprekinuti slijed lokacija određene, čvrste duljine (tipične veličine stranica su 4 - 64 KB, što u slučaju diska s 512-bajtnim sektorima odgovara 8 - 1 2 8 sektora). Glavna će memorija također biti podijeljena na stranice iste veličine, koje ćemo nazivati straničnim okvirima (engl. page frame). Slika 11.7 prikazuje shemu virtualne memorije sa straničenjem. (Opaska: ova je pojednostavljena shema prilagođena primjeru sa slike 11.6 - virtualni adresni prostor sastoji se od samo 32 stranice, pri čemu je svaka veličine 1K, a fizički adresni prostor ima samo 8 straničnih okvira.) Početne su adrese stranica i straničnih okvira na slici 11.7 predočene u dekadnom brojevnom sustavu. Naglasimo da je stranica osnovna jedinica za preslikavanje virtualnog adresnog prostora u fizički te ujedno i osnovna jedinica koja se u slučaju promašaja prenosi između sekundarne memorije i glavne memorije. virtualna adresa
fizička
adresni prostor SI. 11.7 Pojednostavljena shema virtualnog memorijskog sustava sa straničenjem
Naziv stranični okvir ima opravdanje jer se za zadani program koji zauzima neki potprostor u virtualnom adresnom prostoru, samo podskup njegovih stranica preslikava u podskup straničnih okvira u fizičkom adresnom prostoru. Napredovanjem izvođenja programa,
S. RIBARIĆ - GRAĐA RAČUNALA
347,
stranice iz virtualnog adresnog prostora smještat će se u oslobođene stranične okvire u fizičkom adresnom prostoru. Slika 11.8 podrobnjje prikazuje strukturu adresnog preslikavanja u virtualnoj memoriji sa straničenjem. Općenito, svakom se procesu koji se izvodi dodjeljuje tablica straničnog preslikavanja ili kraće stranična tablica (engl. page table) koja je smještena u glavnoj memoriji. Broj elemenata u straničnoj tablici odgovara broju stranica u virtualnom adresnom prostoru koji je dodijeljen procesu. Početna adresa stranične tablice za proces P sadržana je u
straničnom tabličnom registru ili, kako se još naziva, baznom registru stranične tablice.
Format, odnosno oblik zapisa u elementu stranične tablice ovisi o specifičnoj implementaciji sustava. No općenito se element u straničnoj tablici sastoji od polja u kojem se pohranjuje informacija o nazočnosti referencirane stranice u glavnoj memoriji (polje nazočnosti;
348
11. POGLAVLJE: VIRTUALNA MEMORIJA
engl. presence field). To se polje može sastojati samo od jednog bita - bita valjanosti V (engl. valid bit) koji će biti postavljen u 1 ako je stranica određena virtualnim straničnim brojem u glavnoj memoriji: Ako j e V = 1, onda odgovarajuće adresno polje u elementu stranične tablice sadržava početnu adresu straničnog okvira u glavnoj memoriji koji sadržava referenciranu stranicu. Ako je V = 0, tada adresno polje u elementu stranične tablice označava adresu stranice u sekundarnoj memoriji (disku). Element tablice straničnog preslikavanja sadržava još polje u kojem se nalaze bitovi - zastavice koje označavaju pravo pristupa aktivnog procesa pojedinoj stranici (zastavica R (read only) = 1 - pristup stranici samo operacijom čitanja; zastavica W (read/write) = 1 - pristup stranici operacijama pisanja i čitanja, zastavica X (execute only) = 1 - samo izvršavanje bez prava modifikacije ili čitanja) te zastavica koje označava je li stranica u straničnom okviru bila modificirana upisivanjem (tzv. bit prljavosti; engl. dirty bit) i zastavica nazvana„use bit" (naziva se i "bit referenciranja") koja se postavlja ujedan kad se stranici pristupi. Zastavica prljavosti koristi se za indikaciju potrebe ponovnog upisa stranice iz straničnog okvira natrag u sekundarnu memoriju (tijekom zamjene stranica, odnosno oslobađanja straničnog okvira), a zastavica „use bit" rabi se za ostvarivanje algoritma zamjene stanica. Na temelju potonjeg opisa vidimo da se kao element u tablici straničnog preslikavanja javlja ili adresa straničnog okvira, odnosno fizička adresa (u slučaju pogotka; V = 1) ili adresa stranice u sekundarnoj memoriji (u slučaju promašaja; V = 0). No, jasno je da se trebaju sačuvati i adrese stranice u sekundarnoj memoriji i to čak i onih koje se nalaze trenutno u fizičkoj (glavnoj) memoriji jer će se te adrese rabiti u postupku zamjene stranica kada te stranice prestanu biti aktivne. U mnogim izvedbama virtualne memorije tablica fizičkih adresa stranica, tj. straničnih okvira i adresa stranica u sekundarnoj memoriji, predstavljaju logičku cjelinu iako su ostvarene dvjema odvojenim strukturama podataka. Virtualna memorija nudi još jednu pogodnost - omogućuje da više procesa dijele iste stranice u straničnim okvirima uz poštovanje zaštitnih prava na temelju zastavica koje označavaju pravo pristupa (slika 11.9) i zastavica razina prioriteta. Na primjer, proces P1 i P3 dijele stranicu u trećem straničnom okviru tako da proces P1 ima pravo čitanja i pisanja, a proces P3 samo čitanja stranice (slika 11.9). Na temelju virtualne adrese i informacije koja je pohranjena u elementu stranične tablice za proces P može se opisati postupak adresnog preslikavanja na sljedeći način:
Ako je AR valjano i ako je ražina prioriteta pristupa < Pr tada, akojeV= i, onda je fizička adresa = PT(P).ADDR + pomaknuće inače iznimka-promašaj inače iznimka-povreda prava pristupa i zaštite Komentar: AR - polje zastavica R, W i X kojim se definira način pristupa: R - samo čitanje; W-čitanje i pisanje; X - s a m o izvođenje; Pr - polje razine prioriteta: 00 - najviši prioritet 01 10
11 - najniži prioritet
S. RIBARIĆ - GRAĐA RAČUNALA
349,
Zastavica V = 1 označava da je referencirana stranica u straničnom okviru (pogodak); PT(P).ADDR - označava početnu adresu straničnog okvira dobivenu iz odgovarajućeg elementa stranične tablice procesa P. stranični tablični registar procesa P s
stranična tablica procesa P,
11.4.1. TRANSLACIJSKI SPREMNIKTLB (ENGL. TRANSLATION LOOKASIDE BUFFER) Za opisanu organizaciju virtualne memorije sa straničenjem, u kojem su stranične tablice za pojedine procese smještene u glavnoj memoriji, potrebna su, kao što smo već spomenuli, dva pristupa glavnoj memoriji: • prvim se pristupom glavnoj memoriji dohvaća odgovarajući element iz tablice straničnog preslikavanja, • drugim se pristupom, nakon uspješnog adresnog preslikavanja, dohvaća podatak iz glavne memorije ili pohranjuje u nju.
350
11. POGLAVLJE: VIRTUALNA MEMORIJA
Očito je da se zbog svega toga brzina memorijskog sustava smanjuje za faktor dva, odnosno vrijeme pristupa glavnoj memoriji udvostručuje se. To je cijena koju plaćamo za prividno velik memorijski prostor kojim raspolažemo. No to nije i jedina cijena. Dodatna se cijena odražava i u straničnoj fragmentaciji - zauzeću dijelova glavne memorije koji nisu raspoloživi za programe i podatke. Na primjer, tablice straničnog preslikavanja pojedinih procesa mogu zauzimati prilično velik dio glavne memorije koji nije raspoloživ za stranice programa. U slučaju promašaja, tj. kada se referencirana stranica ne nalazi u straničnom okviru, vrijeme pristupa podatku povećava se, a uz to procesor troši vrijeme na kućanske poslove vezane za prospajanje konteksta koji su nužni za privremeno suspendiranje jednog procesa i aktiviranje drugoga. Problem smanjenja brzine virtualne memorije rješava se tako da se dio tablice straničnog preslikavanja smjesti u maloj brzoj memoriji, zapravo posebnoj priručnoj memoriji koja se naziva transiacijski spremnik TLB (Translation Lookaside Buffer), iako bi bio bolji naziv translacijska priručna memorija. Transiacijski spremnik TLB obično je izveden na samom procesorskom čipu i pohranjuje elemente tablice straničnog preslikavanja jednog ili više procesa, i to samo one koji su korišteni u najskorijoj prošlosti. Zahvaljujući svojstvu vremenske i prostorne lokalnosti programa i podataka, može se očekivati da će se većina referenciranih podataka odnositi na lokacije u nedavno korištenim stranicama. Zbog svega toga, očekuje se da će većina referenciranja koristiti elemente iz tablica straničnog preslikavanja koji se nalaze u translacijskom spremniku TLB. Transiacijski spremnik TLB, budući da je posebna priručna memorija, sastoji se od memorije za pohranu značaka u kojoj se pohranjuju dijelovi virtualnog straničnog broja (TLB značke, slika 11.10) i od memorije za pohranu podataka (poglavlje 10.) u kojoj se pohranjuju fizički stranični brojevi (slika 11.10). U memoriji za pohranu značaka, osim TLB značke, pohranjuju se zastavice kao što su "use" bit, odnosno bit referenciranja te zastavice za označavanje prioriteta i prava pristupa. One su potrebne jer se u slučaju podudaranja virtualnog straničnog broja sa značkom TLB više ne pristupa tablici straničnog preslikavanja. Dakle, u slučaju pogotka, procesor se upućuje izravno iztranslacijskog spremnika TLB na glavnu memoriju. U memoriji značaka nalazi se i bit valjanosti koji se postavlja u 1 kada je postignuto podudaranje virtualnog straničnog broja i značke TLB. Transiacijski spremnik TLB obično je ostvaren kao priručna memorija s potpuno asocijativnim ili skupnim asocijativnim preslikavanjem i sadržava, tipično, od nekoliko desetaka do tisuću elemenata iz tablica straničnog preslikavanja. Tijekom preslikavanja virtualne adrese u fizičku adresu, prvo se asocijativno pretražuje transiacijski spremnik TLB da bi se ustanovilo podudaranje virtualnog straničnog broja (kao dijela virtualne adrese) i značke TLB. Ako je podudaranje uspješno - dogodio se TLB pogodak, postavlja se bit valjanosti V, provjeravaju se zastavice prioriteta i prava pristupa i ako nema povrede prava pristupa, uzima se fizički stranični broj koji zajedno s pomaknućem (dio virtualne adrese) oblikuje fizičku adresu kojom se pristupa memoriji. Slika 11.11. prikazuje detalj oblikovanja fizičke adrese na temelju virtualne adrese uporabom translacijskog spremnika TLB (u slučaju TLB pogotka). Ako se, međutim, dogodio TLB promašaj, mora se utvrditi je li promašaj nastupio zato što se odgovarajući element iz tablice straničnog preslikavanja ne nalazi u translacijskom spremniku TLB ("TLB promašaj") ili je promašaj uzrokovan zato što se referencirana stranica ne nalazi u glavnoj memoriji ("stranični promašaj"). Ako je riječ samo o TLB promašaju (to
S. RIBARIĆ - GRAĐA RAČUNALA
351,
znači da se stranica nalazi u glavnoj memoriji), procesor će rukovati TLB promašajem tako da će pristupiti tablici straničnog preslikavanja i odgovarajući element iz tablice prenijeti u translacijski spremnik TLB. Nakon toga će procesor ponovo pokušati referencirati traženu stranicu. virtualni stranićni broj
pomaknuće
straničnog preslikavanja koji su korišteni u najskorijoj prošlosti
352
11. POGLAVLJE: VIRTUALNA MEMORIJA
potraži fizički stranični broj u tablici straničnog preslikavanja
ostali bitovi (zastavice)
51.11.11. Detalj oblikovanja fizičke adrese na temelju virtualne adrese i fizičkog straničnog broja dobivenog iztranslacijskog spremnika TLB
Ako se dogodio stranični promašaj, procesor će uz pomoć operacijskog sustava pobuditi sve aktivnosti potrebne za prijenos stranice iz sekundarne memorije u stranični priključak glavne memorije. Uz to će se izvesti svi kućanski poslovi koji se odnose na obnavljanje tablice straničnog preslikavanja. Nakon toga, prenijet će se element iz tablice straničnog preslikavanja u translacijski spremnikTLB. Budući dajetranslacijski spremnikTLB posebna priručna memorija s relativno malim brojem priključaka za elemente iz tablice straničnog preslikavanja, može se očekivati (u slučaju TLB promašaja) zamjena nekog elementa iz TLB-a s novim elementom. Tijekom oslobađanja prostora u translacijskom spremniku TLB potrebno je kopirati zastavice (npr. zastavicu prljavosti i"use"bit) pridružene elementu koji se uklanja iz spremnika natrag u tablicu straničnog preslikavanja. Navedimo neke tipične vrijednosti koje se odnose na translacijski spremnikTLB: • veličina spremnika: 16-1024 elemenata iz tablice straničnog preslikavanja; • veličina bloka koji se prenosi između glavne memorije (tablice straničnog preslikavanja) i spremnika: 1 - 2 elementa tablice, pri čemu se jedan element tablice sastoj od 4 do 8 bajtova; • omjer pogotka je od 99% do 99.99%; • uslučajuTLBpogotkavrijemepristupaje0.5do 1 perioda signala vremenskog vođenja: • TLB promašaj zahtijeva 10 - 30 dodatnih perioda signala vremenskog vođenja.
S. RIBARIĆ - GRAĐA RAČUNALA
353,
11.5. SEGMENTACIJA I SEGMENTACIJA SA STRANIČENJEM Viši programski jezici (npr. C ili Pascal) dopuštaju oblikovanje programskih logičkih cjelina kao što su procedure, programski moduli ili smisleni blokovi podataka. Svi su oni različitih veličina. Dijeljenje virtualnog i fizičkog adresnog prostora u skladu s logičkim cjelinama vodi do koncepta segmentacije (engl. segmentation). Blokovi koji se izmjenjuju između glavne i sekundarne memorije sada su promjenjive veličine i nazivaju se segmenti Segmenti, dakle, nemaju jednaku i čvrstu duljinu jer se oni odnose izravno na objekte na programskoj razini. Štoviše, njihova se veličina može mijenjati tijekom izvođenja programa. Rukovanje takvim cjelinama u virtualnom memorijskom sustavu izgleda logičnije i prirodnije u usporedbi sa straničenjem, međutim, izvedba virtualnog sustava sa segmentacijom bitno je složenija od straničenja (problem rukovanja zamjenom i smještanjem segmenata, fragmentacija memorije) pa u računarskim sustavima zbog jednostavnosti izvedbe prevladavaju virtualni memorijski sustavi sa straničenjem. Kombinacijom segmentacije i straničenja želi se ostvariti virtualni memorijski sustav koji objedinjuje dobra svojstva segmentacije i straničenja. U tom su slučaju virtualni adresni prostor i fizički adresni prostor podijeljeni na segmente (blokove promjenjive veličine), a svaki je segment opet podijeljen na stranice (blokove čvrste veličine). Opise postupaka adresnog preslikavanja možete naći u knjizi Ribarić, S.: Arhitektura računala RISC i CISC, Školska knjiga, Zagreb, 1996.
11.6. ZAMJENA I PRIBAVLJANJE STRANICA Potreba za zamjenom stranica u virtualnom memorijskom sustavu sa straničenjem, slično kao i u slučaju priručne memorije (poglavlje 10.), pojavljuje se kad se nova stranica iz sekundarne memorije treba prenijeti u glavnu memoriju, a u njoj nema slobodnog straničnog okvira. Budući da su svi stranični okviri zauzeti, mora se donijeti odluka koja će se stranica iz glavne memorije udaljiti i na taj način osloboditi stranični okvir potreban za novu stranicu. Izabrana se stranica zamjenjuje novom stranicom. Odluka o izboru stranice temelji se na algoritmu zamjene (engl. page replacement algorithm). Razmatranja u odjeljku 10.5. vrijede i ovdje. Obično se upotrebljavaju algoritmi slučajnog izbora, FIFO, LRU i NRU. Slično kao i kod priručne memorije, ovdje se potrebna informacija (blok ili stranica iz sekundarne memorije) pribavlja na dva glavna načina: i) na zahtjev, ii) pretpribavljanjem. Pribavljanje na zahtjev najčešće se upotrebljava jer je jednostavno za izvedbu - u slučaju straničnog promašaja pribavlja se upravo ona stanica koja je i uzrok promašaja. Pretpribavljanje temelji se na lokalnosti programa i značajkama radnog skupa pa je moguće predvidjeti sljedeću potrebnu stranicu i pribaviti je u glavnu memoriju prije nego je ona stvarno potrebna. Predviđanje sljedećih stranica koje će se naslovljavati tijekom izvođenja programa vrlo je teško (posebice u višekorisničkom okruženju) pa zato većina virtualnih memorijskih sustava upotrebljava pribavljanje na zahtjev.
354
11. POGLAVLJE: VIRTUALNA MEMORIJA
11.7. VIRTUALNA MEMORIJA I PRIRUČNA MEMORIJA Sada kada smo se upoznali s virtualnom memorijom i priručnom memorijom (poglavlje 10.) možemo odgovoriti i na pitanje: Što se dobiva uporabom obaju koncepata - priručne memorije i virtualne memorije? Na temelju analize mehanizma djelovanja priručne memorije možemo zaključiti da ona služi za ubrzanje rada glavne memorije, tvoreći privid o postojanju vrlo brze glavne memorije. S druge strane, virtualna memorija stvara privid o postojanju glavne memorije vrlo velikog kapaciteta. Kombinacijom triju razina u memorijskoj hijerarhiji (priručne memorije glavne memorije M2 i sekundarne memorije M3) stvara
se potpuni privid o vrlo brzoj glavnoj memoriji (čija je brzina usporediva s brzinom priručne memorije) i istodobno memoriji vrlo velikog kapaciteta (jednakog kapacitetu sekundarne memorije). Posljedicu svega toga jest predstavljanje memorijske jedinice u računarskom sustavu kao vrlo brze memorije kojoj je cijena za GB samo mali višekratnik one cijene koja odgovara pohrani podataka u sekundarnoj memoriji (disku).
11.8. VIRTUALNI MEMORIJSKI SUSTAVINTEGRACIJA TRANSLACIJSKOG SPREMNIKA TLB, PRIRUČNE MEMORIJE I VIRTUALNE MEMORIJE Do sada smo raspravljali o priručnoj memoriji, virtualnoj memoriji i translacijskom spremniku TLB skoro neovisno. No oni su u računarskom sustavu u interakciji koja određuje virtualni memorijski sustav. Oblik interakcije ima više inačica koje ovise o načinu implementacije virtualnog memorijskog sustava. Sada ćemo opisati opći scenarij koji je zajednički za većinu implementacija (slika 11.12). Procesor generira virtualnu adresu. Ona se dovodi translacijskom spremniku TLB (koji je realiziran kao posebna asocijativna priručna memorija). Ako je postignut TLB pogodak - što znači daje virtualnoj adresi pridružena odgovarajuća fizička adresa - tada sefizičkaadresa, dobivena iz translacijskog spremnika TLB, prosljeđuje priručnoj memoriji. Ako je i tu postignut pogodak (tzv. cachehit) - što znači da se blok podataka s referenciranom riječi nalazi u bločnom priključku priručne memorije, pristupa se priručnoj memoriji i dohvaća se referencirani podatak. No ako se dogodio promašaj u priručnoj memoriji - što znači da se blok podataka ne nalazi u bločnom priključku priručne memorije - tada se obnavlja priručna memorija prijenosom bloka iz glavne memorije (kao što je to opisano u poglavlju 9.). Što se događa u slučaju TLB promašaja - odnosno ako se za generiranu virtualnu adresu u translacijskom spremniku TLB ne nalazifizičkaadresa? U tom se slučaju pristupa tablici straničnog preslikavanja koja se nalazi u glavnoj memoriji. Ako se sada dogodi pogodak u tablici straničnog preslikavanja, dohvaća se fizička adresa iz tablice, obnavlja se sadržaj translacijskog spremnika TLB i pretražuje priručna memorija. Ako se, međutim, dogodio promašaj u tablici straničnog preslikavanja (stranični promašaj) - što znači da se stranica ne nalazi u glavnoj memoriji - tada se pristupa sekundarnoj memoriji te slijedi obnavljanje sadržaja glavne memorije, priručne memorije i tablice straničnog preslikavanja. Sljedeći pokušaj pristupa toj virtualnoj adresi rezultirat će obnavljanjem sadržaja translacijskog spremnika TLB i normalnim pristupom priručnoj memoriji. Virtualni memorijski sustav koji omogućuje da virtualna memorija i priručna memorija djeluju zajedno u hijerarhiji: priručna memorija M 1 - glavna memorija M 2 - sekundarna memorija M 3 - postavlja neka logična ograničenja. Na primjer, podaci se ne mogu nalaziti
S. RIBARIĆ - GRAĐA RAČUNALA
355,
u priručnoj memoriji ako se istodobno ne nalaze i u glavnoj memoriji. Operacijski sustav vodi brigu da se preseljenjem stranice iz glavne memorije u sekundarnu ujedno "ispere" sadržaj te stranice u priručnoj memoriji. Istodobno, operacijski će se sustav pobrinuti za promjenu u tablici straničnog preslikavanja i promjenu sadržaja translacijskog spremnika TLB. Pokušaj pristupa podatku koji se nalazi na preseljenoj stranici generirat će promašaj, odnosno promašaj TLB i stranični promašaj.
SI. 11.12 Scenarij djelovanja virtualnog memorijskog sustava sastavljenog od priručne memorije, glavne i sekundarne memorije
356
11. POGLAVLJE: VIRTUALNA MEMORIJA
Primjer 11.3. U virtualnom memorijskom sustavu koji predstavlja integraciju translacijskog spremnika TLB, priručne memorije i virtualne memorije javljaju se tri vrste promašaja:TLB promašaj (engl. TLB miss), promašaj priručne memorije (engl. cache miss) - referencirani podatak ne nalazi se u bloku koji je "priključen" u bločnom priključku priručne memorije i stranični promašaj (engl. page fault) - referencirani podatak ne nalazi se u stranici koja je "priključena" u stranični okvir glavne memorije. Zanimljivo je promotriti moguće međusobne odnose između tih triju vrsta promašaja, odnosno pogodaka (slika 11.12): Slučaj 1: TLB pogodak, priručna memorija - promašaj, tablica straničnog preslikavanja - pogodak Mogući slučaj (iako se tablica straničnog preslikavanja u slučaju TLB pogotka nikada ne provjerava) - na temelju TLB pogotka generira se fizička adresa koja se prosljeđuje priručnoj memoriji. Referenci rana se riječ ne nalazi u stranici koja je "priključena" u nekom straničnom priključku priručne memorije. U tom se slučaju obnavlja sadržaj priručne memorije dohvaćanjem stranice iz glavne memorije. Slučaj 2: TLB promašaj, priručna memorija - pogodak, tablica straničnog preslikavanja - pogodak, Mogući slučaj - kad se dogodi TLB promašaj, upućuje se na tablicu straničnog preslikavanja gdje se pronalazi fizička adresa, obnavlja se sadržaj TLB i pristupa se priručnoj memoriji iz koje se dohvaća referencirani podatak. Slučaj 3: TLB promašaj, tablica straničnog preslikavanja - pogodak, priručna memorija - promašaj Mogući slučaj - kad se dogodi TLB promašaj, upućuje se na tablicu straničnog preslikavanja na temelju koje se utvrđuje da se referencirani podatak nalazi u stranici koja je u glavnoj memoriji. Na temelju fizičke adrese dobivene iz tablice straničnog preslikavanja pristupa se priručnoj memoriji, no stranica koja sadržava referencirani podatak nije u straničnom priključku te se mora obaviti prijenos stranice iz glavne memorije. Slučaj 4: TLB promašaj, priručna memorija - promašaj, tablica straničnog preslikavanja - promašaj Mogući slučaj - dogodila su se sva tri promašaja. Referencirani će se podatak dobiti na temelju dohvata stranice iz sekundarne memorije obnavljanjem glavne memorije, priručne memorije i tablice straničnog preslikavanja. U ovom će slučaju proces koji je izazvao promašaj biti suspendiran sve dok se ne obnove spomenuti sadržaji. Slučaj 5: TLB pogodak, priručna memorija - promašaj, tablica straničnog preslikavanja - promašaj Nemogući slučaj - translacijski spremnikTLB ne može sadržavati fizičku adresu ako se referencirana stranica ne nalazi u glavnoj memoriji. Slučaj 6: TLB pogodak, priručna memorija - pogodak, tablica straničnog preslikavanja - promašaj Nemogući slučaj - priručna memorija ne može sadržavati podatak čija se pripadajuća stranica ne nalazi u glavnoj memoriji.
S. RIBARIĆ - GRAĐA RAČUNALA
357,
Slučaj 7: TLB promašaj, priručna memorija - pogodak, tablica straničnog preslikavanja - promašaj ^Nemogući slučaj - podatak se ne može nalaziti u priručnoj memoriji ako se odgovarajuća stranica ne nalazi u glavnoj memoriji.
Jk'A " V v
. I№o>
S. RIBARIĆ - GRAĐA RAČUNALA
359,
12. POGLAVLJE
SABIRNICE 12.1. UVOD U računarskom sustavu sastavne jedinice: procesor, glavna memorija, priručna memorija i ulazno-izlazne jedinice moraju međusobno komunicirati. Komunikacija se ostvaruje sabirnicom (engl. bus) koja predstavlja zajednički električki spojni put, sastavljen od vodiča, između sastavnih jedinica računarskog sustava. Uporabom sabirnice smanjuje se broj vodiča između pojedinih jedinica kao i broj priključaka na kućištu integriranih sklopova tako što svaka jedinica priključena na sabirnicu zahtijeva samo jedan ulazni ijedan izlazni pristupni sklop (engl. port). Ujedno, moguće je priključivanje novih jedinica u računarski sustav uz minimalne promjene ili remećenje drugih već priključenih jedinica. Slika 12.1 prikazuje razliku priključenja triju modula (procesor, memorija, ulazno-izlazna jedinica) kada se koristi veza "svaki sa svakim" (ili "točka - točka") i veza temeljena na sabirnici. Vidimo da u izvedbi povezivanja "točka - točka" (slika 12.1 a)) svaki od modula mora imati više ulaznih i više izlaznih pristupnih sklopova te daje broj vodiča potrebnih za ostvarivanje veze uvišestručen. (Opaska: brojevi u zagradama iznad kose crtice označavaju broj vodiča potrebnih za ostvarivanje veze.) Uvođenje nove jedinice u sustav zahtijevalo bi u tom slučaju dodatne preinake - nove pristupne sklopove u već postojećim jedinicama i veći broj novih vodiča potrebnih za uspostavljanje novih veza. Sve navedeno je razlog zašto se u računarskim sustavima upotrebljava sabirnica kao spojni put (slika 12.1 b)). (Opaska: široke linije koje završavaju strelicom označavaju veći broj vodiča.) Budući da je sabirnica zajednički put za više jedinica, u načelu se preko nje može uspostaviti istodobno samo veza između dvije jedinice i obavljati pojedinačni prijenosi. Ostale jedinice, koje u tom trenutku ne sudjeluju u prijenosu podataka, električki (ne fizički!) odspojene su od sabirnice. To se postiže sklopovima s tri stanja (treće je stanje - stanje visoke impedancije) koji omogućuju fizičko priključenje više jedinica na vanjsku sabirnicu. Za ostvarivanje svih potrebnih veza između jedinica sabirnica se mora u vremenu dijeliti, odnosno naizmjence koristiti od strane pojedinih jedinica. Da bi izbjegli moguće nesporazume, naglasimo da ćemo u ovom poglavlju govoriti o vanjskim sabirnicama te ih nazivati samo sabirnicama, budući da se i u procesoru ostvaruje spojni put kojim se povezuju sklopovi aritmetičko-logičke jedinice, registri ili skupovi registara opće namjene, upravljačka jedinica te upravljački registri. Taj se spojni put obično naziva interna sabirnica. Kao što smo već vidjeli u poglavlju 3., procesor može imati jednu ili veći broj internih sabirnica ostvarenih u samom procesorskom čipu.
360
12. POGLAVLJE: SABIRNICE
ulazni i izlazni pristupni sklop
ulazni i izlazni pristupni sklop
ulazni i izlazni pristupni sklop
ulazni i izlazni pristupni sklop a)
b) SI. 12.1 Povezivanje jedinica: a) načinom "točka - točka"; b) u p o r a b o m sabirnice
Jednostavni računarski sustavi imaju samo jednu (vanjsku) sabirnicu (obično se naziva sistemska sabirnica (engl. system bus) ili sabirnica sustava) koja se sastoji od stotinu i više vodiča "utisnutih" u matičnu ploču (engl. motherboard) s konektorima koji su na pravilnim razmacima raspoređeni i omogućuju priključivanje pojedinih modula, odnosno jedinica. Računarski sustavi većih performansi imaju višestruke sabirnice, koje su namijenjene povezivanju različitih jedinica, i koje se nalaze u međusobnom hijerarhijskom odnosu. Taka na primjer, govorimo o lokalnoj sabirnici, memorijskoj sabirnici i ulazno-izlaznoj sabirnicL
S. RIBARIĆ - GRAĐA RAČUNALA
361,
Linije - vodiči koje čine sabirnicu mogu se izdvojiti prema funkcijama tako da se sabirnica može promatrati kao sabirnički sustav koji se sastoji od triju osnovnih sabirnica: i) upravljačke sabirnice (engl. control bus) kojom se prenose upravljački signali kao što su čitaj/piši (R/W), zahtjev za prekid (IRQ), reset (RESET), potvrda prekida (IACK), signal vremenskog vođenja (Clock) i si.; ii) sabirnice podataka (engl. data bus) koja je dvosmjerna i njome se prenose podaci. Sabirnica podataka sastoji se od /+1 linija za prijenos jednog ili većeg broja bajtova D 0 -D jf gdje/može biti 7,15,31 ili 63; i i i) adresne sabirnice (engl. address bus) koja se sastoji od k +1 linija A 0 - Ak, gdje k obično može biti 15, 31, 63 i više. Adresnom sabirnicom prenosi se adresa jedinice kojoj se želi pristupiti (npr. adresa memorijskog modula, odnosno adresa memorijske lokacije, adresa registra podataka u ulazno-izlaznoj jedinici). U stručnoj literaturi često se sve tri sabirnice nazivaju jednim imenom - sabirnica za prijenos podataka (engl. data transfer bus). U slučaju adresne sabirnice i sabirnice podataka obično govorimo o širini sabirnice, primjerice, za adresnu sabirnicu od 32 linije (A0 - A31) kažemo da je širine 32 bita ili za sabirnicu podataka od 64 linije (D0 - D63) kažemo da je širine 64 bita. Napomenimo da potonja podjela odgovara funkcijama koje pojedine grupe linija obavljaju, međutim, vrlo su često sabirničke linije vremenski multipleksirane pa u različitim vremenskim trenucima imaju različite funkcije. Na primjer, ista grupa linija može u jednom trenutku poslužiti za prijenos adrese, a u sljedećem trenutku za prijenos podataka - u tom slučaju kažemo da su adresne linije i linije podataka multipleksirane. Mogući su različiti oblici multipleksiranja, na primjer, multipleksiranje adresnih i upravljačkih linija, multipleksiranje linija podataka i upravljačkih linija, multipleksiranje linija podataka s linijama podataka kada se preko istih linija u dva vremenska trenutka prenosi podatak koji je dvostruko dulji od broja raspoloživih linija za prijenos podataka. Na jednak se način mogu međusobno multipleksirati i adresne linije. Vrlo se često u literaturi upotrebljava klasifikacija sabirnice na sabirnice središnje (centralne) procesne jedinice (CPU sabirnice; engl. CPU bus) i sistemske sabirnice pri čemu CPU sabirnicu čine sve linije priključene izravno na procesorske priključke. U većini slučajeva su zbog ograničenog broja procesorskih priključaka neke linije CPU sabirnice multipleksirane. Sistemska sabirnica dobiva se nakon demultipleksiranja CPU sabirnice - linije sistemske sabirnice se mogu tada izdvojiti po funkcijama, a čine ih nemultipleksirane grupe linija koje prenose podatke, adrese i upravljačke signale. Sabirnica je definirana električkim značajkama linija i slijedom signala na različitim linijama koje sudjeluju u prijenosu podataka. Pravila koja određuju sijed ove signala tijekom prijenosa podataka nazivaju se sabirnički protokol.
362
12. POGLAVLJE: SABIRNICE
Primjer 12.1. Slika 12.2 prikazuje vremenski dijagram stanja na sabirnici za 16-bitni mikroprocesor Intel 8086. Možemo uočiti da su linije AD 0 - AD15 multipleksirane tako da se njima u jednom trenutku prenosi šesnaest manje značajnih bitova adrese (A0 - A1S), a nakon toga 16-bitni podatak. Linije A16/S3 - A19/S6 vremenski su dijeljene između četiri najznačajnija bita adrese i četiri bita informacije o statusu procesora.
CLK
READY
f
AD0-AD15
U Q < Ui tr
ALE
c
R5=LOW
s
X
S3-S6
A16/S3-A19/S6
S3-S6
npr. podaci iz U/l međuskupa
Xp°daic
J S > (
r ~
>u
1
t
1
i
u
2 ŽL o
s2{M/io)
i
5, (DT/R)
i
S0 (DEN)
)T ^AO-A j s ^ p o d | c i u metjnoriji^ J ^AO-^IS^po^aci prenjia U / l ^
ADO-AD15
ALE
£ u
j(
4
LU
t: oc g m « crt5 a
WR=LOW
S2 (M/iO)
r
r
J
'u
fO (U a o
u
S, (DT/R)
S0(DEN)
Xi
I
)T I
i
I
l
i
t
SI. 12.2 Vremenski dijagram stanja na sabirnici procesora Intel 8086
i
S. RIBARIĆ - GRAĐA RAČUNALA
363,
12.2. VODEĆI I PRATEĆI MODULI Prije nego opišemo značajke sabirničkog protokola, opišimo ulogu vodećeg modula (engl. master module) i pratećeg modula (engl. slave module) koji se priključuju na sabirnicu. Moduli koji se priključuju na sabirnicu mogu se prema funkciji podijeliti u dvije grupe: vodeći moduli i prateći moduli. Vodeći modul upravlja sabirnicom i odgovoran je za ostvarivanje sabirničkog protokola. On, u načelu, započinje sabirničke aktivnosti i generira signale potrebne za adresiranje, odnosno izbor pratećih modula i prijenos podataka. Vodeći moduli mogu se još klasificirati kao trajno vodeći (engl. permanent bus master) i kao privremeno vodeći (engl. temporary bus master). Trajno vodeći modul ima najveći prioritet u pogledu "preuzimanja vlasništva" nad sabirnicom i obično je to procesor, dok privremeno vodeći modul dobiva na zahtjev (upućen trajno vodećem modulu ili sabirničkom arbitru) upravljanje sabirnicom za određeni vremenski interval, a zatim upravljanje sabirnicom vraća trajno vodećem modulu. Primjer privremeno vodećeg modula je upravljački sklop za izravan pristup memoriji (DMA procesor -Direct Memory Access processor) koji dobiva na upotrebu sabirnicu od trajno vodećeg modula te nakon obavljena prijenosa podataka između ulazno-izlazne jedinice i memorije vraća upravljanje trajno vodećem modulu. (Opaska: upravljački sklop za izravni pristup memoriji vrlo je često složenosti razine procesora tako da se opravdano naziva i DMA procesor.) Prateći modul "osluškuje" sabirnicu, odnosno prati sve događaje i aktivnosti na upravljačkim i adresnim linijama sabirnice. Ako "prepozna" svoju adresu na adresnoj sabirnici, odnosno ako je adresiran od vodećeg modula, on šalje ili prima podatke preko sabirnice podataka u skladu sa sabirničkim protokolom. Napomenimo da prateći moduli nemaju mogućnost niti sposobnost upravljanja sabirnicom. Primjeri pratećih modula jesu memorija i ulazno-izlazne jedinice. No neke od ulazno-izlaznih jedinica, iako prateći moduli mogu zahtijevati posluživanje od strane vodećeg modula aktiviranjem signala zahtjeva za
prekid (engl. interrupt request signal).
12.3. SABIRNIČKI CIKLUS I SABIRNIČKI PROTOKOL Sve aktivnosti tijekom prijenosa podataka između vodećeg i pratećeg modula obično se opisuju sabirničkim ciklusom (engl. bus cycle) koji je obilježen sljedećim glavnim radnjama: i) vodeći modul postavlja adresu na adresnu sabirnicu; ii) vodeći modul generira upravljačke signale, postavlja ih na upravljačku sabirnicu i time označava vrstu prijenosa; iii) prenose se podaci između vodećeg i pratećeg modula. Za sabirnički je ciklus obično zaduženo tzv. sabirničko sučelje vodećeg modula (engl. bus master interface) ili tzv. sabirnička jedinica (engl. bus unit) koja je ostvarena na procesorskom čipu.Tri su osnovne vrste sabirničkog ciklusa: sabirnički ciklus čitanja tijekom kojeg je smjer prijenosa podataka od pratećeg k vodećem, sabirnički ciklus pisanja (smjer podataka od vodećeg k pratećem modulu) te sabirnički ciklus potvrde prekida u kojem su definirane posebne aktivnosti vodećeg modula (poslužitelja prekida) i pratećeg modula (onog koji je zahtijevao prekid). Prema načinu djelovanja, odnosno prema vrsti sabirničkog protokola, sabirnice mogu biti sinkrone i asinkrone. Sinkrone sabirnice imaju jednu važnu značajku - linija kojom se pre-
364
12.
POGLAVLJE: SABIRNICE
nosi signal vremenskog vođenja (engl. clock) važna je sastavnica sabirnice i svi se događaji na sinkronoj sabirnici odvijaju u točno definiranim vremenskim trenucima i intervalima koji su određeni periodama signala vremenskog vođenja. Signal vremenskog vođenja i upravljački signali koriste se za sinkronizaciju vodećeg modula i pratećeg modula koji sudjeluje u prijenosu podataka. Slika 12.3 prikazuje vremenski dijagram stanja na sinkronoj sabirnici, odnosno stanje na sinkronoj sabirnici tijekom sabirničkog ciklusa čitanja i tijekom sabirničkog ciklusa pisanja. Primjećujemo da se, na primjer, za sabirnički ciklus čitanja, upravljački signali ALE (Address Latch Enable) i MEMR (Memory Read) ili I/O READ (Input/Output Read) pojavljuju u točno definiranim periodama određenim signalom vremenskog vođenja, ali jednako je tako točno definirana i perioda vremenskog vođenja u kojoj će prateći modul postaviti podatak na sabirnicu podataka. Primjerice, signal MEMR postavlja se u aktivno stanje tijekom periode T2, a podatak tijekom periode T3 postaje stabilan i raspoloživ vodećem modulu. Tijekom periode T3 prenosi se podatak od ili prema procesoru. T,
pU
«
signal vremenskog vođenja
7
V
/
T2
T3 »U
\
»
7 — v
>
status
linije statusa
adresna sabirnica
adresa stabilna I
/
ALE
READY
i\
I
X
sabirnica podataka HJ in
č 2.fOc in
MEMR ili I/O READ
\
r podatak stabilan
sabirnica podataka >u uo Č^c -Q LCI u o
MEMW ili I/O WRITE
podatak stabilan
I
V
SI. 12.3 Vremenski dijagram stanja na sinkronoj sabirnici
Događaji na asinkronoj sabirnici neovisni su u velikoj mjeri o signalu vremenskog vođenja i temelje se na postupku "rukovanja" (engl. handshaking) u kojem prateći modul generira signal potvrde (engl. acknowledge signal) kao odgovor na upravljački signal vodećeg modula (npr. signal čitaj ili piši). Tim signalom potvrde prateći modul dojavljuje vodećem modulu da je obavio specificiranu operaciju (npr. tijekom sabirničkog ciklusa pisanja podatak je sa sabirnice podataka dohvaćen i pohranjen u memorijskoj jedinici). Trenutak generiranja signala potvrde ovisi o brzini pratećeg modula pa se može smatrati neovisnim o
S. RIBARIĆ - GRAĐA RAČUNALA
365,
signalu vremenskog vođenja. Slika 12.4 prikazuje vremenski dijagram stanja na asinkronoj sabirnici za sabirnički ciklus čitanja. Vodeći modul postavlja adresu na adresnu sabirnicu i generira upravljački signal čitaj (,READ). Prateći modul (npr. memorijska jedinica) osluškuje adresnu i upravljačku sabirnicu. Kad je prepoznao svoju adresu, nakon isteka vremena pristupa, postavlja podatak na sabirnicu podataka i tek tada g e n e r i r a signal p o t v r d e - signa_ *ra vodećem modulu da je obavio zahtijevanu operaciju. Aktivno stanje s . g n a l a potvrde si ka 12 4) je logička 0. Vremenski trenutak kada će se to dogodit, nije unaprijed određen t f o n ovisi samo o brzini pratećeg modula. Tek nakon primitka signala. potvrde vodec, modul nastavlja sabirnički ciklus (npr. unošenjem podatka sa sabirnice podataka). Vidimo d a s e b r z i n a k o m u n i k a c i j e između vodećeg modula i različitih pratećih modula koji imaj različite brzine prilagođava pojedinačnim modulima. linije statusa
y
r
adresna sabirnica READ —
podataka
\
/
X
signal potvrde
Podaci stab'lni 1 \
—
) f
f
SI. 12.4 Vremenski dijagram stanja na asinkronoj sabirnici
Sinkrona sabirnica ima manji broj upravljačkih linija i u načelu može ostvarivati veće brzine prijenosa podataka, ali ima jedno ograničenje - njezina se brzina mora prilagoditi najsporijem modulu koji je priključen na sabirnicu. Asinkrona sabirnica ima dodatnu upravljačku liniju (signal potvrde) i nešto složenije sabirničko sučelje, ali dopušta uporabu pratećih modula različitih brzina. Brzina prijenosa podataka u asinkronoj sabirnici različita je i ovisi o brzini pojedinog pratećeg modula s kojim vodeći modul upravo komunicira. Primjer 12.2. Opišimo događaje na sinkronoj sabirnici za porodicu Intelovih x86 procesora (x = 2,3 i 4) koja je u velikoj mjeri utjecala na ISA (Industry Standard Architecture) i EISA (Extension to ISA) sabirnički standard. Za ostvarivanje sabirničkog protokola zadužena je već spomenuta sabirnička jedinica koja je sastavni dio procesora. Budući da je riječ o sinkronoj sabirnici, pretpostavimo da su aktivnosti na sabirnici sinkronizirane signalom vremenskog vođenja PCLKfrekvencije 40 MHz. U usporedbi s frekvencijom signala vremenskog vođenja koji koristi sklopovlje današnjih procesora od 500 MHz pa sve do nekoliko GHz, to je relativno niska frekvencija. Razlozi za takve razlike između brzine sklopovlja procesora i brzine sabirnice dvojaki su: prvi je tehničke prirode - zbogfizičkeduljine sabirnice i električnih značajki signalnih linija, različitih vremena propagacije signala, pragova signala te različitih vremena kašnjenja logičkih sklopova pojavljuje se problem promjene relativnih vremenskih odnosa između pojedinih signala (engl. skew; tzv."ukošenje signala"). Taj je problem izraženiji što je frekvencija signala vremenskog vođenja za sabirnicu viša. Drugi je razlog težnja za kompatibilnosti sa značajkama prethodnih sabirničkih sustava.
366
12. POGLAVLJE: SABIRNICE
Događaje na sinkronoj sabirnici za procesore x86 možemo jednostavno opisati ako sabirničku jedinicu (engl. bus unit) promatramo kao stroj stanja koji je opisan sa četiri diskretna stanja (slika 12.5): i) stanje vremena adresiranja (engl. address time); ii) stanje vremena podataka (engl. data time); iii) stanje čekanja (engl. wait); iv) stanje neaktivnosti (engl. idie time). Vrijeme trajanja stanja odgovara vremenu trajanje jedne periode signala vremenskog vođenja, dakle 1/40 MHz = 25 ns. Sabirnički ciklus započinje Stanjem vremena adresiranja. Sabirnička jedinica iz Stanja neaktivnosti prelazi u Stanje vremena adresiranja koje traje jednu periodu signala vremenskog vođenja, tj. 25 ns. Tijekom tog stanja, sabirnička jedinica postavlja adresu pratećeg modula na adresnu sabirnicu, a na upravljačku sabirnicu postavlja signale kojim prenosi informaciju o vrsti sabirničkog ciklusa (npr. obavještava prateći modul daje riječ o sabirničkom ciklusu čitanja podataka iz memorije). Iz Stanja vremena adresiranja sabirnička jedinica prelazi u Stanje vremena podataka. Tijekom tog stanja, koje također traje jednu periodu signala vremenskog vođenja (25 ns), sabirnička jedinica obavlja prijenos podataka. Na kraju tog stanja, sinkrono sa signalom vremenskog vođenja, sabirnička jedinica ispituje stanje na ulaznoj signalnoj liniji READY# (Opaska: znak povisilice # označava da je signal aktivan kada je u logičkoj nuli: READY # = READY.) Ako je READY# nisko, tj. logičko "0", sabirnička jedinica završava sabirnički ciklus i prelazi u Stanje neaktivnosti ili započinje novi sabirnički ciklus. U tom je slučaju riječ o najbržem sabirničkom ciklusu (sabirničkom ciklusu s nula stanja čekanja - 0 Wait-state bus cycle) koji traje 2 x 25 ns, odnosno dvije periode signala vremenskog vođenja. Što se događa ako je na kraju Stanja vremena podataka sabirnička jedinica otkrila (detektirala) da je signalna linija READY# neaktivna (READY# = 1). Budući da signalnom linijom READY# upravlja prateći modul, logičkom "1" na toj signalnoj liniji prateći modul obavještava vodeći modul, odnosno sa birničku jedinicu da nije uspio u Stanju vremena podataka obaviti zahtijevanu operaciju (npr. postaviti podatke na sabirnicu podataka). U tom slučaju vodeći modul treba "pričekati" spori prateći modul i to čini tako da nakon tekućeg Stanja vremena podataka ostaje i dalje u Stanju vremena podataka u kojem čeka prateći modul. Procesor tijekom te dodatne periode "drži" sve svoje izlaze u istom stanju u kojem su bili tijekom prethodne periode. Dakle on ništa ne mijenja, već čeka jednu periodu signala vremenskog vođenja. Ta "dodatna" perioda u kojoj procesor čeka odgovara Stanju čekanja. Na kraju te dodatne periode procesor, odnosno sabirnička jedinica ispituje ponovno signalnu liniju READY# da bi utvrdila je ii adresirani prateći modul spreman za završetak prijenosa. Ako je READY# ponovo neaktivna, procesor umeće još jedno Stanje podataka, odnosno Stanje čekanja u sabirnički ciklus. Ako je signalna linija READY# detektirana kao aktivna, procesor završava sabirnički ciklus. Signalna linija READY# služi sporom pratećem modulu za produljenje trajanja sabirničkog ciklusa koje je potrebno da bi se obavio prijenos podataka. Naravno, pri oblikovanju računarskog sustava i izbora pratećih modula želimo imati takve module koji će sudjelovati u sabirničkim ciklusima s 0-stanja čekanja. Slike 12.5 a) i b) prikazuju detalj sabirničkog ciklusa s nula stanja čekanja (a) i s jednim stanjem čekanja.
S. RIBARIĆ - GRAĐA RAČUNALA
25ns
U
J
stanje neaktivnosti
stanje vremena adresi ran ja
stanje vremena podataka
367,
stanje neaktivnosti
PCLK
READY*
© sabirnička jedinica (procesor) ispituje signainu liniju READY# a)
stanje neaktivnosti
stanje vremena adresiranja
stanje vremena podataka
stanje čekanja
stanje neaktivnosti
PCLK
READY#
©
©
sabirnička jedinica (procesor) ispituje signainu liniju READY# b)
SI, 12.5 Detalj sabirničkog ciklusa: a) s nula stanja čekanja; b) s jednim stanjem čekanja
Primjer 12.3. Opišimo događaje na asinkronoj sabirnici za porodicu procesora Motorola MC 68000. Procesor MC 68000 ostvaruje asinkroni prijenos podataka pomoću sljedećih sabimičkih linija: i) linija adresne sabirnice A1 - A23, ii) linija sabirnice podataka D 0 - D1S, iii) upravljačkih linija: AS (Address Strobe), R/l/V, UDS (Upper Data Strobe), LDS (Lower
Data Strobe), DTACK (Data Transfer Acknowledge) i FC0 - FC2 (Functional Code). Adresna sabirnica ima jednu posebnu značajku - nema izvedenu najmanje značajnu adresnu liniju A0. Umjesto nje se upotrebljavaju upravljački signali UDS i LDS. 16-bitni procesor MC 68000 dopušta rukovanje podacima koji su bajt, riječ (16 bita) i duga riječ (32 bita). Riječi i duge riječi mogu biti smještene u memoriji i referenciranetako da su im početne adrese samo parne, lako je procesor 16-bitni, memorija računala je bajtno organizirana (kažemo da je memorija bajtne zrnatosti), tako da se pomoću linija UDS i LDS određuje hoće li se prenijeti manje značajniji bajt (UDS = 1 i LDS = 0), značajniji bajt (UDS
368
12. POGLAVLJE: SABIRNICE
= 0 i LOS = 1) ili oba bajta (16-bitna riječ) (UDS = 0 i LD5 = 0). (Procesor MC6800 koristi tzv. Big-Endian uređenje slijeda bajtova - poglavlje 3.). Duga riječ (32 bita) prenosi se s dva uzastopna prijenosa riječi. Upravljačka signalna linija DTACK ulazna je linija procesora i služi za rukovanje asinkronim prijenosom podataka. Prateći modul upravlja tom linijom. Kad tijekom sabirničkog ciklusa čitanja procesor detektira liniju DTACK kao aktivnu (DTACK - 0), on zna da je prateći modul postavio podatke na sabirnicu podataka. Tada će procesor pohraniti podatke u svoje interne registre, odnosno zaporne sklopove i završiti sabirnički ciklus. Slika 12.6 prikazuje dijagram aktivnosti tijekom sabirničkog ciklusa čitanja riječi (16-bitnog podatka). Kad tijekom sabirničkog ciklusa pisanja procesor detektira liniju DTACK kao aktivnu, on zna da je prateći modul uspio pohraniti podatke u memorijsko polje (memorijska jedinica) ili u registar (ulazno-izlazna jedinica). Linijama statusa FC0 - FC2 procesor obavještava prateće module o svom stanju i specificira koji će se adresni prostor u sabirničkom ciklusu upotrebljavati. vodeći modul
prateći modul
postupak adresiranja: 1. postavi R/W u 1 2. postavi adresu na adresnu sabirnicu A1-A23 3. postavi funkcijski kod FC0-FC2 4. aktivira AS (Address Strobe) 5. postavi UDŠ i LDS
'
i 1. dekodira adresu 2. postavi podatak na sabirnicu podataka 3. aktivira signal DTACK
i
1
1. pohrani podatke u interni zaporni sklop 2. deaktivira UDŠ i LDŠ 3. deaktivira AS
'
i 1. ukloni podatak sa sabirnice podataka D0-D15 2. deaktivira] liniju DTACK
i započni sljedeći ciklus Si. 12.6 Dijagram aktivnosti tijekom sabirničkog ciklusa čitanja riječi
1
S. RIBARIĆ - GRAĐA RAČUNALA
369,
Slika 12 .7 prikazuje vremenski dijagram stanja na sabirnici za sabirnički ciklus čitanja riječi. Na slici 12.7 uočavamo da se kao jedan od signala pojavljuje i signal vremenskog vođenja CLK, iako smo u potpoglavlju 12.3. napisali da su događaji na asinkronoj sabirnici neovisni o signalu vremenskog vođenja. Zapravo, zbog vremenske diskretnosti procesora, događaji na asinkronoj sabirnici također su vremensko diskretni i postoji, ipak, neka "tajna veza" između signala vremenskog vođenja CLK i događaja na asinkronoj sabirnici. Događaje na sabirnici promatrat ćemo u vremenskim trenucima koje definiraju poluperiode signala vremenskog vođenja. Njih ćemo označavati sa S.; / = 0,1,2,.... Te ćemo poluperiode nazivati sabirničkim stanjima, međutim, potrebno je naglasiti da se ta stanja ne smiju poistovjetiti sa stanjem procesora. s0
s,
s2
s3
s4
s5
s6
s7
s0
s,
s2
U sabirničkom stanju S0 (slika 12.7) adresna je sabirnica (A1 - A23) u stanju visoke impedancije. Procesorske linije statusa FC0 - FC2 također su u stanju visoke impedancije. Linijama statusa FC0 - FC2, kao što je već spomenuto, procesor dojavljuje pratećim modulima svoje stanje. U sabirničkom stanju S1 signala vremenskog vođenja adresna sabirnica i linije statusa oslobađaju se stanja visoke impedancije. Stanje linija FC 0 ~ FC2 pokazuje koji će se adresni prostor u tom sabirničkom ciklusu upotrebljavati. Na primjer, FC0 = 1, FC, = 0 i FC2 = 0 određuje memorijski nadgledni prostor podataka.Tijekom stanja S1 na adresnu se sabirnicu A1 - A23 procesor postavlja adresu. Signal koji označava daje adresa valjana (>45) aktivira se u sabirničkom stanju S2. Signali UDS i LDS također se aktiviraju u stanju S2 pokazujući da je riječ o sabirničkom ciklusu koji rukuje 16-bitnom riječi.
370
12. POGLAVLJE: SABIRNICE 1
Upravljački je signal R/Wza vrijeme cijelog sabirničkog ciklusa u stanju 1 i pokazuje da jejiječ o sabirničkom ciklusu čitanja. Prateći modul na temelju adresa A^- A23, UDS, LDS i AS utvrđuje je li izabran. Izabrani prateći modul na temelju signala R/W zna da je riječ 0 operaciji čitanja te postavlja podatak na sabirnicu podataka D0 - D15 Za tu operaciju prateći modul ima na raspolaganju sabirnička stanja (poluperiode) S3 i S4. Nakon stoje postavio 16-bitni podatak na sabirnicu podataka, prateći modul aktivira liniju DTACK koja predstavlja liniju signala potvrde. Trenutak aktiviranja linije DTACK ovisi samo o brzini pratećeg modula. Prvo sjenčano područje signala DTACK u vremenskom dijagramu (slika 12.7) označava vremenski interval u kojem se može aktivirati signal. Signal DTACK mora u "normalnim"okolnostima biti aktiviran u početku sabirničkog stanja S5. Ako je to zadovoljenog stanju S6 procesor započinje deaktiviranje upravljačkih signala UDS, LDS i AS. Na početku sabirničkog stanja S7 procesor pohranjuje podatak sa sabirnice podataka u interne zaporne sklopove. Stanje na adresnoj sabirnici još uvijek je valjano i linije FC0 - FC2 još uvijek pokazuju pravo stanje. Na taj se način osigurava pravilno izvođenje operacije prijenosa podataka. Prateći modul "drži" podatak na sabirnici podataka sve dok ne detektira da su UDS, LDS i AS neaktivni. Nakon sabirničkog stanja S7 prelazi se u sabirničko stanje S0u kojem, nakon što je prateći modul detektirao UDS, LDS i AS kao neaktivne, on uklanja podatak sa sabirnice podataka. Na taj se način uspostavljaju uvjeti za početak sljedećeg sabirničkog ciklusa. Možemo primijetiti da sabirnički ciklus čitanja riječi traje osam sabirničkih stanja (S0- S7). lako je riječ o protokolu za asinkronu sabirnicu (za koju, strogo teorijski gledano, signal vremenskog vođenja nije referentan signal), vodeći modul „očekuje" signal potvrde DTACK tijekom sabirničkih stanja S3 i S4. Što će se dogoditi ako je prateći modul spor i ne može pravovremeno aktivirati signal DTACK jer još nije postavio 16-bitni podatak na sabirnicu podataka? Procesor ispituje stanje upravljačke linije DTACK tijekom sabirničkog stanja S4. Ako signal DTACK nije aktivan, procesor zamjenjuje sabirnička stanja S5 i S6 sa sabirničkim stanjima čekanja Sw (trajanje stanje Sw odgovara trajanju poluperiode signala vremenskog vođenja). Na taj način procesor čeka spori prateći modul. Nakon umetnuta dva stanja Sw procesor ponovo ispituje stanje linije DTACK. Ako je i sada linija DTACK neaktivna, procesor ponovo umeće dva stanja Sw. Nakon toga ponovno ispituje DTACK Kad procesor (vodeći modul) utvrdi da je signal DTACK aktivan, nastavlja sa sabirničkim stanjima S5, S6 i S7. Slika 12.8 prikazuje vremenski dijagram stanja na sabirnici za tzv.„spori" sabirnički ciklus čitanja riječi. Što se događa ako je adresiran nepostojeći prateći modul ili prateći modul zbog greške ili ispada ne može aktivirati signal potvrde DTACK? Postoji opasnost da procesor ostane u trajnom stanju čekanja. Taj se problem u računarskom sustavu na bazi procesora MC 68000 rješava vremenskim nadglednim modulom (engl. watchdog timer- u slobodnom prijevodu vremenskim psom čuvarom) koji nadgleda odvijanje sabirničkog ciklusa 1 njegovo trajanje uspoređuje s unaprijed definiranim maksimalnim vremenom trajanja sabirničkog ciklusa. Ako je vrijeme trajanja sabirničkog ciklusa prekoračeno, vremenski nadgledni modul aktivira signal BERR (engl. bus error) i izaziva iznimku visoke razine prioriteta (prioritetna grupa 0) koja se naziva sabirnička pogreška. Aktiviranjem signala BERR, procesor prekida (abortira) tekući sabirnički ciklus (u kojem je bezuspješno čekao na aktiviranje signala DTACK) i započinje obradu iznimke u kojoj izvodi uslužni program definiran za uvjete sabirničke pogreške.
S. RIBARIČ - GRAĐA RAČUNALA
S0
Sj
s2
s3
s4
Sw
Sw
Sw
Sw
S5
S6
S7
371 I
S0
CLK
A1-A23 AS, UDS, LDS R/W=1
DTACK
• [ podaci valjani
D0-D15 stanja čekanja
SI. 12.8 Vremenski dijagram stanja na sabirnici za „spori" sabirnički ciklus čitanja riječi
Važna je značajka sabirnice njezina propusnost ili brzina prijenosa podataka (engl. bandwith) koja se izražava brojem bajtova u sekundi (B/s). Vrlo se često koristi i termin brzina sabirnice. Ona je proporcionalna širini sabirnice podataka. Na primjer, ako je brzina 8-bitne sabirnice 200 M bajtova u sekundi (MB/s), onda uz jednak signal vremenskog vođenja 64-bitna sabirnica podataka ima brzinu 1.6 GB/s.
12.4. SABIRNIČKA ARBITRAŽA Na sabirnici na kojoj su priključeni prateći moduli može se priključiti veći broj vodećih modula koji moraju međusobno dijeliti sabirnicu. Istodobno veći broj vodećih modula može zahtijevati sabirnicu, međutim, samo jedan od njih može dobiti sabirnicu na upravljanje. Mehanizam kojim se određuje koji će vodeći modul dobiti na upravljanje sabirnicu naziva se sabirnička arbitraža (engl. bus arbitration). Postoje različiti sheme sabirničke arbitraže - od onih koje temelje na sklopovskoj izvedbi do onih koje koriste složene sabirničke protokole. Način arbitraže može se klasificirati na centraliziranu (središnju) arbitražu i decentraliziranu, odnosno porazdijeljenu arbitražu. U centraliziranoj arbitraži postoji centralni ili središnji sabirnički arbitar (engl. bus arbiter; bus controller) koji zaprima zahtjeve za sabirnicom i generira signal kojim obavještava vodeći modul da mu je dodijeljena sabirnica. Odluka sabirničkog arbitra kojem će se od vodećih modula dodijeliti sabirnica temelji se na shemi koja obično predstavlja kompromis dvaju čimbenika: prioriteta i pravednosti (engl. fairness). Prvi se čimbenik odnosi na to da svaki od vodećih modula ima jedinstven prioritet pristupa sabirnici, tako da se sabirnica dodjeljuje vodećem modulu koji je imao najveći prioritet. Drugi se faktor odnosi na pravednost kojom se osigurava da će svaki od vodećih modula, bez obzira na prioritet, dobiti sabirnicu na upravljanje. Pravednost osigurava da vodeći moduli s najnižim prioritetom ne budu isključeni iz natjecanja za sabirnicom u nadmetanju s onim
372
12. POGLAVLJE: SABIRNICE
visokog prioriteta. U jednostavnoj izvedbi sabirničkog arbitra primjenjuje se shema čvrstog prioriteta (engl. fixed priority) pri čemu je sabirnički arbitar prioritetni koder (engl. priority encoder) koji signal potvrde dodjele sabirnice Bus grant šalje vodećem modulu koji je imao najveći prioritet između onih koji su tražili sabirnicu. U takvoj izvedbi postoji opasnost da vodeći moduli s malim prioritetom nikada, ili vrlo rijetko, dobiju sabirnicu na upravljanje. Kružna prioritetna shema (engl. rotating priority) omogućuje potpuno pravedan tretman svih vodećih modula jer se prioritet pojedinih vodećih modula mijenja u skladu s dodjelom sabirnice: vodeći modul koji je dobio sabirnicu na upravljanje postavlja se, nakon njezinog korištenja, na začelje kružne liste prioriteta. Između ovih dvaju krajnjih shema postoje brojne sheme koje kombiniraju prethodne dvije. Na primjer, vodeći moduli mogu biti organizirani u grupe određenih prioritetnih razina tako da se u svakoj od razina koristi kružna prioritetna shema. Pod "oslobađanjem sabirnice" (engl. deallocation of the bus) podrazumijeva se postupak kada vodeći modul, koji trenutno upravlja sabirnicom, prepušta sabirnicu drugim potencijalnim vodećim modulima. Postoje tri glavne tehnike oslobađanja sabirnice: i) oslobađanje na zahtjev (engl. release on request) - vodeći modul ima u svom posjedu sabirnicu (iako je čak ni ne koristi) sve dok nema drugih zahtjeva. Ovakva se tehnika obično koristi u sustavima s jednim procesorom u kojima procesor posjeduje sabirnicu cijelo vrijeme - izuzev onda kada, na primjer, DMA upravljač zahtijeva sabirnicu da bi obavio prijenos; ii) oslobađanje sabirnice nakon korištenja (engl. release when done) - sabirnica se oslobađa nakon što se završi sabirnički ciklus. To znači da za svaki novi sabirnički ciklus vodeći modul mora zahtijevati sabirnicu; iii) oslobađanje sabirnice istiskivanjem (engl. pre-emption) - u ovom načinu vodeći modul s većim prioritetom od onog modula koji trenutno posjeduje sabirnicu može prisiliti trenutno vodeći modul da oslobodi sabirnicu, iako nije završio prijenos podataka. Istiskivanje se može upotrijebiti za prekid prijenosa velikih blokova podataka. Vrijeme koje se utroši za sabirničku arbitražu je vrijeme potrebno za obavljanje tzv."kućanskih poslova" u sustavu i ono izravno utječe na trajanje sabirničkog ciklusa. To je osnovni razlog zašto se vrijeme arbitraže mora smanjiti i možebitno omogućiti da se arbitraža djelomično prekriva s prijenosom podataka. Osnovni scenarij centralizirane sabirničke arbitraže je sljedeći: jedan ili veći broj vodećii modula (koji trebaju sabirnicu) aktivira signal Bus request kojim zahtijeva sabirnicu i koji se upućuje sabirničkom arbitru. Svi vodeći moduli koji su zahtijevali sabirnicu očekuju sigrwi Bus grant kojim sabirnički arbitar potvrđuje da je dodijelio sabirnicu jednom od vodećii modula. No samo onaj vodeći modul koji je zahtijevao sabirnicu i koji primi signal Bus grant dobiva sabirnicu na upravljanje. Taj vodeći modul aktivira signal Bus Busy i spaja se na sabirnicu te započinje sabirnički ciklus. Nakon što je obavio prijenos podataka i sabirnicu vise ne treba, vodeći modul o tome obavještava sabirnički arbitar (deaktiviranjem signala Bas Busy) koji sada može ponovo dodijeliti sabirnicu nekom drugom vodećem modulu koji JH je zahtijevao. Razmotriti ćemo pet shema sabirničke arbitraže - četiri centralizirane i jednu decentra-j liziranu. i U centraliziranoj sabirničkoj arbitražnoj shemi nazvanoj arbitraža s ulančavanjem (en^L| daisy chain) svi su vodeći moduli priključeni na jednu signalnu liniju za zahtijevanje sabi^j
S. RIBARIČ - GRAĐA RAČUNALA
373 I
nice Bus request. Shema ima samo jednu signalnu liniju potvrde dodjele sabirnice Bus grant izvedenu tako da ona prolazi kroz vodeće module, i to od onog s najvećim prioritetom do onog s najmanjim prioritetom. Svaki od vodećih modula lančano je priključen na tu signalnu liniju ima sklopove koji omogućuju prihvaćanje signala Bus grant te njegovo prosljeđivanje sljedećem vodećem modulu u lancu (slika 12.9). Vodeći modul koji primi signal Bus grant a nije zahtijevao sabirnicu, proslijedit će ga sljedećem vodećem modulu u lancu. Vodeći modul koji je u lancu primio signal Bus grant i koji je uz to zahtijevao sabirnicu neće proslijediti signal Bus grant preostalim vodećim modulima u lancu. Njemu će biti dodijeljena sabirnica.To znači da u slučaju kada dva (ili više) vodećih modula istodobno zahtijevaju sabirnicu aktiviranjem signala Bus request, sabirnicu dobiva onaj koji je bliži sabirničkom arbitru. Prioritet vodećeg modula u toj jednostavnoj shemi određen je mjestom modula u lančanoj strukturi - vodeći modul koji je najbliži arbitru ima najveći prioritet. (Opaska: obično je signal na linija za zahtijevanje sabirnice Bus request izvedena tako da je njeno aktivno stanje ono kada je u logičkoj 0 (Bus request) time je omogućeno da sve linije za zahtijevanje sabirnice svih vodećih modula oblikuju ožičano-ILI (engl. wired-OR). Zahvaljujući ožičanom-ILI signalna linija Bus request bit će aktivna kada jedan ili veći broj potencijalno vodećih modula zahtijeva sabirnicu.)
SI. 12.9 Sabirnička arbitraža ulančavanjem
Prednost arbitraže ulančavanjem jest njezina jednostavnost, a nedostatak je što ne osigurava pravednost. Naime, vodeći moduli na kraju lanca, tj. oni s najmanjim prioritetom mogu "vječno" čekati na sabirnicu. S druge strane, ulančavanje signala Bus grant ograničava brzinu sabirnice. Jedan od nedostataka je i to što se u slučaju greške zbog koje ne može vodeći modul proslijediti signal Bus grant ili zbog ispada jednog od vodećih modula u lancu, lanac prekida te svi vodeći moduli koji slijede tom modulu ne mogu dobiti sabirnicu na upravljanje. Arbitražna shema nazvana arbitraža prozivanjem ili glasovanjem (engl. polling) umjesto jedne signalne linije Bus grant kojom su lančani vodeći moduli koristi skup signalnih linija koje se nazivaju rezultat glasovanja (engl. poll-count) (slika 12.10). Svi su vodeći moduli priključeni, kao i u shemi arbitraže ulančavanjem, na jednu signalnu liniju Bus request. Na signalne linije rezultat glasovanja sabirnički arbitar postavlja binarnu kombinaciju koja se može tumačiti kao jedinstvena adresa vodećeg modula - pobjednika u natjecanju za dobivanje sabirnice. Sabirnički arbitar proziva vodeći modul koji je pobijedio na glasovanju. Svaki od vodećih modula "osluškuje" linije rezultat glasovanja i onaj koji prepozna svoju adresu, aktivira signalnu liniju Bus busy. Sabirnički arbitar završava postupak arbitraže i dodjeljuje sabirnicu izabranom vodećem modulu. Prioritet vodećih modula određen je slijedom binarnih kombinacija postavljenih na linije rezultat glasovanja, odnosno pozicijom
374
12. POGLAVLJE: SABIRNICE
adrese u slijedu prozivanja. Slijed prozivanja može biti programiran ako su linije rezultat glasovanja spojene s izlazima iz programirljivog registara tako da se prioritet mijenja programom, odnosno upisivanjem upravljačke riječi u programirljivi registar (slika 12.10).
U trećoj se arbitražnoj shemi svakom vodećem modulu dodjeljuje privatna linija Bus request i privatna linija Bus grant (slika 12.11). Na taj se način omogućuje sabirničkom arbitru izravno utvrđivanje koji su vodeći moduli zahtijevali sabirnicu te brzi odgovor signalom Bus grant I u ovom se slučaju prioritet vodećih modula određuje programski. Ova se shema često naziva i shema s nezavisnim zahtijevanjem (engl. independent requesting). Primjer 12.4.
j
Sabirnica PCI (Peripheral Component Interconnect) (vidi potpoglavlje 12.5) koristi centrali- * ziranu arbitražnu shemu s nezavisnim zahtijevanjem. Standard PCI predviđa šest linija za \ zahtijevanje sabirnice REQ0-REQ5 i šest linija za potvrdu dodjele sabirnice GNT0-GNT5. j Na te su linije priključeni vodeći moduli, koji se u skladu sa standardom PCI nazivaju inicijatori (engl. initiator). (Opaska: prateći se moduli u standardu PCI nazivaju ciljni moduli ; (engl. target)). Standard PCI ne određuje algoritam arbitraže pa se može koristiti ona s čvrstim priori- i tetom, ona s kružnim prioritetom ili ona koja kombinira kružni prioritet između grupa inicijatora i čvrsti prioritet unutar grupe inicijatora. Četvrta shema centralizirane sabirničke arbitraže predstavlja kombinaciju arbitraže s nezavisnim zahtijevanjem i arbitraže ulančavanjem.
S. RIBARIČ - GRAĐA RAČUNALA
375 I
SI. 12.11 Sabirnička arbitraža s nezavisnim zahtijevanjem
Primjer 12.5. Slika 12.12 prikazuje shemu sabirničke arbitraže za industrijsku sabirnicu VME (standard IEEE P1014). Shema se zasniva na kombinaciji arbitraže s nezavisnim zahtijevanjem i arbitraže ulančavanjem. Standard IEEE P1014 definira arbitražnu sabirnicu koja se sastoji od četiri signalne linije za zahtijevanje sabirnice (BRO - BR3) pri čemu linija BR3 ima največi prioritet, četiri ulazne i izlazne signalne linije za potvrdu dodjele sabirnice (BGOIN - BG3IN) te (iBGOOUT - BG30UT}, signalne linije BBSY (Bus Busy) te signalne linije BCLR
(Bus clear). Četiri linije (BRO - BR3) određuju četiri razine prioriteta zahtijevanja sabirnice. Ulazne i izlazne linije za potvrdu dodjele sabirnice (BGOIN - BG3IN) te (BGOOUT- BG30UT}, omogućuju ulančavanje na svakoj od četiri razine. Aktivno stanje na signalnoj liniji BBSY označava da je jedan od vodećih modula, koji su zahtijevali sabirnicu, dobio i preuzeo sabirnicu. Sabirnički arbitar može generirati signal BCLR kada vodeći modul s najvećim prioritetom zahtjeva sabirnicu. Signalom BCLR "istiskuje" se trenutno vodeći modul sa sabirnice i ona se oslobađa za vodeći modul s najvećim prioritetom. Arbitražna shema za VME je kombinacija shema s nezavisnim zahtijevanjem i ulančavanjem: svaku od linija BRx,x = 0,1,2,3 dijeli grupa vodećih modula koji su linijama BGxIN i BGxOUT, x = 0,1,2,3 ulančani (slika 12.12). Prioritetna shema može biti takva da se koristi shema čvrstog prioriteta u kojoj vodeći moduli priključeni na liniju BR3 imaju najveći prioritet ili kružna prioritetna shema u kojoj se razine prioriteta linija BRx,x= 0,1,2,3 kružno mijenjaju.
NJ штЛ.
к> > —i
V
а» N< D CD l/> =T m 3 ш N CU
1Л
П С
S. RIBARIČ - GRAĐA RAČUNALA
377 I
Distribuirana sabirnička arbitraža, kao što sam naziv govori, ima funkciju arbitra porazdijeljenu na sve potencijalne vodeće module - sklopovlje za arbitražu porazdijeljeno je vodećim modulima. Svaki od potencijalno vodećih modula ima jednu liniju za zahtijevanje sabirnice. Na primjer, za sustav koji dopušta šesnaest potencijalno vodećih modula, imamo šesnaest linija za zahtijevanje sabirnice - svaka od njih dodijeljena je jednom vodećem modulu i svaka od njih određenog je prioriteta. Kada potencijalni vodeći modul želi koristiti sabirnicu, aktivira odgovarajuću liniju za zahtijevanje sabirnice. Svi potencijalno vodeći moduli pomoću svojih sklopova za arbitražu nadgledaju sve linije za zahtijevanje sabirnice. Vodeći moduli koji su zahtijevali sabirnicu, a utvrdili su daje njihov zahtjev manjeg prioriteta, odustaju od zahtjeva i deaktiviraju svoju liniju za zahtijevanje sabirnice pa na kraju svakog sabirničkog ciklusa vodeći modul s najvećim prioritetom dobiva sabirnicu za sljedeći sabirnički ciklus.
12.5. SABIRNICE OSOBNIH RAČUNALA (PC SABIRNICE) U Primjeru 12.2. prikazali smo događaje na sinkronoj sabirnici za x86 procesore i rekli daje ona u velikoj mjeri utjecala na ISA (Industry Standard Architecture) i EISA (Extended ISA) sabirnički standard. Sabirnički standardi ISA i EISA usko su povezani s osobnim računalima. Jedno od prvih osobnih računala IBM PC (PC - personal computer) temeljilo se na Intelovom procesoru 8088 (koji je imao 16-bitnu unutarnju arhitekturu i 8-bitnu vanjsku sabirnicu podataka) i sabirnici XT. Sabirnica XT radila je s frekvencijom signala vremenskog vođenja od svega 4.77 MHz. Pojavom „pravog" 16-bitnog procesora Intel 8086 počela se koristiti 16-bitna sabirnica ISA koja je, zapravo, predstavljala proširenje sabirnice XT. Sabirnica ISA bila je sinkronizirana signalom vremenskog vođenja frekvencije 8.33 MHz. S obzirom da je najbrži sabirnički ciklus zahtijevao dvije periode signala vremenskog vođenja (stanje vremena adresiranja i stanje vremena podataka, bez stanja čekanja), brzina sabirnice bila je 4.165 miliona prijenosa u sekundi. No kako je sabirnica podataka bila 16-bitna, maksimalna brzina prijenosa bila je 8.33 MB/s. Adresna sabirnica bila je širine 20 bita (SA 0 - SA 19; SA - System Address Bus) za 8-bitni prijenos podataka, odnosno 24 bita (SA 0 -SA 19 i LA 17 - LA 23; LA - Latchable Address Bus) za 16-bitni prijenos podataka. Skromna brzina prijenosa sabirnice ISA i mali izravno adresirljiv prostor (24-bitna adresna sabirnica) bili su jedan od osnovnih uzroka njezina brza zastarijevanja. Nju je zamijenila sabirnica EISA koja imala 32-bitnu sabirnicu podataka (ali je podržavala i 8- i 16-bitni prijenos podataka) i 32-bitnu adresnu sabirnicu te je uz signal vremenskog vođenja od 8.33 MHz omogućavala maksimalnu brzinu prijenosa od 33 MB/s. lako brzina prijenosa od 33 miliona bajtova u sekundi izgleda vrlo velika, na žalost, ona ne zadovoljava za većinu suvremenih primjena računala. Osamdesetih je godina IBM uveo sabirnicu Micro Channel koja je radila na 10 MHz i omogućavala prijenos tijekom svake periode signala vremenskog vođenja. Uz način prijenosa 32-bitnih podataka (izvorno nazvan 32-bit Streaming Data Procedure) brzina sabirnice bila je 40 MB/s. Brži prijenosi (80 MB/s i 160 MB/s) ostvarivali su se uporabom 64- i poboljšanih 64-bitnih prijenosa podataka (tzv. 64-bit Streaming Data Procedure i Enhanced
64-bit
Streaming Data Procedure). Sabirnica Micro Channel bila je zaštićena patentom i nije se održala.
378
12. POGLAVLJE: SABIRNICE
Primjer 12.6. Procijenimo potrebnu brzinu, odnosno propusnost sabirnice računala u primjeru prikaza pokretne slike na zaslonu računala (npr. za računalnu igru). Slika neka je relativno visoke rezolucije 1024 x 768 slikovnih elemenata i neka ima 16 milijuna boja (engl. true colour). Za prikaz cijelog spektra boja potrebna su tri bajta po slikovnom elementu svaki za prikaz vrijednosti jedne od primarnih boja (R (red) - crvena, G (green) - zelena, B (blue) - plava) u rasponu od 0 do 255 Jedna slika sadržava 1024 x 768 x 3 = 2.35 MB podataka. Samo jedan grafički zaslon zahtijeva za pohranu 2.35 MB videomemorije. (Opaska: videomemorija je memorija koja je namijenjena pohrani slike koja se prikazuje na zaslonu prikazne jedinice (monitoru; engl. display device)). Budući daje riječ o animaciji, odnosno slikama u pokretu, želimo "glatke" prikaze pokreta pa se zahtijeva prikaz 30 slika ili slikovnih okvira (engl. frame) u sekundi. Za prikaz slike u pokretu potrebna je propusnost 2.35 MB x 30 slika/s = 70.5 MB/s. Nadalje, da bi se prikazala videosekvenca pohranjena na disku, CD-ROM-u ili DVD-u, podaci moraju biti preneseni s diska preko sabirnice u memoriju, a zatim, da bi se prikazali iz memorije preko sabirnice grafičkoj jedinici, odnosno grafičkom adapteru, tako da propusnost sabirnice mora biti barem dvostruka 140 MB/s. Ako sada usporedimo brzine sabirnica ISA, EISA i osnovnu izvedbu Micro Channel (4C MB/s), vidimo da niti jedna od njih ne zadovoljava u pogledu brzine. Jedino bi u obzir došla sabirnica Micro Channel 64-bit Streaming Data Procedure i Enhanced 64-bit Streaming Data Procedure koja podržava brzinu prijenosa od 80 do 160 MB/s. U Primjeru 12.6. vidjeli smo da su zahtjevi za velikom brzinom sabirnice prvenstveno postavljeni od strane grafičke jedinice (grafičke kartice ili adaptera), odnosno da se velika propusnost zahtijeva na spojnom putu između procesora i videomemorije. Da bi se postigla što je moguće veća brzina osvježavanja videomemorije, grafička se jedinica umjesto na sporu sabirnicu ISA ili EISA priključila na lokalnu sabirnicu procesora. Naravno, tc je zahtijevalo određeni redizajn grafičke jedinice da bi se izbjegla stanja čekanja koja b možebitno trebala videomemoriji. Uz to, grafička jedinica dobila je i svoj lokalni procesor koji je podržavao funkcije grafičke jedinice kao što su zahtjevne operacije koje se odnose na rukovanje prikazom na zaslonu (npr. pomicanje grafičkog prozora s jednog na drugo područje videomemorije). Početkom devedesetih godina definiran je standard VESA VL (Video Electronics Standard Association; VESA Local bus) za povezivanje uređaja, a time i grafičkih jedinica, izravno na lokalnu sabirnicu procesora. VESA standard definirao je tz*. VESA sabirnicu tipa A (VL type A) i VESA sabirnicu tipa B (VL type B). Oba su tipa sabirnica bila namijenjena 386/486 procesorskim sabirnicama (Intel) s tim da je tip B predviđa: međupohranjivanje sabirničkih signala a dodatnim je pogonskim sklopovima (engl. driver omogućavao priključenje do tri uređaja, dok je tip A definirao izravno priključenje, ali samo jednog uređaja. VESA sabirnica imala je, pri frekvenciji signala vremenskog vođenja od 35 MHz, vršnu propusnost 132 MB/s za operaciju čitanja prijenosom podataka u snopu (engl burst read) i 66 MB/s za operaciju pisanja. No upravo zbog toga što je VESA VL bila „naslonjena" na sabirnicu 486 procesora, njezina je dugovječnost bila ograničena. Pojavom nov** procesora sučeljni sklopovi morali su se redizajnirati, odnosno moraju se koristiti tzv. premosnici (engl. bridge) - sklopovi koji međusobno povezuju dvije nezavisne sabirnice. Or» omogućuju vezu između nove procesorske sabirnice i sabirnice VL. Godine 1992. Intel, u težnji da sabirnicu učini neovisnu o procesoru i poveća broj uredan koji se mogu priključiti na sabirnicu, uvodi PCI (Peripheral Component Interconnect) sabir-
S. RIBARIČ - GRAĐA RAČUNALA
379 I
nicu. Sabirnica PCI je, poput svih sabirnica za osobna računala, sinkrona. Sabirnica PCI verzija 1.0(1992.) imala je sabirnicu podataka širine 32 bita i radila je s frekvencijom signala vremenskog vođenja od 33 MHz. Vršna brzina bila je 132 MB/s prijenosom u snopu (za operaciju čitanja i operaciju pisanja). Godine 1993. pojavljuje se PCI verzija 2.0, a 1995. PCI verzija 2.1. Verzija PCI 2.2 namijenjena je prenosivim računalima. PCI sabirnica verzije 2.1. radi na frekvenciji 66 MHz i ima širinu sabirnice podataka od 64 bita tako da je vršna brzina sabirnice 528 MB/s. Propusnost od 528 MB/s više ne predstavlja, barem na prvi pogled, usko grlo u komunikaciji između grafičke jedinice i procesora. S druge strane, propusnost od 528 MB/s nije dovoljno velika za memorijsku sabirnicu. Nadalje, pojavljuje se i problem kompatibilnosti s jedinicama koje se temelje na ISA/EISA standardu, a po prirodi ne zahtijevaju tako velike brzine prijenosa (npr. zvučne kartice, modem, sučelje za pisač). sabirnica
SI. 12.13 Arhitektura računarskog sustava s većim brojem sabirničkih struktura
Godine 1998. tvrtke IBM, HP i Compaq uvode poboljšanu verziju sabirnice PCI nazvanu PCI-X koja radi na 133 MHz i ima propusnost od 1.06 GB/s te poboljšana svojstva u pogledu neosjetljivosti na greške. Verzija 2.0 sabirnice PCI-X (2003.) ima frekvenciju signala vremenskog vođenja 266MHz i 533MHz i nudi propusnost od 2.15 GB/s, odnosno 4.3 GB /s. lako je osigurana kompatibilnost PCI-X 2.0 i PCI uređaja, sabirnica PCI-X nije našla široku primjenu. Jedan od razloga za to je i pojava PCle ili PCI-express sabirnice (2004.). PCle zapravo nije sabirnica u pravom smislu te riječi. Naime, ona se temelji na načinu povezivanja "točka-
380
12. POGLAVLJE: SABIRNICE
točka" (umjesto paralelne sabirničke strukture) i koristi serijsku komunikaciju velike brzine između samo dva priključena uređaja. Umjesto izraza sabirnica (na koju se priključuju dva uređaja), obično se koristi kod PCle naziv linija (engl .line). Na jednu je liniju moguće priključiti i više uređaja, ali se u tom slučaju moraju upotrijebiti posebni preklopnci (PCI Express switch). Brzina prijenosa po liniji ovisi** verziji PCle, tako verzija 1.x. ima brzinu prijenosa od 250 MB/s, a verzija 3.x brzinu prijenosa od 1 GB/s. Sabirnica PCle može imati veći broj linija za prijenos. U tom se slučaju brzina prijenosa uvišestručuje. Na primjer, za 16 linija i verziju 3.x brzina prijenosa iznosi 16 GB/s. Sabirnica PCle još je jedan primjer (pored Serial ATA, USB, FireWire) općih napora da se zamjene paralelne sabirnice serijskim sabirnicamaL Spomenuli smo da sabirnica treba imati što je moguće veću propusnost tako da svojom brzinom prati rad procesora, posebno u komunikaciji s priručnom i primarnom memorijom, a s druge strane, mora omogućiti i povezivanje s uređajima koje se temelje na ISA/ EISA standardu koji po prirodi ne zahtijevaju velike brzine prijenosa (npr. zvučne kartice^ modemska jedinica, sučelje za printer). Intel je ponudio rješenje: u računalu se koriste tri ili više sabirnica koje se povezuju premosnicima i na taj se način omogućuje komunikacija između sabirničkih struktura (slika 12.13). Zahvaljujući takvom pristupu omogućena je ekstremno brza izmjena podataka između procesora i priručne memorije posebnom sabirnicom namijenjenoj priručnoj memorip! (engl. cache bus) ili procesorskom sabirnicom (koja se još naziva i lokalna sabirnica ili sa-! birnica domaćina (engl. host bus)) ili, u skladu s PC terminologijom, prednja sabirnica (engf. front side bus FSB). Prednja je sabirnica, odnosno procesorska sabirnica, sabirnica velike br-1 zine i radi s jednakom brzinom kao i sam procesor. Sklopovljem - premosnikom povezuje se procesorska sabirnica s PCI sabirnicom. Veza PCI sabirnice i ISA/EISA sabirnice ostvaruje j se premosnikom ISA/EISA (slika 12.13). Sklopovi kojima se ostvaruju sučelja između pojedinih sabirničkih struktura u osobnim računalima nazivaju se skupovi čipova ili čipset (engl. chipset). Čipset se sastoji od dva glavna či pa - j e d a n se obično naziva sjeverni premosnik (engl north bridge), a drugi južni
premosn&\
(engl. south bridge). Sjeverni premosnik sučelje je između procesora i memorije te grafiči®] kartice, odnosno AGP (Accelerated Graphic Port) pristupa koji predstavlja brzo namjer»-] sko sučelje grafičkoj kartici (2.133 GB/s). Osim toga, kao opcija postoji mehanizam CSAl (Communication Streaming Architecture) kojim se povećava propusnost između mrežne] kartice i procesora tako da se mrežna kartica (Gigabit Ethernet; GbE) povezuje izravno na] sjeverni premosnik (umjesto na južni). Napomenimo da se frekvencija signala vremenskom vođenja za procesorsku, odnosno prednju sabirnicu FSB, ovisno o tipu čipseta, kreće oš\ 400 MHz, 533 MHz i 800 MHz pa sve do 1333 MHz (propusnost od 3.2 GB/s do 10.5 GB/s Ujedno, sjevernije premosnik povezan s južnim premosnikom koji predstavlja sučelje | ma PCI, o d n o s n o PCle i PC-X sabirnici, LAN (Local Area Network), USB (Universal Serial Bi
RAID, Parallel ATA (PATA- Advanced Technology Attachement) - paralelno sabirničko suče za povezivanje jedinica kao što su diskovna jedinica, jedinica savitljivog diska ili jedini CD-ROM-a, Serial ATA (SATA - Serial Advanced Technology Attachement) - sabirničko suče za povezivanje jedinica magnetskog ili optičkog diska s računalom, odnosno sa sabimič^ kim adapterom računala domaćina (engl. host bus adapter HBA)) te ISA sabirnici, odnos LPC (Low Pin Count) sabirnici koja je zamjena za ISA sabirnicu. Slika 12.14 prikazuje Intelov čipset 875P namijenjen procesorima Pentium 4 i Celeron D.
S. RIBARIČ - GRAĐA RAČUNALA
381 I
SI. 12.14 Intelov čipset 875P
12.6. ULAZNO-IZLAZNE SABIRNICE: USB, FIREWIRE I SCSI Ulazno-izlazne sabirnice (engl. I/O bus) ili periferne sabirnice (engl. peripheral bus) prvenstveno su namijenjene povezivanju perifernih uređaja i procesora. (Opaska: periferni uređaji je zbirni naziv za sve ulazne i izlazne uređaje). Sabirnice opisane u 12.5 (ISA, EISA, VESA VL, Micro Channel, PCI, PCI-X, PCle) primjer su ulazno-izlaznih sabirnica. U ovom potpoglavlju opisat ćemo još tri tipične ulazno-izlazne sabirnice: USB, FireWire i SCSI. Prva generacija osobnih računala imala je skromne mogućnosti povezivanja s perifernim uređajima. Povezivanje se temeljilo na serijskom sučelju RS-232C (za povezivanje računala i terminala ili za povezivanje udaljenog terminala s modemom, odnosno povezivanje računala s modemom (slika 12.15)) i paralelnom sučelju Centronics (za povezivanje računala s pisačem). Sučelje RS-232C (RecommendedStandard232), razvijeno od strane Electronics Industries Association (EIA), uvedeno je davne 1969. i omogućavalo je priključivanje terminala na računalo. Bilo koji terminal koji je podržavao RS-232C mogao se priključiti na bilo koje računalo koje je imalo to sučelje. Standard RS-232C sadržavao je specifikaciju koja se odnosila na fizički sloj (engl. physical layer) i sklopovski protokol. Prijenos podataka obavljao se serijski - bit po bit u vremenu preko jedne linije podataka za svaki od smjerova pri-
382
12. POGLAVLJE: SABIRNICE
jenosa (TxD - predajna linija podataka, RxD - prijemna linija podataka). Protokol se podržavao upravljačkim signalnim linijama kao štosu RTS {Request to Send), CTS [Clear to Send), DTR (Data Terminal Ready) i DSR (Data Set Ready). Valjana razina signala bila je u rasponu od +3V do +15V (logička "1"), odnosno od -3V do -15V (logička "0"). Budući da su razine napona veće od onih koje koriste integrirani sklopovi, moraju se koristiti posebni pogonski sklopovi (engl. driver) za prilagodbu razina. Kao što je već spomenuto, prijenos podataka odvijao se serijski - znak po znak, s tim da je svaki znak (engl. character) predočen slijedom bitova. Broj bitova podataka bio je između 5 i 8. Bitovima podataka obavezno je pridodan je jedan početni (startni) bit (engl. start bit) logičke razine "0", a slijedi im jedan ili dva stop bita uvijek logičke razine "1". Bitovima podataka može se pridodati i zaštitni paritetni bit tako da se npr. za 8-bitni prijenos podataka koristi 11 bitova: Oddddddddpl 1, pri čemu je krajnje lijevi bit startni bit, dd...d označava bitove podataka, p je paritetni bit i dva krajnje desna bita (logičke razine "1") su stop bitovi. Brzina prijenosa bila je relativno skromna od 75 ili 300 b/s do 19 600 b/s. Način serijskog prijenosa podataka bio je asinkroni, što u kontekstu serijskog prijenosa podrazumijeva da se između predaj nog i prijemnog uređaja ne prenosi još i signal vremenskog vođenja.
terminal
/
/
w
modem
RS-232C
RS-232C b)
SI. 12.15 Povezivanje računala pomoću RS-232C sučelja: a) s udaljenim terminalom, b) s lokalnim terminalom
Standard RS-232C predviđa konektor s 25 priključaka (nožica, pinova), međutim, većina osobnih računala koristila je konektore od samo 9 priključaka (od toga 7 aktivnih -TxD, RxD, signalna masa te linije za rukovanje RTS, CTS, DTR i DSR). Maksimalna duljina kabela za koju se još jamči brzina prijenosa iznosi oko 15 m (SOfeet). Da bi se uklonili nedostaci RS232C sučelja, odnosno da bi se postigla veća brzina prijenosa na veće udaljenosti, uvedeni su standardi RS-422, RS-423 i RS-499. Paralelno sučelje Centronics, razvijeno 70-ih godina prošlog stoljeća, bilo je namijenjeno povezivanju računala s pisačem i dugo je vremena predstavljalo industrijski standard. Tek je 1994. postao i službeni standard IEEE 1284. Centronics je imao 36 signalnih linija, a maksimalna je dopuštena duljina kabela bila 5 m. Prijenos podataka obavljao se paralelno pre-
S. RIBARIČ - GRAĐA RAČUNALA
383 I
ko linija podataka DATA 1 - DATA 8, a signalne linije STROBE, BUSY i ACKNLG koristile su se za rukovanje prijenosom. Brzina prijenosa bila je između 10 KB/s i 100 KB/s. Pojavom USB (Universal Serial Bus) - univerzalne serijske sabirnice standard RS-232C i paralelno sučelje Centronics gotovo su istisnuti iz uporabe. PCI sabirnica pogodna je za priključivanje perifernih uređaja velikih brzina, međutim, nije dobro rješenje za povezivanje s perifernim uređajima malih brzina (npr. pisača, tipkovnice, miša, skenera, iveb-kamere, memorijskog štapića (engl. memory stick)) jer je PCI sučelje za te uređaje ekonomski neisplativo. Naravno, uređaje je bilo moguće spojiti i na ISA/EISA slobodne priključke, a neki su periferni uređaji imali i relativno skupa PCI sučelja. Povezivanje takvih uređaja za "obične" korisnike predstavljalo je problem: trebalo je prespojnim mostićima ili mikroprekidačima na kartici uređaja postaviti adresu uređaja vodeći brigu o tome da ta adresa ne bude u konfliktu s adresama već priključenih uređaja; nadalje, trebalo je otvoriti kućište računala i umetnuti karticu u priključno mjesto (engl. slot), zatvoriti kućište te ponovo pokrenuti računarski sustav (engl. reboot). Broj slobodnih ISA/EISA ili PCI priključaka bio je ograničen tako da su se obično maksimalno mogla priključiti do tri uređaja. PCI sabirnica
Početkom 1996. tvrtke Intel, Compaq, Microsoft, NEC, IBM, DEC i Northen Telecom udružile su se u rješavanju problema priključenja perifernih uređaja malih i srednjih brzina i predložila rješenje - USB (Universal Serial Bus) standard koji je vrlo brzo široko prihvaćen posebno za osobna računala. Na primjer, do 2008. prodano je ukupno oko 6 milijardi USB uređaja. Povezivanje uređaja preko USB ponudilo je korisniku niz pogodnosti: nije potrebno postavljanje adrese na kartici ili uređaju, nije potrebno otvarati kućište računala, može
384
12. POGLAVLJE: SABIRNICE
se priključiti veći broj perifernih uređaja (do 127), uređaji se mogu priključiti dok računalo radi, ponovno pokretanje računala nije potrebno i ulazno-izlazni uređaj obično dobiva napajanje preko USB-a. USB svojim značajkama predstavlja vrlo poželjno rješenje tzv."uključi i radi" (engl. plug-in and play). USB je standardna serijska sabirnica namijenjena ulazno-izlaznim uređajima malih i srednjih brzina prijenosa. USB se sastoji od tzv. korijenskog ili glavnog (središnjeg) priključnog mjesta (engl. root hub) koje se priključuje na PCI sabirnicu računala (slika 12.13). Ono ima utičnice ili podnožja (engl. socket) na koja se mogu priključiti kabeli za povezivanje s ulazno-izlaznim uređajima ili priključno mjesto za proširenje (engl. expansion hub). Ha taj se način ostvaruje stablasta topologija USB sustava (slika 12.16) kojom je omogućeno priključivanje velikog broja uređaja. Kabel USB se sastoji od četiri žice - dvije za podatke, jedna za napajanje (+5V) i jedna za masu. Napajanje je namijenjeno uređajima koji imaju umjerene zahtjeve kao što su tipkovnica, miš ili memorijski štapić pa takvi uređaji ne trebaju imati svoj poseban izvor napajanja. Kabel ima različite konektore - jedan za priključno mjesto (nazvan USB A) ijedan za uređaj (USB B) (slika 12.17). Na taj se način sprečava moguća zabuna da se međusobno spoje dvije utičnice na priključnom mjestu.
• •
4 3 2 1
r* 1 4
priključak priključak priključak priključak
2 3
•
USB A (strana domaćina - priključno mjesto)
USBB (strana uređaja)
1:+5Vdc 2: Data 3: Data + 4: masa
SI. 12.17 USB konektori
Verzija USB 1.0 (siječanj 1996.) radila je brzinama od 1.5 Mb/s (Low-bandwidth) i 12 Mb/s (Full-bandwith). Verzija USB 2.0 (travanj 2000.) ima tri brzine prijenosa 1.5, 12 i 480 Mb/s (Hi-Speed). Verzija USB 3.0 (studeni 2008.) ima i četvrtu brzinu prijenosa (SuperSpeed) od 4.8 Gb/s. Kabel za USB 3.0 se razlikuje od kabela prethodnih USB verzija jer ima dvije žice za napajanje i masu, dvije žice za prijenos podataka za tri "stare" brzine prijenosa te četiri žice za prijenos podataka brzinom od 4.8 Gb/s. USB omogućuje dinamičku prilagodbu sustava na promjene koje nastaju priključenjem novog USB uređaja - uređaj se može priključiti i odspojiti tijekom normalnog rada računala, tzv. "vruće priključivanje"(engl. hot-piug-in). Kad se novi uređaj uključi, glavno priključno mjesto (root hub) detektira taj događaj, čeka određeno vrijeme (npr. 100 ms) da omogući uspostavljanje normalnih uvjeta rada za uređaj (napajanje) te nakon toga generira zahtjev za prekid. Operacijski sustav komunicira s novim uređajem da utvrdi o kojem je uređaju riječ i koju brzinu prijenosa zahtijeva. Operacijski sustav zahtijeva od novog uređaja optsnik uređaja (engl. device descriptor), koji se sastoji od 64 bajta. Na temelju njega dobiva
S. RIBARIČ - GRAĐA RAČUNALA
385 I
osnovne podatke o uređaju (npr. vrsta uređaja, isporučitelj, zahtjevi u pogledu napajanja, zahtijevana brzina prijenosa). Ako operacijski sustav utvrdi da je u pogledu zahtijevane brzine prijenosa i napajanja sve u redu, dodjeljuje novom uređaju jedinstvenu adresu u rasponu od 1 do 127 te nju i ostale informacije koje su potrebne za konfiguriranje uređaja šalje i pohranjuje u upravljačke registre uređaja. Uređaj je inicijaliziran i spreman za razmjenu podataka. Pojedini bitovi prenose se preko USB sabirnice tako da se grupiraju u jedinice koje se nazivaju paketi ili okviri (engl. frame). Paketi započinju s sinkronizacijskim blokom SYNC (duljine 8 bita) kojem slijedi blok za identifikaciju paketa PID (duljine 8 bita) kojim se specificira tip paketa. Paket završava poljem EOP (End-of-packet). Standard USB predviđa šest osnovnih tipova paketa sa 16 različitih blokova PID za identifikaciju paketa. Slika 12.18 prikazuje strukturu paketa za rukovanje (Handshakepacket), paketa podataka (Datapacket) i paketa značke (Token packet). Tri su vrste paketa za rukovanje prijenosom podataka: ACK - potvrda da je paket podataka ispravno primljen, NAK - na temelju CRC detektirana je pogreška u prijenosu i STALL -„pričekaj, zauzet sam". Paket podataka sastoji se od već spomenutih blokova za sinkronizaciju, PID i EOP. Između bloka PID i EOP nalazi se blok podataka (duljine do 64 bajta) s CRC (Cyclic Redundancy Code) poljem (duljine 16 bita) za detekciju pogrešaka pri prijenosu. Paket značke šalje se od korijenskog priključnog mjesta prema uređaju i namijenjen je upravljačkim funkcijama. SYNC
PID
EOP
a)
SYNC
PID
podaci
CRC
EOP
CRC
EOP
b)
SYNC
PID
adresa
ENDP c)
SI. 12.18 Struktura triju tipova paketa USB: a) Paket za rukovanje; b) Paket podataka; c) Paket značke
Komunikacija se ostvaruje prijenosom okvira ili "cijevi" (engl. pipe) koji se sastoje od jednog ili većeg broja paketa. Četiri su vrste okvira: upravljački, izokroni (engl. isochronous), masovni (engl. buik) i prekidni. Protokol USB prilično je složen i čitatelj može naći više informacije na usb.org internetskim stranicama. Godine 1995. uveden je standard IEEE 1394 za serijsko sučelje koje se zasnivalo na FireWire specifikaciji serijskog sučelja za računala tvrtke Apple. Različiti proizvođači računala nazivaju sučelje IEEE 1394 različitim komercijalnim imenima, tako se na primjer osim FireWire naziva se još Lynx (tvrtka Texas Instruments) i i.Link (Sony). FireWire je serijska sabirnica velike brzine koja je prvenstveno namijenjena za izokroni prijenos podataka. Pod izokronim prijenosom podataka podrazumijeva prijenos podataka u stvarnom vremenu za periferne uređaje kao što su mikrofoni, zvučnici, videokamere i videorekorderi koji zahtijevaju slanje ili prijem podataka u točnim vremenskim intervalima. FireWire može povezivati do 63 periferna uređaja u stablastoj topologiji (slično USB-u) te dopušta komunikaciju dvaju uređaja na ravnopravnoj osnovi (engl. peer-to-peer), npr. između skenera i pisača, bez su-
386
12. POGLAVLJE: SABIRNICE
djelovanja procesora ili uporabe sistemske memorije. Brzine prijenosa su 100, 200 ili 400 Mb/s za poludupleksni način (engl. half-duplex) prijenosa (za FireWire 400, 1995.), odnosno 786.432 Mb/s za potpuno dupleksni način prijenosa (engl. full-duplex) (za FireWire 800, 2002.). Poludupleksni način prijenosa podrazumijeva dvosmjerni prijenos podataka, ali takav da se podaci prenose samo u jednom smjeru u vremenu, dok potpuno dupleksni način prijenosa označava istodobni prijenos podataka u oba smjera. FireWire konektor ima šest kontakata (priključaka): napajanje (8 - 40 V; 1.5 A), masa, parica B - (engl. twistedpair), parica B +, parica A - i parica A +. FireWire, kao i USB, dopušta "vruće priključivanje". SCSI (Small Computer System Interface) je sabirnički standard prvenstveno namijenjen perifernim (ulazno-izlaznim) jedinicama velike brzine kao što su magnetski i optički diskovi, ali podržava i uređaje kao što su skeneri i jedinice magnetske vrpce. Standard je nastao iz SASI-a (Shugart Associates System Interface), a službeno je objavljen standard SCSI-1 1986. kao ANSI X3.131-1986. Godine 1994. definiranje standard SCSI-2, a 1997. SCSI-3. Varijanta standarda SCSI-3 pod nazivom SCSI-3 SPI-5, odnosno Ultra-640 SCSI pojavila se 2003. SCSI jedinica diska
^ periferni uređaji
SI. 12.19 Primjer SCSI konfiguracije
S.RIBARIČ- GRAĐA RAČUNALA
387 I
Sabirnica SCSI je paralelna ulazno-izlazna sabirnica na koju se može izravno priključiti osam uređaja za SCSI-1, odnosno 16 uređaja za Wide SCSI. Adresa SCSI uređaja naziva se SCSI ID. SCSI ID ujedno definira i prioritet SCSI uređaja: uređaj s ID = 0 ima najmanji prioritet, dok onaj s ID = 7 največi prioritet (ID = 15 za Wide SCSI). Uređaji mogu imati ulogu inicijatora (vodećeg modula) (engl. initiator) ili ciijnog (pratećeg) modula (engl. target). Konfiguracija SCSI sabirnice može biti bilo koja kombinacija od ukupno osam (16 za Wide SCSI) ciljnih modula i inicijatora. Neki od uređaja mogu imati obje uloge - ulogu inicijatora i ulogu ciljnog modula. Minimalna konfiguracija sastoji se od jednog inicijatora i jednog ciljnog modula. Naravno, tijekom izmjene podataka mora biti jasno određeno koji je uređaj inicijator, a koji ciljni modul. Uređaji priključeni na SCSI sabirnici komuniciraju računalom preko SCSI upravljača domaćina
(engl. SCSI host adapter, SCSI host controller) koji ima pristup sabirnici
računala domaćina, npr. PCI sabirnici te preko nje do memorije sustava. SCSI upravljač domaćina može biti smješten izravno na matičnoj ploči osobnog računala ili radne stanice i naziva se ugrađeni (engl. embedded) SCSI upravljač domaćin. Periferni uređaji pristupaju SCSI sabirnici preko SCSI upravljača koji ima svoj ID. Periferni uređaji koji su priključeni na SCSI upravljač promatraju se kao logičkejedinice (LUN - Logical unit). SCSI upravljač obično je ugrađen u perifernom uređaju (ugrađeni SCSI upravljač), odnosno jedinici i tada govorimo o npr. SCSI jedinici diska ili SCSI jedinici vrpce. No ako je SCSI upravljač ostvaren kao posebna kartica, onda se naziva SCSI premosnik (engl. bridge controller). Jedna od prednosti SCSI premosnika je to što on podržava osam logičkih jedinica (LUN), odnosno osam perifernih uređaja. Slika 12.19 prikazuje SCSI konfiguraciju s jednim SCSI upravljačem domaćinom, jednim ugrađenim SCSI upravljačem za diskovnu jedinicu i s tri SCSI premosnika od kojih svaki podržava do osam perifernih uređaja (logičkih jedinica - LUN). Širina SCSI sabirnice je 8,16 ili 32 bita ovisno o konfiguraciji. SCSI sabirnice širine 16 ili 32 bita nose obično naziv Wide SCSI (široki SCSI). Trakasti kabel (engl. ribbon cable) s 50 priključaka upotrebljava se za SCSI sabirnicu širine 8 bita. Široki SCSI koristi dva trakasta kabela s 50,68 ili 80 priključaka. Komunikacija na SCSI sabirnici odvija se između inicijatora i ciljnog modula tako da se sve aktivnosti događaju u slijedu faza. Faze su: • Bus Free (Sabirnica slobodna) - pokazuje da niti jedan uređaj ne koristi sabirnicu tako da je ona raspoloživa; • Arbitration (Arbitraža) - tijekom te faze jedan ili više inicijatora iskazuje želju za sabirnicom; • Selection (Selekcija) - u toj fazi inicijator koji je "pobijedio" u fazi arbitraže izabire ciljni modul (engl. target) s kojim želi komunicirati; • Reselection (Reizbor) - omogućuje se ciljnom modulu, koji je otpustio sabirnicu da bi izvršio naredbu inicijatora, ponovnu uspostavu veze s inicijatorom. • Sada slijede četiri faze izmjene podataka: • Command (Naredba) - tijekom te faze prenose se operacijski kodovi naredbi ciljnom modulu; • Data (Podaci) - prenose se podaci ciljnom modulu (Data Out) ili od ciljnog modula inicijatoru (Data In); • Message (Poruka) - prenosi se jedna ili više poruka ciljnom modulu (Message Out) ili od ciljnog modula inicijatoru (Message In); • Status (Status) - u toj fazi ciljni modul završava SCSI naredbu i izvještava inicijator o uspješno ili neuspješno izvršenoj naredbi.
388
12. POGLAVLJE: SABIRNICE
Slika 12.20 prikazuje dijagram stanja za SCSI sabirničke faze. Važna značajka SCSI je mogućnost reizbora - ako je naredba upućena ciljnom modulu takva da se za njezino izvođenje zahtijeva dulje vrijeme, tada ciljni modul može osloboditi sabirnicu (odspojiti se) i nakon što završi zahtijevanu operaciju ponovo se spojiti na sabirnicu. Na primjer, inicijator je izdao naredbu diskovnoj jedinici da formatira disk. Diskovna jedinica izvodi tu operaciju, ali tako da ne "drži" sabirnicu tijekom formatiranja. Nakon što je formatiranje diska završeno, ciljni se modul (diskovna jedinica) spaja na SCSI sabirnicu i izvještava inicijator o obavljenoj naredbi. U međuvremenu neki od inicijatora može započeti uspostavljanje nove veze jef ima indikaciju o slobodnoj sabirnici (faza BusFree). uključenje napajanja
Sabirnički protokol kojim su podržane faze ostvaruje se s devet upravljačkih linija (za SCSh 1): BSY, SEL, C/D, l/O, MSG, REQ, ACK, ATN, RST. Opis signala i sabirnički protokol iscrpno je prikazan u materijalu standarda X3.131-1986, X3.13M994 i X3.131-1996. Za ilustraciju protokola na SCSI sabirnici opišimo događaje i prikažimo stanje na SCSI sabirnici tijekom Read naredbe kojom se prenose podaci od ciljnog modula inicijatoru. Aktivnosti započinju fazom Bus Free - sabirnica je slobodna. Faza Bus Free karakteristična je po tome što su signali BSY i SEL neaktivni dulje od 400 ns. Sabirnica SCSI automatski se nalazi u fazi BusFree nakon što se uključi napajanje ili nakon resetiranja SCSI.Tijekom normalnog rada sabirnica ulazi u fazu BusFree nakon što je naredba izvršena i nakon što se pošalje poruka COMMAND COMPLETE. Jednako tako, tijekom normalnog rada SCSI može ući u fazu Bus Free kada ciljni modul oslobađa sabirnicu slanjem poruke DISCONNECT. iz faze Bus Free prelazi se u fazu Arbitration. U toj se fazi jedan ili više perifernih uređaja takmiče za upravljanje sabirnicom. Svaki od uređaja koji iskazuje želju za sabirnicom aktivira signalnu liniju BSY\jednu od linija podataka. Svaki od osam uređaja priključenih na sabirnicu (SCSI-1) ima jedinstven ID (od 0 do 7) i svaki će od uređaja koji želi sabirnicu tijekom faze Arbitration aktivirati odgovarajuću liniju podataka u skladu sa svojim ID-om. Na primjer, ako se natječu za sabirnicu uređaj s ID = 7 i onaj s ID = 5, tada će linije podataka D7 i D5 biti postavljene u 1. U toj točki uređaji koji su zahtijevali arbitriranje moraju čekati najmanje 2.4 ^s da se postupak arbitraže završi. Ako je više uređaja postavilo svoj ID tijekom faze Arbitration, pobjeđuje onaj s najvećom vrijednosti ID, tj. onaj s najvećim prioritetom. Ostali uređaji koji su se takmičili za sabirnicu nadgledaju linije podataka i povlače svoje zahtjeve
S. RIBARIČ - GRAĐA RAČUNALA
389 I
priznajući konačan rezultat arbitraže. Iz značajki opisa faze arbitraže možemo zaključiti da SCSI sabirnica rabi distribuiranu arbitražu. Uređaj koji je pobijedio u fazi Arbitration postaje inicijator i aktivira signal SEL To je znak ostalim uređajima da oslobode signalnu liniju BSY i uklone svoj ID bit sa sabirnice podataka. Sabirnica ulazi u fazu Selection. Tijekom te faze uspostavlja se veza između inicijatora i ciljnog modula. Inicijator, koji je preuzeo upravljanje sabirnicom, postavlja na dvije odgovarajuće linije podataka svoj ID i ID ciljnog modula, uz to je još uvijek aktivan signal BSY koji je bio postavljen od strane uređaja koji je dobio sabirnicu u fazi Arbitration. Na primjer, ako inicijator s ID = 7 želi uspostaviti vezu s ciljnim modulom s ID = 0, onda će linije podataka D7 i DO imati vrijednost 1. Nakon izvjesnog kašnjenja, inicijator deaktivira signal BSY. Nakon što ciljni modul prepozna svoj ID, on aktivira signal BSY Kad inicijator detektira aktivan signal BSYt on oslobađa linije podataka i deaktivira signal SEL. U ovom trenutku, na kraju faze Selection, upravljanje sabirnicom preuzima ciljni modul! U sljedećem koraku ciljni modul aktivira signalnu liniju C/D i time označava ulazak u fazu Command. Istodobno su signali //0 i MSG neaktivni. Signal C/D ostaje aktivan tijekom cijelog trajanja te faze. Nakon toga ciljni modul aktivira signalnu liniju REQ i zahtijeva od inicijatora prvi bajt naredbe. Inicijator postavlja prvi bajt naredbe na sabirnicu podataka i aktivira signalnu liniju ACK. Nakon što ciljni modul pročita bajt, deaktivira REQ, a nakon toga i inicijator deaktivira signal ACK. U prvom bajtu naredbe sadržan je operacijski kod naredbe u kojem se nalazi i informacija o broju bajtova naredbe koji se moraju prenijeti. Ovi se bajtovi prenose u ponavljajućoj REQ / ACK sekvenci. Nakon što je ciljni modul primio od inicijatora sve bajtove naredbe, deaktivira signalnu liniju C/D i tako završava fazu Command. Ciljni modul tumači naredbu i u skladu s tumačenjem (riječ je o Read operaciji) prelazi u fazu Data, odnosno točnije Data In te aktivira I/O signalnu liniju. Na taj način označava smjer podataka od ciljnog modula prema inicijatoru. Ciljni modul smješta prvi bajt iz zahtijevanog bloka podataka na sabirnicu podataka te aktivira signalnu liniju REQ. Inicijator, nakon što pročita podatak, aktivira signalnu liniju ACK. Preostali se bajtovi prenose ponavljajući REQ/ACK rukovanje prije i nakon svakog prijenosa bajta. Nakon prijenosa potpunog bloka podataka, ciljni modul postavlja sabirnicu u Status fazu i šalje inicijatoru informaciju o statusu (statusni bajt) obavještavajući ga daje uspješno završen prijenos. U toj su fazi ponovno aktivne signal ne linije C/D i I/O, dok signal na linija MSG ostaje neaktivna. I u ovom slučaju inicijator i ciljni modul koriste REQ/ACK signale za rukovanje prijenosom statusnog bajta. Na kraju, ciljni modul aktiviranjem signalne linije MSG postavlja sabirnicu u Message In fazu i prenosi bajt poruke koji sadržava poruku o završetku naredbe. Nakon što je inicijator primio tu poruku, ciljni modul oslobađa sabirnicu i sabirnica prelazi u Bus Free fazu. Slika 12.21 prikazuje vremenski dijagram stanja na SCSI sabirnici tijekom Read naredbe. SCSI sabirnica pojavljuje se s različitim značajkama i imenima: i) asinkrona SCSI sabirnica - asinkroni je prijenos podataka osnovni oblik prijenosa za sve SCSI uređaje. Brzina prijenosa je 5MB/s; ii) sinkrona SCSI sabirnica - sinkroni prijenos podataka upravljan signalom vremenskog vođenja od 5MHz (SCSI-1) ili 10MHz (SCSI-2); iii) brzi SCSI (Fast SCSI) - poboljšana verzija sinkronog prijenosa podataka za SCSI-2; iv) široki SCSI (Wide SCSI) - sabirnica za prijenos 16- i 32-bitnih podataka. Tablica 12.1 daje pregled značajki različitih varijanti SCSI sabirnice.
LT) NJ
k> < —i
0) 3 0) 13
Bus Settle Delay
Bus Free Delay Bus Set Delay Bus Clear Delay Arbitration Delay
3 cn cu QJ D O) On n ^
Bus Clear Delay plus Bus Settle Delay inicijator aktivira signal BSY ciljni uređaj postavlja BSY SS— sustavi bez arbitraže započinju ovdje
BSY SEL
0> g; -V D n' 0) O
I/O MSG
30 n> a> Q. U
REQ
0) Q. O" n>
-ss-
-ss-ss-
C/D
3
OJ —^
-SS-
Y
-ss-
V
-
ACK ATN
t JT
VJ/
-8r
-ss-
J /
T
\
/
—
V
4
/
\
i
i
V
-fr
-ss-
-SS-
RST
XZ>
DB (7-0,P) (Data bus)
I /
sabirnica slobodna
Arb. I IDs
Targ. &lnit. IDs
Arbi- Selectration tion
ss
/ O L Last CMD Byte
1st CMD Byte
Command
Data Byte
-SS J
C X . Data Byte
Data In
t
O Status Byte
Status
J C X . Command I Complete
Message In sabirnica slobodna
"J
S. RIBARIČ - GRAĐA RAČUNALA
391 I
Širina (bita)
Frekvencija (MHz)
Brzina (MB/s)
Duljina kabela (m)
50 priključaka
8
5
5
6
SCSI-2 (1994.)
50 priključaka
8
10
10
3
Fast-Wide SCSI
SCSI-2, SCSI-3 SPI (1996.)
2 x 50 (SCSI-2) 1 x 68 (SCSI-3)
16
10
20
3
Ultra SCSI
SCSI-3 SPI
50 priključaka
8
20
20
1,5 ili 3
Ultra Wide SCSI
SCSI-3 SPI
68 priključaka
16
20
40
1,5 ili 3
Ultra 2 SCSI
SCSI-3
50 priključaka
8
40
40
-
Ultra 2 Wide SCSI
SCSI-3 SPI-3
68 priključaka 80 priključaka
16
40
80
-
Ultra 3 SCSI
SCSI-3 SPI-3 (1999.)
68 priključaka 80 priključaka
16
40 DDR
160
-
Ultra-320 SCSI
SCSI-3 SPI-3 (2002.)
68 priključaka 80 priključaka
16
80 DDR
320
-
Ultra-640 SCSI
SCSI-3 SPI-3 (2003.)
68 priključaka 80 priključaka
16
160 DDR
640
-
Sucelje
Standard
Konektor
SCSI-1
SCSI-1 (1986.)
Fast SCSI
Tablica 12.1 Pregled značajki različitih varijanti SCSI sabirnice
S. RIBARIČ - GRAĐA RAČUNALA
393 I
13. POGLAVLJE
ULAZNO-IZLAZNI SUSTAV 13.1. UVOD Računalo je neupotrebljivo ako ne može komunicirati s vanjskim svijetom. Komunikacija s vanjskim svijetom ostvaruje se ulazno-izlaznim sustavom koji mora podržati često vrlo raznolike oblike izmjene podataka između procesora i vanjskog svijeta. Na primjer, prikaz podataka i unošenje naredbi korisnika, generiranje upita bazama podataka i njihovo obnavljanje, rezervna pohrana podataka i dokumenata (engl. bačking up), prikupljanje podataka iz mreže mjernih uređaja i senzora, upravljanje robotskom rukom, upravljanje uređajima i napravama u proizvodnim i industrijskim procesima, izmjena podataka i naredbi s udaljenih terminala, izmjenjivanje podatka s drugim računarskim sustavima i si. Izmjena podataka računala s vanjskim svijetom ostvaruje se različitim perifernim uređajima (nazivaju se još i vanjski uređaji ili ulazno-izlazni uređaji) koji su preko ulazno-izlaznog sučelja (engl. I/O iriterface) priključeni na sabirnicu računala. Periferni uređaji su, na primjer, tipkovnica, miš ili skener koji su očiti primjeri ulaznih uređaja. Pisač, monitor ili grafička prikazna jedinica bez dvoumljenja su primjeri izlaznih jedinica. No što je jedinica magnetskog diska? Podaci koji se izmjenjuju između procesora i diskovne jedinice nisu podaci koji izravno pristižu iz vanjskog svijeta ili se izravno šalju u vanjski svijet - prema tome, strogo gledano, diskovna jedinica ne bi mogla biti ulazno-izlazna, odnosno periferna jedinica. Podaci se, međutim, između procesora i diskovne jedinice izmjenjuju preko ulazno-izlaznog sustava jer se diskovna jedinica zbog svojih električkih i mehaničkih značajki bitno razlikuje od glavne (primarne ili radne) memorije pa se diskovna jedinica smatra ulazno-izlaznim, odnosno perifernim uređajem. Periferni se uređaji mogu razvrstati prema tome jesu li ulazni, izlazni ili ulazno-izlazni, jesu li namijenjeni komunikaciji sa čovjekom ili strojem (ili drugim računalom) te prema brzini prijenosa. Na primjer, tipkovnica je ulazni uređaj namijenjen čovjeku i njome se prenose podaci brzinom od oko 10 B/s; jedinica magnetskog ili optičkog diska je ulazno-izlazni uređaj kojem je stroj (računalo) partner u komunikaciji s brzinom prijenosa od 3000 Mb/s ili grafička prikazna jedinica koja je izlazni uređaj namijenjen čovjeku i ima brzinu prijenosa podataka od 800 do 8000 Mb/s. Periferni se uređaji izravno ne priključuju na sabirnicu računarskog sustava. Oni se, kao što smo već spomenuli, priključuju na sabirnicu računarskog sustava preko ulazno-izlaznog sučelja. Ulazno-izlazno sučelje često se naziva i ulazno-izlazni upravljač (engl. I/Ocontroller), ulazno-izlazni modul (engl. I/O module), upravljač uređaja (engl. device controller), a neki ga još nazivaju i pristupni sklop.
394
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
Pod ulazno-izlaznim
sustavom (slika 13.1) podrazumijevaju se svi periferni uređaji (i njihova
ulazno-izlazna sučelja) koji su priključeni na sabirnicu računarskog sustava. Jedno ulaznoizlazno sučelje na koje je priključen jedan ili više perifernih uređaja nazivat ćemo ulaznoizlazni
podsustav. sabirnica sustava
procesor
memorija
ulaznoizlazni upravljač 1
ulaznoizlazni upravljač 2
ulaznoizlazni upravljač 3
periferni uređaj
komunikacijska linija
periferni uređaji
ulazno-iziazni podsustav 1
ulazno-izlazni podsustav 2
ulazno-izlazni podsustav 3
...
ulaznoizlazni upravljač n
periferni uređaji povezani dijeljenom ulazno-izlaznom sabirnicom
ulazno-izlazni podsustav n
ulazno-izlazni sustav
SI. 13.1 Ulazno-izlazni sustav
Slika 13.1 prikazuje način priključenja perifernih uređaja za jednostavnije računarske sustave relativno malih performansi (engl. low-end system) koji se temelje na jednoj (sistemskoj) sabirnici. (Opaska: upotrebljavat ćemo i naziv sabirnica sustava.) Slika 13.2 prikazuje način priključenja perifernih uređaja u računarskom sustavu koji se temelji na hijerarhijskom ustroju većeg broja sabirnica (npr. lokalna sabirnica/sabirnica priručne memorije, memorijska sabirnica, PCI sabirnica, ulazno-izlazna sabirnica). U oba slučaja vidimo da se između perifernog uređaja i sabirnice pojavljuje ulazno-izlazni upravljač (engl. I/O controller). Zašto? Razlozi su višestruki: i) zbog velike je raznolikosti perifernih uređaja (načini rada, brzina i načini prijenosa podataka i si.) nepraktično, neisplativo i skoro neizvedivo ugraditi upravljačke sklopove za periferne uređaje u procesor. Uporabom ulazno-izlaznih upravljača postiže se nezavisnost oblikovanja procesora i memorije u odnosu na periferne uređaje. Na taj se način omogućuje nadogradnja i proširenje ulazno-izlaznog sustava novim perifernim uređajima neovisno o procesoru; ii) uporabom ulazno-izlaznih upravljača koji, između ostalog, imaju i mogućnost me-i đupohranjivanja podataka (engl. buffering), premošćuje se jaz između brzine pro-j cesora i perifernih uređaja koji su vrlo često puno sporiji od procesora ili memorije; iii) periferni uređaji vrlo često rabe format i duljinu riječi podataka koja se razlikuje odi formata i duljine riječi procesora pa je stoga potrebno obaviti pretvorbu formata«] oblika podataka u ulazno-izlaznom upravljaču; iv) ulazno-izlazni upravljači moraju podržati vremensko vođenje i protokol za prijenosi podataka između procesora i perifernog uređaja te omogućiti priključenje više od]
S. RIBARIČ - GRAĐA RAČUNALA
395 I
jednog perifernog uređaja. Ujedno, vrlo često imaju i dodatne funkcije koje se odnose na otkrivanje i ispravljanje pogrešaka tijekom prijenosa podataka. lokalna sabirnica/ sabirnica priručne memorije
periferni uređaj
periferni uređaji
periferni uređaji
SI. 13.2 Način priključenja perifernih uređaja u računarskom sustavu koji se temelji na hijerarhijskom ustroju većeg broja sabirnica
13.2. ULAZNO-IZLAZNI UPRAVLJAČ Ulazno-izlazni upravljači, ovisno o funkcijama koje obavljaju, mogu biti izvedeni kao jednostavno sučelje između procesora i jednog perifernog uređaja, dok u složenijim izvedbama mogu nezavisno upravljati većim brojem perifernih uređaja. U oba slučaja ulazno-izlazni upravljač mora podržavati funkcije koje se odnose na međupohranjivanje podataka i upravljanje perifernim uređajem. U najjednostavnijoj izvedbi, ulazno-izlazni upravljač koji je priključen na sistemsku sabirnicu sastoji se od dva dijela (slika 13.3): pristupnih vrata
396
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
računalu (engl. host port) i pristupnih vrata perifernom uređaju (engl. device port). Pristupna vrata računalu, kojima se ostvaruje sučelje prema procesoru, sastoje se od sklopova za prihvat i dekodiranje ulazno-izlaznih naredbi koje izdaje procesor, dekodiranje vlastite adrese i adrese za izbor pristupnih vrata uređaja te od jednog ili više registara podataka, upravljačkog registra te registra za pohranu informacije o statusu perifernog uređaja. Uz sve t a pristupna vrata obično imaju i sklopove za generiranje zahtjeva za prekid (engl. interrupt hardware).
Pristupna vrata perifernom uređaju, kojima se ostvaruje sklopovsko sučelje prema perifernom uređaju, zadužena su za upravljanje i prijenos podataka od ili prema perifernom uređaju. Neke od upravljačkih funkcija pristupnih vrata su, primjerice, inicijalizacija perifernog uređaja, aktiviranje i zaustavljanje rada perifernog uređaja, ostvarivanje protokola izmjene podataka s perifernim uređajem, pretvorba podataka (paralelno/serijska i serijsko^ paralelna) te oblikovanje (kompozicija i dekompozicija) podataka u riječi i bajtove. Slika 13.3 prikazuje blok-dijagram jednostavnog ulazno-izlaznog upravljača koji podržava dva periferna uređaja.
j sabirnica podataka
c
A VI
podaci
registar podataka Vy
statusni registar
sklopovsko sučelje za periferni uređaji 1
jy
status
>
upravljanje
pristupna vrata perifernom uređaju 1
upravljački registar
/ — adresna sabirnica N
j V
< , A
upravljačna sabirnica
\
•
sklopovi za dekodiranje ulazno-izlaznih naredbi i adrese
№
sklopovsko sučelje za periferni uređaji 2
V N A
podaci status
r
N K
: — V upravljanje
pristupna vrata perifernom uređaju 2
pristupna vrata računalu
SI. 13.3 Blok-dijagram jednostavnog ulazno-izlaznog upravljača
Ulazno-izlazni upravljač povezan je s računalom posredno preko ulazno-izlazne sabirnice ili izravno preko sistemske sabirnice: sabirnice podataka, adresne sabirnice i upravljačke sabirnice. Podaci koji se izmjenjuju s vanjskim svijetom i koji se prenose od ili prema ulaznoizlaznom upravljaču međupohranjuju se u jednom ili više registara podataka. Upravljač ima jedan ili više statusnih registara u kojima se pohranjuje informacija o trenutnom stanju perifernog uređaja te jedan ili više upravljačkih registara za prihvat upravljačke informacije od procesora. U složenijim izvedbama ulazno-izlazni upravljači imaju svoj vlastiti (lokalni) procesor i lokalnu memoriju tako da mogu podržati autonomni prijenos podataka bez izravnog su-
S. RIBARIČ - GRAĐA RAČUNALA
397 I
djelovanja središnjeg procesora računarskog sustava. Vrlo se često takvi ulazno-izlazni upravljači nazivaju i inteligentni ulazno-izlazni upravljači. Slika 13.4 prikazuje strukturu jednog takvog ulazno-izlaznog podsustava s inteligentnim ulazno-izlaznim upravljačem koji podržava dva periferna uređaja.
*
-
ulazno-izlazni podsustav
SI. 13.4 Struktura ulazno-izlaznog podsustava s inteligentnim ulazno-izlaznim upravljačem
U zaključku ovog potpoglavlja još jednom navedimo osnovne funkcije koje treba podržati ulazno-izlazni upravljač: i) vremensko vođenje i upravljanje tokom podataka između perifernih uređaja i internih komponenti računarskog sustava; ii) komunikaciju s procesorom; iii) komunikaciju s perifernim uređajem (ili uređajima); iv) međupohranjivanje podataka; v) otkrivanje (detekcija) i ispravljanje pogrešaka tijekom prijenosa podataka. Za ostvarivanje komunikacije između procesora i perifernog uređaja ulazno-izlazni upravljač mora imati sposobnost dekodiranja naredbi koje šalje procesor te dekodiranja adrese za izbor perifernog uređaja ili registara u perifernom uređaju. Uz sve to, od ulazno-izla-
398
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
znog upravljača zahtijeva se i dojava statusa ili stanja u kojem se nalazi periferni uređaj, uključujući i izvještavanje o različitim pogreškama koje mogu nastupiti tijekom prijenosa podataka.
13.3. NAČINI IZMJENE PODATAKA Načini izmjene podataka između perifernog uređaja i procesora (ili memorije), tj. ulaznoizlazne operacije mogu se razvrstati u tri grupe: i) programirani ulazno-izlazni prijenos podataka (engl. programmed I/O), ii) prekidni ulazno-izlazni prijenos podataka (engl. interrupt-driven I/O), iii) ulazno-izlazni prijenos podataka izravnim pristupom memoriji (engl. DMA - Direct Memory
Access).
13.3.1. PROGRAMIRANI ULAZNO-IZLAZNI PRIJENOS PODATAKA Pri programiranom ulazno-izfaznom prijenosu podataka podaci se izmjenjuju između procesora i ulazno-izlaznog upravljača pod izravnim programskim upravljanjem procesora. Procesor izvodi program kojim izravno upravlja ulazno-izlaznim operacijama - očitava status perifernog uređaja, šalje naredbe za izvođenje ulazne ili izlazne operacije i prenosi podatke. Budući da je procesor izvođenjem programa izravno uključen u ulazno-izlazni prijenos podataka, ne može raditi ništa drugo pa nema konkurentnih operacija, odnosno više istodobnih aktivnosti u računarskom sustavu. Štoviše, kad procesor koji je obično brži od ulazno-izlaznog upravljača, odnosno perifernog uređaja, izda naredbu ulazno-izlaznom upravljaču, mora čekati da se obavi prijenos podataka između perifernog uređaja i ulazno-izlaznog upravljača te da se podaci pohrane u registrima podataka ulazno-izlaznog upravljača i postanu raspoloživi procesoru. Kada je velika razlika u brzini procesora i perifernog uređaja, to čekanje procesora predstavlja beskorisno veliko rasipanje procesorskog vremena. Prijenos podataka pod programskim upravljanjem zahtijeva da procesor izvrši nekoliko instrukcija, uključujući ulaznu instrukciju (ako je riječ o prijenosu podataka iz vanjskog svijeta u računarski sustav) te instrukciju kojom prenosi podatak iz procesora u memoriju, odnosno instrukciju kojom prenosi podatak iz memorije u procesor te izlaznu instrukciju (ako je riječ o prijenosu podataka iz računala u vanjski svijet). U računarskim sustavima koji koriste programirani ulazno-izlazni prijenos podataka, procesor, memorija i ulazno-izlazni upravljač obično komuniciraju preko sistemske sabirnice: adresne sabirnice, sabirnice podataka i upravljačke sabirnice. Adresna sabirnica koja služi za adresiranje memorije koristi se i za adresiranje ulazno-izlaznog upravljača. Ovisno o njegovoj složenosti, dodjeljuje mu se jedna iii veći broj adresa. I ovdje moramo naglasiti da su adrese jednoznačno dodijeljene - ne postoje dva ulazno-izlazna upravljača u računarskom sustavu koji imaju istu ili iste adrese. Ako je riječ o vrlo jednostavnom upravljaču koji je reduciran samo na pristupna tj. ulazno-izlazna vrata (engl. I/Oport) s jednim registrom podataka, onda njemu može biti dodijeljena samo jedna adresa. No ako je riječ o složenijem ulazno-izlaznom upravljaču, on ima dodijeljenu grupu adresa (npr. adrese za jedan ili više upravljačkih registara, adresa za statusni registar i adrese za ulazne i izlazne registre podataka).
S. RIBARIČ - GRAĐA RAČUNALA
399 I
Ovisno o tome kako procesor"vidi"ulazno-izlazni upravljač, postoje dva načina adresiranja upravljača: i) memorijsko preslikavanje U/l (engl. memory-mapped I/O), ii) izdvojeno U/l (engl. isolated I/O). Kod memorijskog preslikavanja U/l, adrese dodijeljene ulazno-izlaznim upravljačima dio su adresnog memorijskog prostora. Drugim riječima, procesor smatra ulazno-izlazne upravljače, odnosno njihove registre, dijelom memorijskog adresnog prostora i njima pristupa strojnim instrukcijama koje rabi za komunikaciju s memorijskom jedinicom. Naravno, u tom je slučaju ukupni adresni memorijski prostor umanjen za dio adresnog prostora dodijeljenog ulazno-izlaznom sustavu. Procesori koji rabe takvu organizaciju ulazno-izlaznog sustava nemaju posebne instrukcije za ulazne operacije (instrukcije IN ili INPUT) niti instrukcije za izlazne operacije (OUT). Umjesto njih rabe instrukcije koje se koriste za komunikaciju s memorijom - instrukcije STA i LDA, odnosno MOVE. Primjer 13.1. Pretpostavimo da je jednostavan ulazno-izlazni upravljač sveden na U/l vrata te da ima samo dva registra podataka - jedan ulazni (za prihvat podataka iz perifernog uređaja ili vanjskog svijeta) i jedan izlazni za slanje podatka perifernom uređaju ili vanjskom svijetu (slika 13.5). Neka je izlaznom registru dodijeljena adresa 8000 (heksadekadno), a ulaznom registru adresa 8008 (heksadekadno). Pozor: adrese 8000 i 8008 su u tom slučaju rezervirane za ulazno-izlazni upravljač i ne smiju se dodijeliti memorijskim lokacijama! Jednostavan programski odsječak kojim će se obaviti prijenos podataka izgleda ovako: instrukcija instrukcija LDA $1000 dohvati podatak s memorijske lokacije čija je adresa 1000 i privremeno ga pohrani u akumulator A STA $ 8000 pohrani podatak iz A u izlazni registar U/l vrata (izlazna operacija) instrukcija instrukcija instrukcija LDA $8008 dohvati podatak iz ulaznog registra U/l vrata pohrani podatak na memorijsku lokaciju čija je adresa 2000 STA $2000 instrukcija instrukcija instrukcija Instrukcijom STA $8000 obavlja se izlazna operacija, odnosno podatak iz akumulatora A pohranjuje se u izlaznom registru i šalje vanjskom svijetu jer je 8000 adresa izlaznog registra. Instrukcijom LDA $8008 dohvaća se podatak iz ulaznog registra podataka U/l vrata (ulazna operacija). Vidimo da instrukcija STA ima funkciju izlazne instrukcije (OUT) ako adresira izlazni registar podataka U/l vrata, odnosno instrukcija LDA ima funkciju ulazne instrukcije (IN) ako adresira ulazni registar. Ulazno-izlazni upravljački sklopovi koji su posebno namijenjeni programiranom ulazno-izlaznom prijenosu i rabe memorijsko preslikavanje U/l koriste upravljački signal R/W (čitaj/piši) kao i memorijski moduli (slike 13.5 i 13.6 a)).
400
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
adresna sabirnica
SI. 13.5 Jednostavan ulazno-izlazni upravljač s izlaznim vratima (adresa 8000) i ulaznim vratima (adresa 8008) koji koristi memorijsko U/l preslikavanje (Primjer 13.1)
Pri izdvojenoj U/l organizaciji procesor ima posebni, izdvojeni adresni prostor namijenjen U/l sustavu i posebni adresni prostor namijenjen memoriji. Procesor u tom slučaju ima i posebne instrukcije u skupu strojnih instrukcija za unos podataka (IN ili INPUT) i za slanje podataka u vanjski svijet (OUT). Procesor razlikuje dva adresna prostora tako što, ako pristupa memorijskom adresnom prostoru, to čini instrukcijama tipa LDA i STA koje aktiviraju upravljačke linije READ M (čitaj memoriju), odnosno VVRITE M (piši u memoriju). No u slučaju pristupa adresnom prostoru namijenjenom U/l sustavu, instrukcijama IN i OUT aktivira upravljačke signale READ IO (čitaj U/l), odnosno VVRITE IO (piši U/l) (slika 13.6 b). Formati instrukcija IN i OUT sastoje se od dva ili više bajtova koji sadržavaju operacijski kod instrukcije te dva adresna dijela - jedan koji određuje adresu U/l vrata, odnosno ulaznog ili izlaznog registra podataka i drugi koji određuje izvor podataka koji će biti poslan u vanjski svijet ili odredište podatka u kojem će se privremeno pohraniti podatak dohvaćen iz vanjskog svijeta.
S. RIBARIČ - GRAĐA RAČUNALA
401
I
Slike 13.6 a) i 13.6 b) prikazuju organizaciju programiranog ulazno-izlaznog prijenosa podataka za memorijsko preslikavanje U/l i izdvojeno U/l te odnose između pojedinih adresnih prostora (13.6 c)). Napomenimo da, primjerice, procesori MC 680x0 tvrtke Motorola koriste memorijsko U/l preslikavanje, dok procesori 86x86 tvrtke Intel rabe izdvojeno U/l. sabirnica podataka
adresna sabirnica
periferni uređaj
periferni uređaji
periferni uređaj
periferni uređaji
a)
sabirnica podataka
adresna sabirnica
b)
SI. 13.6 Programirani U/l prijenos: a) s memorijskim preslikavanjem U/l; b) s izdvojenim U/l;
402
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
U/l adresni prostor
ukupni adresni prostor
memorijski adresni prostor
memorijski adresni prostor
U/l adresni prostor
memorijsko U/l preslikavanje
izdvojeno U/l preslikavanje c)
SI. 13.6 Programirani U/l prijenos: c) odnos između pojedinih adresnih prostora za obje organizacije
Programirani ulazno-izlazni prijenos podataka može biti programirani bezuvjetni i programirani uvjetni prijenos. Osnovna značajka programiranog bezuvjetnog prijenosa je da se prijenos podataka obavlja bez prethodnog utvrđivanja stanja ulazno-izlaznog upravljača, odnosno perifernog uređaja. Programski odsječak u Primjeru 13.1. ilustrira takvu vrstu prijenosa - vidimo da instrukciji STA $8000 koja ima značenje izlazne instrukcije ne prethodi ništa čime bi se utvrdilo jesu li U/l vrata, odnosno periferni uređaj koji je priključen na ta vrata, spremni za prihvat podatka.Takva vrsta prijenosa podrazumijeva daje periferni uređaj priključen na ulazno-izlazni upravljač spreman za prihvat ili slanje podataka u trenutku izvođenja ulazne ili izlazne instrukcije. Bezuvjetni se programirani prijenos upotrebljava samo tamo gdje su vremena odziva upravljača i perifernih uređaja točno poznata. Zbog jednostavnosti i izravnosti ovaj način prijenosa postavlja minimalne zahtjeve za programe i sklopove. Primjer 13.2. Prikažimo primjer programskog odsječka za bezuvjetni programirani prijenosa bloka podataka za procesor MC 680x0 koji koristi memorijsko U/l preslikavanje. Pretpostavimo da se blok podataka nazvan BLOCK, veličine 256 bajtova, koji se nalazi na početnoj adresi 4000 (heksadekadno) želi poslati na izlazna vrata (PORT) čija je adresa 8000 (heksadekadno). Program započinje na adresi 6000 (heksadekadno). PORT COUNT
EQU $8000 EQU 256
ORG $4000 BLOCK DS.B 256 ORG $6000 MOVE #COUNT, Dl MOVE.L #BLOCK, A1
; adresa izlaznih vrata ; (brojilo) veličina bloka koji se prenosi ; početna adresa bloka podataka ; rezervirano 256 bajtova za BLOCK ; početak programa ; u registar Dl postavi početnu vrijednost brojila ; postavi početnu adresu bloka podataka u reg. A1
S. RIBARIČ - GRAĐA RAČUNALA
MOVE.L #PORT, A2 PETLJA MOVE. B (Al)+, DO MOVE.B DO, (A2) SUB #1, Dl BNE PETLJA
403 I
postavi adresu izlaznih vrata u reg. A2 dohvati podatak iz BLOCK i privremeno ga pohrani u DOte povećaj sadržaj registra A1 za jedan podatak iz reg. DO pošalji na izlazna vrata umanji za 1 stanje brojila granaj na PETLJA sve dok brojilo ne dostigne vrijednost 0, odnosno dok se ne prenese cijeli blok podataka
Procesor MC 680x0 koristi instrukciju MOVE koja ovisno o smjeru podataka ima jednaku funkciju kao i STA, odnosno LDA instrukcija.Tako na primjer: Instrukcija
MOVE. B (Al)+, DO; M(A1> -•DO, A1 + 1-* A1 ima funkciju LDA - dohvaća podatak (bajt) iz memorijske lokacije čija je adresa sadržana u adresnom registru A1 i pohranjuje ga u registar DO. Potonja instrukcija koristi tzv. registarsko indirektno (neizravno) postinkrementno adresiranje (engl. address register indirect with postincrement} jer se sadržaj registra A1 nakon dohvata bajta automatski povećava za 1. Nakon izvođenja potonje instrukcije u registru DO nalazi se podatak (bajt) koji će instrukcijom
MOVE.B DO, (A2) biti poslan u vanjski svijet. Instrukcija MOVE. B DO, (A2) predstavlja operaciju pohranjivanja (STA) bajta iz registra DO na lokaciju čija je adresa sadržana u adresnom registru A2. (Adresni registar A2 sadržava 8000 (heksadekadno) što je adresa izlaznih vrata). Izlazna su vrata linijama podataka spojena s perifernim uređajem tako da se upisom podatka u izlazni registar podaci ujedno i šalju perifernom uređaju, odnosno vanjskom svijetu. U prethodnom programskom odsječku vidimo da procesor prije negoli pošalje podatak na izlazna vrata ne provjerava jesu li vrata ili vanjski svijet (periferni uređaj) spremni za prihvat podataka. Programirani uvjetni prijenos zahtijeva ispitivanje stanja ulazno-izlaznog upravljača, odnosno perifernog uređaja prije negoli se obavi prijenos podataka. Periferni uređaj je jednom ili većim brojem posebnih signalnih linija za rukovanje povezan s ulazno-iziaznim upravljačem ili točnije njegovim statusnim registrom kojem dojavljuje informaciju o spremnosti za prijenos podataka. Ta se spremnost ogleda u promjeni stanja određenog ili određenih bitova u statusnom registru. Na primjer, ako je periferni uređaj spreman, onda će se određen bit (ili određeni bitovi) u statusnom registru postaviti u 1. Procesor ispitivanjem tog ili tih bitova utvrđuje je li periferni uređaj spreman. Ako periferni uređaj nije spreman za prihvat ili slanje podataka, programski se tok zatvara u "petlju čekalicu" u kojoj se uzastopce ispituje stanje perifernog uređaja (naravno, posredno ispitivanjem bita ili bitova u statusnom registru ulazno-izlaznog upravljača). Tek kada je periferni uređaj spreman, izvodi se instrukcija za ulazno-izlazni prijenos podataka. Slika 13.7 prikazuje shematski tok programa za takvu vrstu prijenosa.
404
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
U/l instrukcija
SI. 13.7 Shematski prikaz programiranog uvjetnog prijenosa
Primjer 13.3. Da bi se djelotvorno, jednostavno i sigurno ostvario programirani uvjetni prijenos, obično se zahtijeva da ulazno-izlazni upravljač (ili u jednostavnijoj izvedbi U/l vrata) ima dva registra. Jedan registar ima funkciju registra podataka, a drugi je statusni registar. Memorijskim preslikavanjem U/l svakom od registara dodijeljena je po jedna adresa iz memorijskog adresnog prostora. Pretpostavimo da izlazni registar ima adresu 8000 (heksadekadno), a statusni registar upravljača (ili U/l vrata) adresu 8002 (heksadekadno). Programski odsječak za uvjetni programirani prijenos bloka podataka za procesor MC 680x0 izgleda ovako:
PORTDATA
EQU $8000
; adresa izlaznog registra podataka
PORTSTAT COUNT PROGRAM MASKA DATA
EQU $8002 EQU 256 EQU $6000 EQU 1 EQU $4000 ORG DATA DS.B 256
; adresa statusnog registra ; (brojilo) veličina bloka koji se prenosi ; početna adresa programa ; vrijednost maske kojom se ispituje status ; početna adresa bloka podataka
ORG PROGRAM MOVE.W #C0UNT,D1
; početak programa ; u registar D1 postavi početnu ; vrijednost brojila ; postavi početnu adresu bloka ; podataka u reg. A1 ; postavi adresu izlaznih vrata u reg. A2 ; postavi adresu statusnog registra u reg. A3
BLOCK
MOVE.L #BLOCK, A1 MOVE.L #PORTDATA, A2 MOVE.L #PORTSTAT, A3
; rezervirano 256 bajtova za BLOCK
S. RIBARIČ - GRAĐA RAČUNALA
PETLJA
MOVE.B ( A l ) + , DO
ČEKAJ
MOVE.B (A3), D2 AND.B #MASKA, D2 BEQ ČEKAJ MOVE.B DO, (A2) SUB #1, Dl BNE PETLJA
405 I
dohvati podatak iz BLOCK i privremeno ga pohrani u DO te povećaj sadržaj registra A1 za jedan dohvati status iz statusnog registra i smjesti ga u reg. D2 utvrdi je li ulazno-izlazni upravljač spreman nije, ostani u petlji čekalici sve dok nije spreman podatak iz reg. DO pošalji na izlazna vrata umanji za 1 stanje brojila granaj na PETLJA sve dok brojilo ne dostigne vrijednost 0, odnosno dok se ne prenese cijeli blok podataka
U programskoj petlji čekalici: ČEKAJ MOVE. B (A3), D2 ; dohvati status iz statusnog registra i smjesti ga u reg. D2 AND.B # MASKA, D2 ; utvrdi da li je ulazno-izlazni upravljač spreman BEQ ČEKAJ ; nije, ostani u petlji čekalici sve dok nije spreman ispituje se najmanje značajni bit statusnog registra ulazno-izlaznog upravljača koji se automatski postavlja u 1 kada je ulazno-izlazni upravljač spreman, i to na sljedeći način: MASKA ima ulogu tzv. maske i ima vrijednost 1, odnosno binarno 00000001. Rezultat logičke I operacije (AND.B) između sadržaja registra D2 (u kojem je upisan trenutni status upravljača, odnosno periferijske jedinice) i maske MASKA bit će 1 onda kada je postavljen najmanje značajni bit statusnog registra ulazno-izlaznog upravljača:
MASKA (D2) AND
0 0 0 0 0 0 0 1 X X X X X X X 1 0 0 0 0 0 0 0 1
rezultat logičke I operacije.
(Opaska: u ovom primjeru pretpostavljamo da će se u statusnom registru ulazno-izlaznog upravljača postaviti najmanje značajni bit (bO) u 1 kada periferni uređaj signalizira da je spreman za prijenos podataka; X označava vrijednost 0 ili 1) Instrukcijom AND.B #MASKA, D2 postavit će se zastavica Z u 1 u statusnom registru procesora ako je rezultat logičke operacije I jednak 0 (što znači da ulazno-izlazni upravljač nije spreman). Instrukcijom BEQ ČEKAJ ispituje se stanje zastavice Z u statusnom registru procesora i ako je ona jednaka 1 (što znači daje rezultat logičke operacije I bio 0), grana se na ČEKAJ - upravljač nije spreman. Kada je rezultat logičke operacije I jednak 1, odnosno zastavica Z poprimi vrijednost 0, izlazi se iz petlje čekalice i šalje se podatak iz bloka u vanjski svijet preko izlaznih vrata.
406
13.
POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
13.3.2. PREKIDNI ULAZNO-IZLAZNI PRIJENOS PODATAKA Programirani bezuvjetni ulazno-izlazni prijenos podataka ima nedostatak što se zahtij« točno poznavanje vremena odziva perifernih uređaja jer se samo na taj način može jamđfil pouzdan prijenosa podataka. U praksi su rijetke situacije u kojima se vrijeme odziva t o a » J poznaje i u kojima se jamči da će ono biti nepromjenjivo. Budući da pri takvom prijenosa] podataka procesor ne ispituje je ii periferni uređaj spreman za prihvat ili slanje podatak*! može se, zbog promjene vremena odziva perifernog uređaja, dogoditi gubitak podataka.) Na primjer, procesor upisuje novi podatak u izlazni registar ulazno-izlaznog upravljača^ da prethodni podatak iz izlaznog registra periferni uređaj nije pročitao. Pouzdanost izmjene podataka između procesora i perifernog uređaja rješava programirani j uvjetni prijenos u kojem procesor prije slanja ili prijema podataka ispituje spremnost peri-' fernog uređaja. No programirani uvjetni ulazno-izlazni prijenos podataka ima nedostatakprocesor u programskoj petlji u kojoj ispituje spremnost perifernog uređaja ostaje sve ddk periferni uređaj ne postane spreman za prijem ili slanje podataka. Ako procesor izmjenjuje podatke sa sporim perifernim uređajem, onda je vrijeme provedeno u programskoj petp čeka lici veliko i predstavlja izgubljeno procesorsko vrijeme. Na primjer, pretpostavimo da se programirani uvjetni prijenos koristi u prijenosu podataka sporom elektromehaničkom pisaču koji ima brzinu tiskanja 40 znakova u sekundi, odnosno za tiskanje jednog znaka; potrebno mu je 0.025 s ili 25000 \is. Pretpostavimo daje vrijeme jednog prolaska kroz programsku petlju čekalicu (koja se sastoji od tri instrukcije) oko 3\xs. To znači da će se petlja čekalica izvesti preko 8330 puta pri slanju svakog znaka pisaču. Ako sada pretpostavimo da se računarski sustav koristi za upravljanje industrijskim procesom koji ima više stotina sen-! zora, mjernih instrumenata i izvršnih naprava, onda bi vremena provedena u petljama čekalicama predstavljala golemu većinu procesorskog vremena. To rasipanje procesorskog vremena ugrožava i osnovnu funkciju računarskog sustava - nadgledanje i upravljanje industrijskim procesom, odnosno izvođenje upravljačkih funkcija u stvarnom vremenu. prekinuti (tekući) program
prekidni program
SI. 13.8 Shematski prikaz prekidnog prijenosa podataka
Djelotvornije iskorištenje procesorskog vremena postiže se prekidnim ulazno-izlaznim prijenosom podataka (engl. interrupt-driven l/O). U tom načinu prijenosa podataka procesor
S. RiBARIĆ - GRAĐA RAČUNALA
407
na zahtjev perifernog uređaja prekida izvođenje tekućeg programa i prelazi na izvođenje prekiđnog programa kojim poslužuje periferni uređaj, odnosno obavlja prijenos podataka (slika 13.8). Vanjski svijet, odnosno periferni uređaj koji je uzročnik ili izvor prekida upućuje procesoru zahtjev za prekid izravno ili obično posredstvom ulazno-izlaznog upravljača. Vrlo često periferni uređaj ili vanjski svijet upućuju zahtjev za prekid ulazno-izlaznom upravljaču posredno pomoću linija za rukovanje (engl. handshaking Une; poglavlje 2.), koje povezuju ulazno-izlazni upravljač i periferni uređaj, odnosno vanjski svijet, tako da se koriste tzv. aktivnim prijelazima signala na tim linijama (u skladu s definiranim protokolom). Slika 13.9 prikazuje organizaciju prekidne strukture. Zahtjev za prekid stiže procesoru jednom ili većim brojem upravljačkih linija koje se nazivaju linije za zahtijevanje prekida (engl. interrupt request) ili samo prekidne linije. Obično je više u lažno-izlaznih upravljača priključeno na jednu prekidnu liniju koja je izvedena kao "ožičano-ILI" (engl. wired-OR) pa istu prekidnu liniju dijeli više ulazno-izlaznih upravljača koji mogu istodobno zahtijevati prekid, odnosno aktivirati prekidnu liniju. Dakle, prekidna linija je aktivna kada je u logičkom stanju "0" i to postaje kada jedan ili više uzročnika prekida postave zahtjev za prekid (IRQ-+ 0) (slika 13.9).
sabirnica podataka
adresna sabirnica
zahtjev za prekid
SI. 13.9 Organizacija prekidne strukture s jednom prekidnom linijom
Vanjski svijet, odnosno periferni uređaji "žive"svojom dinamikom i zato je zahtjev za prekid generiran asinkrono u odnosu na stanje procesora i na tijek izvođenja instrukcija tekućeg programa. To znači da se aktivno stanje na prekidnoj liniji (kojim periferni uređaj zahtijeva posluživanje) može pojaviti u bilo kojem trenutku tijekom izvođenja tekuće instrukcije programa. Postupak prekiđnog prijenosa provodi se obično u sljedećim glavnim koracima: i) periferni uređaj ili ulazno-izlazni upravljač aktivira prekidnu liniju; ii) procesor završava tekuću instrukciju prije nego što će odgovoriti na zahtjev za prekid; iii) procesor neposredno nakon završetka tekuće instrukcije ispituje postoji li zahtjev za prekid i, ako postoji, utvrđuje razinu prekida te provjerava je li prekid maskiran.
408
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
Pod„maskiranim prekidom" podrazumijevaju se okolnosti u kojima zahtjev za pre neće biti prihvaćen; iv) ako procesor prihvaća prekid, on će signalom potvrde prekida obavijestiti ulazno-L zne upravljače, odnosno ulazno-izlazne uređaje o prihvaćanju prekida; v) procesor se mora sada pripremiti za prijenos upravljanja s prekinutog na prekk program, i to tako da prvo pohranjuje informaciju o trenutnom stanju tekućeg (sadi ] prekinutog) programa. Minimalna informacija sastoji se od sadržaja statusnog gistra procesora (engl. status register, condition code register, P5W - processor ste
word) i sadržaja programskog brojila koji sadržava povratnu adresu, odnosno adre instrukcije prekinutog programa koja će se prva izvesti nakon povratka iz prel< Sadržaj statusnog registra i programskog brojila naziva se minimalni kontekst (er minimal context) i obično se pohranjuje na sistemski ili upravljački stog; (Opaska: i procesori, radi bržeg odgovora na zahtjev za prekid, pohranjuju minimalni konte interno u tzv."registre u sjeni") vi) procesor puni programsko brojilo sa sadržajem koji predstavlja adresu prve instr cije prekidnog programa tj. adresu prekidnog programa. Ovisno o arhitekturi pre sora i organizacije operacijskog sustava, može postojati jedan prekidni program; svaku vrstu prekida ili prekidni program za svaki periferni uređaj, odnosno ula2 izlazni upravljač. Ako postoji samo jedan prekidni program, onda procesor utvrditi koji je od uređaja zahtijevao prekid tako da prozove potencijalne uzročni prekida i na temelju njihova stanja utvrdi uzročnika prekida. Ako postoji veći prekidnih programa, onda obično procesor od uzročnika prekida dobiva dodatn«! informaciju na temelju koje utvrđuje tko je prouzrokovao prekid. Ta dodatna infof-j macija, ovisno o organizaciji prekidnog sustava, može biti popratna sa zahtjeve za prekid ili je procesor može dobiti izdavanjem zahtjeva upućenom uzročnitaij prekida; vii) procesor započinje s fazom PRIBAVI i dohvaća instrukciju na koju pokazuje program-j sko brojilo, tj. prvu instrukciju prekidnog programa. Odmah je na početku prekidno§j programa obično potrebno pohraniti dodatnu informaciju o stanju registara proce-j sora, npr. sadržaj radnih registara podataka koji će se tijekom prekidnog programa! koristiti, a sadržavali su podatke potrebne prekinutom programu. Obično se i ti s*-| držaji registara pohranjuju na stog. U prekidnom je programu uključen i programs odsječak U/l prijenosa podataka koji se sastoji od instrukcije U/l, ali i od instrukc kojim ostvaruje protokol izmjene podataka (npr. slanje naredbe ili potvrde uspjes-j nog prijenosa); viii) nakon što je prijenos podataka ostvaren, sadržaji se radnih registara podataka treba-j ju obnoviti tako da se uzimaju sa stoga; ix) procesor izvodi instrukciju za povratak iz prekida kojom obnavlja sadržaje statusno§| registra i programskog brojila, i to tako da sa sistemskog stoga uzima minimalni kon-j tekst i raspoređuje ga u statusni registar i programsko brojilo. Rezultat ovih aktivnosfij je da će se u sljedećoj fazi PRIBAVI dohvatiti instrukcija prekinutog programa, i upravo ona koja slijedi instrukciji koja je bila izvršena neposredno prije prihvaćanji| prekida. Slika 13.10 prikazuje dijagram toka prekidnog U/l prijenosa podataka. Koraci i) - v) pocfr-l žani su sklopovljem, dok su koraci vi) - ix) podržani programski. Prekidni se program j o i | naziva i prekidna rutina ili program za rukovanje prekidom (engl. interrupt handler).
S.RIBARIČ- GRAĐA RAČUNALA
409 I
SI. 13.10 Dijagram toka prekidnog U/l prijenosa podataka
Navedeni su koraci tako općeniti da zahtijevaju dodatna objašnjenja. Tako se, na primjer, u koraku iii) spominje razina prekida i maskiranje prekida. Suvremeni procesori imaju više razina prekida koje su u međusobnom hijerarhijskom odnosu: prekidni program niže razine prioriteta može biti prekinut zahtjevom za prekid više razine prioriteta. Na taj se način omogućuje gniježđenje prekida. No ako se tijekom izvođenja prekidnog programa pojavi novi zahtjev za prekid niže ili iste razine prioriteta kao onaj koji se upravo poslužuje, taj novi zahtjev neće biti prihvaćen. Kažemo da je prekid ili zahtjev za prekid maskiran.
410
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
Primjer 13.4. Procesor MC 68000 ima sedam razina prekida. Razina prekidnog zahtjeva određena je kombinacijom logičkih stanja na trima prekidnim linijama IPLO, IPL1 i IPL2. Kada su sve tri prekidne linije neaktivne, tj. u stanju logičke jedinice, onda nema zahtjeva za prekid. Zahtjev razine 1 (IPLO = 0, IPL1 = 1, IPL2 = 1) najniže je razine prioriteta, a zahtjev razine 7 (IPLO = 0, IPL 1 = 0, IPL2 = 0) naviše je razine prioriteta i predstavlja tzv. nemaskirajući prekid. Pod tim razumijevamo zahtjev za prekid od kojeg se procesor ne može obraniti tako da će on biti uvijek prihvaćen. Razina prekidnog zahtjeva (od 1 do 7) određuje se tako da aktivno stanje na prekidnoj liniji IPLO doprinosi ukupnoj razini prekida težinom 2C, aktivno stanje na prekidnoj liniji IPL1 težinom 21 i konačno, aktivno stanje na IPL2 doprinosi 22. Tako, na primjer, ako je IPL2 = 0 (aktivno stanje), /PL 7=0 (aktivno stanje) i IPLO = 1 (neaktivno stanje), onda je razina zahtjeva za prekid jednaka 1 x 22 + 1 x 21 + 0 x 2° = 6. Razina prekida kojeg će procesor prihvatiti određena je stanjem prekid ni h zastavica 10, 11 i 12 koje se nalaze u statusnom registru procesora. I ovdje zastavica 12 ima težinu 2:, II ima težinu 21 i 10 ima težinu 2°. Stanje tih zastavica određuje također i tekući prioritet prekida. Prekidi su onemogućeni (maskirani) za sve razine prekidnihzahtjeva koje su manje ili jednake tekućem prioritetu koji je kodiran stanjem zastavica 10,11 i 12. Tablica 13.1. prikazuje stanje prekidnih zastavica i razine onemogućenih prekida. Prekidne zastavice Razine onemogućenih prekida 12
11
1 - 6 (001; 010; 011; 100; 101; 110)
1
1
10 f i 1
1 - 6 (001; 010; 011; 100; 101; 110)
1
1
0
1-5 (001; 010; 011; 100; 101)
1
0
1
1-4 (001; 010; 011; 100)
1
0
0
1-3 (001; 010; 011)
0
1
1
1-2 (001; 010)
0
1
0
1 (001)
0
0
1
Sve su razine prekida omogućene
0
0
0
1
Tablica 13,1. Stanje prekidnih zastavica 12, II i 10 i razine onemogućenih prekida (MC 68000)
Slučaj kada je generiran zahtjev najviše razina prekida - prekid razine 7 (kada su prekidne linije ¥[0 = 0, lPU = 0, JPL2 = 0) i kada su prekidne zastavice 10 = 1,11 =1 i 12 = 1 predstavlja iznimku od pravila o uvjetima prihvaćanja prekida: iako je razina prekida jednaka prioritetu prekida kodiranom prekidnim zastavicama, zahtjev za prekid razine 7 bit će prihvaćen. Od zahtjeva razine 7 procesor se ne može zaštititi i on je nemaskirajući prekid. Prekidi razine 1 do 6 su maskirajući prekidi. Procesor ne dopušta gniježđenje prekida iste razine pa se automatski prekidne zastavice 10,11 i 12 u statusnom registru postavljaju u stanje koje odgovara razini prihvaćenog prekida. Na taj se način samo prekid više razine od trenutnog može ugnijezditi u prekid trenutne razine. Slika 13.11 prikazuje scenarij kada zahtjev za prekid razine 2 biva prihvaćen jer je njegova razina veća od razine kodirane zastavicama 10,11 12. Prekidni program 1 se izvodi i tijekom njegova izvođenja pre-
S. RIBARIČ - GRAĐA RAČUNALA
411 I
kidne su zastavice postavljene tako da kodiraju razinu prihvaćenog prekida (10 = 0,11 = 1 i 12 = 0). Novi zahtjev za prekid koji je razine 3 (IPLO = 0, Wu - 0, ¥L2 = 1) bit će prihvaćen te će se u prekidni program 1 ugnijezditi prekidni program 2. Prekidne će se zastavice automatski postaviti u stanje 10 = 1,11 = 1 i 12 = 0 koje odgovara razini prihvaćenog prekida - razini 3. Tijekom izvođenja prekidnog programa 2 dogodio se zahtjev za prekid iste razine (razine 3), međutim, on neće biti prihvaćen. prekinuti program prekidni program 1 prekidni program 2
nije prihvaćen zahtjev za prekid prekid razine 3: fPL0 = 0 IPU = 0 IPL2 - 1 10=1 11 = 0 12 = 0
10 = 0 11 = 1 12 = 0
10=1 11 = 1 12 = 0
SI. 13.11 Primjer gniježđenja prekidnih programa. (Obratite pozornost da treći zahtjev za prekid neće biti prihvaćen jer je zahtjev razine jednake razini kodiranoj prekidnim zastavicama 10,11 i 12.)
Zašto se procesor štiti od prekida maskirajući ga? U mnogim primjenama procesor izvodi pojedine programske odsječke koji su kritični u smislu da se ne smiju ometati prekidom, odnosno biti prekinuti. To je, na primjer, slučaj kada se računalo koristi za upravljanje proizvodnim procesom u kojem se zahtijevaju točni vremenski odzivi - prekid takvog programskog odsječka i izvođenje nekog drugog prekidnog programa narušio bi željene vremenske odnose i čak ugrozio osnovne funkcije procesa. Korak vi) također zahtijeva objašnjenje kako procesor "zna" koji prekidni program mora izvršiti i njime poslužiti periferni uređaj koji je zahtijevao prekid. Dakle, kako procesor određuje uzročnika prekida i time adresu prve instrukcije prekidnog programa? Taj je problem još složeniji jer više potencijalnih uzročnika prekida može istodobno zahtijevati posluživanje. Jednostavnije organizacije prekida zasnivaju se na jednoj prekidnoj liniji (engl. single-line interrupt system) na koju su priključeni svi ulazno-izlazni upravljači - potencijalni uzročnici prekida (slika 13.9). Na kraju tekuće instrukcije procesor ispituje stanje na prekidnoj liniji IRQ (slika 13.9). Ako je IRQ = 0, to znači da je barem jedan od n > 1 potencijalnih uzročnika prekida generirao zahtjev za prekid. Procesor u odgovoru na zahtjev za prekid grana na unaprijed određenu adresu jedinstvenog
prekidnog programa
u kojem prvo proziva poten-
cijalne uzročnike prekida i ispituje je li određeni potencijalni uzročnik zaista i generirao
412
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
zahtjev za prekid. Prozivanje (engl. polling) potencijalnih uzročnika temelji se na jedrrznačno im dodijeljenim adresama (bilo u memorijskom, bilo u izdvojenom U/l adresneprostoru), a ispitivanjem statusnog registra ulazno-izlaznog upravljača utvrđuje seje li zaista određeni upravljač generirao zahtjev za prekid. Ako je ispitani ulazno-izlazni upravljač zaista i uzročnik prekida, tada se u prekidnom programu grana na odgovarajući prograPV ski odsječak ili potprogram za prijenos podataka kojim se poslužuje uzročnik prekida. _ redoslijedu prozivanja potencijalnih uzročnika prekida krije se i prioritet pojedinih ulazncizlaznih upravljača - oni s većim prioritetom bit će prije prozvani i ako su zahtijevali prekri bit će i prije posluženi. Primjer 13.5. Prikažimo jednostavan prekidni sustav procesora koji ima dvije prekidne linije IRQ i NMi Prekidna linija IRQ namijenjena je tzv. sklopovskom prekidu, a prekidna linija NMI nemaskirajućem prekidu. Ove dvije vrste prekida u međusobnom su hijerarhijskom odnosu - u sklopovski se prekid može ugnijezditi nemaskirajući prekid koji je veće razine prioriteta. Pretpostavimo da je veći broj uiazno-izlaznih upravljača - potencijalnih uzročnika prekida priključen na prekidne linije IRQ i NMI Pretpostavimo, također, da postoji samo po jedan prekidni program za sklopovski prekid, odnosno nemaskirajući prekid. Opišimo, ukratko, prvo sklopovski prekid koji je maskirajući. Jedan ili veći broj ulaznoizlazni h upravljača aktiviranjem prekidne linije IRQ (IRQ 0) generira zahtjev za prekid. Neposredno nakon završetka tekuće instrukcije procesor ispituje stanje IRQ linije i ako je ona aktivna (IRQ = 0), procesor provjerava je li prekidna zastavica I u statusnom registru procesora postavljena (1 = 1). Ako je ona postavljena, zahtjev za prekid je maskiran i procesor će ga zanemariti te nastaviti izvođenje tekućeg programa. Ako je prekidna zastavica obrisana (I = 0), zahtjev za prekid bit će prihvaćen i procesor signalom potvrde prekida (INTACK 0) obavještava da je zahtjev za prekid prihvaćen. U tom slučaju procesor obavlja kućanske poslove - pohranjuje (minimalni) kontekst na stog. (Opaska: ako je riječ o procesoru akumulatorsko orijentirane arhitekture, obično se uz minimalni kontekst pohranjuju i registri podataka - akumulatori.) Pored toga, postavlja prekidnu zastavicu I u 1 te se na taj način štiti od gniježđenja daljnjih sklopovskih prekida. U okviru kućanskih poslova procesor mora dohvatiti adresu prve instrukcije prekidnog programa. Ona se nalazi na za to unaprijed određenim memorijskim lokacijama. Te su memorijske lokacije rezervirane za tu namjenu i obično se nalaze ili na početku, ili na kraju adresirljivog memorijskog prostora. Pretpostavimo da su to memorijske lokacije s adresama FFF8 i FFF9 ako je ukupni adresirljivi memorijski prostor od 0000 - FFFF (heksadekadno). Na memorijskoj lokaciji FFF8 pohranjen je značajniji bajt adrese prve instrukcije prekidnog programa, a na FFF9 manje značajan bajt 16-bitne adrese. Dohvaćeni sadržaji tih memorijskih lokacija smještaju se u programsko brojilo i u sljedećoj će se fazi PRIBAVI dohvatiti prva instrukcija prekidnog programa. Budući da je jedan prekidni program namijenjen sklopovskom prekidu, on mora sadržavati programski odsječak kojim proziva potencijalne uzročnike prekida i identificira uzročnika. Važno je naglasiti da kućanski poslovi također troše vrijeme - za pohranu konteksta i dohvat početne adrese prekidnog programa potrebno je za jednostavni 8-bitni procesor od 12 do 14 perioda signala vremenskog vođenja. Tijek događaja za nemaskirajući prekid sličan je onom za sklopovski prekid. U slučaju nemaskirajućeg prekida ne provjerava se stanje prekidne zastavice I u statusnom registru procesora, već se prekid prihvaća, generira se signal potvrde prekida (NMIACK->0) te se
b. n l b A K I L - v j n A t J A K A L U N A L A
kućanskim poslovima pohranjuje kontekst na stog i automatski se postavlja prekidna zastavica I u 1. Na taj se način procesor štiti od prekida vrste IRQ. Nadalje, procesor dohvaća sadržaje memorijskih lokacija čije su adrese FFFC i FFFD na kojima se nalazi adresa prve instrukcije nemaskirajućeg prekidnog programa. Slično kao i kod prekidnog programa za sklopovski prekid, nemaskirajući prekidni program sadržava programski odsječak kojim proziva ulazno-izlazne upravljače priključene na NMI prekidnu liniju. Pretpostavimo da je početna adresa sklopovskog prekidnog programa 400A, a početna adresa nemaskirajućeg prekidnog programa 600C, tada u fazi inicijalizacije računarskog sustava moramo pripremiti sadržaje sljedećih memorijskih lokacija: (FFF8) = 40 i (FFF9) = OA te (FFFC) = 60 i (FFFD) = 0C. Obično su adrese početne adrese prekidnih programa na spomenutim memorijskim lokacijama pohranjene u ispisnim memorijama ROM ili PROM (poglavlje 8.) pa sadržaji ostaju sačuvani i nakon prekida napajanja. Organizacija prekidne strukture može se temeljiti i na većem broju prekidnih linija, i to tako da svaki potencijalni uzročnik prekida ima svoju "privatnu" liniju za zahtijevanje prekida i "privatnu" liniju za potvrdu prekida (slika 13.12). INTACKn-1
SI. 13.12 Prekidni sustav s većim brojem linija za zahtijevanje prekida i potvrde prekida
Prekidne linije mogu, u tom slučaju, imati i različite prioritetne razine, na primjer IRQn-1 ima najveći prioritet, dok IRQ0 ima najmanji prioritet. Ujedno, zahvaljujući privatnim prekidnim linijama procesor izravno zna tko je uzročnik prekida - nije potrebno prozivanje ulazno-izlaznih upravljača. Ova shema, međutim, ima jedan nedostatak - broj priključenih ulazno-izlaznih upravljača ograničen je brojem raspoloživih parova signalnih linija IRQ i INTACK. U praksi je vrlo čest slučaj daje broj ulazno-izlaznih upravljača priključenih na prekidne linije puno veći od broja raspoloživih parova IRQ - INTACK. I u ovoj prekidnoj shemi, kao i u onoj s jednom prekidnom linijom, procesor u okviru kućanskih poslova mora dohvatiti iz memorije početnu adresu prekidnog programa. Posebna prilagodljiva i djelotvorna prekidna shema jest vektorski prekid (engl. vectored interrupt) u kojoj se uzročnik prekida izravno identificira jednoznačnim kodom koji ujedno služi za brzo određivanje početne adrese prekidnog programa. Vrlo se često u literaturi početna adresa prekidnog programa naziva i prekidni vektor (engl. interrupt vector). Svakom od ulazno-izlaznih upravljača, priključenih na prekidnu liniju, jednoznačno je pridružen n-bitni kod koji ima ulogu poput jedinstvenog matičnog broja građana. Pretpostavimo da je to 8-bitni kod, nazovimo ga vektorski broj, tako da njime možemo jednoznačno označiti 28 = 256 ulazno-izlaznih upravljača. Slika 13.13 prikazuje shemu
414
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
vektorskog prekidnog sustava koji je prilagođen organizaciji prekidnog sustava s većkr brojem prekidnih linija i linija potvrde prekida.
SI. 13.13 Vektorski prekidni sustav s većim brojem prekidnih linija i linija potvrde prekida
Svakom od ulazno-izlaznih upravljača, odnosno perifernih uređaja, dodijeljen je jednoznačni vektorski broj koji će ulazno-izlazni upravljač postaviti na sabirnicu podataka nakoe što primi signal potvrde prekida. Procesor će tijekom kućanskih poslova unijeti sa sabirnice podataka vektorski broj i interno ga pohraniti. Nakon što procesor pohrani minimalni kontekst na stog, procesor će interno pohranjeni vektorski broj upotrijebiti za generiranje početne adrese memorijskih lokacija na kojima je pohranjen prekidni vektor tj. adresa pr\€ instrukcije prekidnog programa. Obično je za pohranu prekidnih vektora rezerviran cfic memorijskog prostora s najnižim adresama započevši od adrese 00000000 (heksadekaono) tako da se vrlo jednostavno određuje, ovisno о vektorskom broju, adresa prekidnog vektora. Na primjer, ako je programsko brojilo duljine 4 bajta, onda se adresa memonske lokacije na kojoj se nalazi prekidni vektor dobiva kao 4 x v, gdje je v vektorski broji Podsjetimo se da množenje sa 4 odgovara brzoj operaciji posmaka ulijevo za dva mjesta.
i
Primjer 13.6.
i
Pretpostavimo da je ulazno-izlaznom upravljaču n - 1 (slika 13.13) dodijeljen 8-bitni vektorski broj v = 00001010 (dekadno 10), a da njegov prekidni program započinje na adresi 00B10000. Pretpostavimo daje upravo on generirao zahtjev za prekid (IRQn-1 0) te da je procesor prihvatio taj zahtjev i potvrdio prekid aktiviranjem njegove privat- ; ne signalne linije potvrde prekida (INTACKn-1). Ulazno-izlazni upravljač л - 1 će nakon što primi signal potvrde prekida na sabirnicu podataka postaviti 8-bitni vektorski broj 00001010. Procesor će interno pohraniti taj vektorski broj, pohraniti minimalni kontekst na stog te odrediti adresu memorijske lokacije s koje treba dohvatiti 32-bitni prekidni vektor na sljedeći način: b7
• 8-bitni vektorski broj:
b0
0 0 0 0 1 0 10
;
S. RIBARIČ - GRAĐA RAČUNALA
b
b 9
415 I
o
• vektorski broj posmaknut ulijevo za dva mjesta: 0 0 0 0 1 0 1 0 0 0 • oblikuje se 32-bitna adresa tako da se posmaknutom vektorskom broju na pozicijama b10 - b31 pridruže 0: b
3i
b
m
b
b
9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
01
0
000
Početna adresa memorijskih lokacija gdje se nalazi prekidni vektor je 00000028 (heksadekadno). Ako je adresna zrnatost memorije bajtna, onda će se 32-bitni prekidni vektor nalaziti na memorijskim lokacijama od 00000028 do 0000002B:
(00000028) = 00 (00000029) = BI (0000002A) = 00 (0000002B) = 00. Opišimo sažeto korake tijekom vektorskog prekida koje možemo podijeliti na one koji su sklopovski i one koji su podržani programski. Sklopovski koraci: i) ulazno-izlazni upravljač aktivira prekidnu liniju; ii) procesor nakon završetka tekuće instrukcije, ako prekid nije maskiran, generira signal potvrde prekida; iii) kada ulazno-izlazni upravljač, koji je uzročnik prekida, primi signal potvrde prekida, postavlja svoj vektorski broj na sabirnicu podataka; iv) procesor unosi sa sabirnice podataka vektorski broj i interno ga pohranjuje; v) procesor pohranjuje minimalni kontekst na stog; vi) na temelju vektorskog broja procesor određuje početnu adresu memorijskih lokacija na kojima se nalazi pohranjen prekidni vektor, tj. početna adresa prekidnog programa. Programsko brojilo puni se prekidnim vektorom i ono pokazuje na prvu instrukciju prekidnog programa. Programski koraci: i) prekidnim se programom prvo pohranjuju sadržaji registara koje će prekidni program koristiti. Na taj je način omogućena obnova njihovih sadržaja neposredno prije vraćanja iz prekida; ii) ako je više perifernih uređaja priključeno na jedan ulazno-izlazni upravljač, potrebno je ispitati sadržaje pojedinih statusnih registara koji odgovaraju svakom od uređaja da bi se odredio odgovarajući uslužni (pot)program; iii) obavlja se prijenos podataka; iv) obnavljaju se sadržaji registara koji su bili pohranjeni u koraku i); v) izvodi se instrukcija povratka iz prekida; Već smo spomenuli da u praksi obično broj ulazno-izlaznih upravljača premašuje broj raspoložih parova "privatnih" linija IRQ - INTACK. U tom se slučaju koristi shema ulančavanja, slična onoj za sabirničku arbitražu (poglavlje 12.), u kojoj se ulazno-izlazni upravljači ulančavaju signalnom linijom potvrde prekida INTACK (slika 13.14). U takvoj organizaciji ulazno-izlazni upravljač koji je najbliži procesoru ima najveći prioritet jer prvi prima signal INTACK =0 i ako je zahtijevao prekid ne prosljeđuje ga dalje drugim upravljačima u lancu.
416
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
Ulazno-izlazni upravljač koji je generirao zahtjev za prekid i koji je prvi u lancu primio signal potvrde prekida postavlja svoj vektorski broj na sabirnicu podataka. Ovaj"sklopovskT način prozivanja je brži negoli je to programsko pozivanje ulazno-izlaznih upravljača. No programsko prozivanje omogućuje jednostavniju promjenu prioriteta upravljača - samo promjenom redoslijeda prozivanja u prekidnom programu.
SI. 13.14 Organizacija vektorskog prekidnog sustava s jednom prekidnom linijom i ulančavanjem
Vektorski prekidni sustav može imati organizaciju sličnu onoj sabirničkoj arbitraži (poglavlje 12), stoga se koristi sustav s većim brojem prekidnih linija i linija potvrde prekida s tim da su ulazno-izlazni upravljači ulančani na svakoj od linija potvrde prekida. Slika 13.15 prikazuje takav vektorski prekidni sustav koji ima tri prekidne linije (IRQ0 - IRQ2) koje su organizirane tako da IRQ2 ima najveći prioritet te tri linije potvrde prekida (INTACKO - INTACK2 kojima su ulazno-izlazni upravljači ulančani.
INTACK2
Si. 13.15 Prekidni sustav s tri linije za zahtijevanje prekida i potvrde prekida s ulančavanjem na svakoj od razina
S. RIBARIČ - GRAĐA RAČUNALA
417 I
Primjer 13.7. Pretpostavimo da su u vektorskom prekidnom sustavu prikazanom na slici 13.15 istodobno generirali zahtjev za prekid ulazno-izlazni upravljač 1 koji je priključen na prekidnu liniju IRQO te ulazno-izlazni upravljači /r+/+1 i k+l+2 priključeni na IRQ2. U tom će slučaju upravljač 1 biti onaj koji će primiti signal potvrde prekida INTACK2 i on će postaviti svoj vektorski broj na sabirnicu podataka. Naime, procesor će zanemariti zahtjev za prekid niže razine prioriteta IRQO te aktivirati signal potvrde prekida INTACK2. Ulazno-izlazni upravljač /c+/+1 prvi će primiti taj signal. Budući daje on jedan od uzročnika prekida, signal potvrde prekida neće proslijediti dalje u lancu. Upravljački sklop k+l+1 bit će poslužen u prekidu.
13.4. ANALIZA SLUČAJA-VEKTORSKI PREKID PROCESORA MC 68000 Za računarske sustave na bazi procesora MC 680x0, tvrtka Motorola koristi pojam iznimke (engl. exception) kojim opisuju posebne okolnosti koje mogu nastupiti u računarskom sustavu i koje imaju za posljedicu prekid normalnog izvođenja programa i prijenos upravljanja na poseban program za obradu iznimke. Iznimke se mogu podijeliti na one koje imaju vanjske uzroke i one koje izazvane unutarnjim stanjem procesora. Iznimke izazvane događajima izvan procesora jesu: i) sabirnička pogreška (engl. bus error), ii) reset (ponovno upuštanje u rad), iii) prekid. Iznimke kojima su izvori stanja procesora jesu: i) ilegalne instrukcije - instrukcije koje imaju operacijski kod koji nije definiran za procesor MC 680x0, ii) neugrađene instrukcije - instrukcije kojima operacijski kod započinje 1010 ili 1111, iii) pokušaj izvođenja privilegirane instrukcije u korisničkom načinu rada, iv) praćenje - zastavica T (Trace) postavljena u 1, v) adresna pogreška - pokušaj pristupa riječi na neparnoj adresi, vi) dijeljenje nulom, vii) instrukcije TRAP, TRAPV,CHK. Zajedničko svim vrstama iznimaka je to da se one obrađuju u nadglednom načinu rada procesora. Prekid za procesor MC 680x0 je vanjski generiran zahtjev za obradu iznimke. U Primjeru 13.4. prikazali smo na koji način ulazno-izlazni upravljači, odnosno periferni uređaji generiraju zahtjev za prekid i pod kojim se uvjetima prihvaća prekid. Ako je razina zahtjeva za prekid veća od razine postavljene prekidnim zastavicama 10,11 i 12 u statusnom registru procesora, nakon završetka tekuće instrukcije prekid će biti obrađen u sljedećim koracima: i) sadržaj statusnog registra pohranjuje se interno u procesoru; ii) zastavica S u statusnom registru postavlja se u 1 - procesor prelazi u nadgledninačin rada (procesor obrađuje iznimku u nadglednom načinu rada!);
418
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
iii) zastavica praćenja T u statusnom registru se briše (T —• 0) i onemogućuje se funkapd praćenja, odnosno odlazak u iznimku koja je prilagođena izvođenju programa mi strukciju po instrukciju; iv) prekidne zastavice IO, 11 i 12 poprimaju vrijednost koja odgovara upravo razini pri-j hvaćenog prekida određenoj stanjima prekidnih linija IPLO, IPL1 i IPL2. Na taj se n a a n procesor štiti od gniježđenja prekida niže ili jednake razine onom koji je prihvaćen; v) procesor izvodi sabirnički ciklus potvrde prekida.Tijekom sabirničkog ciklusa potvrde prekida,procesorpostavljanaadresnelinijeA 1 -A 3 razinuprihvaćenogprekida.Adresne linije A4 - A23 poprimaju vrijednost 1. Na taj se način ulazno-izlazni upravljači obavje-i štavaju o tome koja je razina prekida prihvaćena. Procesor postavlja izlazne linije funfcH cijskog koda FCO —• 1, FC1 —• 11FC2 1. Njihovo se stanje može upotrijebiti za sinteza; signala potvrde prekida: FCO A FC1 A FC2, gdje je A , podsjetimo se, logički operator!.; Ulazno-izlazni upravljač, koji je generirao zahtjev za prekid prihvaćene razine i p r i m » signal potvrde prekida, odgovara procesoru tako da smješta 8-bitni vektorski broj (# vektor; slika 13.16) na linije sabirnice podataka DO - D7. Ulazno-izlazni upravljač koji je postavio vektorski broj aktivira signal DTACK kojim obavještava procesor da je vektorski broj postavljen na sabirnicu podataka (u skladu s asinkronim protokolom na sabirnici). Procesor interno pohranjuje pribavljeni vektorski broj; vi) sadržaj programskog brojila PC (4 bajta) smješta se u nadgledni stog, a sadržaj nadgled nog kazalo stoga SSP umanjuje se za četiri; vii) sadržaj interno pohranjenog statusnog registra SR (2 bajta) (korak i)) smješta se • nadgledni stog, pri čemu se sadržaj nadglednog kazala stoga umanjuje za dva (koraci vi) i vii) predstavljaju aktivnosti pohranjivanja minimalnog konteksta); vi i i) na temelju vektorskog broja i tablice vektora iznimaka procesor određuje novi sacfcžaj programskog brojila PC - programsko se brojilo PC puni sa četiri bajta pribavljenih iz odgovarajućih memorijskih lokacija nulte stranice u kojoj je pohranjena tablica vektora iznimaka. Programsko brojilo PC pokazuje na prvu instrukciju pre kid nog programa. Slika 13.16 prikazuje vremenski dijagram stanja na sabirnicama za sabirnički ciklus potvrde prekida (koraci i) - v)), i to do početka pohranjivanja minimalnog konteksta na stog. Korak viii) zahtijeva dodatna objašnjenja. Vektori iznimaka, što znači i prekidni vektoa pohranjeni su u dijelu radne memorije računala koji se naziva tablica vektora iznimaka. Tablica sadržava 256 vektora iznimaka koji su označeni brojevima od 0 do 255 i smještena je u adresnom prostoru od 000000 do 0003FF.To znači da tablica zauzima prva 1024 bajtat odnosno 512 16-bitnih riječi memorije, koji predstavljaju tzv. nultu stranicu memorije. Svi se vektori iznimaka, osim onog koji odgovara vektorskom broju nula 0, nalaze u memorijskom prostoru koji se naziva nadgledna memorija podataka (oznaka ND; tablica 13.2.) i koji je određen stanjem linija funkcijskog koda FCO - FC2: FCO = 1, FC1 = 0 i FC2 = 1. Vektor iznimke koji odgovara vektorskom broju 0 jest onaj namijenjen sklopovskom rešetu (engL hardware reset) tj. sklopovskom upućivanju u rad i on se nalazi u memorijskom prostoru koji se naziva nadgledna programska memorija (oznaka NP; tablica 13.2.) (određena stanjem linija funkcijskog koda FCO = 0, FC1 = 1 i FC2 = 1). Svi se vektori iznimaka, osim onog koji odgovara sklopovskom rešetu, sastoje od dviju riječi, odnosno 4 bajta. Za razliku od ostalih vektora iznimaka, vektor 0 ima, osim nove - početne vrijednosti programskog brojila (PC), dvije dodatne riječi koje određuju početnu vrijednost nadglednog kazala stoga (SSP) (tablica 13.2).
S. RIBARIČ - GRAĐA RAČUNALA
završetak tekuće
sabirnički ciklus
419 I
pohranjivanje reg.
SI. 13.16 Vremenski dijagram stanja na sabirnicama tijekom sabirničkog ciklusa potvrde prekida (koraci i) - v)).
Slika 13.17 prikazuje format vektora iznimke, odnosno prekidnog vektora. Riječ 0 (duljine dva bajta) koja je smještena tako da su dva najmanje značajna bita njezine adrese A0 = 0 i A ^ 0 predstavlja 16 značajnijih bitova adrese programa za obradu iznimke, odnosno prekidnog programa. Riječ 1 (smještena tako da je A0 = 0 i A1 = 1) predstavlja 16 manje značajnih bitova adrese.
420
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
Vektorski broj
Adresa vektora iznimke (heksadekadno)
Vrsta memorijskog prostora
Namjena / iznimka
0
000
NP
RESET: početna vrijednost SSP
-
004
NP
RESET: početna vrijednost PC
2
008
ND
greška na sabirnici (Bus Error)
3
OOC
ND
adresna greška (Address Error)
4
010
ND
ilegalna instrukcija
5
014
ND
dijeljenje s nulom
6
018
ND
instrukcija CHK
7
01C
ND
instrukcija TRAPV
8
020
ND
povreda privilegiranosti
9
024
ND
praćenje (Trače)
10
028
ND
neugrađena instrukcija 1010 (Line A Emulator)
11
02C
ND
neugrađena instrukcija 1111 (Line F Emulator)
12-14
korisničkim vanjskim sklopovima nije dopuštena uporaba vektorskog broja 12-23
15
03C
16-23
04C
-
ND
ned odijeljen i prostor - rezervirano
neinicijalizirani prekidni vektor nedodijeljeni prostor - rezervirano
05 F 24
060
ND
izjalovljeni prekid
25
064
ND
prekidni autovektor -razinal
26
068
ND
prekidni autovektor - razina 2
27
06C
ND
prekidni autovektor - razina 3
28
070
ND
prekidni autovektor - razina 4
29
074
ND
prekidni autovektor - razina 5
30
078
ND
prekidni autovektor - razina 6
31
07C
ND
prekidni autovektor - razina 7
32-47
080
ND
instrukcija TRAP n
48-63
64-255
0BF
-
OCO
-
0FF
-
100 3FF
NP - nadgledna programska memorija ND - nadgledna memorija podataka Tablica 13.2. Tablica vektora iznimaka
ND
-
nedodijeljeni prostor - rezervirano
korisnički prekidni vektori
^
S. RIBARIČ - GRAĐA RAČUNALA
421 I
bO
b!5
riječ 0
značajnijih 16 bitova vektora iznimke
A0=0 A1 =0
riječ 1
manje značajnih 16 bitova vektora iznimke
A0=0 A1=1
SI. 13.17 Format vektora iznimke
Vektor iznimke za reset, kao što smo već spomenuli sastoji se od početne vrijednosti nadglednog kazala stoga SP i početne vrijednosti programskog brojila PC, nalazi se pohranjen u tablici iznimaka od adrese 000000 do 000007. Tijekom kućanskih poslova vezanih za iznimku reset prvo se puni 32-bitno nadgledno kazalo stoga SSP s vektorom iz memorijskih lokacija s adresa 000000, 000001, 000002 i 000003, a zatim programsko brojilo PC s memorijskih lokacija 000004,000005,000006 i 000007 (sve heksadekadno). Ovim potonjim određena je adresa prve instrukcije programa kojim se poslužuje iznimka reset (programska rutina reset).
(periferni (periferni uređaj 0) uređaj 1) vektorski broj 64 vektorski broj 65
(periferni uređaj 191) vektorski broj 255
Si. 13.18 Prekidno sklopovsko sučelje
Prekidni su vektori pohranjeni u tablici iznimaka od adrese 000100 do 0003FF (heksadekadno). Njima odgovaraju vektorski brojevi od 64 do 255 (dekadno).To znači da procesor MC 68000 dopušta (255 - 64 + 1) = 192 vektorska broja koje mogu generirati ulazno-izlazni upravljači, odnosno periferni uređaji. Slika 13.18 prikazuje prekidno sklopovsko sučelje
422
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
koje podržava 192 sklopovska prekida. Kako procesor oblikuje 24-bitnu adresu na temeft« koje dohvaća iz tablice vektora iznimaka prekidni vektor, odnosno adresu prve instrukeje prekidnog programa? Pretpostavimo daje ulazno-izlazni upravljač ili periferni ureda • zahtijevao prekid (INTO 0) i da je upravo njemu potvrđen zahtjev za prekid. To znači cka će tijekom sabirničkog ciklusa potvrde prekida on postaviti svoj vektorski broj, tj. 64 (aekadno) na manje značajne linije DO - D7 16-bitne sabirnice podataka DO - Dl 5. Procesor će pomoću tog vektorskog broja oblikovati 24-bitnu adresu koja ga upućuje u tablicu iznimaka iz koje će dohvatiti prekidni vektor - adresu prve instrukcije prekidnog programa za ulazno-izlazni upravljač, odnosno periferni uređaj 0, i to na sljedeći način (slika 13.19 i) vektorski se broj množi sa četiri što znači da se posmiče za dva mjesta ulijevo; ii) svi značajniji bitovi adrese (od A10 do A23) poprimaju vrijednost 0. vektorski broj 64 posmaknut ulijevo za 2 mjesta
0
0
0
0
0
0
0
0
A23
0
0
0
0
0
0
0
1
1r
T
0
0
f 1r 0
...
0
0
0
0
0
0
0
0
0
0
A2
A1
1 0
SI. 13.19 Oblikovanje adrese prekidnog vektora za vektorski broj 64 (dekadno)
24-bitna adresa prekidnog vektora je 000100 (heksadekadno) (slika 13.19). Pretpostavimo da se prekidni program koji poslužuje periferni uređaj 0 nalazi na adresi 004600 (heksadekadno), tada su sadržaji memorijskih lokacija s adresama 000100,000101,000102 i 000103 u tablici vektora iznimaka sljedeći: (000100) = 00 (000101) = 00 (000102) = 46 (000103) = 00. Primjer 13.8. Pretpostavimo da periferni uređaj 0 (slika 13.18) generiranjem zahtjeva za prekid INTO 0. koji je razine 1 tako da su IPL0 = 0, IPL1 = 1, IPL2 = 1, zahtijeva prijenos 8-bitnih podataka iz memorijskog prostora koji se sastoji od 512 bajtova, i to tako da svaki put kada je uređaj spreman za prihvat jednog 8-bitnog podatka generira zahtjev za prekid. Blok podataka, koji ima ime BUFFER i iz kojeg se prenose 8-bitni podaci nalazi se na početnoj adresi 3000 (heksadekadno). Prekidnim programom procesor šalje 8-bitni podatak u registar podataka ulazno-izlaznog upravljača. Adresa izlaznog registra podataka je 8000 (heksadekadno). Prikažimo kako izgleda glavni (prekinuti) program i prekidni program. Glavni program neka ima početnu adresu 4000 (heksadekadno), a prekidni program neka započinje na adresi 4600 (heksadekadno). Glavni program izgleda ovako: GL_PROG
EQU $4000
; početna adresa glavnog programa
INT_PROG
EQU $4 600
; početna adresa prekidnog programa
INT_MASK
EQU $2000
; nadgledni način/prekidi razine 1 ;-omogućeni
:
S. RIBARIČ - GRAĐA RAČUNALA
OUTREG DATA BUFFER
EQU $8000 EQU $3000 ORG DATA DS.B 512
PONTER
DS.L 1
423 I
; adresa izlaznog registra podataka
; blok podataka veličine 512 bajtova ; nalazi se na adresi 3000 ; kazaljka na blok podataka BUFFER
; početak glavnog programa ORG GL_PROG MOVE.L #BUFFER, POINTER ; inicijalizirana vrijednost kazaljke MOVE #INT MASK, SR ; S = 1, omogući prekid razine 1 - 6
; instrukcije glavnog programa
RTS Prekidni program:
ORG INT_PROG . MOVE.L AO, -(SP) MOVE.L POINTER, A0 MOVE.B (AO)+, OUTREG MOVE, MOVE, RTE
AO, POINTER (SP)+, A0
; ; ; ;
početak prekidnog programa pohrani sadržaj registra A0 na stog u registar A0 smjesti kazaljku na blok podataka
; 8-bitni podatak iz bloka pošalji u ; izlazni registar ; pohrani tekuću vrijednost kazaljke ; obnovi sadržaj registra A0 ; vrati se iz iznimke (prekida)
Ako periferni uređaj 0 ima vektorski broj 64 (dekadno), tada je u nultoj stranici memorije na memorijskim lokacijama 000100,000101,000102 i 000103 potrebno prethodno upisati adresu prekidnog programa: (000100) = 00, (000101) = 00, (000102) = 46 i (000103) = 00.
Opišimo prethodna dva programa. Prve dvije EQU pseudo naredbe u zbirnom jeziku definiraju početne adrese glavnog programa (4000) i prekidnog programa (4600). Treća EQU pseudo naredba određuje vrijednost 16-bitne prekidne maske (2000) koja će se upisati u statusni registar procesora SR. Četvrtom EQU pseudo naredbom definirana je adresa izlaznog registra OUTREG. Petom EQU pseudo naredbom odredili smo početnu adresu bloka podataka BUFFER, a DS.B 512 (Define Store) pseudo naredbom namijenili smo 512 bajtova memorije bloku BUFFER. Naredbom DS. L 1 rezervirali smo jednu 32-bitnu riječ za pohranu kazaljke POINTER koja pokazuje na tekući bajt bloka podataka BUFFER. Instrukcijom MOVE. L #BUFFER, POINTER, u glavnom smo programu, definirali početnu vrijednost kazaljke POINTER (ona se nalazi pohranjena na adresi 3200 (heksadekadno)) koja pokazuje na prvi bajt u bloku podataka BUFFER. Instrukcijom MOVE #INT_MASK, SR u statusnom registru SR obrisali smo prekidne zastavice 10,11 i 12 te time omogućili prekid razine 1, ali je i dalje procesor ostao u nadglednom načinu rada (zastavica S =1). Slika 13.20 prikazuje sadržaj 16-bitnog statusnog registra SR nakon upisa 2000 (heksadekadno).
424
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
Nakon instrukcije MOVE #INT_MASK, SR slijede instrukcije glavnog programa.Tijekc njihova se izvođenja može dogoditi prekid. Glavi program može završiti instrukcijom RT51 (vrati se pod okrilje operacijskog sustava iz potprograma) ili instrukcijom STOP # koja 16-bitni podatak pohranjuje u statusni registar SR i zaustavlja s izvođenje»] instrukcija (procesor ostaje u tom stanju dok se ne dogodi prekid određene razine ili reseOJ nadgledni bajt statusnog registra
bi 5
korisnički bajt statusnog registra
b8 b7
bO
0 0 1 0 0 0 0 olo 0 0 0 0 0 0 0
zastavice:
J
«2 'i
'o
X N
Z
V C
SI. 13.20 Sadržaj SR registra: zastavica S =1, prekidne zastavice IO, 11 i 12 su 0 (procesor je u nadglednom načinu rada, omogućen je prekid razine 1)
Prekidni program započinje instrukcijom MOVE . L A O , - (S P) kojom se 32-bitni sadržaj adresnog registra AO pohranjuje na stog. Na taj se način čuva sadržaj registra AO koji je bio tijekom izvođenja tekućeg (prekinutog) programa kako bi se neposredno prije povratka iz prekida ponovo obnovio. To je potrebno jer će prekidni program koristiti registar AO i naravno, "porušiti" njegov "stari" sadržaj. Instrukcijom MOVE. L POINTER, AO trenutna se vrijednost 32-bitne kazaljke (POINTER) smješta u adresni registar AO. Instrukcijo« MOVE. B (AO) +, OUTREG podatak (bajt) na koji pokazuje trenutna vrijednost kazaljkr šalje se u izlazni registar OUTREG. Osim toga, budući da instrukcija koristi indirektni posti nkrementni način adresiranja, sadržaj se adresnog registra AO automatski povećava za jedan. Ova instrukcija ima funkciju izlazne (output) instrukcije. Instrukcijom MOVE. L AC, POINTER priprema se obnovljena vrijednost kazaljke za sljedeći prijenos podatka. Sadržaj registra AO obnavlja se instrukcijom MOVE.L (SP) + , AO na vrijednosti koje je imao u prekinutom programu neposredno prije prekida. Instrukcija RTE (Return from Exception) vraća upravljanje na prekinuti program tako da se uzima minimalni kontekst (16-bitni sadržaj registra SR, 32- bitni sadržaj registra PC) s vrha sistemskog (nadglednogj stoga i smješta u SR, odnosno PC. (Opaska: u ovom jednostavnom primjeru pretpostav® smo da periferni uređaj 0 ima programirljivo sklopovsko brojilo koje "broji" generirane zahtjeve za prekid tako da se ne prekorači broj od 512 prenesenih podataka.) Spomenuli smo daje prekid samo jedna od brojnih iznimaka koje se mogu dogoditi u računarskom sustavu utemeljenom na procesoru MC 680x0. Svi programi za obradu iznimke imaju općenito sljedeći oblik:
IZNIMKA
MOVEM.L
Dp - Dq / Ar-As, - (SP)
instrukcije za obradu iznimke
MOVEM.L RTE
(SP)+, Dp - Dq / Ar-As
S.RIBARIČ- GRAĐA RAČUNALA
425 I
Instrukcijom MOVEM (Move Multiple) premještaju se sadržaji izabranih registara podataka i adresnih registara na sistemski (nadgledni) stog. Na primjer, ako se u prekidnom programu ili nekoj drugoj obradi iznimke koriste registri podataka DO, D3 te adresni registri AO, A1 i A3,onda se instrukcijom MOVEM. L D0/D3/A0-A3, - (SP) //stari"sadržaji pohranjuju na nadgledni stog. Naravno, instrukcijom MOVEM. L D0-D7/A0-A6, -(SP) možemosve "korisničke" registre programskog modela procesora pohraniti na nadgledni stog. Na kraju programa, neposredno prije instrukcije RTE, instrukcijom MOVEM.L (SP)+, Dp - Dq / Ar - As obnavljaju se sadržaji navedenih registara.
13.5. IZRAVNI PRISTUP MEMORIJI DMA - DIRECT MEMORY ACCESS Programirani U/l prijenos i prekidni ulazno-izlazni prijenos podataka imaju jednu zajedničku značajku - izmjena podataka s vanjskim svijetom obavlja se programom koji izvršava procesor. Procesor izravno sudjeluje u U/l prijenosu podataka između vanjskog svijeta i memorije, štoviše put podataka prolazi kroz procesor. Pritom je brzina U/l prijenosa ograničena brzinom kojom procesor obavlja "kućanske poslove" i ispituje stanje i poslužuje periferne uređaje izvođenjem instrukcija pri svakom prijenosu podataka, lako prekidni prijenos podataka oslobađa procesor od čekanja da ulazno-izlazni upravljač, odnosno periferni uređaj postane spreman za prijem ili slanje podataka, analize pokazuju da se za prijenos podataka od ili prema jedinici diska troši oko 25% ukupnog procesorskog vremena. Riječ je o prijenosima blokova podataka veličine od nekoliko stotina bajtova pa sve do nekoliko tisuća bajtova. Ulazno-izlazni prijenos podataka izravnim pristupom memoriji DMA (Direct Memory
Access)
ostvaruje se između ulazno-izlaznog upravljača, odnosno perifernog uređaja i memorije bez izravnog sudjelovanja procesora. DMA omogućuje najbrži prijenos podataka između vanjskog svijeta i memorije računarskog sustava, i to tako da ne zahtijeva izravno sudjelovanje procesora. Budući da se DMA ostvaruje sklopovski bez programskog upravljanja, granice brzine prijenosa podataka postavljene su sklopovskim značajkama sastavnicama U/l puta podataka - brzina perifernog uređaja, odnosno ulazno-izlaznog upravljača, propusnost sabirnice i brzina memorije (vrijeme pristupa). DMA zahtijeva relativno veliku složenost sklopovlja koje je objedinjeno u DMA upravljaču (engl. DMA controller) koji se vrlo često zbog svoje složenosti naziva i DMA procesor (ili DMA kanal). Slika 13.21 prikazuje sklopovsku konfiguraciju kojom se ostvaruje DMA prijenos. DMA upravljač (slika 13.21) ima nekoliko registara: • registar DC koji ima funkciju brojila podataka - u njemu je inicijalno upisan broj podataka/riječi (veličina bloka podataka) koje se trebaju prenijeti; • registar IOA sadržava adresu područja u memoriji koje će se koristiti tijekom DMA prijenosa; • registar IOD je ulazno-izlazni registar podataka, često umjesto jednog takvog registra DMA upravljač može imati spremnik koji se sastoji od većeg broja registara; • statusno-upravljački registar SC koji se koristi za izmjenu upravljačkih informacija i informacija o stanju DMA prijenosa. U registru SC pohranjuje se upravljačka riječ koja određuje smjer toka podataka tijekom DMA prijenosa te način DMA prijenosa.
426
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
TransferAck
SI. 13.21 Sklopovska konfiguracija za DMA prijenos podataka
DMA i) ii) iii)
prijenos obavlja se na temelju sljedeća tri glavna koraka: inicijalizacije DMA upravljača, DMA prijenosa podataka, završetka DMA prijenosa.
i) Tijekom inicijalizacije DMA upravljača procesor izvršava U/l instrukcije kojima definira sadržaje registara SC, DC i IOA. U statusno-upravljačkom registru SC upisuje upravljačku riječ kojom određuje smjer podataka (operaciju čitanja ili pisanja) te način DMA prijenosa (prijenos krađom ciklusa ili prijenos u snopu različitih veličina (engl. one continous burst severalshorter bursts). U registru DC upisuje broj riječi koji će se DMA prijenosom prenijeti, a u registar IOA upisuje početnu memorijsku adresu područja koje će biti izvor ili ponor podataka. Kada DMA upravljač podržava veći broj periferijskih uređaja, procesor treba u postupku inicijalizacije definirati DMA upravljaču i adresu perifernog uređaja koji će sudjelovati u DMA prijenosu. Faza inicijalizacije provodi se programiranim U/l prijenosom pri čemu se registri DMA upravljača SC, DC i IOA promatraju kao dio memorijskog ili izdvojenog U/l adresnog prostora. Nakon inicijalizacije DMA upravljača, procesor nastavlja s izvođenjem tekućeg programa budući da je zadatak U/l prijenosa delegirao DMA upravljaču.
S. RIBARIČ - GRAĐA RAČUNALA
427 I
ii) Kada je DMA upravljač spreman za prijem ili slanje podataka, odnosno kada periferni uređaj priključen na DMA upravljač aktivira signalnu liniju TransferReq (slika 13.21), DMA upravljač aktivira signalnu liniju DMAReq i upućuje zahtjev procesoru. (Opaska: u računarskim sustavima s više (potencijalno) vodećih modula zahtjev za sabirnicom upućuje se sabirničkom arbitru.) Tim zahtjevom DMA upravljač traži upravljanje sabirnicom, odnosno pokazuje želju da postane vodeći modul i preuzme vlasništvo nad sabirnicom sustava. Procesor čeka sljedeću ispitnu točku u kojoj može prepustiti sabirnicu DMA upravljaču. Za razliku od prekida gdje postoji samo jedna ispitna točka u kojoj je procesor provjeravao postoji li zahtjev za prekid (točka nakon završetka tekuće instrukcije), u slučaju DMA postoji više ispitnih točaka tijekom tekuće instrukcije u kojima procesor može osloboditi sabirnicu sustava. To su točke tijekom instrukcijskog ciklusa neposredno prije nego procesor treba ponovo sabirnicu (slika 13.22). U svakoj od tih točaka može se prekinuti (ili suspendirati) izvođenje tekuće instrukcije i dodijeliti sabirnica DMA upravljaču. Obratite pozornost da to nije prekid - procesor ne pohranjuje (minimalni) kontekst na stog niti grana na obradu prekida ili iznimke. Procesor u ispitnoj točki oslobađa sabirnicu i aktiviranjem signala DMAAck obavještava o tome DMA upravljač. - perioda procesorskog signala vremenskog vođenja 4 4
-f <-
• •
pribavljanje instrukcije
9 '
dekodiranje instrukcije
f '
dohvat operanda
izvršavanje instrukcija
pohrana rezultata
f » f '
ispitne točke
0
L-
ispitna točka za prekid-
SI. 13.22 Ispitne točke za DMA tijekom instrukcijskog ciklusa
DMA upravljač, preuzevši upravljanje sabirnicom, prenosi podatke izravno memoriji ili od memorije. Nakon svakog prijenosa riječi obnavljaju se sadržaji registra I OA i DC tako da se sadržaj registra IOA povećava za jedan i sadržava adresu sljedeće memorijske lokacije na koju (ili iz koje) će se sljedeći podatak prenijeti, a sadržaj registra DC umanjuje se za jedan. Ako nisu prenesene sve riječi, tj. ako sadržaj registra DC nije jednak 0, ali periferni uređaj nije spreman za slanje ili prijam podataka, DMA upravljač oslobađa sabirnicu i vraća je procesoru deaktiviranjem signala DMAReq. Procesor odgovara deaktiviranjem signala DMAAck.
iii) Jednom kada je DMA prijenos obavljen u potpunosti (sadržaj registra DC je jednak 0), DMA upravljač oslobađa sabirnicu deaktiviranjem signala DMAReq. DMA upravljač može, također, prekidom obavijestiti procesor o tome, tako da procesor može ispitivanjem sadržaja statusnog registra DMA upravljača ili memorije utvrditi je li cijela operacija izravnog prijenosa podataka uspješno završena. Nakon toga, procesor može odgovoriti zaustavljanjem rada perifernog uređaja ili inicijalizacijom novog DMA prijenosa. Prema načinu DMA prijenosa podataka razlikujemo prijenos podataka krađom ciklusa (engl. cycle stealing mode), prijenos podataka
u snopu (engl. burst mode) i
kombinacijom
428
13. POGLAVLJE: ULAZNO-IZLAZNI SUSTAV
krađe ciklusa i prijenosa podataka u snopu. U načinu prijenosa krađom ciklusa međusobno se isprepliću operacije DMA prijenosa s normalnim sabirničkim ciklusom u kojem procesor pristupa memoriji. Budući da procesor, tijekom izvođenja instrukcija, ne treba cijelo vrijeme sabirnicu (vidi poglavlja 2. i 3.), DMA prijenos može se obaviti kada je sabirnica slobodna - to se događa kada je procesor zauzet internom operacijom npr. izvođenjem neke aritmetičke ili logičke operacije na već dohvaćenim operandima ili generiranja adrese za sljedeći sabirnički ciklus. U tim kratkim vremenskim intervalima DMA upravljač preuzima upravljanje sabirnicom i obavlja prijenos podatka. Ovaj je način prijenosa transparentan zato što je "nevidljiv" procesoru i ne narušava njegovu performansu. Nakon što je uzastopnim krađama ciklusa prenesen predefiniran blok podataka, DMA upravljač prekidom o tome obavještava procesor, tako da procesor može započeti novi prijenos ili pak koristiti rezultate upravo obavljenog DMA prijenosa. U načinu DMA prijenos podataka u snopa DMA upravljač prisvaja sabirnicu za vrijeme prijenosa cijelog bloka podataka. Brzina DMA prijenosa tada je iznimno velika i odgovara brzini koju omogućuje najslabija karika, odnosno najsporija sastavnica u "lancu" memorija - sabirnica - periferni uređaj. Vrlo se često možebitna sporost perifernog uređaja kompenzira tako da DMA upravljač ima spremnik većeg kapaciteta (umjesto jednog ulazno-izlaznog registra podataka IOD) pa već spremni podaci čekaju na DMA prijenos. Na žalost, tijekom DMA prijenosa u snopu procesor je zaustavljen i ne napreduje s izvođenjem instrukcija. Vrijeme u kojem je procesor zaustavljen ovisi o veličini bloka podataka koji se prenosi u snopu. Da bi se izbjeglo dugo vrijeme zaustavljanja procesora, što bi moglo prouzrokovati i osjetnu degradaciju performanse računarskog sustava, DMA upravljač može biti organiziran tako da razdijeli relativno veliki blok podataka na manje dijelove i onda ih prenosi u slijedu DMA prijenosa koji kraće traju koristeći i periode vremenskog vođenja kada procesor ne treba sabirnicu. Takav način prijenosa zapravo predstavlja kombinaciju krađe ciklusa i prijenosa u snopu. lako je očito da DMA prijenos povećava performansu U/l podsustava, ova metoda ima i svoje nedostatke. Kad je DMA uključen u U/l podsustav računarskog sustava, mijenjaju se odnosi između procesora i memorijskog sustava. Bez DMA, svi su pristupi memorijskom sustavu ostvareni procesorom izravno ili adresnom translacijom u slučaju virtualne i priručne memorije. No DMA ostvaruje drugi put prema memorijskom sustavu, i to onaj koji ne prolazi kroz mehanizam adresne translacije ili kroz hijerarhijsku organizaciju priručne memorije. Ako DMA koristi fizičko adresiranje, a računarski sustav ima virtualni memorijski sustav, mogu nastupiti problemi jer virtualne stranice nisu nužno slijedne u glavnoj memoriji tako da prijenos bloka podataka koji višestruko premašuje veličinu stranice ne može biti određen samo početnom adresom bloka i njegovom veličinom. Ako se DMA temelji na virtualnim adresama, onda DMA treba imati ugrađen mehanizam adresne translacije. DMA u memorijskom sustavu s priručnom memorijom također uzrokuje dodatne probleme jer postoje dvije kopije podataka - jedna u priručnoj memoriji, a jedna u glavnoj. Obje kopije moraju biti identične, međutim, DMA upravljač obično komunicira izravno s glavnom memorijom tako da se mogu razlikovati sadržaji istih memorijskih lokacija koje "vide" DMA upravljač i procesor (problem koherencije podataka, poglavlje 10.). Na primjer, ako se čitaju podaci s diska i tehnikom DMA smještaju izravno u glavnu memoriju pri čemu su neke lokacije, odnosno stranice u koje DMA upravljač upisuje podatke, ujedno i u priručnoj memoriji, procesor će čitanjem tih lokacija iz priručne memorije dobiti stare vrijednosti. Jedno rješenje koje se nudi jest ono da se sav DMA prijenos ostvaruje između DMA upravljača i priručne memorije. No to je složenije i skuplje rješenje, a uz sve to može negativno utjecati na performansu procesora jer se DMA pristupom priručnoj memoriji odlaže pristup procesora toj memoriji.
S. RIBARIČ - GRAĐA RAČUNALA
429 I
14. POGLAVLJE
PROTOČNOST 14.1. UVOD Vrlo općenito protočnost (engl. pipelining) možemo definirati kao poseban oblik paralelizma ili istodobnog izvođenja više operacija koji se dobiva rastavljanjem nekog složenijeg zadatka na manje zadatke (podzadatke) koji jedan drugoga slijede određenim redom i koji se izvršavaju u dodijeljenim samostalnim jedinicama. Samostalne jedinice, koje se nazivaju protočni segmenti, istodobno su aktivne tako da se izvršavanje podzadataka prekriva u vremenu. Niz međusobno povezanih protočnih segmenata, pri čemu je izlaz prethodnog ulaz u sljedeći protočni segment, oblikuje protočnu strukturu. Slika 14.1 prikazuje protočnu strukturu sastavljenu od M protočnih segmenata.
SI. 14.1 Protočna struktura sastavljena od M protočnih segmenata
Analogiju s protočnosti i protočnom strukturom možemo naći u organizaciji suvremene industrijske proizvodnje na tekućoj vrpci: proizvodi putuju na tekućoj vrpci, a autonomni specijalizirani robotski obrađivači obavljaju nad njima određene operacije. Istodobno se veći broj proizvoda nalazi na tekućoj vrpci i svi su robotski obrađivači istodobno aktivni. Jedan od osnivača moderne proizvodnje utemeljene na zamislima protočnosti jest H. Ford koji je u razdoblju od 1908. do 1915. u svojim tvornicama automobila uveo montažne proizvodne vrpce i na taj način uveo masovnu proizvodnju u automobilskoj industriji. Primjer 14.1. Zamisao protočnosti možemo zorno ilustrirati na zadatku dobivanja tople vode: potrebno je dobiti mehanički čistu i omekšanu (s niskom razinom kamenca) toplu vodu. Taj zadatak možemo obaviti tako da ga rastavimo na tri podzadatka: omekšavanje vode, filtriranje vode i grijanje vode. Svakom od podzadataka dodijeljen je po jedan protočni segment (slika 14.2). Neprerađena "sirova" hladna voda protjecanjem kroz tri protočna segmenta pretvara se u omekšanu toplu vodu. Jasno je da su sva tri protočna segmenta istodobno aktivna, ali na različitim volumnim dijelovima vode koja protječe kroz cjevovod. Možemo primijetiti daje opisano rješenje primijenjeno u protočnim bojlerima.
430
14. POGLAVLJE: PROTOČNOST
filtar
protočni segment 1
"— protočni segment 2
SI. 14.2 Dobivanje tople vode uporabom protočnosti
Primjer 14.2. Osnovnu zamisao protočnosti možemo objasniti na primjeru koji je bliži području kojim se bavimo u ovoj knjizi. Pretpostavimo da se treba u aritmetičko-logičkoj jedinici zbrojiti dva vektora a i b, dimenzija n, pri čemu su njihove komponente a. \bjl\ = 1,2,... n predstavljene brojevima s pomičnim zarezom. Da bi se dobio rezultat c, potrebno je obaviti n zbrajanja a.+ bjt i = 1,2,..., n. Postupak zbrajanje brojeva s pomičnim zarezom možemo rastaviti na četiri glavna koraka (podzadatka; poglavlje 8.): oduzimanje eksponenata, poravnavanje mantise, zbrajanje i normalizacija rezultata. Pretpostavimo da je jedinica za zbrajanje brojeva s pomičnim zarezom izvedena kao protočna s M = 4 protočna segmenta. Svaki od njih dodijeljen je jednom od podzadataka. Pretpostavimo, također, da su dimenzije vektora n » M. Pretpostavimo još i to da se svaki od podzadataka izvodi u jednakom vremenu - vrijeme obrade u svakom protočnom segmentu neka je ts = ts1 = ts2 = ts3 = t^. Komponente vektora a i b neka ulaze u protočnu strukturu brzinom koja odgovara brzini rada svakog od protočnih segmenata - dakle, svakih t$ vremenskih jedinica novi par a. i b. ulazi u protočnu strukturu. Postupak računanja zbroja vektora u protočnoj strukturi možemo prikazati na sljedeći način:
Vrijeme
Protočni segment 1 (oduzimanje eksponenata) a
Protočni segment 2 (poravnanje)
i.bi
-
Protočni segment 3 (zbrajanje)
Protočni segment 4 (normalizacija)
-
-
-
-
-
2t S
a2,b2
a
3ts
a3, b3
a2,b2
ai , b i
a
a3,b3
a2, b2
c
a
4'b4
a3, b3
c2 = a2 + b2
H < b i-i
a.t-2v b.1-2^
4t s = M ts 5ts
4'
b
4
a5,b5
a.b
a
i<
b
i
C
,
= a
,
+ b
, 3 = a i-3 +
,
b
,-3
S. RIBARIČ - GRAĐA RAČUNALA
nt s
a ,b n'
3 n - ,V / b n-1,
n
a ,b
(n + 1)ts
n'
n
(n + 2)ts
431 I
3
n-2<
b
n-2
cn - 3 = a n -33 + b n -.3
3
n-1<
b
n-1
cn - 2 = an - .2 + b n-2,
a , b
cn - 1 = an - 1, + b n - ,1
(n + 3)ts = (M + n -1)ts
cn = a n + b n
Prvi rezultat c^ dobivamo iz protočne strukture nakon Mts vremenskih jedinica (4ts). Nakon toga, svakih t vremenskih jedinica dobivamo novi rezultat, odnosno novu komponentu vektora c. Za zbrajanje dvaju vektora u protočnoj strukturi potrebno je Mts + (n - 1)ts vremenskih jedinica. Za zbrajanje dvaju vektora u neprotočnoj izvedbi aritmetičke jedinice potrebno je ni vremenskih jedinica, gdje je T vrijeme potrebno za zbrajanje dviju komponenti vektora, pri čemu jeT > ts. Vrijedi da je Mts + (n - 1 )t < ni. Pokažimo to na primjeru aritmetičke jedinice za operacije brojevima s pomičnim zarezom za koju su vremena trajanja operacija u protočnim segmentima sljedeća: Operacija
Vrijeme trajanja
1. Oduzimanje eksponenata
t sl = 40 ns
2. Poravnavanje
ts2 = 70ns
3. Zbrajanje
ts3-50ns
4. Normalizacija
t s 4 = 80 ns
Ukupno vrijeme obrade T
240 ns
(Opaska: vremena trajanja operacija u protočnim segmentima približno odgovaraju stvarnim vrijednostima.) Pretpostavimo da su vektori dimenzija n = 1000. Za neprotočnu izvedbu vrijeme potrebno za dobivanje rezultata je n T, odnosno 1000 x 240 ns = 240 ^s. Iz podataka o vremenima obrade u pojedinim protočnim segmentima uočavamo da su ona različita i zato se između protočnih segmenata postavljaju zaporni sklopovi (engl. latch) koji imaju ulogu protočnog registra te sprečavaju da podatak koji je obrađen u jednom protočnom segmentu ometa rad sljedećeg segmenta prije nego što on završi obradu (slika 14.3). Na taj se način ostvaruje sinkrona protočna struktura u kojoj je protok podataka "gladak" a za vrijeme obrade u svakom protočnom segmentu uzima se ono koje odgovara najsporijem segmentu (u našem slučaju ts = 80 ns). Vrijeme potrebno za računanje zbroja dvaju vektora u protočnoj izvedbi aritmetičke jedinice je: Mts + (n - 1 )ts = 4 x 80 ns + (1000 -1) x 80 ns = 320 ns + 79920 ns. Ukupno vrijeme obrade u protočnoj strukturi iznosi 80240 ns, odnosno 80.240 juis. Ako usporedimo vremena obrade za neprotočnu i protočnu strukturu, vidimo daje faktor ubrzanja obrade: (vrijeme obrade za neprotočnu izvedbu) / (vrijeme obrade za protočnu izvedbu) = 240/80.24.
432
14. POGLAVLJE: PROTOČNOST
Faktor ubrzanja je 2.99, odnosno protočna izvedba približno je triput brža od neprotočne izvedbe. protočni registar 1 (zaporni sklopovi)
protočni registar 2 {zaporni sklopovi)
protočni registar M-1 (zaporni sklopovi)
signal vremenskog vođenja
SI. 14.3 Protočna struktura s međuspremnicima
Što se dobiva uporabom protočnosti i kako se ona odražava na brzinu obrade, odnosno na performansu ili propusnost sustava? Odgovor na to pitanje dobit ćemo analizom jednostavnog modela protočne strukture (slika 14.1). Neka se protočna struktura sastoji od M > 1 protočnih segmenata i neka je vrijeme obrade u svim protočnim segmentima jednako: t si = t s2 = t s3 =... = t sM = ts Pretpostavimo daje broj identičnih operacija koje treba protočna struktura izvesti n » M. Ocijenimo vrijeme koje je potrebno za obavljanje tih n operacija. Kao što smo vidjeli u Primjeru 14.2., prvi se rezultat pojavljuje iz protočne strukture nakon M x ts vremenskih jedinica, a nakon toga slijedi rezultat svakih ts vremenskih jedinica. Ukupno vrijeme obrade je: T k = Mts + (n-1)t 5 T k = (M + n - 1 ) t s Vrijeme obrade, odnosno vrijeme potrebno za izvođenje jedne od n identičnih operacija je: Te = Tuk/ n = (M + /1 - 1 )ts / r? Pretpostavili smo da je n » 1, međutim, ako n teži prema vrlo velikim vrijednostima, npr. prema beskonačnosti n-*™, onda vrijeme obradeTe teži vremenu obrade u jednom protočnom segmentu ts. Dobili smo vrlo zanimljiv rezultat: efektivno vrijeme izvođenja jedne od n identičnih operacija u protočnoj izvedbi jednako je vremenu obrade u jednom protočnom segmentu ts, dok je u neprotočnoj izvedbi vrijeme potrebno za izvođenje iste operacije Mts. Faktor ubrzanja jednak je M, tj. odgovara broju protočnih segmenata. Pri priređivanju složenog zadatka za protočnu obradu, odnosno pri rastavljanju zadatka na podzadatke moraju se poštovati pravila koja određuju temeljne značajke protočne strukture: i) Konačan rezultat izvođenja slijeda podzadataka u protočnoj strukturi mora biti jednak rezultatu izvođenja cjelovitog zadatka, tj. onog koji bi se izveo u neprotočnoj strukturi. ii) Ulazi u protočni segment /su izlazi iz prethodnog protočnog segmenta / - 1 . iii) Osim izmjene ulaznih i izlaznih podataka ne zahtijeva se drugi način međudjelovanja protočnih segmenata. iv) Vrijeme potrebno pojedinim protočnim segmentima za izvođenje podzadatka treba biti za sve protočne segmente približno jednako.
S. RIBARIČ - GRAĐA RAČUNALA
433 I
14.2. PROTOČNE STRUKTURE U RAČUNARSKOM SUSTAVU Kao što se protočnost može primijeniti u različitim proizvodnim procesima ili svakodnevnoj organizaciji poslova, tako se postupak rastavljanja zadataka može provesti na različitim razinama organizacije računarskog sustava. Na primjer, na razini aritmetičko-logičke jedinice (Primjer 14.2.), memorijske jedinice (poglavlje 9.), memorijske sabirnice, priručne memorije iii na razini upravljačke jedinice procesora. Primjer 14.3. Procesor Pentium II koristi protočnu izvedbu memorijske sabirnice koja dopušta do osam istodobnih sabirničkih prijenosa, odnosno sabirničkih transakcija. Zadatak sabirničke transakcije ostvaruje se sa šest protočnih segmenata ili faza: i) faza sabirničke arbitraže (engl. bus arbitration) u kojoj se određuje koji od će od potencijalno vodećih modula dobiti memo rij sku sabirnicu na upravljanje; ii) faza zahtjeva (engl. request phase) u kojoj vodeći modul postavlja adresu na sabirnicu; iii) faza izvještavanja o pogrešci (engl. error reporting phase) dopušta pratećem modulu izvještavanje da je došlo do pogreške, npr. greška pariteta u adresi; iv) faza "njuškanja" (engl. snoop phase) koja dopušta procesoru da detektira neki drugi procesor - ova se faza rabi samo u multiprocesorskim sustavima; v) faza odgovora (engl. response phase) u kojoj vodeći modul dobiva informaciju napreduje li transakcija dobro i hoće li dobiti podatke koje je zatražio; vi) faza podataka (engl. data phase) u kojoj se prenose podaci. Sabirnički ciklus
AAAAAAAAAAAAA T,
T2
©
v ^ v \JlATA
©
Req V
T4
Snoop
Resp.
T5
Y
A
v ^ v
Reg V
Error V
/V
rz\r~\{ Req
T6
T7
is
T9
T„
Tlt
T12
Data
Error Y Snoop
{
@
T3
Snoop ^
Error
Req
Data
Resp.
Data
^
r
Snoop^/^Resp.
Error ^ ^ S n o o p ^ ^
Resp.
Data
V
Data
J\ZU Req
Error
V A
Snoop
nz\/ Resp. \ _ A
Data >~
sabirničke transakcije
SI. 14.4 Vremenski dijagram stanja na protočnoj memorijskoj sabirnici sa 6 istodobnih sabirničkih transakcija
434
14. POGLAVLJE: PROTOČNOST
Ovisno o konfiguraciji računarskog sustava i vrsti sabirničke transakcije neke od faza mogu biti ispuštene (npr. ako je samo jedan vodeći modul u sustavu, faza sabirničke arbitraže nije potrebna; ako sustav nije organiziran kao multiprocesorski, faza njuškanja može se izostaviti). Pentium II procesor podržava protočnu izvedbu memorijske sabirnice izravno tako da za svaku od faza ima potpuno nezavisne upravljačke signale. Slika 14.4 prikazuje vremenski dijagram stanja na protočnoj memorijskoj sabirnici sa 6 istodobnih sabirničkih transakcija. Primjer 14.4. Slika 14.5 prikazuje protočnu izvedbu priručne memorije (poglavlje 10.) koja se sastoji od četiri protočna segmenta: adresna translacija, dekodiranje retka i čitanje, dekodiranje stupca i izbor te usporedba značke i utvrđivanje valjanosti. Zahvaljujući takvoj izvedbi istodobno se obavljaju četiri prijenosa podataka.
SI. 14.5 Shematski prikaz protočne izvedbe priručne memorije
Protočnost je naročito važna u izvedbi upravljačke jedinice kojoj je osnovna funkcija izvođenje instrukcija. Naime, u procjeni ubrzanja rada rezultat koji smo dobili (faktor ubrzanja u odnosu na neprotočnu izvedbu jednak je broju protočnih segmenata M!) temelji na pretpostavci da je broj identičnih zadataka n koji se izvode vrlo, vrlo velik, odnosno da n teži prema beskonačno. Zadatak izvođenja instrukcija, odnosno izvršavanja programa je upravo takav. Na primjer, ako procesor ima performansu od 500 MlPS-a, odnosno izvodi 500 milijuna instrukcija u sekundi, tada procesor izvede 5 x 108 x 3600 = 1.8 x 1012 instrukcija u jednom satu. Uz to, zadatak izvođenja instrukcije može se rastaviti na veći broj podzadataka koji slijede u nizu i koji su pogodni za izvođenje u sklopovsko ostvarenim protočnim segmentima.
14.3. INSTRUKCIJSKA PROTOČNA STRUKTURA Rastavljanjem osnovne funkcije upravljačke jedinice - izvođenje instrukcija - dobivamo instrukcijsku protočnu strukturu. Ona je određena na temelju analize tijeka izvođenja instrukcija, odnosno dijagrama stanja instrukcijskog ciklusa. U 2. poglavlju vidjeli smo da se dijagram stanja instrukcijskog ciklusa sastoji od dviju faza (ili stanja): faze PRIBAVI i faze IZVRŠI (slika 14.6). Izvođenje svake instrukcije započinje aktivnostima koje su određene za fazu PRIBAVI (pribavljanje instrukcije, inkrementiranje programskog brojila, dekodiranje operacijskog koda instrukcije), a nakon toga se nastavlja s aktivnostima u fazi IZVRŠI (dohvat operanada, izvođenje aritmetičke ili logičke operacije, pohrana rezultata). To znači da se zadatak izvođenja instrukcije može rastaviti na dva slijedna podzadatka: PRIBAVI i IZVRŠI.
SI. 14.6 Dijagram stanja instrukcijskog ciklusa
Ako se svakom od podzadataka dodijeli samostalni sklop - protočni segment, dobiva se instrukcijska protočna struktura s M = 2 protočna segmenta čije ćemo aktivnosti u vremenu za jednu instrukciju simbolički prikazati kao na slici 14.7.
w
w
pribavi
w
izvrši
1 a)
i
• vrijeme b)
SI. 14.7 (a) Instrukcijska protočna struktura s M = 2 protočna segmenta; (b) Simbolički prikaz aktivnosti u vremenu (za jednu instrukciju) dvaju protočnih segmenata PRIBAVI i IZVRŠI
Protočni segmenti potpuno su samostalni što znači da mogu istodobno biti aktivni, i to tako da se njihove aktivnosti tijekom izvođenja slijeda instrukcija:..., instrukcija / - 1, instrukcija /, instrukcija i + 1,... preklapaju - protočni segment PRIBAVI pribavlja instrukciju /, a protočni segment IZVRŠI aktivan je na prethodnoj instrukciji u slijedu, tj. instrukciji / -1. Instrukcije ..., instrukcija i - 1 , instrukcija /, instrukcija / + 1,... oblikuju slijedni instrukcijski tok (program). Slika 14.8 prikazuje izvođenje slijeda instrukcija, tj. programa u instrukcijskoj protočnoj strukturi s M = 2 protočna segmenta. Na slici vidimo da se aktivnosti dvaju protočnih segmenata preklapaju pa se u skladu s analizom jednostavnog modela protočnosti može očekivati, pod idealnim uvjetima -"glatkog" protjecanja instrukcija kroz protočnu strukturu, faktor ubrzanja izvođenja programa u odnosu na neprotočnu izvedbu jednak broju protočnih segmenata, tj. 2.
436
14. POGLAVLJE: PROTOČNOST
pribavi/
instrukcija i-1
)
izvrši pribavi
instrukcija i
vrijeme
|
J izvrši
/
instrukcija i+1
pribavi
izvrši pribavi
instrukcija i+2
izvrši pribavi
instrukcija i+3
! i
izvrši
SI. 14.8 Izvođenje slijeda instrukcija u instrukcijskoj protočnoj strukturi s M = 2 protočna segmenta
Primjer 14.5. D. A. Patterson i D. R. Ditzel su 1980. u okviru dvaju istraživačkih projekata dizajnirali jedan od prvih procesora RISC arhitekture koji su nazvali RISC I. Procesor RISC I imao je instrukcijsku protočnu strukturu sa samo dva protočna segmenta: segment za pribavljanje instrukcije IF (Instruction Fetch) i segment za izvršavanje instrukcije EX (Execution). Vrijeme obrade u protočnom segmentu bilo je ts = 500 ns. Vrijeme obrade od 500 ns u svakom od protočnih segmenata nije bilo uvjetovano brzinom sklopova u protočnim segmentima, već vremenom pristupa memoriji. Protočnost, u kontekstu izvođenja instrukcija, možemo sad vrlo precizno definirati kao tehniku koja iskorištava paralelizam između instrukcija u slijednom instrukcijskom toku. Aktivnosti u protočnoj strukturi možemo prikazati Ganttovim dijagramom u kojem se na osi x nanose diskretni vremenski trenuci koji odgovaraju vremenu aktivnosti u protočnim segmentima ts, a na osi y oznake aktivnih protočnih segmenata. Slika 14.9 prikazuje Ganttov dijagram za instrukcijsku protočnu strukturu s M = 2 protočna segmenta (PRIBAVI i IZVRŠI). Ganttov dijagram zorno nam predočava istodobno izvođenje instrukcija u protočnoj strukturi: od vremenskog trenutka 2ts na dalje, aktivna su oba protočna segmenta na dvjema instrukcijama. Na primjer, u trenutku 4ts, protočni segment PRIBAVI aktivan je na instrukciji / + 2, a istodobno protočni segment IZVRŠI obrađuje instrukciju / + 1.
-
instrukcija i-1
instrukcija i-1 instrukcija i
instrukcija i instrukcija i+1
Its
2t s
3t,
izvrši pribavi
instrukcija i+1 instrukcija i+2 4
ts
instrukcija i+2 instrukcija i+3
instrukcija i+3 instrukcija
5t s
6t s
i+4
SI. 14.9 Ganttov dijagram izvođenja slijednog instrukcijskog toka u instrukcijskoj protočnoj strukturi s M = 2 protočna segmenta
t
S. RIBARIČ - GRAĐA RAČUNALA
14.3.1.
437 I
PODROBNIJI DIJAGRAM STANJA INSTRUKCIJSKOG CIKLUSA Da bi se postigao faktor ubrzanja obrade veći od 2, potrebno je povećati broj protočnih segmenata u instrukcijskoj protočnoj strukturi. Broj protočnih segmenata i njihove funkcije dobit ćemo na temelju podrobnijeg dijagrama stanja instrukcijskog ciklusa (naziva se još i interpretacijski dijagram). Dijagram stanja instrukcijskog ciklusa, koji se sastoji od dva stanja PRIBAVI i IZVRŠI (poglavlje 2.), možemo rastaviti na veći broj stanja koja odgovaraju slijedu aktivnosti tijekom instrukcijskog ciklusa.
SI. 14.10 Podrobniji dijagram stanja instrukcijskog ciklusa
Slika 14.10 prikazuje podrobniji dijagram stanja instrukcijskog ciklusa koji će nam poslužiti za određivanje broja i funkcija protočnih segmenata. Opišimo aktivnosti u pojedinim stanjima: i) računanje adrese instrukcije (iac - instruction address caicuiation) - u ovom se stanju određuje adresa instrukcije koja će se sljedeća izvesti. Adrese sljedeće instrukcije tijekom faze PRIBAVI dobiva se povećanjem sadržaja programskog brojila PC za iznos koji odgovara broju riječi prethodno pribavljene instrukcije (poglavlje 2.). U slučaju procesora CISC arhitekture taj je iznos promjenjiv i ovisi o vrsti instrukcije (duljina instrukcija CISC procesora nije fiksna). Ako je riječ o procesoru RISC arhitekture, onda se adresa sljedeće instrukcije dobiva povećanjem sadržaja za stalan iznos (duljina instrukcije RISC procesora je čvrsta). Na primjer, ako RISC procesor ima 32-bitne instrukcije i ako je memorija bajtne zrnatosti, sadržaj programskog brojila PC povećava se za 4. Stanje računanje adrese instrukcije može biti aktivno i tijekom faze IZVRŠI ako se upravo izvršava instrukcija grananja. U tom se slučaju u stanju računanje adrese instrukcije određuje adresa ciljne instrukcije; ii) pribavljanje instrukcije (if - instruction fetch) - čita se, odnosno pribavlja instrukcija iz memorije. Ovisno o organizaciji memorijskog sustava, instrukcija se pribavlja ili iz instrukcijske priručne memorije, priručne memorije (l&D cache; poglavlje 10.) ili iz glavne memorije; i i i) dekodiranje operacijskog koda instrukcije (iod - instruction operation decoding) - analizira se i dekodira operacijski kod instrukcije da bi se odredila vrsta operacije i tip operanada na kojima se treba izvesti operacija;
438
14. POGLAVLJE: PROTOČNOST
iv) računanje adrese operanda (oac - operand address calculation) - računa ili se određuje adresa operanda. Ako se referencira operand koji se već nalazi u jednom od registara u skupu registara, onda je adresa određena adresnim poljem u instrukciji, npr. 5-bitno adresno polje ra u instrukciji RISC procesora koji ima 32 registra u skupu registara (poglavlje 3.). No ako se referencira operand u memoriji ili u U/l podsustavu, računanje adrese operanda može biti relativno složeno, posebno za CISC procesore koji imaju veliki broj različitih i složenih načina adresiranja; v) dohvat operanda (of - operand fetch) - operand se čita, odnosno dohvaća iz memorije ili U/l podsustava. Ovisno o organizaciji memorijskog sustava, operand se može pribaviti iz priručne memorije podataka, priručne memorije (l&D cache) ili glavne (radne) memorije. Operand se može dohvatiti i iz registra u skupu registara. Stanja računanje adrese operanda i dohvat operanda mogu se izmjenjivati više puta ako je riječ o operaciji koja zahtijeva višestruke operande; vi) izvođenje operacije na operandima (do - data operation) izvodi se operacija koja je specificirana operacijskim kodom instrukcije; vii) računanje adrese rezultata (rac - result address calculation) - određuje se odredišna adresa rezultata operacije. Odredište rezultata može biti memorija, odnosno priručna memorija, priručna memorija podataka, glavna memorija ili U/l podsustav. Naravno, odredište rezultata može biti i registar u skupu registara - u tom je slučaju adresa odredišta određena adresnim poljem koje se nalazi u instrukciji; viii) pohranjivanje rezultata (rs - result store) - upis rezultata u memorijski sustav ili u registar u skupu registara ili u U/l podsustav. Stanja računanje adrese rezultata i pohranjivanje rezultata mogu se, također, izmjenjivati više puta u slučaju instrukcija koje se koriste višestrukim rezultatima. Dijagram stanja instrukcijskog ciklusa vrijedi i za instrukcije koje se odnose na operacije s vektorima i nizovima znakova (engl. string of characters). U tom se slučaju za jedan slijed stanja računanje adrese instrukcije - pribavljanje instrukcije - dekodiranje operacijskog koda instrukcije višestruko ponavljaju stanja računanje adrese operanda - dohvat operanda - izvođenje operacije na operandima - računanje adrese rezultata - pohranjivanje rezultata. Cijeli se postupak izvođenja instrukcije može smislenim grupiranjem stanja u dijagramu stanja instrukcijskog ciklusa prikazati kao logički slijed podzadataka. Na primjer, slijed sastavljen od podzadataka: pribavljanje instrukcije, dekodiranje instrukcije, izvršavanje instrukcije, tj. izvođenje operacije na operandima te upis rezultata oblikovao bi instrukcijsku protočnu strukturu sastavljenu od četiri protočna segmenta. Dakako, moguća su i drugačija grupiranja stanja, primjerice pribavljanje instrukcije, dekodiranje instrukcije, računanje (efektivne) adrese operanada, izvršavanje instrukcije, upis rezultata. Instrukcijske protočne strukture mogu imati sedam ili više protočnih segmenata. Na primjer, instrukcijska protočna struktura sastoji se od deset protočnih segmenata: (pret)pribavljanje instrukcije u instrukcijski međuspremnik (engl. instruction buffer), pribavljanje instrukcije u instrukcijski registar, dekodiranje instrukcije, računanje adrese prvog operanda, računanje adrese drugog operanda, dohvat prvog operanda, dohvat drugog operanda, izvršavanje instrukcije, računanje adrese rezultata i, konačno, pohranjivanje, odnosno upis rezultata. Funkcije koje odgovaraju pojedinim stanjima (podzadacima) u dijagramu stanja instrukcijskog ciklusa, koje će se dodijeliti pojedinim protočnim segmentima te broj protočnih segmenata u instrukcijskoj protočnoj strukturi vrlo su važne arhitektonske značajke procesora koje imaju veliki utjecaj na performansu procesora, a time i na performansu raču-
S. RIBARIČ - GRAĐA RAČUNALA
439 I
narskog sustava. Na način grupiranja stanja u dijagramu stanja instrukcijskog ciklusa i na broj protočnih segmenata utječe i to temelji li se procesor na RISC ili CISC konceptima (poglavlje 3.).
14.4. INSTRUKCIJSKA PROTOČNA STRUKTURA ZA RISC PROCESORE U poglavlju 3. Pojednostavnjeni modeli CISC i RISC procesora upoznali smo se s osnovnim značajkama procesora RISC arhitekture. Podsjetimo se, ukratko, tih značajki: i) reduciran skup instrukcija sastavljen od relativno jednostavnih instrukcija, ii) instrukcijski skup čine tri osnovne vrste instrukcija: aritmetičko-logičke instrukcije, load-store instrukcije i instrukcije uvjetnog i bezuvjetnog grananja, iii) samo nekoliko formata instrukcija i sve su instrukcije čvrste i jednake duljine (npr., 32-bita ili 64-bita), iv) pristup memoriji ostvaruje se samo instrukcijama vrste load i store kojima se premještaju podaci između registra u skupu registara i memorije (load-store arhitektura), v) registarsko orijentirani procesor. Operandi za aritmetičke i logičke operacije moraju se nalaziti u skupu registara. Aritmetičko-logičke operacije na podacima pohranjenim u registrima podataka mijenjaju obično cijele sadržaje registra (ne djeluju selektivno na bajt ili 16-bitnu riječ u 32- ili 64-bitnom registru podataka), vi) većina instrukcija je tipa registar-registar. Potonje značajke pojednostavnjuju izvedbu instrukcijske protočne strukture i izravno djeluju na povećanje performanse procesora. Opisat ćemo "klasičnu" instrukcijsku RISC protočnu strukturu koja se sastoji od pet protočnih segmenata. Opravdanje za izbor pet segmentne protočne strukture naći ćemo vrlo brzo kada budemo govorili o načinu ostvarivanja jednog od osnovnih ciljeva RISC arhitektu re - izvođenje instrukcije u jednoj periodi signala vremenskog vođenja. Protočna struktura sastoji se od sljedećih protočnih segmenata (slika 14.11): pribavljanje instrukcije (IF), dekodiranje instrukcije i dohvat operanada (ID-OF), izvršavanje instrukcije (EX), pristup memoriji (ME) i upis rezultata ili podatka dohvaćenog iz memorije (WB). IF
ID-OF
EX
ME
WB
Legenda: IF - pribavljanje instrukcije ID-OF - dekodiranje instrukcije i dohvat operanada EX - izvršavanje instrukcije ME - pristup memoriji WB - upis rezultata ili podataka SI. 14.11 Simbolički prikaz instrukcijske protočne strukture RISC procesora
440
14. POGLAVLJE: PROTOČNOST
14.4.1. POTREBNE SKLOPOVSKE PREINAKE U PROTOČNOM RISC PROCESORU Da bi se djelotvorno iskoristila protočna izvedba, potrebne su određene preinake u arhitekturi RISC procesora: i) ako se želi postići izvođenje instrukcije u jednoj periodi signala vremenskog vođenja, onda to znači da instrukcije moraju pristizati u protočnu strukturu u svakoj periodi signala vremenskog vođenja. Štoviše, brzina pristizanja instrukcija treba odgovarati vremenu obrade u protočnom segmentu. Ovdje se pojavljuju dva problema: • vrijeme pristupa radnoj memoriji tA (poglavlje 9.) dulje je od vremena obrade u jednom protočnom segmentu ts: tA > ts i; • ako se instrukcije i podaci dohvaćaju iz iste memorijske jedinice, onda se zbog istodobnog izvođenja većeg broja instrukcija (koje se nalaze u različitim fazama izvođenja) pojavljuje konflikt - protočni segment IF u svakoj periodi signala vremenskog vođenja pristupa memorijskoj jedinici, a pristup memorijskoj jedinici zahtijeva i protočni segment ME tijekom izvođenja load ili store instrukcije. Rješenje obaju problema jest u uporabi priručne memorije i zamisli na kojima počiva harvardska arhitektura (poglavlje 2.) - izdvojenih priručnih memorija - instrukcijske priručne memorije i priručne memorije podataka (poglavlje 10.). i i) Skup registara podataka treba biti izveden kao jednou lažna i dvoizlazna memorija (engl. one write port & two read ports; 3-port register file) tako da se omogući istodobni dohvat (čitanje) dva operanda, ali i upis rezultata u istoj periodi signala vremenskog vođenja (poglavlje 7.). iii) Umjesto internih sabirnica (jedne ili više njih) protočna izvedba RISC procesora vrlo često koristi načine povezivanja točka-točka i na taj se način omogućuje istodobni prijenos između registara i drugih komponenti procesora u svakom od protočnih segmenata. To ima za posljedicu i uvođenje protočnih registara između protočnih segmenata koji su potrebni za prosljeđivanje informacija (podataka) između protočnih segmenata. iv) Sklop za posmak u aritmetičko-logičkoj jedinici (ALU) mora biti tako izveden da se posmakza proizvoljni broj mjesta izvodi u jednoj periodi signala vremenskog vođenja (uporaba bačvastog posmačnog sklopa; poglavlje 8.). v) Protočna izvedba zahtijeva dodatne sklopove kao što je zbrajalo ili poseban sklop za inkrementiranje/dekrementiranje sadržaja programskog brojila PC u protočnom segmentu IF, protočni registri između protočnih segmenata i multipleksori za (pre) usmjeravanje podataka na putu podataka kroz protočne segmente. Slika 14.12 prikazuje preinačenu protočnu strukturu RISC procesora s pet protočnih segmenata.
S.RIBARIČ- GRAĐA RAČUNALA
SI. 14.12 Podrobniji prikaz protočne struktura RISC procesora s pet protočnih segmenata i potrebnim preinakama
441 I
442
14. POGLAVLJE: PROTOČNOST
Opišimo aktivnosti u pojedinim protočnim segmentima (slika 14.12). U protočnom segmentu IF pribavlja se instrukcija iz instrukcijske priručne memorije, i to ona na koju pokazuje programsko brojilo PC. Sadržaj se programskog brojila povećava za 4 (ako je riječ o 32-bitnom RISC procesoru i bajtnoj adresnoj zrnatosti memorije). Ta se operacija (PC + 4) izvodi pomoću zbrajala u protočnom segmentu IF. Pribavljena instrukcija i obnovljena vrijednost PC-a prosljeđuju se protočnom segmentu ID-OF preko protočnog registra IF/IDOF (slika 14.12). Pribavljena instrukcija, koja je bila privremeno pohranjena u protočnom registru IF/ID-OF, smješta se u instrukcijski registar u protočnom segmentu ID-OF i dekodira se. Istodobno s dekodiranjem operacijskog koda instrukcije dohvaćaju se operandi iz skupa registara i privremeno se pohranjuju u protočnom registru ID-OF/EX. U protočnom segmentu ID-OF nalazi se i sklop za širenje bita predznaka koji služe za pretvorbu podatka (konstante) sadržanog u samoj instrukciji u 32-bitni operand ili adresu (vidi 3. poglavlje) Kako je moguće istodobno dohvaćati operande i dekodirati operacijski kod instrukcije? Ako je dekodiranjem operacijskog koda utvrđeno da je riječ o instrukciji tipa registar-registar, onda dohvaćeni podaci iz skupa registara zaista predstavljaju operande. (Podsjetimo se još jednog dobrog svojstva RISC procesora, operandi za sve aritmetičke i logičke operacije moraju se prethodno nalaziti u registrima u skupu registara.) No što ako dekodirana instrukcija nije instrukcija tipa registar-registar, već je riječ o tipu instrukcije load/store ili instrukciji grananja? I u tom se slučaju nije ništa pogriješilo - dohvaćeni se podaci upotrebljavaju u protočnom segmentu EX za oblikovanje efektivne adrese memorijske lokacije kojoj će se pristupiti tijekom aktivnosti u protočnom segmentu ME ili za oblikovanje ciljne adrese grananja. Ako se dekodiranjem operacijskog koda instrukcije utvrdi daje riječ o instrukciji grananja, onda se oblikovana ciljna adresa u protočnom segmentu EX, koja je privremeno pohranjena u protočnom registru EX/ME, povratnom vezom upućuje u protočni segment IF gdje se preko multipleksora MUX upisuje u programsko brojilo PC. Ciljna adresa dobiva se na temelju dohvaćenog sadržaja iz jednog od registara iz skupa registara tijekom aktivnosti u protočnom segmentu IF-OD. Ciljna adresa može se dobiti (ovisi o načinu adresiranja) u protočnom segmentu EX i zbrajanjem sadržaja programskog brojila PC, koje je bilo privremeno pohranjeno u protočnom registru ID-OF/EX, i dohvaćene adrese ili pomaknuća (adresna komponenta) iz jednog od registara iz skupa registara. Adresa, odnosno adresna komponenta je, također, bila pohranjena u protočnom registru ID-OF/EX. U protočnom segmentu EX izvršava se aritmetička ili logička operacija na dohvaćenim podacima. No ako je riječ o instrukciji tipa load/store ili o instrukciji grananja, onda se aritmetičko-logička jedinica (ALU) u protočnom segmentu EX koristi za računanje efektivne adrese koja je potrebna protočnom segmentu ME ili ciljne adrese potrebne protočnom segmentu IF. Aktivnosti u protočnom segmentu ME mogu se opisati na sljedeći način: ako je riječ o instrukciji tipa load, koristi se efektivna adresa iz EX za pristup podatku u priručnoj memoriji podataka. Dohvaćen (pročitan) podatak privremeno se pohranjuje u protočni registar ME/ WB. Ako je riječ o instrukciji tipa store, onda se podatak koji je privremeno pohranjen u protočnom registru EX/ME upisuje u priručnu memoriju podataka. U slučaju da je riječ o aritmetičko-logičkoj instrukciji, nema aktivnosti u protočnom segmentu ME jer takve su instrukcije sve vrste registar-registar i ne rabe pristup memoriji. Rezultat aritmetičke ili logičke operacije izravno se prosljeđuje protočnom registru ME/WB.
S. RIBARIČ - GRAĐA RAČUNALA
443 I
Tijekom aktivnosti u protočnom segmentu WB upisuje se podatak natrag u skup registra. Ako je riječ o instrukciji tipa load, podatak koji je bio privremeno pohranjen u protočnom registru ME/WB upisuje se u jedan od registara u skupu registara. U slučaju da je riječ o aritmetičkoj ili logičkoj instrukciji, onda se rezultat koji je bio privremeno smješten u protočnom registru ME/WB upisuje natrag ujedan od registara u skupu registara. U slučaju instrukcije tipa store nema aktivnosti u protočnom segmentu WB. Zanimljivo je izvođenje instrukcija uvjetnog i bezuvjetnog grananja u protočnoj strukturi. Na primjer, promotrimo izvođenje instrukcije uvjetnog grananja koju smo upoznali u poglavlju 3. kada smo na razini ISA opisivali jednostavan RISC procesor: brzrr31, rl; PC <- R[31] ako je R[1] = 0. Instrukcija "granaj ako je nula" brzrr31, rl ispituje sadržaj registra R[1] u skupu registara i ako je on jednak 0, onda u programsko brojilo PC smješta 32-bitni sadržaj registra R[31]. Tijekom izvođenja te instrukcije, u protočnom segmentu ID-OF dohvaćaju se sadržaji registara R[31] i R[l]. Oni se privremeno pohranjuju u protočni registar ID-OF/EX. Potrebno je ispitati je li sadržaj registra R[1] jednako, odnosno je li uvjet grananja ispunjen. Ako su protočnom segmentu ID-OF pridodani sklopovi za ispitivanje uvjeta, onda se zadovoljavanje uvjeta (R[1] = 0) može utvrditi u segmentu ID-OF. Ako je R[1] jednako, onda se privremeno pohranjeni sadržaj registra R[31] prosljeđuje bez promjena kroz protočni segment EX te se preko protočnog registra EX/ME upućuje povratnom vezom u protočni segment IF, odnosno preko multipleksora u programsko brojilo PC (slika 14.12). Ovdje vidimo da smo izvedbom protočne strukture (slika 14.12) narušili jedno od pravila protočnosti koje izvorno ne dopušta povratne veze između protočnih segmenata ("Ulazi u protočni segment / su izlazi iz prethodnog protočnog segmenta i -1"). Strogo poštovanje spomenutog pravila protočnosti vodilo bi rješenju u kojem se tek djelovanjem protočnog segmenta WB ciljna adresa upisivala u programsko brojilo PC. Vrlo brzo ćemo, međutim, vidjeti da strogo poštovanje potonjeg načela narušava "gladak" tok instrukcija kroz instrukcijsku protočnu strukturu. Ako uvjet za grananje, u slučaju instrukcije brzr r31, rl, nije zadovoljen (sadržaj registra R[1] nije 0), sadržaj registra R[31] nema utjecaja na sadržaj programskog brojila PC te se grananje neće dogoditi. Slika 14.13 prikazuje "glatki"jednolični protok slijeda instrukcija i 3 , i n 1 , i n - instrukcije protječu kroz protočnu strukturu bez ikakvog remećenja i zastoja. Slika 14.14 prikazuje Ganttov dijagram aktivnosti protočnih segmenata. Na slici 14.14 uočavamo fazu "punjenja" ili uspostavljanja protočne strukture u kojoj postupno raste broj istodobno aktivnih protočnih segmenata. Nakon vremena potrebnog za "punjenje" protočne strukture (4ts) slijedi dugi period u kojem su svi protočni segmenti aktivni, i to tako da svaki djeluje na različitu instrukciju iz slijeda instrukcija. Izvođenje instrukcija završava "pražnjenjem" protočne strukture u kojoj postupno protočni segmenti jedan za drugim postaju neaktivni. Ako je slijed instrukcija koje se trebaju izvršiti vrlo velik n » 1, onda se vrijeme punjenja i pražnjenja može zanemariti u usporedbi s vremenom kada su svi protočni segmenti istodobno aktivni.
444
14. POGLAVLJE: PROTOČNOST
i,
IF
ID-OF
EX
ME
WB
IF
ID-OF
EX
ME
WB
IF
ID-OF
EX
ME
WB
IF
ID-OF
EX
ME
WB
IF
ID-OF
EX
ME
WB
IF
-i
ID-OF
EX
ME
WB :
IF
ID-OF
EX
ME
i n
WB
SI. 14.13 "Glatki"jednolični protok slijeda instrukcija kroz 5-segmentnu instrukcijsku protočnu strukturu protočni segmenti pražnjenje protočne strukture
punjenje protočne strukture
r WB ME EX ID-OF
rv-4
n-3
n-2
n-3
n-2
n-1
n-2
n-1
n-1
n-1
IF 1ts
2t s
3t s
4t s
5t s
6t $
t>
8t
nt
(n+1)t (n+2)t (n+3)t (n+4)t =(n+M-1)t
SI. 14.14 Ganttov dijagram aktivnosti protočnih segmenata
14.4.2.
OSTVARIVANJE CILJA: JEDNA INSTRUKCIJA U JEDNOJ PERIODI SIGNALA VREMENSKOG VOĐENJA Jedna od osnovnih težnji arhitekture RISC jest izvođenje instrukcije u jednoj periodi signala vremenskog vođenja. Preciznije, umjesto izvođenja instrukcije u jednoj periodi signala vremenskog vođenja, zahtijeva se započinjanje izvođenja nove instrukcije u svakoj periodi signala vremenskog vođenja te, isto tako, generiranje rezultata u svakoj periodi signala vremenskog vođenja. Na taj se način postiže prividno izvođenje instrukcije u jednoj periodi signala vremenskog vođenja. Osim toga, da bi se postigla maksimalno moguća performansa, želi se postići stoje moguće kraće vrijeme trajanja periode signala vremenskog vođenja.
S. RIBARIČ - GRAĐA RAČUNALA
445 I
Procjena vremena trajanja periode signala vremenskog vođenja temelji se na vremenskom ciklusu puta podataka (poglavlje 7.) koji je potreban, podsjetimo se, za izvođenje temeljne operacije na putu podataka koja se sastoji od dohvata (čitanja) operanada iz skupa registara opće namjene, izvođenja aritmetičke ili logičke operacije na njima te pohranjivanja rezultata natrag ujedan od registara u skupu registara. Izvorno,jedno od "zlatnih pravila"RISC arhitekture je: Žrtvuj sve da bi se ostvario stoje moguće kraći vremenski ciklus na putu podataka. S druge strane, želimo da procesor ima takvu arhitekturu koja dopušta izvođenje instrukcije u vremenu trajanja ciklusa puta podataka koje je izabrano kao perioda signala vremenskog vođenja. Ovdje moramo spomenuti da se posebni napori trebaju uložiti u oblikovanje memorijske jedinice koja svojom brzinom mora podržavati brzinu protočne strukture (protočna izvedba memorije, priručna memorija, protočna izvedba priručne memorije) jer ako se to ne postigne, onda se vrijeme obrade uvjetuje upravo brzinom najsporije komponente u izvršavanju instrukcija - memorije (vidi Primjer /4.5.). Poštovanje spomenutog zlatnog pravila ima za posljedicu prvu "žrtvu": složene instrukcije s raskošnim načinima adresiranja, koje su ujedno i vremenski zahtjevne, isključuju se iz skupa instrukcija - skup instrukcija se reducira. Očuvanje minimalnog vremenskog ciklusa puta podataka, prema izvornim načelima RISC arhitekture, vodilo je i eliminaciji operacija kao što su operacije brojevima s pomičnim zarezom, operacije na nizovima znakova pa čak isključivanju operacija, odnosno instrukcija cjelobrojnog dijeljenja! Ako se pažljivo izaberu instrukcije koje čine instrukcijski skup tako da vremenski najzahtjevnija instrukcija, ako se promatra izdvojeno, traje M perioda signala vremenskog vođenja, pri čemu je M broj protočnih segmenata u instrukcijskoj protočnoj strukturi, onda se s obzirom na faktor ubrzanja uslijed protočnosti koji je jednak M ostvaruje željeni cilj: jedna instrukcija u jednoj periodi signala vremenskog vođenja. Naravno, to vrijedi uz pretpostavku jednoličnog i glatkog protoka instrukcija kroz protočnu strukturu sastavljenu od M protočnih segmenata. Vrlo brzo vidjet ćemo da postoje tzv. hazardi u protočnoj strukturi koji izazivaju zastoj instrukcija u protočnoj strukturi i time se narušava glatki protok instrukcija. Naravno, time se smanjuje faktor ubrzanja obrade u protočnoj strukturi.
14.5. INSTRUKCIJSKA PROTOČNA STRUKTURA ZA CISC PROCESORE Protočnost, kao vrlo važna arhitektonska značajka, rabi se u RISC, ali i u CISC procesorima. Procesori CISC arhitekture imaju u svom raskošnom skupu instrukcija one koje variraju po razini složenosti, od vrlo jednostavnih koje se izvode za samo nekoliko perioda signala vremenskog vođenja, sve do onih koje zahtijevaju nekoliko desetaka pa i stotinu perioda signala vremenskog vođenja. Na primjer, za procesor MC 68060 instrukcija za cjelobrojno predznačeno dijeljenje DIVS zahtijeva 38 perioda signala vremenskog vođenja, a floatingpoint instrukcija za računanje drugog korijena (FSSQRT) izvodi se za 68 ili 70 perioda signala vremenskog vođenja (ovisno o načinu adresiranja). Raznolikost u složenosti instrukcija u skupu instrukcija CISC procesora negativno se odražava na propusnost instrukcijske protočne strukture. Ilustrirajmo to na jednostavnom primjeru izvođenja slijeda cjelobrojnih instrukcija za CISC procesor (slika 14.15).
446
14. POGLAVLJE: PROTOČNOST
Pretpostavimo da se instrukcija izvodi za 24 periode signala vremenskog vođenja (od toga zauzeće aritmetičko-logičke jedinice (označeno na slici s EX) iznosi 10 perioda). Instrukcija / izvodi se za 12 perioda (zauzeće ALU je 2 periode), / se izvodi za 16 perioda (zauzeće ALU je 4 periode) i /4zahtijeva 12 perioda signala vremenskog vođenja (zauzeće ALU 2 periode). Programski odsječak i3, i4 u neprotočnoj izvedbi izvodi se za 24 + 12 + 16 +12 = 64 periode signala vremenskog vođenja.
ID
EX
ME
W8 IF
24 periode
ID EX
i
ME
WB
12 perioda
IF
ID
i
EX
ME
WB IF
16 perioda
i
ID EX
ME
WB
12 perioda
SI. 14.15 Izvođenje slijeda instrukcija u neprotočnoj izvedbi
Slika 14.16 prikazuje izvođenje slijeda instrukcija /;# i3, i4 u protočnoj izvedbi. Na slici 14.16 zapažamo negativni utjecaj različitih razina složenosti pojedinih instrukcija. Zbog istodobnih zahtjeva za protočnim segmentima od strane instrukcija koje se nalaze u protočnoj strukturi pojavljuje se dodatno kašnjenje u njihovom izvođenju (označeno sjenčanim područjima na slici 14.16). Tako, na primjer, instrukcija i2 ne može biti pribavljena sve dok se pribavlja instrukcija i r Također, instrukcija i2 ne može napredovati s izvođenjem dok joj instrukcija / ne oslobodi protočni segment EX. Slično se događa i s instrukcijama / i i4 Na slici 14.16 možemo uočiti da se instrukcije i i2 sukobljavaju i oko protočnog segmenta ME, odnosno pristupa memoriji podataka. Vrijeme potrebno za izvođenje slijeda instrukcija i, ip i3, i4 u protočnoj strukturi iznosi 36 perioda signala vremenskog vođenja. Faktor ubrzanja obrade u odnosu na neprotočnu strukturu je 64/36 = 1.77, što je vrlo daleko od teorijskog ubrzanja koje bi trebalo biti jednako broju protočnih segmenata, tj. 5.
\ 1
i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i 3
5
7
9
11
SI. 14.16 Izvođenje slijeda instrukcija
13
15
17
19
21
23
25
27
29
31
33
t
p.
35 37 (vremenske jedinice)
i^ iy i4 u protočnoj strukturi
U ovom smo potpoglavlju načeli jednu vrlo važnu temu koja se odnosi na probleme u instrukcijskoj protočnoj strukturi, kako RISC tako i CISC, koji nastupaju kada se dvije ili više instrukcija, koje se nalaze u protočnoj strukturi, natječu ili sukobljavaju oko pojedinih protočnih segmenata.
S. RIBARIČ - GRAĐA RAČUNALA
447 I
14.6. INSTRUKCIJSKA PROTOČNA STRUKTURA CISC PROCESORA MC 68060 - ANALIZA SLUČAJA Procesor MC 68060 tvrtke Motorola poslužit će nam za ilustraciju uporabe protočnosti u CISC arhitekturi. Procesor je definiran kao superkalarni CISC procesor što znači da izdaje i izvršava više od jedne instrukcije (u ovom slučaju instrukcije koje se odnose na rukovanje cjelobrojnim tipovima podataka) u jednoj periodi signala vremenskog vođenja. Osnovna značajka superskalarnih CISC procesora jest njihova superskalarna RISC jezgra, pri čemu se CISC instrukcije pretvaraju tijekom postupka dekodiranja u niz RISC instrukcija koje se zatim izvršavaju u superskalarnoj jezgri. Slika 14.17 prikazuje blok-shemu procesora. Procesor se sastoji od sljedećih glavnih funkcijskih jedinica: • izvršne jedinice (Execution Unit) koja je sastavljena od jedinice za pribavljanje instrukcije (Instruction Fetch Unit), cjelobrojne jedinice (Integer Unit) i jedinice za operacije brojevima s pomičnim zarezom (FPU - Floating-point Unit), • memorijskih jedinica koje sačinjavaju instrukcijska memo rij ska jedinica (Instruction Memory Unit) i memorijska jedinica podataka (Data Memory Unit) - procesor je interno harvardske arhitekture. Instrukcijska memorijska jedinica sastoji se od instrukcijske priručne memorije (Instruction Cache; 8 KB), priručne memorije za translaciju virtualne (logičke) adrese u fizičku adresu ATC (Address Translation Cache), tj. translacijski spremnik TLB (Translation Lookaside Buffer) (poglavlje 10.) i upravljača instrukcijskom priručnom memorijom (Instruction Cache Controller). Memorijska jedinica podataka sastoji se od priručne memorije podataka (Data Cache; 8 KB), priručne memorije za translaciju virtualne adrese u fizičku adresu ATC (translacijski spremnikTLB) koja se odnosi na memoriju podataka i upravljača priručnom memorijom podataka (Data Cache Controller), • sabirničkog upravljača (Bus Controller) kojim se podržava nemultipleksirani, potpuno sinkroni sabirnički protokol. Jedinica za pribavljanje instrukcije (Instruction Fetch Unit) sastoji se od četiri protočna segmenta: i) protočni segment za računanje adrese instrukcije (AIG) u kojem se određuje virtualna adresa instrukcije, ii) protočni segment za pribavljanje instrukcije (IF) u kojem se pribavlja instrukcija iz memorije, iii) protočni segment za rano dekodiranje operacijskog koda instrukcije (ED) koje je potrebno za upravljanje protočnom strukturom, iv) instrukcijski međuspremnik (IB) u kojem se privremeno pohranjuje instrukcija i informacija potrebna protočnoj strukturi. Instrukcija i dodatna informacija ostaju pohranjeni u međuspremniku sve dok cjelobrojna jedinica ne postane raspoloživa. U jedinici za pribavljanje nalazi se i priručna memorija grananja (Branch Cache) koja služi za predviđanje grananja.
on —u VJ
izvršna jednica (Execution Unit) jedinica za pribavljanje instrukcije (instruction Fetch Unit) ' AIG
A
IA Calculate
N
Branch Cache
K
Instruction Fetch'
K
• ED
Early Decode
instruction Buffer
pOEP
sOEP
[DS
DS
Decode
Decode
EA Calculate
EA Calculate
E/A Fefc/i
EA Fetch
EA Fetch
FP Execute
INT Execution
INT Execution
FPU (Floating Point Unit) • oc
Data Available Write-Back
TV Open Bus
instrukcijska memorijska jedinica (Instruction Memory Unit) Instruction ATC
Instruction Cache
Address Instruction Cache Controller
cjelobrojna jedinica (integer Unit)
memorijska jedinica podataka (Data Memory Unit)
•cI Data
3Q Q Data Cache Controller
Data ATC
Data Cache Control
S. R1BARIĆ - GRAĐA RAČUNALA
449
Cjelobrojna jedinica (Integer Unit) sastoji se od dviju protočnih struktura (superskalarnost!) od kojih svaka ima po šest protočnih segmenata: i) protočni segment za dekodiranje (DS) u kojem se instrukcija dekodira u potpunosti, ii) protočni segment za računanje efektivne adrese (EA Calculate) u kojem se određuje adresa efektivna adresa podatka, iii) protočni segment za dohvat operanda iz memorije podataka {EA Fetch), iv) protočni segment za izvršavanje cjelobrojne instrukcije (INT Execution), v) protočni segment u kojem se smješta raspoloživi rezultat (Data Available), vi) protočni segment (Write-Back) u kojem se rezultat upisuje natrag u priručnu memoriju podataka (ostvarenu na procesorskom čipu) ili u vanjsku memoriju. Dvije protočne strukture u cjelobrojnoj jedinici pOEP (Primary Operand Execution Pipeline) i sOEP (Secondary Operand Execution Pipeline) omogućuju istodobno izvođenje instrukcija i na taj se način simultano izvodi više od jedne cjelobrojne instrukcije. Jedinica za operacije brojevima s pomičnim zarezom FPU sastoji se od četiri funkcijske jedinice (FPADD - jedinica za zbrajanje, FPMUL - jedinica za množenje, FPDIV - jedinica za dijeljenje, FPMISC - jedinica kojom se podržavaju instrukcije za rukovanje sadržajima FP registara u slučaju iznimke). Istodobno samo jedna od četiri FP jedinice može biti aktivna. Budući da istodobno mogu biti aktivne dvije protočne strukture u cjelobrojnoj jedinici te jedna od FP jedinica - vršna performansa procesora je tri instrukcije u jednoj periodi signala vremenskog vođenja.
14.7. HAZARDI U INSTRUKCIJSKOJ PROTOČNOJ STRUKTURI Istodobno izvođenje više instrukcija u protočnoj strukturi može dovesti do situacije u kojima se ne može izvesti sljedeća instrukcija u slijedu instrukcija u za nju predviđenoj periodi signala vremenskog vođenja. Takvi događaji nazivaju se hazardi. Postoje tri vrste hazarda: i) strukturni hazard, ii) podatkovni hazard (engl. data hazard), iii) upravljački hazard (engl. control hazard).
14.7.1.
STRUKTURNI HAZARD Strukturni hazardi nastaju zbog resursnih konflikata kada sklopovi ne mogu podržati sve moguće kombinacije instrukcija koje se istodobno izvode u protočnoj strukturi. Na primjer, za slijed instrukcija/j,/ 5 ,/ 4 u protočnoj strukturi (slika 14.16) instrukcije/^ i/ 2 su u konfliktu zbog toga što istodobno obje zahtijevaju protočni segment EX, a nakon toga i sklopove u protočnom segmentu ME. Instrukcija i2 mora "pričekati" i zaustaviti se u napredovanju jer joj u trenutku 11ts nije raspoloživ resurs— protočni segment EX. U primjeru sa slike 14.16 instrukcija mora ostati privremeno "zamrznuta" 8ts diskretnih vremenskih trenutaka. Strukturni hazard prouzrokuje zastoj (engl. stali) u protoku instrukcija u protočnoj strukturi. Takav se zastoj zorno grafički predočava protočnim mjehurićem (engl. bubble) koji asocira na to da nema u cijevi djelotvornog protoka tekućine - umjesto volumskog dijela tekućine u cijevi se nalazi zračni mjehurić.
450
14. POGLAVLJE: PROTOČNOST
Primjer 14.6. Za procesor RISC arhitekture vrijedi da je tijekom svake periode signala vremenskog vođenja aktivan protočni segment IF. Ako sada pretpostavimo da je memorijska jedinica von Neumannovog tipa, tj. da je jednoulazna i da se u njoj pohranjuju i instrukcije i podaci (dakle, nije harvardskog tipa), onda će instrukcija i2 (load) izazvati resursni konflikt, tj. sukobljavanje oko memorije s instrukcijom i5 i prouzročiti zastoj u napredovanju instrukcije i5 (pribavljanje instrukcije i5 mora biti odgođeno) u trajanju jedne periode signala vremenskog vođenja, i to u trenutku (tijekom pete periode signala vremenskog vođenja) kada protočni segment ME za nju (instrukciju i) dohvaća podatak iz zajedničke memorije: perioda signala vremenskog vođenja
7
instrukcija
1
2
3
4
5
'I
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
zastoj
IF
ID IF
i2 = load h K h
6
<6
8
9
10
EX
ME
WB
ID
EX
ME
Opaska: radi jednostavnosti protočni segment za dekodiranje instrukcije i dohvat operanada (ID-OF) označavamo u tablici i na slikama samo s ID. Slika 14.18 grafički predočava ovaj strukturni hazard. IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
protočni mjehurić
WB
SI. 14.18 Grafički prikaz strukturnog hazarda (Primjer 14.6)
Budući da su instrukcije vrste ioad i store zastupljene približno 30% u odnosu na sve druge instrukcije u programu, zbog resursnog konflikta ove vrste performansa procesora umanjuje se za više od 10%. Konflikti ove vrste u RISC arhitekturi rješavaju se višepristupnim memorijskim jedinicama (engl. multiple-port memory), uporabom instrukcijske
S. RIBARIČ - GRAĐA RAČUNALA
451 I
priručne memorije i priručne memorije podataka, uporabom harvardske arhitekture u kojoj su izdvojeno ostvarene instrukcijska memorija i memorija podataka ili pak instrukcijskim spremnikom (engl. instruction buffer) u kojem (pret)pribavljene instrukcije čekaju na izvršenje. Drugi primjer resursnog konflikta jest istodobni pristup skupu registara. Taj se konflikt rješava uporabom višepristupnog skupa registara (engl. multiple-ports register file).
14.7.2.
PODATKOVNI HAZARD Podatkovni hazard nastupa zbog međuzavisnosti podataka. On nastaje kad dvije ili više instrukcija, koje se nalaze u protočnoj strukturi, pristupaju istom podatku ili modificiraju isti podatak (smješten u registru ili u memoriji). Podatkovni hazard događa se kad se zbog protočnosti mijenja redoslijed pristupa operandima operacijom čitanja ili pisanja tako da se taj redoslijed razlikuje od onog koji je određen slijednim izvođenjem instrukcija u neprotočnoj izvedi. Opčenito, postoje tri vrste takva hazarda: • RAW (Read After Write) - čita nje posl ije u pisa, • WAW (Write A fter Write) - pisa nje posl ije pi sa nj a, • WAR (Write After Read) - pisanje poslije čitanja. Da bismo formalno opisali i predočili ove vrste hazarda, moramo razmotriti skup ulaznih operanada i skup izlaznih operanada (rezultata) za svaku od instrukcija koja ulazi u protočnu strukturu. Skup ulaznih operanada neke instrukcije / ; označit ćemo s D(/;) i nazivat ćemo ga domena instrukcije ir Skup izlaznih operanada (rezultata) instrukcije /? označit ćemo s R(/;) i nazivat ćemo ga vidokrug (engl. range) instrukcije ir Na primjer, instrukcija i: add r3, rl, r2 ima domenu {rl, r2} i vidokrug {r3}: D(/) = {rl, r2] i R(/',) = {r3}. Pretpostavimo da instrukcija i2 slijedi instrukciji u programu. Označimo s D(i2) i R(/2) domenu i vidokrug instrukcije i2. Grafički domenu i vidokrug svake od instrukcija možemo predočiti kao što je to prikazano na slici 14.19. a). Hazard vrste RAW grafički je prikazan na slici 14.19 b). Vidimo da se vidokrug instrukcije i1 (djelomično) preklapa s domenom instrukcije i2 koja slijedi u programu instrukciji /',: rezultati koje instrukcija i1 upisuje (pohranjuje) u registre su operandi koje instrukcija i2čita (dohvaća). Formalno se RAW hazard opisuje kao: R(/j) n D(/"2) * 0, gdje f l označava presjek skupova a 0 prazan skup. Slično je opisan WAW hazard u kojem se vidokrug instrukcije i1 i vidokrug instrukcije i2 (djelomično) preklapaju - obje instrukcije upisuju operande (rezultate) u iste registre. Nepravilan rezultat dobiva se ako se u protočnoj strukturi dogodi da instrukcija /7 završi nakon instrukcije i 2 jer će se u tom slučaju u registru koji dijele obje instrukcije naći "stari" rezultat. Čitatelj će se zapitati kako je moguće da se instrukcija i ] koja se nalazi u programskom slijedu prije instrukcije i2 završi nakon instrukcije koja joj slijedi u programu. Odgovor na to pitanje dobit ćemo vrlo brzo - riječ je o superskalarnoj arhitekturi procesora u kojoj postoje različite strategije izdavanja i izvršavanja instrukcija. Formalno WAW hazard opisuje se kao: R(/j) H R(/2) * 0. Hazard vrste WAR je formalno definiran kao: D(/,)nR(/>0.
452
14. POGLAVLJE: PROTOČNOST
Hazard vrste RAW naziva se i stvarna zavisnost podataka (engl. true data dependency), WAW se naziva izlazna zavisnost (engl. output dependency) i WAR je antizavisnost (engl. antidependency). Antizavisnost (kažemo: instrukcija iJe antizavisna o instrukciji i,) nastupa ako i2 slijedi instrukciji i1 u programskom slijedu i ako se vidokrug instrukcije i2 preklapa s domenom instrukcije i r Hazardi u protočnoj strukturi koji nastupaju zbog međuzavisnosti podataka mogu se detektirati provjerom uvjeta R(/,) Pi D(/2) * 0, R(#r) f l R(y * 0 i D^) n R(/\,) * 0 tijekom prevođenja programa (statička detekcija hazarda) ili tijekom izvođenja programa (dinamička detekcija hazarda).
SI. 14.19 Grafički prikaz: a) domene i vidokruga instrukcije; b) RAW hazard; c) WAW hazard; d) WAR hazard
Značajke protočne arhitekture procesora su takve da je za hazard, koji nastupa zbog međuzavisnosti podataka, kritičan hazard vrste RAW. Primjer 14.7. Prikažimo hazard vrste RAW koji nastupa u instrukcijskoj protočnoj strukturi. Pretpostavimo ovakav slijed instrukcija za protočni model RISC procesora sa slike 14.12:
S. RIBARIČ - GRAĐA RAČUNALA
loadr1,A loadr2fB add r3, rl, r2
453 I
; R[1]<- M [A], dohvati operand s memorijske lokacije A i smjesti ga u reg. rl ;R[2]<-M[B] ; R[3] R[1 ] + R[2]
Slika 14.20 prikazuje očekivani slijed izvođenja prethodnog programskog odsječka. IF
loadrl,A
loadr2rB
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
3t
4t
5t
6t
7t
addr3,r1,r2
2t_
lt
SL 14.20 Očekivani slijed izvođenja programskog odsječka (Primjer 14.7.)
No očekivani slijed izvođenja za potonji programski odsječak treba zbog podatkovnog hazarda biti preinačen. Obratimo pozornost na sljedeće: instrukcija odd r3, rl, r2 u protočnom se segmentu ID-OF dekodira (diskretni vremenski trenutak 4ts (slika 14.20)). Istodobno s dekodiranjem dohvaćaju se operandi smješteni u registrima rl i r2 (u skladu s opisom djelovanja segmenta ID-OF). U segmentu EX (diskretni vremenski trenutak 5ts) izvršava se operacija zbrajanja raspoloživih operanada. No instrukcija load r1,A tek tijekom aktivnosti protočnog segmenta WB (trenutak 5ts) upisuje dohvaćeni operand s memorijske lokacije A u registar r r Instrukcija load r2, B tek u trenutku 6ts upisuje dohvaćeni sadržaj s memorijske lokacije B u registar rr To znači da instrukcija addr3, rl, r2 u protočnom segmentu ID-OF (u trenutku 4ts) nije dohvatila (pročitala) prave podatke jer će oni biti u registru rl i registru r2 upisani tek u vremenskom trenutku 5ts, odnosno 6ts. Rezultat koji bi u trenutku 5t$ (tijekom aktivnosti u EX) generirala instrukcija add r3, rl, r2 bio bi pogrešan: u protočnom segmentu EX (u vremenskom trenutku 5ts) zbrojit će se „stari" sadržaji registra r1 i registra r2 jer operandi s memorijskih lokacija A i B još nisu upisani u registre r1 i r2.
IF
ioodrl, A
load (2, B
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
5t
6t
7t
8t
9t
addr3,r1,r2 zastoj u protočnoj strukturi
i
1t
1
2t
(
3t
4t
SI. 14.21 Rješenje hazarda vrste RAW umetanjem protočnih mjehurića
454
14. POGLAVLJE: PROTOČNOST
Da bi se osigurao logički ispravan slijed instrukcija i time dobio rezultat jednak onom za neprotočnu izvedbu, mora se početak izvođenja instrukcija add r3, rl, r2 odgoditi za dvije periode signala vremenskog vođenja (2 x ts), odnosno izazvati zastoj u protočnoj strukturi. Dakle, prisutni podatkovni hazard vrste RAW imat će za posljedicu kašnjenje protoka instrukcija. Grafički ćemo to predočiti dvama protočnim mjehurićima (slika 14.21). Umetanje protočnog mjehurića utječe nepovoljno na performansu procesora, odnosno povećava prosječan broj perioda signala vremenskog vođenja po instrukciji (CPI). Procesori protočne arhitekture upotrebljavaju posebne tehnike isključivanja (engl. interlock) kojima rješavaju problem hazarda, ali i umanjuju ili u potpunosti uklanjaju zastoj (mjehuriće) u protočnoj strukturi. Tim se tehnikama i zahvatima (uporaba zaobilaznica (engl. bypass) u protočnoj strukturi) može broj protočnih mjehurića koje traži instrukcija load smanjiti na jedan, a zatim uporabom tzv. zakašnjelih load instrukcija i „pametnih* prevodioca u potpunosti ukloniti protočne mjehuriće. Jednostavna i uobičajena tehnika u većini RISC procesora jest uporaba zakašnjelih load instrukcija (engl. delayed load). Njezina osnovna zamisao sastoji se od sljedećeg: prevodilac tijekom prevođenja programa detektira potencijalni hazard tipa RAW i preuređuje slijed instrukcija neposredno nakon instrukcije load, i to tako da neposredno nakon instrukcije load umeće instrukciju čije izvođenje ne ovisi o podatku koji se dohvaća instrukcijom load. Mjesto instrukcije u slijedu instrukcija neposredno nakon instrukcije load naziva se priključak load kašnjenja (engl. load-delay slot). Dakle, prevodilac umeće u priključak load kašnjenja instrukciju koja ne koristi podatak iz instrukcije load (koja joj neposredno prethodi). U najjednostavnijem rješenju prevodilac umeće instrukciju nop [no operation; 3. poglavlje) koja sigurno ne koristi i ne treba podatke koji su rezultat prethodne load instrukcije. Naime, instrukcija nop ne radi ništa osim što troši procesorsko vrijeme i ima u ovom slučaju ulogu protočnog mjehurića kojim se osigurava pravilan rezultat izvođenja slijeda instrukcija u protočnoj strukturi. Primjer 14.8. Pri kažimo kako će se hazard RAW u programskom odsječku iz Primjera 14.7. riješiti zakašnjelom load instrukcijom (uz pretpostavku da load instrukcija zahvaljujući preinakama u protočnoj strukturi zahtijeva samo jedan protočni mjehurić). Izvorni programski odsječak: loadr1,A load r2, B addr3, rl, r2 prevodilac će umetanjem instrukcije nop u priključak load kašnjenja osigurati pravilan rezultat koji generira instrukcija add: load rl, A load r2, B nop addr3,r1,r2 Slika 14.22 prikazuje slijed izvođenja instrukcija za tako preinačen programski odsječak.
S. RIBARIČ - GRAĐA RAČUNALA
loadrhA
IF
load r2, B
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
nop
addr3,rl,r2 —
455 I
WB
priključak load kašnjenja
SI. 14.22 Izvođenje programskog odsječka s umetnutom nop instrukcijom u priključak load kašnjenja
Bolje rješenje od onog iz Primjera 14.8. jest rješenje u kojem prevodilac u priključak load kašnjenja umeće, umjesto nop instrukcije, neka korisnu instrukciju iz slijeda instrukcija. Primjer 14.9. Programski odsječak, koji u višem programskom jeziku: C := A + B E := D u zbirnom jeziku možemo napisati kao: loadr1,A load r2fB addr3,rhr2 load r4, D. Instrukcija addr3, rl, r2 nalazi se u priključku load kašnjenja. No ona upotrebljava podatak koji se dohvaća neposrednom prethodnom instrukcijom load r2, B. Ovaj izvorni slijed instrukcija vodi hazardu vrste RAW. Prevodilac mora detektirati takvu situaciju tijekom prevođenja i instrukciju add premjestiti iz priključka. Umjesto umetanja nop instrukcije, prevodilac će, međutim, preurediti program tako da će u priključak smjestiti korisnu instrukciju load r4, D. Prevodilac s takvim svojstvima obično se naziva optimirajući prevodilac. On će preurediti izvorni program na sljedeći način: loadrhA load r2t B load r4, D add r3, r 1, r2. Preuređenjem slijeda instrukcija, odnosno umetanjem korisne instrukcije load r4, D u priključak load kašnjenja, postignuta je glatkoća protoka instrukcija kroz protočnu strukturu bez zastoja - nema više protočnih mjehurića. Negativan utjecaj podatkovnog hazarda, odnosno zastoja u protočnoj strukturi, može se umanjiti uporabom tehnike koja se naziva otpremanje (engl. forwarding). (Opaska: ta se tehnika u literaturi još naziva i zaobilaženje (engl. bypassing).)
456
14. POGLAVLJE: PROTOČNOST
Zamisao tehnike otpremanja ilustrirat ćemo jednim zahvatom u protočnoj strukturi (slika 14.12) kojim se ostvaruje povratna veza između protočnog registra EX/ME i ALU tako da se rezultat ALU operacije vraća u protočni segment EX. Jednako tako, treba ostvariti i povratnu vezu između protočnog registra ME/WB i ALU.Tim se povratnim vezama izravno otpremaju podaci u protočni segment EX. Što se time dobiva? Ako posebni sklopovi kojima se podržava tehnika otpremanja (engl. forwarding hardware) detektiraju da rezultat prethodne ALU operacija sudjeluje kao operand u tekućoj ALU operaciji, onda će oni povratnom vezom otpremiti taj rezultat prethodne ALU operacije izravno u protočni segment EX, umjesto da se čeka na valjani operand koji će tek tijekom aktivnosti protočnog segmenta WB biti upisan u izvorišni registar u skupu registara i biti raspoloživ protočnom segmentu ID za tekuću ALU operaciju. Primjer 14.10. Za programski odsječak: add r1,r2,r3 sub r4, rl, r5 and r6,r1, r7 vidimo da će rezultat instrukcije add izazvati podatkovni hazard. Instrukcija sub tijekom aktivnosti u protočnom segmentu ID-OF dohvaća operande, tj. sadržaje registara r1 i r5. No pravi operand u registru rl bit će raspoloživ tek tijekom aktivnosti protočnog segmenta WB za prethodnu instrukciju add (vremenski trenutak 5ts; slika 14.23). Da bi instrukcija sub r4, rl, r5 dala ispravan rezultat, moraju se umetnuti tri protočna mjehurića, odnosno instrukcija sub r4, rl, r5 mora biti u zastoju u vremenu trajanja triju perioda signala vremenskog vođenja (slika 14.23). IF
addr1,r2,r3
subr4,r1,r5
ID
O
EX
O
O
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
and 16, rl, r7 i
1 1ts
1 2ts
( 3t s
) 4t s
1 s
5t
s
1 6t
s
1 7t
s
WB 1
8t
s
1 9t
* t
SL 14.23 Zastoj u trajanju triju perioda signala vremenskog vođenja
Ako se uporabi tehnika otpremanja i iskoristi povratna veza između protočnog registra EX/ME i ALU jedinice u protočnom segmentu EX (slika 14.24), programski se odsječak izvodi bez zastoja u protoku. Na slici 14.24 koristimo malo drugačiji prikaz protočnih segmenata tako da smo nacrtali i protočne registre IF/ID, ID/EX, EX/ME i ME/WB jer na taj način možemo prikazati povratne veze. Na slici 14.24 vidimo da se rezultat prve instrukcije (add rl, r2, r3) iz protočnog registra EX/ME izravno otprema u protočni segment EX gdje ima ulogu operanda u instrukciji sub. Uočavamo i da se zahvaljujući drugoj povratnoj vezi rezultat prve instrukcije iz protočnog registra ME/WB otprema u protočni segment EX za potrebe instrukcije add.
S. RIBARIČ - GRAĐA RAČUNALA
457 I
Potrebno je naglasiti da se tehnikom otpremanja ne mogu riješiti svi oblici podatkovnog hazarda. IF/ID
add rl, r2, r3
IF
EX/ME
ID/EX
ME/WB
ID
WB
ME/WB
IF/ID
sub r4, rl, r5
IF
ID
IF/ID addr6,r1,r7
IF
w
1
w ID
zaobilaznice
SI. 14.24 Uporaba otpremanja i povratnih veza u protočnoj strukturi
14.7.3.
UPRAVLJAČKI HAZARD Upravljački hazard nastupa u protočnoj strukturi tijekom izvođenja instrukcija grananja ili drugih instrukcija koje tijekom faze IZVRŠI mijenjaju sadržaj programskog brojila PC (npr., instrukcije pozivanja potprograma ili vraćanja iz njih). Promotrimo slijed instrukcija: addr1,r2,r3 brzrr31,r1 ; PC <- R[31] ako je R[1] = 0 add r2, r4, r5
c: $ubr6,r7,r8 Ponovimo, instrukcija brzr r31,rl je instrukcija uvjetnog grananja kojom se ispituje sadržaj registra r1 i ako je sadržaj 0, grana se na ciljnu adresu koja je sadržana u registru r31 tako da se nakon instrukcije grananja izvodi instrukcija označena oznakom c. (U 3. poglavlju vidjeli smo da se sadržaj programskog brojila PC «- R[31] mijenja u fazi IZVRŠI instrukcije grananja.) Ako r1 nije jednako, onda se grananje ne obavlja te se program nastavlja instrukcijom add r2, r4, r5. Kako izgleda izvođenje prethodnog programskog odsječka u protočnoj strukturi? Operacijski kod instrukcije grananja dekodira se tijekom aktivnosti u protočnom segmentu ID-OF. Istodobno se u ID-OF dohvaća sadržaj registra r31 (ciljna adresa grananja) i sadržaj registra r1 koji se ispituje je li 0. Ako je uvjet grananja zadovoljen (rl = 0), dohvaćeni se
458
14.
POGLAVLJE: PROTOČNOST
sadržaj registra r31 u sljedećem diskretnom vremenskom trenutku prosljeđuje protočnom segmentu EX i privremeno se smješta u protočni registar EX/ME (slika 14.12). Iz protočnog registra EX/ME ciljna se adresa upućuje u programsko brojilo PC. Dakle, tek je završetkom aktivnosti protočnog segmenta EX određena ciljna adresa c. Istodobno s aktivnostima segmenta ID-OF koje se odnose na instrukciju brzr r31, r1, aktivan je protočni segment IF koji pribavlja instrukciju add r2, r4, r5 (vremenski trenutak 3ts; slika 14.25). Problemi vezani za upravljački hazard nastupaju u ovom trenutku. Instrukcija koja se pribavlja odmah nakon instrukcije grananja i koja bi se trebala nastaviti s izvođenjem je u slučaju da je uvjet grananja zadovoljen "kriva" instrukcija: procesor bi tu trebao započeti pribavljanje instrukcije koja se nalazi na ciljnoj adresi c. Najjednostavnija metoda rukovanja grananjem suspendira daljnje izvođenje instrukcije koja u programskom odsječku slijedi instrukciji uvjetnog grananja. Taj se postupak naziva "ispiranje protočne strukture" (engl. flushing) i zapravo odgovara umatanju dva protočna mjehurića u protočnu strukturu (slika 14.25). U diskretnom vremenskom trenutku označenom na slici 14.25 s 5ts pribavlja se instrukcija koja se nalazi na ciljnoj adresi. Ako uvjet za grananje nije zadovoljen, onda će se u diskretnom vremenskom trenutku 5ts ponoviti aktivnost protočnog segmenta IF, odnosno ponovo pribaviti instrukcija add r2, r4, r5. IF
addr1,r2,r3
brzrr3l,r1
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
IF
ID
add r2, r4, r5
i
It s
1
2ts
1
3t s
1
4t s
1 s
5t
1 s
6t
EX
ME
1 s
1 7t
s
WB
1 8t
s
1 9t
t
•
aktivnosti instrukcije čije će daljne izvođenje biti suspendirano
SI. 14.25 Izvođenje slijeda instrukcija u protočnoj strukturi, pri čemu instrukcija uvjetnog grananja prouzrokuje zastoj u trajanju dvije periode signala vremenskog vođenja
Dva protočna mjehurića za svaku instrukciju uvjetnog grananja nepovoljno utječu na performansu procesora. Vrijeme zastoja može se smanjiti na jednu periodu signala vremenskog vođenja ako se računanje ciljne adrese grananja (za npr. relativno adresiranje s pomaknućem: PC = PC + pomaknuće) dodatnim zbrajalom izvede u protočnom segmentu ID-OF te ako se tako dobivena ciljna adresa proslijedi iz protočnog registra IF/ID-OF (slika 14.12). U tom se slučaju mora uvesti i povratna veza između protočnog registara IF/ID-OF i protočnog segmenta IF. Zastoj u protočnoj strukturi u trajanju jedne periode signala vremenskog vođenja za svaku instrukciju grananja prouzrokuje smanjenje performanse procesora između 10% i 30% ovisno o učestalosti pojavljivanja instrukcija grananja u programu. Različitim metodama i tehnikama rukovanja grananjem u protočnoj strukturi želi se umanjiti taj nepovoljni utjecaj na performansu procesora. Jedna od metoda je zakašnjelo grananje (engl. delayed branch).
S. RIBARIČ - GRAĐA RAČUNALA
459 I
Ako je ciljna adresa raspoloživa nakon aktivnosti protočnog segmenta ID-OF tijekom instrukcije grananja (u tom je slučaju potreban samo jedan protočni mjehurić), onda slično kao i kod instrukcije load za instrukciju koja neposredno slijedi instrukciji grananja kažemo da se nalazi u priključku branch kašnjenja (engl. branch delay slot). U najjednostavnijoj izvedbi prevodilac će tijekom prevođenja umetnuti u priključak nop instrukciju: add r1, r2, r3 brzrr31, rl ; PC <- R[31] ako je R[1] = 0 nop add r2, r4, rS
c: sub r6, r7, r8 Na taj će se način samo osigurati pravilno izvođenje programa, ali negativan utjecaj na performansu procesora neće biti uklonjen. Optimirajući prevodilac, umjesto nop instrukcije u priključku branch kašnjenja, umetnut će "korisnu" instrukciju koja se izvodi bez obzira na grananje. Na taj se način uklanja protočni mjehurić i postiže glatkoća protoka instrukcija. Primjer 14,11. Optimirajući prevodilac će uporabom metode zakašnjelog grananja slijed instrukcija: str22,27(r6) addr1tr2fr3 brzrr31fr1 add r2, r4, r5
c: sub r6, r7, r8 preinačiti u: addrl,r2fr3 brzrr31fr1 str22,27(r6) add r2, r4, r5
c: sub r6, r7f r8 Uočavamo da je korisna instrukcija st r22,27(r6) popunila priključak branch kašnjenja i ona će se uvijek izvesti. Logički slijed instrukcija u programskom odsječku neće biti narušen.
460
14. POGLAVLJE: PROTOČNOST
Zakašnjelo grananje ima kao posljedicu promjenu slijeda izvođenja instrukcija i on se razlikuje od onog koji je određen u programu napisanom u zbirnom jeziku. Na primjer, pretpostavimo daje u programskom odsječku: instrukcija 1 instrukcija 2 instrukcija 3 instrukcija 4 instrukcija 5 instrukcija 6
x: instrukcija 13 instrukcija 14
^
instrukcija 4 instrukcija uvjetnog grananja koja prenosi upravljanje na ciljnu instrukciju 13. Pretpostavimo i da je uvjet grananja ispunjen te da će se grananje dogoditi. "Normalno" izvođenje programskog odsječka (bez zakašnjelog grananja) izgleda ovako: instrukcija 1 instrukcija 2 instrukcija 3 , instrukcija 4 ' instrukcija 13 instrukcija 14
Izvođenje programskog odsječka s zakašnjelim grananjem izgleda ovako: instrukcija 1 instrukcija 2 instrukcija 3 instrukcija 4 instrukcija 5 instrukcija 13 instrukcija 14
Uočavamo da će se instrukcija koja je u priključku branch kašnjenja uvijek izvesti, i to bez obzira hoće li se grananje dogoditi ili ne.
S. RIBARIČ - GRAĐA RAČUNALA
14.7.4.
461 I
PREDVIĐANJE GRANANJA Jedan od načina rukovanja grananjem jest predviđanje grananja (engl. branch prediction). Predviđanje grananja može biti statičko ili dinamičko. Najjednostavnije statičko predviđanje grananja je ono koje pretpostavlja da se grananje neće nikad dogoditi. U tom se slučaju nastavlja s izvođenjem u protočnoj strukturi instrukcija koje neposredno slijede instrukciji grananja. Ako je, pak, uvjet za grananje ispunjen, tj. dogodi se grananje, onda instrukcija ili instrukcije koje su bile pribavljene i dekodirane nakon instrukcije grananja neće nastaviti s izvođenjem i bit će "uklonjene" iz protočne strukture. Izvođenje će se nastaviti pribavljanjem ciljne instrukcije.
Primjer 14.12. Prikažimo kako izgleda izvođenje programskog odsječka ako se rabi statičko predviđanje grananja koje se temelji na pretpostavci da se grananje nikad neće dogoditi. Prvo razmotrimo slučaj kada se zaista grananje neće dogoditi jer uvjet za grananje nije zadovoljen: instrukcija i-1
IF
instrukcija i (grananje)
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
WB
IF
ID
EX
ME
instrukcija i -f 7 instrukcija i + 2 instrukcija i + 3
WB
Vidimo daje protok instrukcija "gladak" i bez protočnih mjehurića. Izvođenje u protočnoj strukturi kada se zaista dogodi grananje izgleda ovako: instrukcija i- 7 instrukcija i (grananje) instrukcija i + 1 ciljna instrukcija i ciljna instrukcija i + 1
IF
ID
EX
ME
WB
IF
ID
EX
ME
IF
-
IF
-
WB -
-
ID
EX
ME
WB
IF
ID
EX
ME
WB
Vidimo da se u tom slučaju u protočnoj strukturi pojavljuje jedan protočni mjehurić. Analize programa pokazale su da je 37% svih uvjetnih grananja takvo da se ona neće dogoditi. Druga statička metoda predviđanja grananja je ona koja pretpostavlja da će se grananje uvijek dogoditi - to se događa u 63% uvjetnih grananja. Ako je zaista tako, onda je statičko predviđanje na temelju pretpostavke da će se grananje uvijek dogoditi djelotvornije. Jedna od statičkih metoda predviđanja grananja je ona koja upotrebljava operacijski kod instrukcija grananja za predviđanje hoće li se grananje dogoditi ili ne. Na primjer, instrukcija uvjetnog grananja koje se koriste za ostvarivanje programskih petlji (instrukcije vrste ispitaj - dekrementiraj i granaj) imaju veći postotak ostvarenih grananja od instrukcija uvjet-
nog grananja koje ispituju zastavicu preljeva (engl. overflow), dok instrukcija br (branch always - granaj uvijek; poglavlje 3.) ima, naravno, 100% ostvarenih grananja. Dinamičko predviđanje grananja temelji se na povijesti grananja i predviđanje se obavlja dinamički tijekom izvođenja programa. Najjednostavnija dinamička shema upotrebljava poseban spremnik za predviđanje grananja (engl. dynamic branch-prediction buffer) koji sadržava tzv. tablicu povijesti grananja. Spremnik je zapravo mala priručna memorija s izravnim preslikavanjem kojoj se pristupa na temelju manje značajnog dijela adrese instrukcije grananja (npr. osam najmanje značajnih bitova adrese). U toj se memoriji pohranjuje bit predviđanja koji govori o tome je li posljednje grananje bilo izvedeno ili ne. Zapravo, na temelju samo tog bita predviđanja ne može se točno znati je li predviđanje ispravno. Naime, može se dogoditi da čak i neka druga instrukcija grananja ima jednak manje značajan dio adrese koji služi za pristup spremniku. No to i nije tako važno. Ako je pretpostavka o grananju ispravna, započinje pribavljanje u predviđenom smjeru. Ako se pokaže da je predviđanje bilo pogrešno, bit predviđanja se mijenja: ako je bio 1, postaje 0 i obratno. Ovakva shema predviđanja grananja u kojoj se koristi jedan bit govori o tome je li se dogodilo samo posljednje grananje. Odluka o grananju je u tom slučaju jednostavna - ona će biti jednaka odluci koja joj je prethodila.
Umjesto sheme s jednim bitom predviđanja koja se temelji na povijesti grananja koja seže samo do zadnjeg prošlog grananja, koriste se shema s dva bita predviđanja (engl. two-bit branch history) koja uzimaju u obzir povijest dvaju uzastopnih prošlih grananja. S dva bita predviđanja kodiraju se 4 stanja koja se mijenjaju kako je to prikazano u dijagramu stanja na slici 14.26. Na primjer, ako se nakon dva uzastopna grananja (stanje 11) dogodi da grananje ne bude ostvareno, bitovi predviđanja određuju stanje 10 u kojem se još uvijek pred-
S. RIBARIČ - GRAĐA RAČUNALA
463 I
viđa da će se grananje dogoditi. Ako se sad u stanju 10 još jednom dogodi da se grananje ne ostvari, prelazi se u stanje 00 u kojem je predviđanje da se grananje neće dogoditi. Složenije sheme dinamičkog predviđanja grananja uporabom posebnih spremnika ciljnih adresa izvedenih kao asocijativne memorije (9. poglavlje) (engl. branch-target buffer) omogućuju određivanje ciljne adrese tijekom aktivnosti u protočnom segmentu IF. Dakle, prije dekodiranja operacijskog koda instrukcije! Na taj se način ostvaruje grananje bez ikakva zastoja u protočnoj strukturi (engl. zero-cycle branch).
14.7.5.
PRECIZNI I NEPRECIZNI PREKID (IZNIMKA) Jedan od uzroka narušavanja "glatkog" instrukcijskog toka kroz protočnu strukturu jest i prekid ili iznimka. Kada se dogodi prekid ili iznimka, obično očekujemo da se završi tekuća instrukcija te da se, nakon obaveznih kućanskih poslova (13. poglavlje), prenese upravljanje na prvu instrukciju prekidnog programa ili programa za obradu iznimke. No u protočnoj se strukturi nalazi veći broj instrukcija u različitim fazama izvođenja i tu se pojavljuje problem. Ako se zaista želi nakon završetka tekuće instrukcije (tijekom koje je generiran zahtjev za prekid) prenijeti upravljanje na prekidni program, potrebno je zaustaviti "dotok" instrukcija u protočnu strukturu, obustaviti daljnje napredovanje preostalih instrukcija u protočnoj strukturi, zapamtiti njihovo stanje, isprazniti protočnu strukturu ("isprati je", engl. flushing) te, konačno, nakon toga protočnu strukturu početi puniti instrukcijama prekidnog programa. Ovaj način posluživanja prekida odgovara prekidu koji se naziva precizni prekid (engl. precise interrupt, precise exception) i zahtijeva dodatne potrebne kućanske poslove. U procesorima s protočnom strukturom koristi se i tzv. neprecizni prekid ili neprecizna iznimka (engl. imprecise interrupt, imprecise exception), kod kojeg prekid nije precizno pridružen instrukciji tijekom koje je zahtjev za prekid generiran, već se izvršavaju sve instrukcije koje su se nalazile u protočnoj strukturi da bi se tek nakon toga poslužio prekid (ili iznimka). Na taj se način smanjuje količina kućanskih poslova koje treba obaviti procesor, ali se produljuje vrijeme odgovora na prekid ili iznimku.
14.8. SUPERSKALARNI PROCESORI U potpoglavlju 14.6. upotrijebili smo termin "superskalarni procesor". On označava posebnu vrstu procesora koji se koriste tzv. skalarnim tipovima podataka - podacima jednostavne strukture kao što su, na primjer, cjelobrojni (integer) ili brojevi s pomičnim zarezom [floating-point). Za razliku od skalarnih tipova podataka, postoje i strukturni tipovi podataka kao što su vektori, dvo- i višedimenzionalna polja podataka, nizovi i skupovi. Ovim smo objasnili drugi dio kovanice "superskalarni". Osnovna značajka superskalarnih procesora je daje prosječan broj perioda po instrukciji (CPI) manji od jedan. To znači da se tijekom jedne periode signala vremenskog vođenja izdaje i izvršava veći broj instrukcija. Superskalarni procesor iskorištava implicitni paralelizam koji je sadržan u slijedno napisanim programima - slijedu instrukcija koje bi se trebale izvršavati sekvencijalno. Superskalarnost zahtijeva od procesora da detektira i iskoristi skriveni paralelizam na razini instrukcija u programima. Da bi se postigao cilj CPI < 1, superskalarni procesor mora imati veći broj izvršnih jedinica od kojih je svaka izvedena kao protočna. Dakle, superskalarni procesor je procesor koji ima veći broj nezavisnih instrukcijskih protočnih struktura. Slika 14.27 prikazuje načelnu organizaciju superskalarnog procesora. Ona se, u našem slučaju, sastoji od jednog zajedničkog
464
14. POGLAVLJE: PROTOČNOST
protočnog segmenta zaduženog za istodobno pribavljanje tri instrukcije (jedinice za pribavljanje instrukcija; slika 14.27) i tri nezavisne instrukcijske protočne strukture. I ovdje možemo naći analogiju s industrijskom proizvodnjom na tekućoj vrpci - to je organizacija proizvodnje koja ima veći broj međusobno nezavisnih tekućih vrpci na kojima se istodobno odvijaju proizvodni procesi. Na izlazu se, tada, umjesto jednog gotovog proizvoda u jedinici vremena, pojavljuje q > 1 gotovih proizvoda. protočni segment 1
jedinica za pribavljanje instrukcija
instl ^
tx,
ME,
WB,
inst2 ^
w tx2
w ME2
WB 2
w tx3
w ME3
"WWB 3
in5t3 ^ ILJ
3
w
SI. 14.27 Načelna organizacija superskalarnog procesora
Slika 14.28 prikazuje izvođenje slijeda instrukcija u superskalarnom procesoru. Vidimo da istodobno u svakoj periodi signala vremenskog vođenja iz tri nezavisne protočne strukture "izlaze" rezultati triju instrukcija (CPI = 1/3). instrukcija 1
IF
instrukcija 2 instrukcija 3
EX1
ME1 WB,
IF
EX2
ME2 WB2
IF
EX3
ME3 WB3
ID
EX
ID,
instrukcija 4
IF
instrukcija 5
IF
EX2
ME2 WB2
instrukcija 6
IF
EX3
ME3 WB3
i
ME1 WB1
i
instrukcija 7
IF
EX1
ME, WB,
instrukcija 8
IF
EX2
ME2 WB2
instrukcija 9
IF
EX3
ME3 WB3
instrukcija 10
IF
EX,
ME, WB,
instrukcija 11
IF
EX2
ME2 WB2
instrukcija 12
IF
EX3
ME3 WB3
i
i
1ts
i
2ts
i
3ts
©3
i
4ts
i
5ts
SI. 14.28 Izvođenje slijeda instrukcija u superskalarnom procesoru
i
...
i
i
^
t
S. RIBARIČ - GRAĐA RAČUNALA
465 I
Slika 14.29 prikazuje organizaciju superskalarnog RISC procesora. Procesor ima više izvršnih jedinica koje su ostvarene kao nezavisne protočne strukture. Procesor ima posebnu upravljačku jedinicu PCU (program control unit). Ona se sastoji od protočnog segmenata IF, protočnog segmenta ID i instrukcijskog spremnika. Njezin je zadatak pribavljanje i dekodiranje nekoliko instrukcija istodobno. Jednako tako, upravljačka jedinica PCU istodobno otprema, preko instrukcijskog spremnika, veći broj (q> 1) instrukcija u različite specijalizirane izvršne jedinice. Izvršne su jedinice po funkciji specijalizirane (slika 14.29): • load/store jedinica (sastoji se od 4 protočna segmenta), zadužena je za izvođenje load i store instrukcija, • dvije nezavisne jedinice za cjelobrojne operacije (engl. integer unit) izvedene s tri protočna segmenta. Obje jedinice imaju pristup višepristupnom skupu cjelobrojnih registara (engl. integer registerfile), • jedinica za zbrajanje brojeva s pomičnim zarezom s pet protočnih segmenata, • jedinica za množenje brojeva s pomičnim zarezom s pet protočnih segmenata. Jedinice za operacije brojevima s pomičnim zarezom također zajednički dijele višepristupni skup fioating-point registara.
L.
J
Legenda:
RR (Read Register) - čitanje registra CA {Computer Address) - računanje adrese L (Load) - dohvat operanada WR {Write Register) - upis u registar EX (Exclude) - izvrši ALU operaciju
Alig (Aiign) - poravnanje Pack {Package) - normalizacija ADD (Add) - zbrajanje mantisa MUL (Multiply) - množenje SP (Sum Product) - zbrajanje
SI. 14.29 Organizacija superskalarnog RISC procesora
Teoretski, superskalarni procesor, koji npr. ima q protočnih jedinica, pri čemu je svaka od njih n protočnih segmenata, ima faktor ubrzanja obrade jednakg x n u odnosu na procesor
466
14. POGLAVLJE: PROTOČNOST
koji ne koristi paralelizam na razini instrukcija. Na primjer, superskalarni procesor organizacije prikazane na slici 14.27 imao bi faktor ubrzanja obrade jednak g x n = 3 x 5 = 15. Performansa superskalarnog procesora ovisi o mogućnosti istodobnog izvođenja više instrukcija. Istodobno izvođenje većeg broja instrukcija podrazumijeva paralelizam na razini instrukcija (ILP - Instruction-level Parallelism) koji je prisutan u programu koji se izvršava. Kažemo da postoji paralelizam na razini instrukcija kada su instrukcije u slijedu nezavisne i kada se mogu izvesti paralelno, odnosno kada slijed njihova izvođenja ne utječe na konačni rezultat. Ako izvođenje instrukcija promatramo u protočnoj strukturi, onda su dvije instrukcije paralelne ako se mogu izvršiti istodobno u protočnoj strukturi bez izazivanja zastoja, ali uz pretpostavku da protočna struktura ima dovoljno resursa, odnosno da ne postoji strukturni hazard. Primjer 14.13. Promotrimo sljedeća dva programska odsječka: Programski odsječak 1 Idrl, 23(r2) ; R[1]«- M[23 + R[2J] addi r3, r3f 7 ; R[3] R[3] + 1 add r4, r5, r6 ; R[4] R[5] + R[6] Instrukcije u programskom odsječku 1 nezavisne su - rezultat njihova izvođenja ne ovisi o redoslijedu njihova izvođenja i zato se mogu izvesti paralelno. Programski odsječak 2 addi r3, r3, 1 addr4f r3, r2 strO, (r4)
; R[3] <- R[3] + 1 ; R[4] R[3] + R[2] ; M[R[4]] R [0]
Instrukcije u programskom odsječku nisu nezavisne - druga instrukcija ovisi o rezultatu prve instrukcije, treća instrukcija ovisi o rezultatu druge instrukcije. Promijenjeni redoslijed izvođenja instrukcija ili paralelno izvođenje navedenih triju instrukcija neće dat rezultat jednak slijednom izvođenju. U superskalarnim procesorima koriste se kombinacija optimirajućih prevodioca i sklopovskih tehnika da bi se djelotvorno iskoristio paralelizam na razini instrukcija. Razina paralelizma određena je sljedećim ograničenjima: • stvarna zavisnost podataka (engl. true data dependency), • postupkovna zavisnost (engl. procedural dependency), • resursni konflikti, • izlazna zavisnost (engl. output dependency), • antizavisnost (engl. antidependency). Ograničenje stvarne zavisnosti podataka ogleda se u tome što rezultat sljedeće instrukcije izravno ovisi o rezultatu jedne ili više prethodnih instrukcija. Na primjer, add rl, r2, r3 ; R[1 ]«- R[2] + R[3] str1,(r5) ;M[R[5]]«-R[l]
S. RIBARIČ - GRAĐA RAČUNALA
467 I
druga se instrukcija može pribaviti i dekodirati prije prve instrukcije, ali se ne smije i izvršiti prije nego što se izvrši prva instrukcija. Razlog tomu je što druga instrukcija treba podatak koji je generira kao rezultat prve instrukcije (RAW hazard). Postupkovna zavisnost odnosi se na upravljanje programskim slijedom uporabom instrukcija grananja. Ciljne instrukcije koje slijede grananju postupkovno ovise o grananju i ne smiju se izvesti sve dok se ne obavi grananje. U potpoglavlju Upravljački hazard vidjeli smo da je ovaj oblik zavisnosti prisutan i kod skalarnih protočnih procesora. Resursni konflikti su u superskalarnoj arhitekturi izraženiji nego kod skalarnih protočnih procesora. U ovom se slučaju istodobno veći broj instrukcija može natjecati za isti resurs (npr. memoriju, izvršnu jedinicu, registre i si.). Resursni konflikt u superskalarnoj arhitekturi rješava se uvišestručavanjem resursa (npr. uporaba dviju ili više cjelobrojnih izvršnih jedinica, dviju ili više jedinica za operacije brojevima s pomičnim zarezom i si.). Izlaznu zavisnost možemo ilustrirati na jednostavnom primjeru programskog odsječka: add r3, r3, r5 ; R[3]«- R[3] + R[5] addi r4, r3, 7 ; R[4] <- R[3] + 1 addi r3, r5, 1 ; R[3] <-R[5] + 1 add r7, r3, r4 ; R[7] <- R[3] + R[4] Ovdje vidimo da između prve i druge instrukcije postoji stvarna zavisnost podataka - druga instrukcija treba rezultat prve instrukcije jer ga koristi kao operand. Četvrta instrukcija ovisi o rezultatu treće instrukcije (treba čekati rezultat koji će treća instrukcija upisati u registar r3). Između prve i treće instrukcije ne postoji stvarna zavisnost podataka - instrukcija addir3, r5,1 ne treba rezultat instrukcije add r3, r3, r5. No ako se treća instrukcija izvrši prije negoli se izvrši prva instrukcija, tada će četvrta instrukcija dohvatiti pogrešan operand iz registra r3. To znači da se treća instrukcija mora izvršiti nakon prve instrukcije da bi izlazna vrijednost (sadržaj registra r3) bila ispravna. Ne smije se dopustiti da se treća instrukcija izvrši prije prve jer u tom slučaju rezultat u registru r3 neće biti ispravan (WAW hazard izlazna zavisnost). Antizavisnost predstavlja hazard vrste WAR koji smo definirali u odjeljku Podatkovni hazard. Na primjer, u programskom odsječku: mulrl,r2,r3 add r2, r4, r5 druga instrukcija add r2, r4, r5 upisuje u registar r2, a prva instrukcija mul rl, r2, r3 koristi isti registar kao izvor (domenu). Ako se iz bilo kojeg razloga instrukcija add r2, r4, r5 izvrši prije instrukcije mul rl, r2, r3, dobit će se pogrešan rezultat. Napomenimo da se u stručnoj literaturi WAW i WAR nazivaju još i lažne zavisnosti (engl. false dependency) koje se mogu ukloniti preimenovanjem registara (engl. register renaming). Primjer 14.14. U programskom odsječku: mul rl, r2, r3 addr2/r4/r5 u kojem su dvije instrukcije antizavisne, prevodilac nakon što detektira zavisnost WAR može preimenovanjem registra r2 u npr. registar r6 ukloniti WAR zavisnost:
468
14. POGLAVLJE: PROTOČNOST
rnul rl, r2, r3 add r6, r4, r5 Slično je i sa zavisnosti WAW, U programskom odsječku: mulr1,r2,r3 addr1,r4,r5 u kojem jedna i druga instrukcija imaju isti vidokrug (izlazna zavisnost), zavisnost WAW uklanja se tako da se npr. registar r1 u drugoj instrukciji preimenuje u npr. r7: mulrl,r2,r3 addr7fr4,r5 Na taj se način dobivaju dvije instrukcije koje su potpuno nezavisne i zato se mogu izvesti paralelno. Potrebno je istaknuti da se preimenovanje registara može temeljiti na tzv. statičkoj izvedbi koja se upotrebljava tijekom postupka prevođenja programa (izvode je optimirajuči prevodioci), ali i na dinamičkoj izvedbi koja se koristi tijekom izvršavanja programa u superskalarnom procesoru. Jasno je da ova druga izvedba zahtijeva dodatne sklopove - registre, međuspremnike i dodatne putove podataka. Superskalarni procesori kao što su K5, PentiumPro, R 10000, PowerPC 620 i mnogi drugi koriste dinamičku izvedbu preimenovanja registara.
14.8.1.
NAČINI IZDAVANJA I ZAVRŠAVANJA INSTRUKCIJA U SUPERSKALARNOJ ARHITEKTURI PROCESORA Performansa superskalarnih procesora ne ovisi samo o broju nezavisnih protočnih struktura i broju protočnih segmenata u svakoj od njih, već i o tome je li procesor sposoban naći paralelizam na razini instrukcija i u skladu s njim uspješno koordinirati pribavljanje, dekodiranje i izvršavanje više instrukcija istodobno. U literaturi se koristi izraz "izdavanje instrukcija" (engl. instruction issue) i on podrazumijeva postupak započinjanja izvođenja instrukcija u funkcijskim jedinicama procesora. Superskalarni procesor ima ugrađene mehanizme kojima može "gledati unaprijed" (engl. lookahead, iookahead window) u odnosu na trenutnu instrukciju koja se izvršava i otkriti instrukcije koje se zahvaljujući tomu što su međusobno nezavisne mogu paralelno izvoditi. Na taj se način pokušava riješiti problem koji nastupa kada su susjedne ili bliske instrukcije u programskom slijedu zavisne i kada se zbog toga moraju umetati protočni mjehurići, odnosno odgađati izvođenje pojedinih instrukcija, i to bez obzira što postoje višestruke funkcijske jedinice. Završavanje instrukcije (engl. instruction completion) odnosi se na trenutak kada je instrukcija okončana. Tri su osnovna načina izdavanja i završavanja instrukcija u superskalarnoj arhitekturi i oni se temelje na redoslijedu u kojem se instrukcije pribavljaju, redoslijedu u kojem one završavaju te redoslijedu u kojem instrukcije mijenjaju sadržaje registara i memorijskih lokacija: • izdavanje i završavanje instrukcija u redoslijedu u kojem se pojavljuju i u programu (engl. in-order issue with in-order completion),
S. RIBARIČ - GRAĐA RAČUNALA
469 I
• izdavanje instrukcija u redoslijedu, ali sa završavanjem izvan redoslijeda (engl. in-order issue with out-of-order completion), • izdavanje i završavanje instrukcija izvan redoslijeda (engl. out-of-order issue with outof-order completion). Vrlo se često u literaturi koristi termin "izvođenje instrukcija izvan redoslijeda"(engl. out-oforder execution) koji se, općenito, odnosi na posljednji navedeni način izvođenja instrukcija. Najjednostavniji način izdavanja i izvršavanja instrukcija je onaj koji točno odgovara redoslijedu pojavljivanja instrukcija u programu. Taj se način u superskalarnoj arhitekturi procesora ne koristi, a rijetko ga možemo naći i u arhitekturi "običnih" protočnih procesora (podsjetimo se optimirajućih prevodioca koji koriste priključak lood kašnjenja). Izdavanje instrukcija u redoslijedu, ali sa završavanjem izvan redoslijeda koristi se u skalarnim RISC i superskalarnim procesorima. Na taj se način postiže djelotvornije iskorištenje protočnih segmenata u pojedinim protočnim strukturama. Kad procesor koristi tehniku izdavanja instrukcija u redoslijedu njihova pojavljivanja u programu, on samo može dekodirati instrukcije do točke kad je utvrđena međuzavisnost podataka ili resursni konflikt. Nakon toga se druge instrukcije u slijedu ne mogu pribavljati i dekodirati sve dok se konflikt ili međuzavisnost ne razriješi. Da bi se omogućilo izdavanje instrukcija izvan redoslijeda, nužno je odvojiti protočni segment za dekodiranje od protočnog segmenta za izvršavanje. To se postiže uporabom instrukcijskog međuspremnika koji se još naziva i instrukcijski prozor (engl. instruction window) kao što je to prikazano na slici 14,29. U instrukcijski spremnik smještaju se dekodirane instrukcije koje čekaju na izvršavanje. Sve dok instrukcijski spremnik nije pun, procesor pribavlja i dekodira instrukcije. Instrukcijski se spremnik prazni tako da se iz njega izdaju (upućuju) instrukcije u izvršavanje, i to ako su ispunjena dva sljedeća uvjeta: i) funkcijska jedinica koju zahtijeva instrukcija je slobodna, ii) nema resursnih konflikata niti međuzavisnosti podataka za tu instrukciju. Zahvaljujući uporabi instrukcijskog spremnika superskalarni procesor ima sposobnost "gledanja unaprijed" (engl. lookahead) i može naći nezavisne instrukcije u programskom slijedu i izdavati ih izvan redoslijeda u kojem se one nalaze u programu. Instrukcijski spremnik nije dodatni protočni segment, već služi procesoru tako da mu pruža dovoljno informacija o instrukciji na temelju kojih on odlučuje o njenziom izdavanju, odnosno upućivanju u izvršnu protočnu strukturu. Uporaba najopćenitijeg načina izdavanja i završavanja instrukcija na način "izdavanje i završavanje instrukcija izvan redoslijeda" dopušta najdjelotvornije iskorištenje protočnih struktura u superskalarnom procesoru, ali se suočava i s novim problemom, a to je nova antizavisnost podataka. Primjer 14.15. Ilustrirajmo kako različiti načini izdavanja i završavanja instrukcija utječu na performansu superskalarnog procesora, koji ima dvije protočne strukture za pribavljanje i dekodiranje instrukcija (IF1 - ID1 i IF2 - ID2), instrukcijski spremnik te četiri protočne funkcijske jedinice (logičku jedinicu, jedinicu load, zbrajalo, množilo) (slika 14.30), za programski odsječak koji se sastoji od šest instrukcija:
470
14. POGLAVLJE: PROTOČNOST
IdrlA addr2,r2,r1 add r3, r3, r4 mul r4, r4, r5 notr6,r6 mul r6, r6, r7
instrukcija /?: instrukcija i2: instrukcija i3: instrukcija i4: instrukcija i5: instrukcija
1 1
R[1]
M[A]
R[2]
R[2] + R[1] R[3] + R[4] R[4] * R[5] R[6] R[6] * R[7]
R[3] R[4] R[6] R[6]
podaci iz priručne memorije podataka
ID,
logička jedinica
instrukcije iz instrukcijske priručne memorije
mstrukcijski spremnik
množilo M,
M2
zbrajalo A1
A2
i1 iD. SL 1430 Superskalarni procesor (Primjer 14.74.)
Prije negoli prikažemo aktivnosti u protočnim segmentima dviju protočnih struktura, pokušajmo utvrditi vrste zavisnosti podataka koje rabe prethodno navedene instrukcije. Instrukcija i2 koristi operand iz registra r1 koji upisuje instrukcija /? - riječ je o RAW, odnosno stvarnoj zavisnosti podataka. Instrukcija i4 antizavisna je o instrukciji i3 jer i4 slijedi instrukciji i3 u programskom slijedu, ali se vidokrug instrukcije (izlaz) i4 preklapa s domenom (ulazom) instrukcije i3: instrukcija i4 upisuje rezultat u registar r4 koji sadržava operand instrukcije i3. Odnos između instrukcija /5 i /J e takav da postoji stvarna zavisnost podataka jer je vidokrug instrukcije i5 domena instrukcije /6: instrukcija i6 koristi sadržaj registra r6 kao operand. Uz sve to, te su dvije instrukcije takve da postoji i izlazna zavisnost - obje instrukcije upisuju rezultat u isti registar (r6). Slika 14.31 prikazuje izvođenje programskog odsječka kada se instrukcije izdaju i završavaju redoslijedom u kojem se pojavljuju i u programu. Protočna struktura 1 (IF1 - IDt) koristi se instrukcijama iJf i3 i /5. Protočna struktura 2 (IF2 - ID2) radi s instrukcijama i2, i4 i /6. Zbog stvarne zavisnosti instrukcija i2 mora pričekati jednu periodu signala vremenskog vođenja da bi mogla koristiti podatak iz registra rl. Instrukcija i3 kasni za jednu periodu jer instrukcija i2 koristi zbrajalo (resursni konflikt). Instrukcija /"5 mora kasniti dvije periode
S. RIBARIČ - GRAĐA RAČUNALA
471 I
vremenskog vođenja da bi se sačuvalo završavanje instrukcija u slijedu. Instrukcija i 6 treba čekati prije nego što se izda rezultat koji generira instrukcija On će biti raspoloživ nakon aktivnosti protočnog segmenta E^ zahvaljujući povratnoj vezi između segmenata. periode signala vremenskog vođenja
11
1 protočna struktura 1
1r —
ID,
IF
protočna struktura 2
2
(IF -ID)
!
!
1 1
i I
t
>F,
(IFflD,)
1
I D
|
E2
WB, A,
2
A,
A2
WB7
M,
M2
M3
WB2
>F,
'D,
E,
>F2
"D3
IF,
ID,
IF
ID2
i
2
j]
WB2
i
i 1
WB, M,
i i
M3
M2
WB2
i
SI. 14,31 Izdavanje i završavanje instrukcija u redoslijedu u kojem se pojavljuju i u programu
Slika 14.32 a) prikazuje slučaj izdavanja instrukcija u redoslijedu, ali sa završavanjem izvan redoslijeda. Slika 14.32 b) prikazuje redoslijed završavanja instrukcija. Vidimo da je i u ovom slučaju potrebno devet perioda signala vremenskog vođenja, ali da instrukcija i5 ne mora čekati dvije periode vremenskog vođenja i može završiti prije instrukcija /3 i i4 koje su potpuno neovisne o instrukciji / r periode signala vremenskog vođenja 1
2
1
3 1
[
4 y , ,
i
5
6
7
8
,
9 i
i i
IF,
ID,
WB,
I F
ID2
A,
2
i i
IF,
ID,
IF2
I D
i j i
V> !i 42 —» VI c
A.
WB2
A,
A2
WB, WB2
2
M,
M2
M3
IF,
ID,
E,
WB,
•F2
ID2
M,
1
M2
M3
WB2
j i
1
a) periode: protočna struktura 1
j
5
l3
protočna struktura 2
>2
>4
b) SI. 14,32 Izdavanje instrukcija u redoslijedu, ali sa završavanjem izvan redoslijeda
«6
472
14. POGLAVLJE: PROTOČNOST
Slika 14.33 a) prikazuje izvođenje istog programskog odsječka na način izdavanja i završavanja instrukcija izvan redoslijeda. Možemo primijetiti da jeza izvođenje programskog odsječka potreban manji broj perioda signala vremenskog vođenja te da je povećana iskoristivost protočnih segmenata u odnosu na prethodna dva načina izdavanja i završavanja instrukcija. Slike 14.33 b) i c) prikazuju redoslijed izdavanja i završavanja instrukcija. periode signala vremenskog vođenja 1
IF,
3
I F
4
£3 ir
2
2
3
!
2
5
IF,
1
'
F
M,
M2
M3
ID,
E,
2
6
7
|i
WB1
I D
2
5
A2
ID, I D
4
j
WB2
WB2 M,
M2
M3
A,
A2
WB2
IF,
ID,
2
>F2
I D
2
1
i
F2
6
8 1
|I
I
1 !
i
i
a) periode: protočna struktura 1
>3
protočna struktura 2
>4
's >2 b)
periode: protočna struktura 1 protočna struktura 2
j
3
j
's '4
6
'2
c) SI. 14.33 Izdavanje i završavanje instrukcija izvan redoslijeda a), redoslijed izdavanja instrukcija b), redoslijed završavanja instrukcija c)
15. POGLAVLJE
VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGRENI I GRAFIČKI PROCESORI .1. OBLICI I RAZINE PARALELIZMA U 14. poglavlju upoznali smo se s protočnim procesorima, superskalarnim procesorima i paralelizmom na razini instrukcija ILP - Instruction-level Parallelism. U relativno kratkoj povijesti računarskih sustava možemo uočiti različite razine paralelizma koje se pojavljuju u procesoru, odnosno računarskom sustavu. Do približno druge polovine osamdesetih godina prošlog stoljeća prevladavajući oblik paralelizma temeljio se na bitovnoj razini (engl. bit-level) koji se očitovao u povećanju duljine riječi procesora: od 4-bitnih, 8-bitnih, 16-bitnih pa sve do 32- ili 64-bitnih procesora. Zahtjevi koji su pratili razvoj arhitekture procesora i koji su koristili paralelizam na razini bita bili su prvenstveno povećanje izravno adresirljivog prostora (prije nego izravno povećanje performanse procesora) te poboljšani načini prikaza i rukovanja brojevima s pomičnim zarezom. Kada govorimo o paralelizmu, razlikujemo dva različita konteksta: raspoloživi paralelizam u programima i iskorišteni paralelizam koji se pojavljuje tijekom izvođenja programa. Raspoloživi paralelizam sadržan je u biti samog problema i njegovom programskom rješenju. Može se govoriti o raspoloživom funkcijskom paralelizmu i raspoloživom podatkovnom paralelizmu. Raspoloživi funkcijski paralelizam očituje se u logičkom rješenju problema i pojavljuje se u formalnim opisima rješenja problema kao što su dijagrami toka, grafovi toka podataka (engl. dataflow graph), programi i si. Raspoloživi podatkovni paralelizam izvire iz same prirode podataka svojstvenih problemu i iz struktura podataka koje se rabe u rješenju problema te koje dopuštaju paralelne operacije na njihovim elementima. Na primjer, podatkovni paralelizam svojstven je digitalnoj obradi slike i problemima u kojima se rukuje strukturama podataka kao što su vektori i matrice. Raspoloživi funkcijski paralelizam može se predočiti različitim razinama koje se izražavaju sa zrnatosti. Zrnatost je mjera količine računanja ili obrade u programu. Na primjer, kao mjera se može uzeti broj instrukcija u nekom programskom odsječku ili programskom segmentu. Na taj način zrnatost određuje osnovni programski segment koji je izabran za paralelnu obradu. Razlikujemo četiri razine raspoloživog funkcijskog paralelizma:
474
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
• paralelizam na razini instrukcija (fino zrnati paralelizam), • paralelizam na razini programskih petlji (engl. loop-level parallelism; srednje zrnati paralelizam), • paralelizam na razini procedura, funkcija ili potprograma (srednje zrnati paralelizam), • paralelizam na razini programa (grubo zrnati paralelizam). Primjer 15.1. S paralelizmom na razini instrukcija dovoljno smo se dobro upoznali u 14. poglavlju, dok paralelizam na razini procedura, funkcija i potprograma te paralelizam na razini programa možemo intuitivno objasniti. Ilustrirajmo paralelizam na razini programske petlje. Promotrimo programsku petlju kojom se zbrajaju dva jednodimenzionalna polja svako od 1000 elemenata: for (i = i ; i <= 1000; i ~ i + 1) x[i] = x[i] +y[i]; Svaka se od 1000 iteracija; i = 1,2,..., 1000 u programskoj petlji može izvesti istodobno s svim ostalim iteracijama tako da se njihovo izvođenje preklapa (istodobno se mogu izvesti 1000 zbrajanja x[i] = x[i] +y[i]; i = 1,2,..., 1000). Raspoloživi funkcijski paralelizam mogu iskoristiti arhitektura procesora i operacijski sustav da bi se povećala brzina obrade. Razine iskorištenog paralelizma su sljedeće: • paralelizam na razini instrukcija, • paralelizam na razini d ret vi (engl. thread), • paralelizam na razini procesa, • paralelizam na korisničkoj razini. Paralelizam na razini instrukcija isključivo se koristi u arhitekturi procesora, dok se paralelizam na razini dretvi i procesa iskorištava u arhitekturi, ali i u operacijskom sustavu. Paralelizam na korisničkoj razini rabi se u operacijskim sustavima, npr. višezadaćni rad (engl. multitasking), višeprogramski rad (engl. multiprogramming) i obrada dodjeljivanjem vremena (engl. time-sharing). Podatkovni se paralelizam može iskoristiti na dva načina: • izravno uporabom arhitektura procesora koje podržavaju paralelne operacije na podatkovnim elementima (npr. procesori SIMD arhitekture, procesori upravljani tokom podataka (engl. data-flow)), • pretvorbom raspoloživog podatkovnog paralelizma u funkcijski tako da se uporabom naredbi iz viših programskih jezika označe paralelno izvodljive operacije na podatkovnim elementima.
15.1.1.
PARALELIZAM NA RAZINI INSTRUKCIJA Od druge polovine osamdesetih godina pa sve do sredine devedesetih godina prošlog stoljeća prevladava paralelizam na razini instrukcija koji je jednako značajan za RISC i CISC procesore. Ova razina paralelizma podloga je za izvedbu superskalarnih procesora koji koriste različite načine izdavanja, izvršavanja i završavanja instrukcija (14. poglavlje). Slika 15.1 prikazuje udio ukupnog broja perioda signala vremenskog vođenja (izražen u %) ovisno o broju izdanih instrukcija. Podaci prikazani na slikama 15.1 i 15.2 dobiveni su kao srednja
S. RIBARIČ - GRAĐA RAČUNALA
475 I
vrijednost brojnih ispitnih programa (engl. benchmark) čije je izvođenje simulirano virtualnim tzv. agresivno oblikovanim strojevima (engl. aggressive machine design) koji mogu paralelno izvesti veći broj instrukcija pod idealnim uvjetima u kojima nema ograničenja raspoloživih resursa i uz uvjet savršenog predviđanja grananja. Vidimo daje paralelizam na razini tri instrukcije najveći, odnosno da dvije, tri i četiri paralelne instrukcije prevladavaju u programima (oko 66 % svih perioda). Jednako tako, vidimo da se oko 18% od ukupnog broja perioda signala vremenskog vođenja troši na strogo sekvencijalne instrukcije. Uz sve to vidimo da pet ili više instrukcija može biti izdano istodobno za svega 10 % slučajeva. Ovaj dijagram može poslužiti i kao putokaz u dizajnu novih arhitektura i za donošenje odluke o tome koliko nezavisnih protočnih struktura treba implementirati u procesoru. Ujedno nam govori o ograničenjima paralelizma na razini instrukcija.
c OJ35 rs o > o > o c
(U
E
30
c
25 CT1 "O
o
20
o o> O c o.
o S
15
10
I I I I I I
• n 0
1
2
3
4
5
6
7 broj izdanih instrukcija
SI. 15.1 Odnos udjela broja perioda signala vremenskog vođenja (%) ovisno o broju instrukcija koje se mogu paralelno izvesti
Slika 15.2 prikazuje odnos između faktora ubrzanja obrade i broja izdanih instrukcija u jednoj periodi signala vremenskog vođenja. Vidimo da je faktor ubrzanja obrade najveći i iznosi između 2.5 i 3.0 za 15 istodobno izdanih instrukcija. Možemo primijetiti da se već nakon pet izdanih instrukcija u jednoj periodi signala vremenskog vođenja postiže ubrzanje obrade veće od 2.5 puta. Paralelizam na razini instrukcija je implicitni paralelizam koji prevodilac ili sklopovlje procesora mora detektirati u slijednom programu - statički tijekom prevođenja programa ili dinamički tijekom izvođenja samog programa. Važno je naglasiti da je program, koji se izvodi tako da koristi višestruko izdavanje instrukcija i protočnu strukturu (superskalarnost i protočnost), izvorno napisan u sekvencijalnom obliku i predviđa izvođenje instrukciju po instrukciju.
476
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
broj izdanih instrukcija po periodi
SI. 15.2 Odnos između faktora ubrzanja obrade i broja izdanih instrukcija u jednoj periodi signala vremenskog vođenja
Djelotvornije iskorištenje paralelizma na razini instrukcija može se postići uporabom eksplicitnog ili izravno izraženog paralelizma u samoj specifikaciji instrukcije ili niza instrukcija. Ovaj pristup u arhitekturi računarskog sustava poznat je pod nazivom VLIW (Very Long Instruction Word) arhitektura ili EPIC (Explicitly Parallel Instruction Computing). Arhitektura procesora s vrlo dugim instrukcijskim riječima (VLIW) temelji se na tri ustaljena koncepta koja već poznajemo - horizontalno mikroprogramiranje, superskalarna obrada i višestrukost funkcijskih jedinica. Osnovna značajka VLIW procesora je vrlo duga instrukcijska riječ kojom se određuju višestruke operacije koje se mogu istodobno izvesti. Programer ili prevodilac (što je češći slučaj) izravno specificiraju operacije koje se mogu izvesti istodobno. Ovakav pristup izgleda logičniji od onog u kojem se paralelizam "skriva" u sekvencijalno napisanom programskom kodu da bi se nakon toga trebao otkriti i iskoristiti. Slika 15.3 a) prikazuje arhitekturu VLIW procesora, a slika 15.3 b) format VLIW instrukcije. Procesor ima višestruke funkcijske jedinice koje dijele veliki zajednički skup registara. Svaka funkcijska jedinica izvedena je kao protočna jedinica. Operacije koje se izvode istodobno u funkcijskim jedinicama sinkronizirane su VLIW instrukcijama koje su duljine npr. 256,512 ili 1024 bita. Međusobna zavisnost operacija i ograničenja u pogledu broja raspoloživih funkcijskih jedinica uzimaju se u obzir pri"pakiranju"tih operacija u VLIW instrukciju tako da je sklopovlje jednostavnije - ne treba otkrivati (detektirati) i izlučivati paralelne operacije te utvrđivati međusobnu zavisnost između njih. Veća razina paralelizma u VLIW arhitekturi postignuta je i uporabom prevodioca koji imaju "širi" (globalni) uvid u program u odnosu na superskalarne procesore kod kojih se izdavanje instrukcija temelji na "uskom" pogledu (engl. peephole) koji se sastoji samo nekoliko slijednih instrukcija u programu.
S. RIBARIČ - GRAĐA RAČUNALA
477 I
veliki skup registara opće namjene
—n—n— memorija
O load/ store jedinica
O
O
FP zbrajalo 1
FP zbrajalo 2
FP množilo
cjelobrojna jedinica
jedinica grananja
a)
FP množenje load/store
FP zbrajanje
FP zbrajanje
grananje
cjelobrojna operacija
b)
SI. 15.3 Arhitektura VLIW procesora a) i format VLIW instrukcije b)
Vrlo sličan koncept eksplicitnog izražavanja paralelizma, nazvan EPIC, korišten je u arhitekturi IA-64 64-bitnog Intelovog procesora Itanium. (Opaska: naziv Itanium koristi se za Intelovu porodicu RISC procesora koji su razvijeni od 2001. do 2010. i nose oznake Itanium (kodnog imena Merced) i Itanium 2 (procesori s 1,2 ili 4 jezgre)). Procesor Itanium je load/ store arhitekture i ima 64-bitne adresne registre i registre podataka koji su organizirani kao skup od 128 registra opće namjene. Procesor ima i skup od 128 registara za brojeve s pomičnim zarezom (duljine 82 bita), 64 1-bitnih tzv. predikatnih registara i 8 registara (svaki duljine 64 bita) koji se koriste za grananje. Procesor ima veći broj izvršnih jedinica različitih namjena (cjelobrojne jedinice, jedinice za operacije brojevima s pomičnim za rezom, jedi niče grananja, jedinice load/store, multimedijske jedinice). Slika 15.4 prikazuje pojednostavljeno sklopovsku organizaciju procesora IA-64 arhitekture. Ako je usporedimo s organizacijom VLIW procesora (slika 15.3), možemo uočiti vrlo veliku sličnost, tako da se IA-64 može opravdano smatrati arhitekturom koja se temelji na VLIW/EPIC pristupu.
128 64-bitna registra opće namjene
memorija
O
O
O
izvršna jedinica
izvršna jedinica
izvršna jedinica
izvršna jedinica
izvršna jedinica
izvršna jedinica
izvršna jedinica
izvršna jedinica
64 pred i katna registra (1-bitni)
A-
128 FP registra (82-bitni)
SI. 15.4 Pojednostavnjeni prikaz sklopovske organizacije procesora IA-64 arhitekture
478
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
Instrukcijska riječ za procesor IA-64 arhitekture duljine je 128 bita i sadržava tri instrukcije tipa RISC koje tvore tzv. "svežanj" (engl. bundle). Svaka od instrukcija u svežnju duljine je 41 bita pa u svežnju tri instrukcije zauzimaju 123 bita, dok se preostalih 5 bitova koriste kao predložak koji sadržava informaciju o njihovom raspoređivanju (engl. scheduling). Točnije, 41-bitna"instrukcija"zapravo nije prava instrukcija (u Intelu je nazivaju slog {engl. sy//afc>/e)) jer se ona mora kombinirati s 5-bitnim predloškom. Predložak određuje tipove instrukcija u svežnju i određuje koje će se instrukcije izvesti pora/e/no. Tipovi instrukcija u svežnju mogu biti sljedeći: • A tip - odnosi se na cjelobrojnu jedinicu (l-unit) i određuje operacije cjelobrojne ALU jedinice (npr. zbroji, oduzmi, logičko I, logičko ILI, usporedi), • I tip - odnosi se na cjelobrojnu jedinicu, ali određuje operacije koje nisu cjelobrojne aritmetičko-logičke, već se odnose na tzv. multimedijske operacije kao što multimedijski posmak, ispitivanje bitova, premještanje, • M tip - odnosi se na jedinicu za pristup memoriji (M-unit) i određuje load i store instrukcije za cjelobrojne i FP (floating-point) registre, • F tip - odnosi se na jedinicu za operacije brojevima s pomičnim zarezom (F-unit) i određuje operacije brojevima s pomičnim zarezom, • B tip - odnosi se na jedinicu grananja (B-unit) i određuje uvjetno, bezuvjetno grananje te pozive potprograma, • L + X tip - izvršavaju se u jedinici grananja ili u cjelobrojnoj jedinici i određuju mješovite i specijalne instrukcije (npr. nop, stop). Specifikacija paralelnosti u izvođenju instrukcija može se proširiti i na dijelove nekoliko svežanja. Zahvaljujući 5-bitnom predlošku pojednostavljenje postupak dekodiranja i izdavanja instrukcija. Mogući su sljedeći načini kombiniranja triju instrukcija u svežnju (ovisno o binarnom uzorka u 5-bitnom predlošku): ij || i21| i3 - sve se tri instrukcije izvode paralelno, ij & i21| i3- prvo se izvodi instrukcija /,, a zatim se instrukcije i2 i i3 izvode paralelno, /71| i2 & i3- prvo se instrukcije i i2 izvode paralelno, a onda instrukcija i3, ij & i2 & i3 - sve se tri instrukcije u svežnju izvode slijedno. Jedna od najvažnijih metoda za nalaženje i djelotvorno iskorištenje paralelizma na razini instrukcija u protočnoj i superskalarnoj arhitekturi procesora je metoda špekulacije ili nagađanja (engl. speculation). Pojednostavljeno, špekulacija je pristup koji dopušta prevodiocu ili procesoru nagađanje o svojstvima i/ili ishodu neke instrukcije, i to tako da omogući započinjanje ostalih instrukcija koje mogu ovisiti o instrukciji na koju se špekulacija odnosi. Na primjer, špekulacija se može odnositi na to da instrukcija store koja prethodi instrukciji load neće referenci rati istu memorijsku lokaciju (nagađanje da nije riječ o RAW hazardu). Drugi primjer je špekulacija o ishodu instrukcije uvjetnog grananja i na temelju tog nagađanja upućuju se instrukcije u protočnu strukturu. Slaba strana špekulacije su poteškoće koje nastupaju ako je nagađanje bilo pogrešno. Mehanizam špekulativnog izvršavanja instrukcija mora predvidjeti postupke koji se odnose na provjeru toga je li nagađanje bilo ispravno i postupke koji se trebaju provesti da bi se vratili na stanje koje je bilo prije špekulativnog izvođenja (engl. back out process) ako se pokaže da je nagađanje bilo pogrešno. Špekulacija se provodi uporabom prevodioca ili sklopovljem procesora, a u novije se vrijeme kombiniraju obje izvedbe.
S. RIBARIČ - GRAĐA RAČUNALA
15.1.2.
479 I
PARALELIZAM NA RAZINI DRETVII PROCESA Dretvu (engl. thread) objasnit ćemo pomoću vrlo jednostavnog modela računala J. Backusa (poglavlje 2.) u kojem se računalo može predočiti memorijskom jedinicom, procesorom i spojnim putom između njih. U memorijskoj su jedinici pohranjeni program (niz strojnih instrukcija) i podaci, a uz to je predviđen i dio memorijskog prostora za (sistemski) stog. Pretpostavimo da u našem jednostavnom modelu procesor može pristupiti cijelom adresnom prostoru koji je određen kapacitetom memorije tako da instrukcije mogu dohvatiti podatke koji su smješteni bilo gdje u memorijskoj jedinici. Program se izvodi tako da se u programsko brojilo upiše adresa prve instrukcije programa i procesor započinje izvođenje programa instrukciju po instrukciju (poglavlje 2.). Izvođenje programa možemo promatrati kao da procesor provlači kroz program (slijed instrukcija) "nit" ili instrukcijsku dretvu, ili kraće, samo dretvu. Slika 15.5 ilustrira izvođenje programa prikazano dretvom.
SI. 15.5 Prikaz izvođenja programa dretvom
Da bi se u potpunosti razumio paralelizam na razini dretvi, potrebno je uputiti na razliku između dretve i računalnog procesa, ili kraće, procesa. Iz operacijskih sustava znademo daje program koji se izvršava organiziran u jedan ili u više procesa. Proces se sastoji barem od jedne instrukcijske dretve (može imati i veći broj dretvi) te predstavlja izvršljivi program ili programski odsječak kojem su dodijeljeni programsko brojilo, adresni prostor, registri i varijable. U tom se smislu može smatrati da svaki proces
480
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
ima svoj virtualni procesor. Ako je riječ o jednoprocesorskom računarskom sustavu, tada se mora stvarni procesor dijeliti između više procesa prijenosom upravljanja s procesa na proces (engl. process switching). U tom se slučaju samo jedan proces izvodi u vremenu, ali zbog brzog prospajanja s procesa na proces, svi procesi promatrani u nešto duljem vremenskom intervalu napreduju. Na taj se način ostvaruje višeprogramski način rada (engl. multiprogramming). Slika 15.6 a) prikazuje višeprogramski način rada - u memoriji su pohranjena tri programa A, B i C, pri čemu se svaki od njih može promatrati kao nezavisan sekvencijalni proces sa svojim programskim brojilom; slika 15.6 b). Slika 15.6 c) prikazuje napredovanje svakog od procesa dodjeljivanjem stvarnog procesora procesu te prijenosom upravljanja s procesa na proces. jedno programsko brojilo
tri programska brojila
L
memonja
a)
b)
procesi
vrijeme c)
SI. 15.6 Višeprogramski način rada: a) U memoriji su pohranjena tri programa A, B i C, b) Programi se mogu promatrati kao tri nezavisna procesa svaki sa svojim programskim brojilom (i adresnim prostorom), c) Napredovanje svakog od procesa dijeljenjem stvarnog procesora
Računalnom procesu su, budući da je riječ o procesu u vremenu, pridruženi i neki vremenski atributi kao što su trenutak početka izvođenja, trenuci zaustavljanja izvođenja, trenutak završetka izvođenja i trajanje izvođenja, lako je proces samostalna i nezavisna jedinka sa svojim programskim brojilom, memorijom i registrima, on je vrlo često u interakciji s ostalim
S. RIBARIČ - GRAĐA RAČUNALA
481 I
procesima (npr. jedan od procesa generira izlazne rezultate koji su ulazni podaci za neki drugi proces). S obzirom na interakciju procesa i njihovu međuzavisnost te raspoloživost stvarnog procesora, možemo identificirati tri stanja u kojima se proces može nalaziti (slika 15.7): i) aktivno stanje procesa (engl. running) - to je proces kojem je dodijeljen procesor i koji se upravo izvodi, ii) pripravno stanje procesa (engl. ready) - proces je spreman za izvođenje i čeka na dodjelu procesora, iii) blokirani proces (engl. blocked) - proces čeka na ispunjenje nekog uvjeta za njegovo daljnje napredovanje (npr. proces čeka na neki vanjski događaj, čeka na istek nekog vremenskog intervala). Potonja stanja procesa jednoznačno su određena ako se proces sastoji samo od jedne dretve. Slika 15.7 prikazuje dijagram stanja procesa i uvjete prijelaza iz stanja u stanje.
1 proces se blokira (npr. čeka na vanjski događaj ili završetak ulazno-izlazne operacije) 2 raspoređivač procesa izabrao je drugi proces 3 raspoređivač procesa izabrao je upravo ovaj proces 4 ulaz je postao raspoloživ - blokirani proces prelazi u pripravno stanje SL 15.7 Dijagram stanja procesa
Operacijski sustav održava tabiicuprocesa (engl.process table) u kojoj svaki element tablice odgovara jednom procesu i sadržava informaciju potrebnu za rukovanje procesom (engl. process management), informaciju potrebnu za rukovanje memorijom (engl. memory management) te informaciju potrebnu za rukovanje datotekama (engl. file management). Na primjer, tablica sadržava informaciju o stanju registara dodijeljenih procesu, sadržaju programskog brojila, sadržaju statusnog registra, sadržaju kazala stoga, vremenima početka i trajanja procesa, vremenu korištenja procesora (engl. CPU time) i si. Dio koji se odnosi na rukovanje memorijom sadržava informaciju o dodijeljenom memorijskom prostoru, kazaljkama na programski segment i segment podataka i si. Dio koji se odnosi tia rukovanje datotekama sadržava informaciju o stanju otvorenih datoteka, informaciju o korijenskom direktoriju (engl. root directory) i radnom direktoriju (engl. working directory) te opis datoteka. Posebni procesi namijenjeni su U/l uređajima i njihovoj komunikaciji s procesorom uporabom prekida ili iznimke. Aktivnosti tijekom prekidnog procesa opisali smo u 13. poglavlju.
482
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGREN! I GRAFIČKI PROCESORI
Važno je naglasiti da se sva informacija koja se odnosi na određeni proces mora pohraniti natrag u tablicu procesa, i to svaki put kada proces iz aktivnog stanja prelazi u stanje pripravnosti ili blokiranosti. Do sada smo razmatrali višeprogramski način rada u kojem je više procesa dijelilo u vremenu jedan stvarni procesor. No ako računarski sustav ima više procesora, tj. ako je višeprocesorski sustav, onda je moguće svakom procesu, umjesto virtualnog procesora, dodijeliti procesor i tada se međusobno nezavisni procesi mogu izvoditi istodobno. Proces u najjednostavnijem obliku ima samo jednu dretvu ili nit instrukcija i jedno programsko brojilo. Današnji višenamjenski računarski sustavi, odnosno njihovi operacijski sustavi podržavaju veći broj d ret vi u jednom procesu. Takve se dretve nazivaju još i "laki" procesi (engl. lightweight process) jer se pri prijenosu upravljanja s dretve na dretvu ne zahtijeva pohrana onoliko velike količine informacije kao kod procesa te su i kućanski poslovi manji. Pokušajmo uputiti na razlike između procesa i dretve. Pretpostavimo da u računarskom sustavu imamo tri procesa: A, B i C. Svaki od njih ima svoju jednu dretvu i programsko brojilo te svaki od procesa djeluje u tri različita adresna prostora (slika 15.8). računarski sustav
SI. 15.8 Tri procesa u računarskom sustavu
Slika 15.9 prikazuje jedan proces u računarskom sustavu koji ima tri dretve. One, kao i u slučaju "klasičnog" procesa imaju svaka svoje programsko brojilo, ali dijele zajednički adresni prostor koji je dodijeljen tom procesu. računarski sustav
proces SI. 15.9 Jedan proces s tri dretve
S. RIBARIČ - GRAĐA RAČUNALA
483 I
Prisutnost više dretvi u jednom procesu koje dijele isti adresni prostor zahtijeva, pored tablice procesa, još i tablicu dretve (naziva se još i opisnikdretve) s informacijom o identifikatoru dretve, pripadnosti dretve određenom procesu, stanju i prioritetu dretve, početnoj adresi dretvenog adresnog prostora, sadržaju programskog brojila te sadržaju registara. Sadržaj programskog brojila, sadržaji registara i stanje dretve čine kontekst dretve koji je potreban jer se izvođenje dretve poput procesa može suspendirati, a nakon izvjesnog vremena ponovo aktivirati. Dretva može biti, jednako kao i proces, u aktivnom stanju, stanju pripravnosti i stanju blokiranosti. Stanje procesa s više dretvi ne može se jednoznačno opisati kao u slučaju procesa s jednom dretvom. Na primjer, jedna dretva procesa može biti u aktivnom stanju, dvije u stanju pripravnosti, a jedna u stanju blokiranosti - u kojem je stanju taj proces? Proces s više dretvi može se izvoditi u jednoprocesorskom računarskom sustavu tako da se procesor dodjeljuje naizmjence pojedinim dretvama. U tom se slučaju prenosi upravljanje s dretve na dretvu uz uzastopno pohranjivanje i obnavljanje konteksta dretvi. U slučaju izvođenja više dretvi u jednoprocesorskom sustavu teško se može očekivati ubrzanje odvijanja procesa. Ono je moguće ako procesor izvodi neku drugu dretvu, dok druga zbog nekog razloga mora čekati. Potpuno iskorištenje paralelizma na razini dretvi postiže se u višeprocesorskom računarskom sustavu u kojem je svaki procesor zadužen za jednu od više raspoloživih dretvi u procesu. U tom slučaju govorimo o višedretvenom radu (engl. multithreading). (Opaska: u stručnoj se literaturi često izraz "višedretveni rad" (engl. multithreading) upotrebljava za izvođenje više dretvi na jednom procesoru (odnosno većem broju virtualnih procesora) analogno nazivu "višeprogramski rad" (engl. multiprogramming). Izvođenje većeg broja dretvi u višeprocesorskom sustavu često se naziva i "hiperdretveni rad" (engl. hyperth reading).) Tvrtka Intel koristi kovanicu "hiperdretvena tehnološka arhitektura" (engl. hyperthreading technology architecture) pod kojom se podrazumijeva da se jedan fizički procesor pojavljuje kao veći broj logičkih procesora. Svakom logičkom procesoru dodijeljena je jedna kopija stanja i oni dijele jedan skup izvršnih resursa fizičkog procesora. Ovakav se pristup koristi u tzv. Intelovoj Net burst mikroarhitekturi.Tako definirana "hi perdretvenost" više odgovara nazivu "višedretvenost". Paralelizam na razini dretvi (engl. thread-levelparalellism;TLP) bitna je alternativa paralelizmu na razini instrukcija (ILP) jer se može ostvariti jednostavnije i jeftinije od ILP-a. S druge strane, u mnogim je primjenama paralelizam na razini dretvi svojstven i prirodan samom problemu. Potrebno je istaknuti da se ove dvije razine paralelizma u implementaciji arhitekture procesora međusobno ne isključuju, štoviše, one se podupiru i doprinose većoj performansi procesora (vidi 15.4).
15.1.3.
PARALELIZAM NA KORISNIČKOJ RAZINI Paralelizam na korisničkoj razini korišten je u obliku višeprogramskog rada u kojem se procesor djelotvorno koristi tako da se oblikuju pripravni procesi koji pripadaju različitim korisničkim programima. U trenutku kada proces koji se izvodi postane blokiran zato što čeka određen događaj, npr. završetak U/l operacije, procesor se dodjeljuje drugom pripravnom procesu. Višezadaćni način rada (engl. multitasking) sličan je višeprogramskom načinu rada
484
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
te ga stoga neki autori poistovjećuju s njim, međutim, postoji jedna razlika - istodobno aktivni procesi u višezadaćnom načinu rada pripadaju istom korisniku, štoviše vrlo često pripadaju i istom korisničkom programu. Pseudoparalelizam na korisničkoj razini postiže se rodom u vremenskojpodjeii (engl. timesharing) kojim se nudi istodobna usluga većem broju korisnika koji pristupaju računarskom sustavu terminalima. I u ovom se slučaju oblikuju pripravni procesi za svakog korisnika te se raspoređuju tako da se svakom korisniku jamči odgovarajuće vrijeme odgovora (engl. response time). Da bi se to postiglo, svakom se od procesa naizmjence dodjeljuje procesorsko vrijeme i ostali računalni resursi.
15.1.4.
PODATKOVNI PARALELIZAM Podatkovni paralelizam može se dvojako iskoristiti. Jedna je mogućnost izravne uporabe podatkovnog paralelizma namjenskom arhitekturom koja dopušta paralelne operacije na podatkovnim elementima, npr. SIMD (Single Instruction Stream Multiple Data Stream) arhitektura ili arhitektura upravljana tokom podataka (engl. dataflow) (vidi 1. poglavlje). Druga je mogućnost pretvorba podatkovnog paralelizma u funkcijski paralelizam tako da se na slijedan način izraze paralelno izvodljive operacije na podatkovnim elementima uporabom jezičnog konstrukta za specifikaciju programskih petlji (vidi Primjer 15.1.). SIMD računarski sustavi iskorištavaju podatkovni paralelizam djelovanjem na vektorima ili dvo- i višedimenzionalnim poljima podataka. Na primjer, jednom SIMD instrukcijom mogu se obaviti zbrajanja 64 para raspoloživih operanada u 64 aritmetičko-logičke jedinice, i to u jednoj periodi signala vremenskog vođenja. Podatkovni paralelizam se u SIMD arhitekturi iskorištava zahvaljujući brojnim izvršnim jedinicama koje su sinkronizirane tako da djeluju paralelno i sve izvode istu operaciju koja je određena jednom instrukcijom. Izvorna motivacija razvoja SIMD arhitekture bila je smanjenje troškova realizacije upravljačkih jedinica za brojne izvršne jedinice te smanjenje zahtjeva za kapacitetom programske memorije. Programska memorija SIMD računala sadržava samo jedan primjerak programa - slijeda instrukcija. Osnovne zamisli SIMD nalazimo i u arhitekturi suvremenih procesora. Mnogi od njih imaju SIMD instrukcije koje su namijenjene poboljšanju performansi za multimedijske aplikacije. One omogućuju istodobno izvođenje jedne operacije na većem broju operanada u većem broju aritmetičko-logičkih jedinica (ALU) ili omogućuju veći broj operacija na većem broju operanda koji su duljine manje od duljine riječi (engl. subword operand) kojima se koristi procesor. U ovom drugom slučaju (kraći operandi - duljine podriječi) SIMD instrukcije rekonfiguriraju jednu ALU koja se koristi dugim riječima u više manjih ALU koje djeluju paralelno na kraćim operandima.Tako se, na primjer, 64-bitna ALU pretvara u dvije 32-bitne ALU ili u četiri 16-bitne ALU ili u osam 8-bitnih ALU koje djeluju istodobno na operandima odgovarajuće duljine. Kraći se operandi, u odnosu na 32- i 64-bitne duljine riječi, upravo pojavljuju u multimedijskim aplikacijama, tako se na primjer podaci duljine 8 bita koriste za definiranje vrijednosti primarnih boja (R, G, B) slikovnih elemenata (engl. pixel) ili se 16-bitni podaci koriste za prikaz vrijednosti zvučnog uzorka.
S. RIBARIČ - GRAĐA RAČUNALA
485 I
Primjer 15.2. Godine 1997. tvrtka Intel je proširila skup instrukcija za procesore Pentium i PentiumPro s 57 SIMD instrukcija koje su nazvane MMX (Multi Media Extensions). One djeluju na višestrukim kraćim cjelobrojnim operandima i djelotvorno te uz nisku cijenu iskorištavaju podatkovni paralelizam. MMX instrukcije djeluju nad skupom 64-bitnih registara koji su nazvani MMX registri. Zapravo, MMX instrukcije koriste osam registara za podatke s pomičnim zarezom (floating-point registre) koji se koriste kao MMX 64-bitni registri. Svaki od 64-bitna MMX registra sadržava ili jedan 64-bitni cijeli broj ili vektor koji se sastoji od 2, 4 ili 8 cjelobrojnih podataka (sukcesivno kraćih operanada, npr. osam 8-bitnih operanada). Različite aritmetičke i logičke MMX instrukcije te MMX instrukcije za uspoređivanje podataka i njihovo preuređenje djeluju na 64-bitnim i 32-bitnim operandima te 8-, 4- i 2-komponentnim nezavisnim vektorima koji se mogu "upakirati" u 64-bitnu riječ. Slika 15.10 prikazuje izvođenje MMX instrukcije za paralelno zbrajanje dvaju 8-komponentnih vektora pri čemu su onemogućeni bitovi prijenosa na granicama pojedinih 8-bitnih operanada. 64-bitni MMX registar 64-bitni MMX registar
a
c
b /
d
f
e
h
9
/ 0
63
i
k
j
w T
m
1
y
n
w
T
T
63
0
T 1r
a+i
b+j
c+k
d+l
e+m
P
Y V
f+n
g+o
0
h+p
SI. 15.10 Izvođenje M M X instrukcije paralelnog zbrajanja dvaju vektora
MMX instrukcije barataju samo cjelobrojnim vrijednostima. Procesoru Pentium III (1998.) pridodano je još 70 SIMD instrukcija, nazvanih SSE (Streaming SIMD Extensions) koje djeluju na osam dodatnih registara duljine 128 bita i podržavaju operacije jednostruke točnosti podacima s pomičnim zarezom (engl. single precision floating-point operation) tako da se istodobno mogu izvesti četiri operacije s pomičnim zarezom na četiri 32-bitna operanda, Proširenje skupa SIMD instrukcija nastavilo se pa su 2001. skupu instrukcija dodane nove 144 instrukcije SSE2 koje podržavaju SIMD operacije na 64-bitnim podacima s pomičnim zarezom. Nakon toga slijede nova proširenja skupa SIMD instrukcija SSE3 (2004.) i SSE4 (2006.). Godine 2007. tvrtka AMD uvodi SSE5 sa 170 novih instrukcija, a 2008. Intel uvodi skup SIMD instrukcija AVE -Advanced Vector Extension kojim se SSE registri proširuju s 128 na 256 bita duljine te se skup SIMD instrukcija povećava na više od tri stotine!
486
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGREN! I GRAFIČKI PROCESORI
15.2. PARALELNE ARHITEKTURE: VIŠEPROCESORSKI SIMD, VEKTORSKI PROCESORI I M I M D SUSTAVI Raspoloživi funkcijski paralelizam i podatkovni paralelizam podloga su za ostvarivanje paralelnih računarskih arhitektura. Prema Flynnovoj klasifikaciji koja se temelji na paralelizmu instrukcijskih tokova i tokova podataka (1. poglavlje), tri se kategorije arhitekture odnose na paralelne računarske sustave.To su MISD (Multiple Instruction Stream SingleData Stream), SIMD (Single Instruction Stream Multiple Data Stream) i MIMD (Multiple Instruction Stream Multiple Data Stream). Do sada, koliko je autoru ove knjige poznato, nije realiziran (komercijalni) višeprocesorski sustav MISD koji bi se temeljio na izvornim značajkama te kategorije arhitekture. U14. smo poglavlju vidjeli kako se paralelizam na razini instrukcija djelotvorno koristi u protočnim RISC i CISC procesorima koji se obično razvrstavaju u MISD kategoriju arhitekture. Računarske sustave koji se temelje na većem broju procesora nazivat ćemo višeprocesorski sustavi. Oni s obzirom na kategoriju arhitekture (prema Flynnu) mogu biti višeprocesorski SIMD i višeprocesorski MIMD. Za višeprocesorske sustave MIMD koristiti ćemo uobičajen naziv - multiprocesori \li multiprocesorski sustavi.
15.2.1. VIŠEPROCESORSKI SIMD SUSTAVI Osnovna značajka SIMD arhitekture je istodobno izvođenje iste instrukcije od strane većeg broja procesora koji djeluju na različitim, višestrukim tokovima podataka. Višeprocesorski SIMD računarski sustavi namijenjeni su rješavanju složenih problema s visokim stupnjem inherentnog paralelizma, prvenstveno sadržanog u podacima. Dakle, višeprocesorski SIMD sustavi iskorištavaju podatkovni paralelizam. Slika 15.11 prikazuje osnovnu organizaciju višeprocesorskog SIMD računarskog sustava. Ono ima jednu središnju upravljačku jedinicu koja upravlja radom N » 1 procesora. (Opaska: vrlo se često procesori nazivaju i procesnim elementima). Svaki procesor ima svoju privatnu (lokalnu) memoriju podataka koja predstavlja jedan od izvora i ponora toka podataka. Središnja upravljačka jedinica pribavlja instrukcije iz jedne programske memorije i odašilje ih procesorima. Upravljačke jedinice procesora interpretiraju operacijski kod instrukcije i u skladu s njim izvode operaciju. Svi procesori djeluju istodobno i izvode istu instrukciju, ali nad različitim podacima koji se dohvaćaju iz privatnih memorija podataka. Instrukcije koje se istodobno izvode u svim procesorima definiraju aritmetičke i logičke operacije, operacije preusmjeravanja podataka, maskiranja i druge lokalne operacije. Na temelju operacije maskiranja određuju se procesori koji će u skladu s programom propustiti izvođenje neke zadane instrukcije. Središnja upravljačka jedinica zapravo je računalo koje osim funkcije pribavljanja i odašiljanja instrukcija izvodi instrukcije koje se odnose na skalarne operacije i na one za upravljanje tokom programa (npr. instrukcije uvjetnog grananja). Svi su procesori identični i preko prospojne mreže (engl. interconnection netvvork) međusobno izmjenjuju podatke. Višeprocesorski SIMD sustav obično je povezan s računalom opće namjene - računalom domaćinom (engl. host computer) tako da je omogućeno punjenje programske memorije novim programom te punjenje lokalnih memorija novim podacima.
S. RIBARIČ - GRAĐA RAČUNALA
487 I
procesor 1 lokalna memorija podataka 1
procesor 2 lokalna memorija podataka 2
-A V prospojna mreža
procesor N lokalna memorija podataka N
računalo d o m a ć i n
SI. 15.11 Organizacija višeprocesorskog SIMD računarskog sustava
SIMD arhitektura u nekoliko je posljednjih godina dobila na značenju, posebno u multimedijskoj primjeni (naročito u računalnoj grafici) kao jedan od djelotvornih pristupa oblikovanja trodimenzionalnih virtualnih okruženja u stvarnom vremenu. Utjecaj SIMD koncepata na arhitekturu procesora prikazali smo u Primjeru 15.2.
15.2.2.
VEKTORSKI PROCESORI Jedan od najdjelotvornijih načina iskorištavanja podatkovnog paralelizma postiže se u računarskim sustavima koji se svrstavaju u SIMD kategoriju arhitekture i temelje se na vektorskom procesoru (engl. vectorprocessor). Osnovna značajka vektorskog procesora jest da rukuje strukturiranim tipom podataka - vektorima, ali i skalarnim tipovima podataka. Vektori su jednodimenzionalna polja koja se sastoje od istovrsnih elemenata - skalarnog tipa podataka, pri čemu je svaki element u jednodimenzionalnom polju jedinstveno određen pomoću pridruženog mu indeksa. Na primjer, vektor x koji se sastoji od 64 elemenata, od kojih je svaki tipa reai (floating-point ili broj s pomičnim zarezom) predočen je komponentama x(l), x(2), x(3),..., x(63), x(64). Vektorski procesor obavlja aritmetičke i logičke operacije na operandima koji su vektori.
488
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
Primjer 15.3. Razmotrimo računanje sume dvaju 64-dimenzionalnih vektora x I y. Rezultat je vektor w: W = X + y.
U "običnom" jednoprocesorskom sustavu ta bi se operacija izvela na temelju programskog odsječka: for i = 1 to 64 w(i) := x(i) + y(i); Vidimo da bi se računanje zbroja dvaju vektora izvelo u programskoj petlji, i to slijedno uzastopnim operacijama zbrajanja odgovarajućih komponenti obaju vektora. U vektorskom procesoru gornja bi se operacija izvela samo jednom vektorskom instrukcijom, odnosno instrukcijom tipa vektor-vektor kojoj su operandi dva 64-dimenzionalna vektora, a rezultat, koji se dobiva u vektorskoj aritmetičko-logičkoj jedinici (vektorska ALU), također je 64-dimenzionalni vektor. Vektorska ALU može istodobno zbrojiti sve odgovarajuće komponente obaju vektora. Svaki od vektora, koji predstavlja operand u vektorskoj instrukciji, smješten je u vektorski registar, npr. V., odnosno V., a rezultat se smješta u vektorski registar Vk. Vektorska instrukcija specificira veliku količinu posla i jednakovrijedna je, u potonjem slučaju, cijeloj programskoj petlji. Takva vektorska instrukcija, koja predstavlja desetke ili stotine "klasičnih" instrukcija, značajno je smanjila vrijeme potrebno za pribavljanje i dekodiranje instrukcija - vektorska se instrukcija samo jednom pribavlja i samo jednom dekodira (za razliku od gornje programske petlje koja zahtjeva 64 pribavljanja i dekodiranja instrukcija). Uz sve to, rezultat - sve komponente vektora w, vektorska instrukcija generira istodobno. Uporaba vektorske ALU u kojoj se istodobno izvode operacije nad svim komponentama vektora u vektorskim je procesorima ipak rijetka. Umjesto, na primjer, vektorskog množila brojevima s pomičnim zarezom (koji bi istodobno generirao sve produkte), u praksi se koristi protočno množilo s relativno velikim brojem protočnih segmenata te se svaki parcijalni rezultat (umnožak dviju komponenata) dobiva u svakoj periodi signala vremenskog vođenja čije je trajanje određeno vremenom obrade u jednom protočnom segmentu. Razlozi takva rješenja nisu tehnološka ograničenja, već ekonomski faktor. Primjer 15.4. Razmotrimo izvođenje vektorske instrukcije množenja dvaju 64-komponentnih vektora u 7-segmentnom protočnom množilu brojevima s pomičnim zarezom: MULTV VI, V2, V3
; V3 = VI * V2
Slika 15.12 prikazuje vremenski dijagram izvođenja gornje operacije. Svaka horizontalna linija odgovara potpunoj obradi para komponenti 64 komponentnih vektora. Sa r je označeno vrijeme dohvata (čitanja) para komponenti vektora, a s w je označeno vrijeme upisa rezultata u odredišni vektorski registar V3 (za svaku njegovu komponentu). Sukcesivni se parovi vektorskih komponenti vektora V1 i V2 učitavaju u množilo, i to započevši od t^ prvi se rezultat generira u trenutku t 8 da bi se u sljedećem trenutku tg upisao u prvi element odredišnog vektorskog registra V3. Nakon toga, nakon svakog se trenutka novi rezultat upisuje u odgovarajući element vektorskog registra V3. Konačan se rezultat dobiva nakon 9 + 63 periode signala vremenskog vođenja.
S. RIBARIČ - GRAĐA RAČUNALA
t0 I
V,(1),V2(1) i
»i 1
l
2 1
l
3 1
% 1
-—i
t5 »
t6 1
t7 i
t8 1
t9 I
t,0 i
t,2 1
t
u
\
t14 h~ vrijeme
V30)=V1(1),V2(1)
V1(2),V2(2) _ ! _
VI (3), V2(3) i
h - ^ - l r
i
SI. 15.12 Vremenski dijagram izvođenja vektorske instrukcije MULTV V I ,
w
t„ i
489 I
V3i2)=V1(2).V2(2)
V3(3)=V1(3)«V2(3>
V2, V3
Vektorski se procesor može opisati kao objedinjenje sklopovskih resursa koje uključuje vektorske registre, skalarne registre, (registarska) brojila, protočne funkcijske jedinice te procesne elemente kojima se podržavaju vektorske operacije, odnosno aritmetičke i logičke operacije kojima su opera nd i vektori, ali i skala rne operacije te mješovite operacije s vektorima i skalarima. Slika 15.13 prikazuje pojednostavljenu shemu računarskog sustava koji se temelji na vektorskom procesoru. (Opaska: u literaturi se vrlo često umjesto "računarski sustav koji se temelji na vektorskom procesoru" koristi samo izraz "vektorski procesor") Vektorski se procesor sastoji od tri podsustava: podsustava za pribavljanje instrukcija, skalarnog te vektorskog podsustava. Podsustav za pribavljanje instrukcija dohvaća instrukcije iz instrukcijske priručne memorije i ovisno o tipu instrukcije distribuira instrukcije skalarnom ili vektorskom podsustavu. Oba podsustava - skalarni i vektorski - djeluju istodobno. Programski segmenti koji su bogati instrukcijama grananja podesniji su za izvođenje u skalarnom podsustavu. Skalarni podsustav podržava i računanje efektivnih adresa te rukovanje iznimkama. Vektorski podsustav namijenjen je izvođenju uniformnih, računski intenzivnih podatkovno paralelnih segmenata. Skalarni se podsustav sastoji od instrukcijskih međuspremnika i odgovarajućih sklopova za izdavanje skalarnih instrukcija. Sastavni dio skalarnog podsustava je skalama priručna memorija, skup skalarnih registara te skalarne protočne funkcijske jedinice. U sklopu skalarnog podsustava nalazi se još i skup adresnih registara i adresna jedinica (nisu zbog jednostavnosti prikazani na slici 15.13). Tipične skalarne funkcijske jedinice su: protočno zbrajalo brojeva s pomičnim zarezom, protočno množilo brojeva s pomičnim zarezom i protočna jedinica za računanje recipročnih vrijednosti operanada. Nadalje, tu su protočno zbrajalo brojeva čvrstim zarezom, posmačni sklop i jedinica za logičke operacije. Adresna jedinica sastoji se od cjelobrojnog protočnog zbrajala i cjelobrojnog protočnog množila i tako podržava djelotvorno računanje efektivnih adresa. Vektorski se podsustav sastoji od skupa vektorskih registara (npr. osam vektorskih registara V(0) - V(7)), pri čemu svaki od registara sadržava broj riječi koji je potencija broja dva, na primjer, 64 ili 128 riječi. Primjerice, jedan vektorski registar sadržava stotinu dvadeset i osam 64-bitnih riječi. Skup vektorskih registara izveden je kao višeulazna i višeizlazna pristupna memorija tako da podržava preklapanje vektorskih operacija koje koriste različite registre. Tipične vektorske funkcijske jedinice su protočno zbrajalo za istodobno zbrajanje vektora čiji su elementi skalari predočeni kao brojevi sa čvrstim zarezom, protočni posmačni sklop i protočna logička jedinica. Vektorske load i store jedinice specijalizirane su za dohvat i pohranu vektora iz/u memoriju. Memorijska jedinica izvedena je kao protočna tako
490
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
da se riječi između (glavne) memorije i vektorskih registara premještaju brzinom koja odgovara brzini sklopovlja vektorskih funkcijskih jedinica (jedna riječ u jednoj periodi signala vremenskog vođenja). Budući da se vektorske operacije izvode na velikim skupovima podataka koji se, obično, ne podudaraju s kapacitetom priručne memorije, vektorske load i stote jedinice izravno su povezane s glavnom memorijom.
protočna funkcijska jedinica 1 I.-
zj vektorska load jedinica
- -
4
protočna funkcijska jedinica 2
•
=J V<7)
J
**
V(0)
protočna funkcijska jedinica 3 skup vektorskih registara V(0)-V(7)
vektorska store jedinica
zj *
vektorski podsustav
o
E
O) E ro
c> J5
protočne funkcijske jedinice
U)
skalama priručna memorija
skup skalarnih registara
skalarni podsustav
instrukcijski međuspremnici
instrukcijska priručna memorija
jedinica za pribavljanje instrukcija
podsustav za pribavljanje instrukcija
SI. 15.13 Vektorski procesor (pojednostavnjeni prikaz)
S. RIBARIČ - GRAĐA RAČUNALA
491 I
Vektorski procesor podržava šest tipova vektorskih instrukcija: i) instrukcije vektor-vektor (slika 15.14 a)) - jedan ili dva vektorska operanda dohvaćaju se iz vektorskih registara i ulaze u protočnu funkcijsku jedinicu te proizvode rezultat koji se u obliku vektora pohranjuje u jednom od vektorskih registara. Formalno, instrukcija vektor-vektor može se opisati kao: f 1- V i. ^ V k f'2: Vi X Vj V k' gdje su V. i V. izvorišni vektorski registri, a Vk odredišni vektorski registar; ii) instrukcije vektor-skalar (slika 15.14 b)) - jedan operand je vektor smješten u vektorskom registru V., a drugi je operand skalar s smješten u jednom od skalarnih registara s.J Formalno: f 3: s.j x V.i V., k' gdje je s skalarni registar; iii) instrukcija vektor-memorija (slika 15.14 c)) - odgovara operaciji dohvata vektora iz memorije (load) ili operaciji pohrane vektora u memoriju (store). Vektori se pohranjuju ili dohvaćaju element po element između vektorskog registra i protočno izvedene memorije. Ovaj je tip instrukcija podržan vektorskom load i vektorskom store jedinicom (slika 15.13). Formalno se ovaj tip instrukcije može opisati kao: , f4: M I f5: V. gdje je M glavna memorija;
V. za operaciju load M za operaciju store,
iv) instrukcija redukcije vektora. Formalno se taj tip instrukcije može opisati kao: f 6 • V.i s.} f 7* V.i x Vj s. j Na primjer, vektorske instrukcije koje odgovaraju funkciji f6 su traženje elementa u vektoru koji ima maksimalnu ili minimalnu vrijednost ili, pak, instrukcija koja računa sumu svih elemenata koji čine vektor V. Primjer vektorske instrukcije koja odgovara funkciji f7 je skalarni produkt dvaju vektora V, i V.; v) instrukcije okupljanja (engl. gather) ili raspršivanja (engl. scatter) - tim se tipom instrukcija uporabom dvaju vektorskih registara okupljaju vektorski elementi dohvaćeni iz memorije ili se uporabom dvaju vektorskih registara raspršuju elementi vektora u memoriju. Formalno se instrukcije ovog tipa mogu opisati kao: f 8 :M->V,xV 0 okupljanje f9: V1 x VQ M raspršivanje. Operacijom okupljanja iz memorije se dohvaćaju elementi različiti od nule, i to tako da vektorski registar VQ sadržava indekse (kazaljke) na podatke u memoriji, a vektorski registar V1 sadržava podatke koji se iz memorije dohvaćaju i oblikuju tzv. rijetko popunjeni vektor. Slika 15.14 d) prikazuje operaciju okupljanja, pri čemu adresni registar A0 sadržava adresu početne memorijske lokacije na kojoj se nalaze podaci, a pomoćni registar VL definira duljinu novonastalog vektora. Operacija raspršivanja obrnuta je operacija u odnosu na operaciju okupljanja. Pomoću nje se u memoriju pohranjuje rijetko popunjeni vektor;
492
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
vi) instrukcije maskiranja - taj tip instrukcije upotrebljava vektor maskiranja Vm (engl. maskvector) pomoću kojeg sažima ili proširuje izvorni vektor. Formalno maskiranje može se opisati kao preslikavanje: f i10n :V_xV - • V1. 0 m I u ovoj operaciji sudjeluje pomoćni registar VL koji pokazuje koliko elemenata registra V0 sudjeluje u operaciji maskiranja (slika 15.14 e)). Na slici 15.14 e) prikazanje primjer operacije maskiranja kojom se ispituje dvanaest komponenti ispitnog vektorskog registra V0. Ispituje se jesu li komponente vektora VQ različite od nula, i to samo oni elementi vektora koji odgovaraju jedinicama u maskirnom registru Vm. U vektorskom registru V1 pohranjuju se indeksi koji odgovaraju elementima u ispitnom registru VQ i koji su različiti od 0. vektorski registar
V
vektorski registar V.
vektorski registar V,
f
protočna funkcijska jedinica
-> ->
a) vektorski registar V-i
vektorski registar Vk
skaJarni registar
sj
protočna funkcijska jedinica
•
w b)
SI. 15.14 a) i b) Prikaz tipova vektorskih instrukcija
S. RIBARIČ - GRAĐA RAČUNALA
vektorski registar V/V,
M
vektorski registar V„
pomoćni registar V.
vektorski registar V,
adresa
sadržaj
0600 0400
- 0100
0200
0250
0101
0300
0200
- 0102
0400
0103
0500
- 0104
0600
0105
0700
0106
0100
- 0107
0250
0108
0350
0100 adresni registar A„
0109 010A 010B
d) pomoćni registar V, 12
493 I
vektorski registar V0 {ispitivani registar)
vektorski registar V1 (rezultat)
0
01_
1
03
0
04
1
07
010110011101...
1
08
maski rni registar V
0 0 1
09 11
1 1
0 1
e)
SI. 15.14 c), d) i e) Prikaz tipova vektorskih instrukcija
494
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGREN! I GRAFIČKI PROCESORI
Paralelizam u izvođenju vektorskih instrukcija postiže se uporabom protočnih funkcijskih jedinica s velikim brojem protočnih segmenata ili većim brojem istorodnih funkcijskih jedinica koje djeluju istodobno, ili kombinacijom uporabe većeg broja istorodnih funkcijskih jedinica koje su izvedene kao protočne s velikim brojem protočnih segmenata. Svaka od paralelnih protočnih jedinica naziva se traka (engl. lane). Performansa vektorskog procesora povećava se uporabom metode koja se naziva višetračna vektorska obrada (engl. multilane vector processing) kojom se dodatno iskorištava paralelizam u vektorskim operacijama tako da se jedna vektorska operacija porazdijeli na npr. četiri ili više traka. Slika 15.15 prikazuje primjer vektorske operacije zbrajanja u jednotračnoj izvedbi (slika 15.15 a)) i u 4-tračnoj izvedbi (slika 15.15 b)) u kojoj se koriste četiri zbrajala koja djeluju paralelno. Vidimo da se jednotračnoj izvedbi tijekom jedne periode signala vremenskog vođenja generira jedan rezultat zbrajanja komponenti vektora x(i) i y(i), dok se u 4-tračnoj izvedbi u jednoj periodi dobivaju rezultati x(i) + y(i), x(i+1) + y(i+1)/ x(i+2) + y(i+2), x(i+3) + y(i +3). vektor x
vektor y
x(8)
y(8)
x(7)
y(7)
x(6)
y(6)
x(5)
y(5)
x(4)
y(4)
x(3)
y(3)
x(2)
y(2)
x(5)
V(5)
x(6)
y(6)
x(l)
y(D
x(1)
y(D
x(2)
y(2)
I
i
r
+ protočno zbrajalo
grupa od četiri rezultata tijekom jedne periode signala vremenskog vođenja
a)
b)
SI. 15.15. Jednotračna i višetračna izvedba vektorske operacije
Kako se vektorska obrada odražava na performansu procesora? Performansa takva procesora ovisi o mnogo faktora, na primjer o: i) razini "vektorizacije" programa - koliki dio od ukupne obrade može biti izveden vektorskim operacijama, ii) prosječnoj duljini vektora, odnosno prosječnom broju komponenti vektora, iii) razini ulančavanja vektora - mogućnosti izdavanja sljedeće vektorske instrukcije neposredno nakon što prethodna vektorska instrukcija generira prvu komponentu vektora rezultata, iv) razini preklapanja vektorskih, skalarnih i operacija pristupa memoriji. Performansa vektorskog procesora može se prikazati njemu prilagođenim Amdahlovim zakonom, gdje je faktor ubrzanja obrade s u odnosu na skalarni procesor jednak:
1
5 =
Q-f)+f/k gdje je f dio vektoriziranog koda, a k brzina vektorske jedinice u odnosu na skalarnu jedini cu. k je funkcija duljine vektora i tipa operacije. Slika 15.16 prikazuje faktor ubrzanja s za k = 20 i različite vrijednosti f. Vidimo da se značaj na ubrzanja postižu kada je dio vektoriziranog koda veči od 0.8.
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1,0
f
SI.15.16 Ilustracija Amdahlovog zakona za vektorske procesore
Primjer 15.5. Ilustrirajmo izvođenje operacije y = sx + y, gdje su y i x 64 komponentni vektori pri čemu je svaka komponenta predočena u notaciji broja s pomičnim zarezom dvostruke točnosti (duljine 64 bita), a s je skalar također dvostruke točnosti, na skalarnom procesoru i vektorskom procesoru. Pretpostavit ćemo da se y, x i s nalaze na početku izvođenja pohranjeni u memoriji.tako da je početna adrese za x jednaka $s0, za y $s1, a za skalar s $sp. Programski odsječak za skalarni procesor izgleda ovako: dohvati skalar s i pohrani ga u floating-point registar fO Id fO, $sp gornja adresa lokacije na kojoj se nalazi vektor x addi r4, $s0, #512 opet: Id f2,0($s0) dohvati x(i) mul f2, f0, f2 s x x(i) Id f4,0($s1) dohvati y(i) add f4,f2J4 s x x(i) + y(i) st f4,0($s1) pohrani rezultat na y(i) addi $s0, $s0, #8 inkrementiraj indeks za x addi $s1,$s1,#8 inkrementiraj indeks za y
sub bne
$t0,r4,$s0 $tO, $zero, opet
; izračunaj granicu ; provjeri je li sve obavljeno
(Opaska: adresna zrnatost memorije je bajtna, zato je gornja granica 512, tj. 64 x 8, gdje je 64 broj komponenti vektora, a svaka je njegova komponenta duljine 8 bajtova.) Programski odsječak za vektorskiprocesor izgleda ovako: ; dohvati skalar s i pohrani ga u floating-point registar fO f0, $sp Id ; dohvati vektor x i pohrani ga u vektorski registar v i Idv v1,0($s0) v2, vi, fO ; množenje vektora x sa skalarom s mulvs ; dohvati vektor y i pohrani ga u vektorski registar v3 Idv v3,0($s1) addv v4, v2, v3 ; pribroji y produktu sx ; pohrani rezultat stv v4,0($sV Zanimljiva je usporedba gornjih programskih odsječaka. Vidimo da vektorski procesor značajno reducira promet instrukcija - on zahtijeva samo šest instrukcija, dok se kod skalarnog procesora zahtijeva skoro 600 instrukcija (programska petlja). Ovo smanjenje broja instrukcija uzrokovano je vektorskim operacijama koje djeluju na 64 komponente vektora. Druga zanimljiva razlika je u učestalosti hazarda - za skalarni procesor svaka add instrukcija mora čekati na mul instrukciju te svaka st instrukcija mora čekati na add instrukciju. Za vektorski će procesor svaka vektorska instrukcija biti u zastoju samo za prvi element svakog od vektora, tako da će ostali elementi glatko protjecati kroz protočnu strukturu. Zamisao vektorske obrade stara je više od pedeset godina. Prva vektorska superračunala pojavljuju se početkom sedamdesetih godina prošlog stoljeća (CDC STAR-100, TI ASC, 1972.), Cray-1 (1976.) da bi devedesetih godina na tržištu bio veći broj višeprocesorskih vektorskih superračunala (Cray Y-MP 816, Hitachi S-820, Fujitsu VP-2000, NEC Sx-8). Danas vektorska obrada nije rezervirana samo za superračunala, već se pojavljuje i u procesorima koji se rabe u multimedijskim aplikacijama (procesori s instrukcijskim podskupovima MMX, SSE, AltiVec) i procesorima namijenjenim igraćim konzolama. Razvoj tehnologije visokog stupnja integracije (VLSI) omogućio je izvedbe vektorskih mikroprocesora - vektorskih procesora s jednom (npr. SPERT-II procesor) ili više jezgri ostvarenih najednom čipu. Primjer takva procesora je Cell dvojezgreni procesor (razvijen u suradnji tvrtki IBM, Toshiba i Sony, 2006.) koji se sastoji od dvije jezgre, odnosno od dva procesora PowerPC (naziva se PPE- Power Processing Element) koji djeluju pod''konvencionalnim/'operacijskim sustavom te se koriste za distribuciju poslova osam vektorskih jedinica SPE (Synergistic Processing Element) koje imaju vlastiti SIMD skup instrukcija. Svaka od SPE jedinica, koja je u stvari 128 bitni RISC procesor SIMD organizacije, ima svoju vlastitu memoriju izvedene statičkim RAM-om umjesto priručne memorije. PPE i SPE povezani su pomoću visokopropusne (> 300 GB/s) prstenaste sabirnice podataka nazvane EIB - Element Interconnect Bus. U cilju maksimalnog iskorištenja EIB-a, ali i istodobnog preklapanja obrade i prijenosa podataka, svaki od devet procesnih elemenata (PPE i osam SPE) opremljen je s DMA procesorom. Cell procesor namijenjen je matematički intenzivnim zadacima kao što su generiranje ili transformacije trodimenzionalnih struktura podataka, kodiranje i dekodiranje MPEG tokova (engl. MPEG stream), Fourierova analiza podataka i si. Neke od arhitektonskih zamisli koje se koriste u procesoru Cell mogu se naći u vektorskom mikroprocesoru V-IRAM (Intelligent RAM) koji je 1997. realiziran na sveučilištu California,
S. RIBARIČ - GRAĐA RAČUNALA
497 I
Berkeley. Vektorski mikroprocesor ima DRAM kapaciteta 96 MB (800 milijuna tranzistora), procesor-jezgru s priručnom memorijom i vektorsku jedinicu. Vektorska se jedinica sastoji od dvije load i store jedinice te dvije protočne aritmetičke 64-bitne jedinice. Vršna performansa procesora je 16 GFLOPS-a za operacije sa 64-bitnim operandima, odnosno 128 GOPS-a (giga operacija u sekundi; G = giga = IO9) za 8-bitne multimedijske operacije (u tom se slučaju 64-bitna aritmetička jedinica transformira u osam tračnih 8-bitnih protočnih struktura). (Opaska: naziv Intelligent RAM odnosi se na izvedbu memorije i njoj pridruženim procesorima na istom čipu tako da se dinamička memorija može promatrati kao memorija s procesnim sposobnostima.)
15.3. MULTIPROCESORSKI SUSTAVI VIŠEPROCESORSKI M I M D SUSTAVI MIMD arhitektura obilježena je višestrukim instrukcijskim tokom i višestrukim tokom podataka. Svaki od procesora pribavlja i izvršava svoje vlastite instrukcije na svojim podacima. Višeprocesorski MIMD sustavi ili multiprocesorski sustavi iskorištavaju paralelizam na razini procesa I dretvi. U multiprocesorskom sustavu svaki procesor može izvršavati njemu dodijeljen proces. Procesi mogu biti dijelovi jednog korisničkog programa (višezadaćni način rada) ili mogu biti dijelovi različitih korisničkih programa (višeprogramski način rada). Uz to, svaki od procesa može imati više dretvi tako da se izvođenje jednog procesa s većim brojem dretvi može povjeriti većem broju procesora. Višedretvena arhitektura temeljena na MIMD-u, u načelu, dopušta istodobno izvođenje većeg broja procesa s izdvojenim adresnim prostorima i izvođenje više dretvi koje dijele adresni prostor. Osnovna značajka multiprocesorskog sustava jest veći broj procesora približno jednakih (vrlo često) identičnih obilježja koji na izvjestan način dijele zajednički memorijski prostor. Ovisno o broju procesora i načinu organizacije memorijskog sustava multiprocesorski se sustavi mogu klasificirati u sljedeće skupine: • sustavi s uniformnim pristupom memoriji UMA (engl. Uniform Memory Access), • sustavi s neuniformnim pristupom memoriji NUMA (engl. Nonuniform Memory Access), • sustavi samo s priručnom memorijom COMA (engl. Cache-Only Memory Architecture). U UMA modelu multiprocesorskog sustava (slika 15.17) svi procesori dijele zajedničku fizičku memoriju i svi imaju jednako vrijeme pristupa svakoj od riječi u memoriji (uniformni, odnosno ujednačeni pristup memoriji). Svaki od procesora može imati i svoju vlastitu priručnu memoriju organiziranu u jednu ili više razina. Na sličan način kao što dijele memoriju, procesori dijele resurse U/l podsustava. Ovakav se model još naziva i multiprocesorski sustav sa središnjom dijeljenom memorijom (engl. centralized shared-memory) ili simetrični multiprocesorski sustav s dijeljenom memorijom SMP (engl. symmetric shared-memory multiprocessor) - zato što memorija ima isti ("simetrični") odnos spram svih procesora. Komunikacija procesora sa zajedničkom memorijom i U/l podsustavom ostvaruje se prospojnom mrežom koja ovisno o zahtijevanoj propusnosti može biti ostvarena sabirničkim sustavom, crossbar prospojnom matricom ili višerazinskom (ili višeslojnom) prospojnom mrežom (npr. Omega). UMA model pogodan je za relativno mali broj procesora (manji od 100) jer je za taj broj procesora još uvijek moguće ostvariti dijeljenje i uniformni pristup memoriji. UMA model još se naziva i čvrsto povezan multiprocesorski sustav (engl. tightly coupled) zbog visokog stupnja dijeljenja zajedničkih resursa (memorije i U/l podsustava).
498
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
SI. 15.17 UMA model multiprocesorskog sustava
^
Ovaj model multiprocesorskog sustava najčešće se koristi zato što je podesan za primjene opće namjene i izvedbu obrade dodjeljivanjem vremena u višekorisničkim okruženjima. Djelotvorno se koristi za ubrzanje obrade zahtjevnih programa jednog korisnika (višezadaćni rad) ili programa većeg broja korisnika (višeprogramski rad). Koordinacija paralelnih događaja, procesa i dretvi te sinkronizacija i komunikacija između procesora ostvaruju se dijeljenim varijablama koje su pohranjene u zajedničkoj memoriji. Multiprocesorski sustavi s neuniformnim pristupom memoriji NUMA (slika 15.18) nazivaju se još i sustavi s porazdijeljenom memorijom (engl. distributed-memory multiprocessor) imaju umjesto centralizirane memorije, memoriju porazdijeljenu procesorima. Takva se memorija naziva lokalna ili privatna memorija. Zbirka svih lokalnih memorija oblikuje globalni adresni prostor kojem mogu pristupiti svi procesori u sustavu. Zbog takve organizacije memorije razlikujemo dvije vrste pristupa memoriji: • brzi pristup memoriji (kraće vrijeme pristupa) kada procesor pristupa svojoj lokalnoj memoriji, • sporiji pristup (dulje vrijeme pristupa) kada procesor pristupa "udaljenoj" memoriji koja je, zapravo, lokalna memorija nekog drugog procesora. Dulje vrijeme pristupa uzrokovano je dodatnim kašnjenjima jer se "udaljenoj" memoriji pristupa kroz prospojnu mrežu. Multiprocesorski sustavi oblikovani u skladu s modelom NUMA imaju veliki broj procesora, npr. nekoliko stotina ili tisuća, i zato se za toliki broj procesora teško može realizirati središnja memorija sa zahtijevanom, odnosno prihvatljivom propusnosti (engl. memory bandwidth).
S. RIBARIČ - GRAĐA RAČUNALA
procesor & priručna memorija
lokalna memorija
procesor & priručna memorija
U/l podsustav
lokalna memorija
499 I
procesor & priručna memorija
U/l podsustav
lokalna memorija
U/l podsustav
lokalna memorija
U/l podsustav
prospojna mreža
lokalna memorija
U/l podsustav
lokalna memorija
U/l podsustav
iz
iz
procesor & priručna memorija
procesor & priručna memorija
procesor & priručna memorija
SI. 15.18 NUMA model multiprocesorskog sustava
Na slici 15.18 vidimo da se svaki čvor u NUMA modelu sastoji od procesora, lokalne memorije, U/l podsustava i sučelja za pristup prospojnoj mreži. Ovisno o izvedbi NUMA modela, čvor može biti sastavljen od određenog broja procesora i lokalnih memorijskih modula tako da čini procesorsku nakupinu (engl. cluster). Primjer takve organizacije je multiprocesorski sustav velikih razmjera (engl. large-scale multiprocessor) Cedar. Multiprocesorski sustavi temeljeni na modelu NUMA često se zbog načina na koji je ostvarena veza između procesora nazivaju i labavo povezanim (engl. loosely coupled). Multiprocesorski sustavi temeljeni na modelu COMA (slika 15.19) su, zapravo, poseban slučaj NUMA multiprocesorskog sustava u kojem je umjesto glavne memorije po razdijeljena priručna memorija tako da sve priručne memorije oblikuju globalni adresni prostor. Udaljeni pristup priručnoj memoriji ostvaruje se pomoću distribuiranih direktorija.
SL 15.19 COMA model multiprocesorskog sustava
Multiprocesorski sustavi temeljeni na UMA modelu dijele zajednički memorijski prostor tako da procesori mogu međusobno izmjenjivati podatke instrukcijama load i store (zato
500
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
se i nazivaju sustavi s dijeljenom memorijom). U sustavima temeljenim na NUMA modelu komunikacija između procesora odvija se porukama koje procesori izmjenjuju preko prospojne mreže - takvi se multiprocesorski sustavi nazivaju još i multiprocesorskisustavi s prosijeđivanjem poruka (engl. message-passing muitiprocessor). Naglasimo još jednom da je organizacija muitiprocesorskog sustava s dijeljenom memorijom najraširenija te da mnogi proizvođači računala (npr. Sun, AMD, Intel, IBM) imaju proširenje svojih proizvodnih uniprocesorskih ili jednoprocesorskih linija na multiprocesorske sustave na čipu. Oni se nazivaju višejezgreni mikroprocesori (engl. multicore microprocessor) ili kraće višejezgreni procesori (izraz "jezgra" (engl. ćore) upotrebljava se za procesor u višejezgrenom procesoru). Višejezgreni je procesor, zahvaljujući tehnologiji visokog stupnja integracije, procesor koji ima dva ili više procesora (jezgri) najednom čipu. Na taj se način, uz manji potrošak snage, ostvaruje djelotvorna istodobna obrada vise zadataka.
15.3.1.
KOHERENCIJA PRIRUČNE MEMORIJE U MULTIPROCESORSKOM SUSTAVU U poglavlju 10. (Priručna memorija) opisali smo problem koherencije priručne memorije i istaknuli važnost rješavanja tog problema u multiprocesorskim sustavima. U ovom ćemo se potpoglavlju ukratko još jednom osvrnuti na problem koherencije, i to za multiprocesorski sustav sa središnjom dijeljenom memorijom (slika 15.17). Budući da svaki procesor ima svoju privatnu priručnu memoriju, ali dijeli i središnju zajedničku memoriju, u svakoj od priručnih memorija pohranjeni su "privatni" podaci koji se odnose na lokalni proces, ali i zajednički podaci koji se odnose na procese drugih procesora i koji su dohvaćeni i pohranjeni u pojedine priručne memorije na temelju komunikacije procesora, odnosno njihovim pristupom zajedničkoj memoriji. Dakle, istodobno se dijeljeni podatak nalazi u zajedničkoj memoriji, a njegove kopije distribuirane su u priručne memorije pojedinih procesora. Sada nastupa problem! Ako neki od procesora promijeni vrijednost zajedničkog podatka u svojoj priručnoj memoriji, taj se podatak treba promijeniti i u zajedničkoj memoriji, ali i u svim priručnim memorijama ostalih procesora koji koriste taj podatak (uvjet koherencije priručne memorije; poglavlje 10). Bez dodatnih mehanizama nije moguće to ostvariti i nastupa problem (ne)koherencije priručne memorije.
Primjer 15.6. Pretpostavimo, radi jednostavnosti, da imamo multiprocesorski sustav koji ima samo dva procesora (jezgre) i daje ostvaren kao sustav sa središnjom dijeljenom memorijom. Dakle, sustav ima zajedrtičku memoriju, a svaki od procesora ima priručnu memoriju. Neka priručne memorije koriste tehniku obnavljanja sadržaja memorije „pohranjivanje-kroz"(10. poglavlje). Pretpostavimo da oba procesora (procesor 1 i procesor 2) dijele zajedničku varijablu V koja je pohranjena u središnjoj dijeljenoj memoriji na lokaciji X. Pretpostavimo, također, da se u trenutku t = 0 varijabla V ne nalazi u priručnim memorijama procesora 1 i procesora 2. U trenutku t = 1 procesor 1 dohvaća (čita) varijablu V iz središnje memorije i pohranjuje je u svoju priručnu memoriju. U sljedećem trenutku (t = 2) procesor 2 dohvaća (čita) varijablu V iz središnje memorije i pohranjuje je u svoju priručnu memoriju. U ovom trenutku (t = 2) koherencija podataka nije narušena: oba procesora imaju pohranjenu vrijednost varijable V jednaku onoj koja je pohranjena na memorijskoj lokaciji X u središnjoj memoriji. Pretpostavimo da u sljedećem trenutku
S. RIBARIČ - GRAĐA RAČUNALA
501 I
(t = 3) procesor i mijenja vrijednost varijable V u V'i pohranjuje je u svoju priručnu memoriju. Uporabom tehnike „pohranjivanje-kroz"procesor 1 upisuje novu vrijednost V' na memorijsku lokaciju X u središnjoj memoriji. Sada u vremenskom trenutku t = 3 imamo sljedeću situaciju: procesor 7 u svojoj priručnoj memoriji ima pohranjenu novu vrijednost varijable V, tj. V', središnja dijeljena memorija ima također na memorijskoj lokaciji X pohranjenu novu vrijednost V. No procesor 2 ima u svojoj priručnoj memoriji pohranjenu staru vrijednost varijable V. Ako u sljedećem trenutku (t = 4) procesor2 dohvaća varijablu V iz svoje priručne memorije - dohvatit će staru vrijednost V, a ne V'. Došlo je do povrede koherencije - umjesto prave vrijednosti V' (koja je pohranjena u priručnoj memoriji procesora 7 i u središnjoj memoriji), procesor2 koristit će se starom vrijednosti V. Problem (ne)koherencije priručne memorije rješava se programski ili sklopovski. Relativno jednostavno programsko rješenje sastoji se u tome da prevodilac tijekom prevođenja programa označi informaciju (podatke) koja se smije pohraniti (engl. cacheable) i onu koja se ne smije pohraniti u priručnu memoriju (engl. non-cacheable). Sve zajedničke varijable koje se mogu mijenjati upisivanjem označavaju se kao nepodesne (non-cacheable) za pohranu u priručne memorije i njima procesori jedino mogu pristupiti tako da pristupe središnjoj dijeljenoj memoriji. Ovo rješenje, međutim, degradira performansu sustava zbog pojačanog prometa između središnje dijeljene memorije i procesora. Multiprocesorski sustavi obično koriste sklopovska rješenja kojima se održava koherencija priručnih memorija. Protokoli kojima se održava koherencija u multiprocesorskim sustavima nazivaju se protokoli koherencije priručne memorije (engl. cache coherence protocol) i mogu se klasificirati na: • snooping protokole (engl. snoop - njuškati), • protokole koji se temelje na direktoriju (engl. directory based). Snooping protokol prvenstveno je namijenjen multiprocesorskim sustavima koji se temelje na prospojnoj mreži koja je izvedena kao zajednička sabirnica. Taj se protokol može koristiti i u multiprocesorskim sustavima sa složenijom prospojnom mrežom (npr. višerazinskom) uz izvjesne sklopovske preinake kojima se omogućuje odašiljanja informacije svim procesorima o promašajima u priručnoj memoriji. Snooping protokolom postiže se koherencija podataka u priručnim memorijama i središnjoj dijeljenoj memoriji tako da svi upravljači priručnih memorija (engl. cache controller) nadgledaju događaje na zajedničkoj sabirnici ("njuškaju"zajedničku sabirnicu) i određuju trebaju ili ne trebaju kopirati dijeljeni blok podataka. Održavanje koherencije temelji se na dvjema operacijama: čitanju i pisanju. Višestruke kopije koje se nalaze u priručnim memorijama pojedinih procesora nisu problem kada je riječ o operaciji čitanja, međutim, procesori imaju i ekskluzivno pravo upisivanja podataka u te dijeljene blokove podataka. Naravno, koherencija podataka u multiprocesorskom sustavu zahtijeva da bilo koji procesor koji koristi dijeljeni blok podataka i kada čita podatak mora čitati njegovu novu vrijednost (onu nakon operacije upisivanja). Snooping protokol mora, na temelju nadgledanja sabirnice kojom se i ostvaruju prijenosi dijeljenih blokova podataka između središnje dijeljene memorije i priručne memorije, locirati sve priručne memorije koje dijele taj podatak koji će se upisati. Posljedica upisivanja (promjene) dijeljenog podatka može biti dvojaka (ovisno o vrsti protokola) - sve ostale kopije dijeljenog bloka podataka koje se nalaze u ostalim priručnim memorijama proglašavaju se nevažećima (tehnika "piši i proglasi nevažećim"; engl. writeinvalidate) ili se, pak, aktivira postupak osvježavanja svih ostalih kopija dijeljenog bloka u ostalim priručnim memorijama (tehnika "piši i obnovi"; engl. write-update).
502
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGREN! I GRAFIČKI PROCESORI
U tehnici "piši i proglasi nevažećim" procesor koji će modificirati dijeljeni podatak mora, neposredno prije nego što to učini, generirati poseban signal "nevažeće" (engl. invalidation signal) i postaviti ga na sabirnicu te time obavijestiti sve druge priručne memorije da su kopije dijeljenog bloka podataka nevažeće. Kada upravljači priručnih memorija prime taj signal, provjeravaju sadržava li ona taj dijeljeni blok podataka, a ako sadržava, taj blok podataka u priručnoj memoriji proglašava nevažećim. Pokušaj čitanja tog podatka od strane nekog procesora, zbog nevažećeg bloka, izazvat će promašaj tako da će se iz središnje dijeljene memorije dohvatiti blok s modificiranom (novom) vrijednosti podatka. Tehnika "piši i obnovi" umjesto da kopije dijeljenog bloka podataka proglasi nevažećim, dopušta procesoru koji je modificirao podatak da taj modificirani podatak pošalje preko sabirnice tako da se obnove sve kopije u ostalim priručnim memorijama. Tehnika "piši i obnovi" slična je postupku "pohranjivanja-kroz" jer se svaka promjena zajedničkog podatka šalje preko sabirnice središnjoj dijeljenoj memoriji, samo što se ovdje obnavljaju i sadržaji priručnih memorija. Svaka promjena (upisivanje u zajednički dijeljeni blok podataka) ima za posljedicu prijenos tog podatka zajedničkom sabirnicom. U tehnici "piši i proglasi nevažećim" sabirnica se koristi samo jednom, i to pri prvom pisanju da bi se kopije dijeljenog bloka proglasile nevažećim. Daljnje upisivanje, odnosno promjene, drugih podataka u tom zajedničkom bloku ne zahtijevaju aktivnost na sabirnici. Primjer 15.7. Prikažimo osnovnu zamisao dviju tehnika snooping protokola u multiprocesorskom sustavu sa središnjom dijeljenom memorijom. Pretpostavimo da imamo u sustavu osam procesora P1# P ,..., P8 koji imaju svoje priručne memorije C1# C2,..., C8 te da se kao prospojna mreža koristi zajednička sabirnica. Pretpostavimo da se dijeljeni blok podataka X nalazi u priručnim memorijama procesora P2, i P4, tj. u C1# C2 i C4 (slika 15.20). P3
O X
4
i.
T
r X
*
4
/•V
s/
T
c3
prospojna mreža / zajednička sabirnica
X memorija (središnja dijeljena memorija)
SI. 15.20 Važeće kopije bloka podataka X nalaze se središnjoj dijeljenoj memoriji i u priručnim memorijama C^ C 2 i C 4
8
Pretpostavimo da je procesor P1 promijenio podatak u bloku X (promijenjeni sadržaj bloka X označit ćemo s X'). Slika 15.21 prikazuje stanje multiprocesorskog sustava nakon operacije koja odgovara tehnici "piši i proglasi nevažećim". Vidimo da priručna memorija C1 i središnja dijeljena memorija imaju novu vrijednost X', a da su blokovi X u C2 i C4 označeni s I kao nevažeći (engl. invalidate).
2
3
"TV
X'
o prospojna mreža / zajednička sabirnica __
X' memorija {središnja dijeljena memorija)
SI. 15.21 Stanje nakon operacije koja odgovara snooping protokolu "piši i proglasi nevažećim"
Slika 15.22 prikazuje stanje multiprocesorskog sustava nakon operacije koja odgovara snooping protokolu "piši i obnovi". Vidimo da su obnovljeni dijeljeni blokovi X u X' u priručnim memorijama C2 i C4 i, naravno, u središnjoj dijeljenoj memoriji. p,
p2
5 >
<>
X'
X'
p3
p*
...
o
p8 o
c
X
O prospojna mreža / zajednička sabirnica
X' memorija (središnja dijeljena memorija)
SI. 15.22 Stanje nakon operacije koja odgovara snooping protokolu "piši i obnovi"
504
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
Spomenimo još jedan od poznatijih snooping protokola koherencije priručne memorije MESI (engl. modified-exclusive-shared-invalid) koji se djelotvorno koristi kako u jednoprocesorskim sustavima, tako i u multiprocesorskim sustavima. Ukratko, MESI protokol možemo opisati za jednorazinsku organizaciju priručne memorije na sljedeći način: Odmah nakon upuštanja u rad sustava svi su sadržaji priručnih memorija proglašeni nevažećim. Prvi put kada neki od procesora (npr. procesor P^ izvodi operaciju čitanja ili pisanja - događa se promašaj i referencirani se blok podataka prenosi iz središnje dijeljene memorije u priručnu memoriju tog procesora. Taj blok podataka dobiva oznaku E (engl. exclusive) jer je isključivo samo jedna kopija u jednoj priručnoj memoriji. Sada su podaci u bloku podataka raspoloživi procesoru P1 i on ih može čitati. Pretpostavimo da sada neki drugi procesor (npr. procesor P2) referencira podatak u istom bloku podataka - dogodio se promašaj i dohvaća se isti blok podataka iz središnje dijeljene memorije i smještava ga u svoju priručnu memoriju procesora P2. Sada procesor P)t koji je izvorni vlasnik bloka podataka, na temelju nadgledanja ("njuškanja") sabirnice vidi da nije više jedini vlasnik kopije te objavljuje preko sabirnice da i on ima takvu kopiju bloka. Obje se kopije označavaju sa S (engl. shared) - dijeljeni blok. Stanje kopija S označava da postoje dvije i više kopija bloka podataka u priručnim memorijama. I u ovom slučaju operacija čitanja podataka iz bloka, bilo od strane procesora P1 i/ili P2 ne traži dodatne aktivnosti na zajedničkoj sabirnici. Pretpostavimo sada da procesor P2 upisuje podatak u svojoj kopiji bloka (bloka koji ima status dijeljenog bloka S). On će na sabirnicu postaviti signal kojim će obavijestiti ostale procesore da je kopija bloka podataka koji i oni posjeduju nevažeća (engl. invalid). Blok podatka u priručnoj memoriji procesora koji je izveo operaciju pisanja prelazi u stanje M (engl. modified). No taj se blok podataka još ne upisuje u središnju dijeljenu memoriju. Pretpostavimo sada da procesor P3 izvodi operaciju čitanja podatka iz bloka podataka dohvatom bloka podataka iz središnje dijeljene memorije. Procesor P2, koji je sada jedini vlasnik modificiranog bloka podataka, zna da kopija bloka podataka u središnjoj dijeljenoj memoriji nije važeća, postavlja signal na sabirnicu i njime obavještava procesor P3 da treba pričekati dok on ne izvede operaciju "kopiranja nazad". Kada završi operacija kopiranja modificiranog bloka podataka u središnju dijeljenu memoriju, procesor P3 dohvaća kopiju bloka i blok je označen kao dijeljen (S) u obje priručne memorije. Ako sada ponovo npr. procesor P2 upisuje u blok podataka koji je označen sa S, ponovo će se morati proglasiti kopija bloka podataka u priručnoj memoriji procesora P3 nevažećom. I konačno, ako sada procesor P1 izvodi operaciju upisa u dijeljeni blok (što izaziva promašaj), procesor P2 na temelju "njuškanja" na sabirnici to utvrđuje te postavlja signal na sabirnicu kojim obavještava procesor P1 da mora pričekati dok on ne izvede operaciju kopiranja nazad. Kada je procesor P2 završio s tom operacijom, označava svoju kopiju nevažećom jer zna da će procesor P1 modificirati taj blok podataka. Da bi procesor P1 izveo operaciju pisanja, mora dohvatiti blok podataka iz središnje dijeljene memorije (ako koristi tehniku dodjele upisa (engl. write allocation; poglavlje 9.)) i blok označiti s M. Ako se ne koristi tehnika dodjele upisa, već tehnika izravnog upisivanja (10. poglavlje), onda se upis obavlja izravno u središnjoj dijeljenoj memoriji i blok se ne smještava u priručnu memoriju procesora P r Slika 15.23 prikazuje pojednostavljeni dijagram stanja za MESI protokol. (Opaska: MESI protokol podržava i višerazinsku organizaciju priručne memorije.) Protokoli koji se temelje na direktoriju obično se koriste u multiprocesorskim sustavima koji imaju prospojnu mrežu izvedenu kao višerazinsku. Protokoli ove vrste mogu se temeljiti na jednom središnjem direktoriju u kojem je pohranjena informacija o statusu dijeljenih blokova fizičke memorije - središnji direktorij sadržava kopije svih direktorija priručnih memorija s informacijom u kojim se priručnim memorijama nalaze kopije blokova podataka.
S. RIBARIČ - GRAĐA RAČUNALA
505 I
51.15.23 Pojednostavljeni dijagram stanja za MESl protokol
U porazdijeljenoj shemi svaki memorijski modul ima poseban direktorij u kojem se bilježi stanje i prisutnost svakog bloka. Informacija o stanju bloka je lokalna dok informacija o prisutnosti pokazuje koje priručne memorije imaju kopiju tog bloka. Protokoli koji koriste središnji direktorij imaju središnji upravljač koji je sastavni dio upravljača središnje dijeljene memorijske jedinice, a direktorij se pohranjuje u središnjoj dijeljenoj memoriji. Kada neki upravljač lokalne priručne memorije generira zahtjev, središnji upravljač provjerava taj zahtjev i na temelju informacije koju ima u direktoriju generira naredbe za prijenos podataka između središnje dijeljene memorije i priručnih memorija ili između priručnih memorija. Zadatak središnjeg upravljača jest održavanje informacije o stanju tako da on mora biti obaviješten o svakoj lokalnoj akciji koja utječe na dijeljene blokove podataka. Prije nego što procesor modificira podatak u dijeljenom bloku podataka, mora zatražiti dopuštenje za tu operaciju od središnjeg upravljača. Upravljač prije slanja signala kojim potvrđuje pravo na promjenu podatka mora poslati poruku svim dugim procesorima koji također koriste taj dijeljeni blok podataka. Tom porukom središnji upravljač zahtijeva da se sve kopije tog bloka podataka proglase nevažećim. Tek kada dobije potvrdu od svih procesora da je blok označen kao nevažeći, središnji upravljač šalje signal potvrde kojim dopušta procesoru promjenu podatka u dijeljenom bloku. Kada drugi procesor pokuša čitati podatak iz tog dijeljenog bloka, dogodit će se promašaj koji će se signalizirati središnjem upravljaču. Središnji će upravljač tada izdati naredbu procesoru koji je vlasnik modificiranog bloka da taj blok upiše natrag u središnju dijeljenu memoriju (tehnika obnavljanja sadržaja "kopiranjem nazad" (10. poglavlje). Nakon pohranjivanja osvježenog dijeljenog bloka u središnju dijeljenu memoriju omogućit će se prijenos tog bloka u priručnu memoriju procesora koji je želio čitati podatak.
506
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI, VIŠEJEZGREN! I GRAFIČKI PROCESORI
15.3.2. SINKRONIZACIJA PROCESA I DRETVI Općenito u paralelnim procesnim okruženjima dva ili više konkurentna procesa (ili dretve) trebaju međusobno komunicirati (na primjer, tijekom izvođenja proces2 u nekom trenutku treba podatke koje generira proces 7). Komunikacija između procesa temelji se na osnovnom aksiomu da se ne mogu predvidjeti ili pretpostaviti relativne brzine procesa. To znači da bi se ostvarila komunikacija ili izmjena podataka između procesa 1 i procesa 2 u točno definiranoj točki, oba procesa moraju biti sinkronizirana. Još je jedan važan detalj - sinkronizacija mora biti ugrađena programski u procese, a ne ostvarena procesorima, npr. nekim satnim mehanizmom - signalom vremenskog vođenja. Ovisno o tome jesu li procesi ili dretve takve da se međusobno natječu ili konkuriraju (na primjer, međusobno se natječu za dobivanje nekog resursa), ili su pak kooperativni, tj. međusobno surađuju, razlikujemo dvije vrste sinkronizacije: i) međusobno isključivanje (engl. mutual exclusion), ii) uvjetovana sinkronizacija (engl. condition synchronization). Dvije osnovne vrste sinkronizacije kojima se ostvaruje međusobno isključivanje i uvjetovana sinkronizacija opisat ćemo na sljedećem primjeru (preuzeto iz Dasgupta, S.: Computer Architecture, A Modern Synthesis, 1989.). Slika 15.24 prikazuje dva procesora P, i P i dva nezavisna procesa proces 1 i proces 2 koji se paralelno izvršavaju. Opišimo prvo slučaj kada sa dva procesa međusobno natječu za neki resurs. U nekoj točki izvršavanja oba procesa, proces 1 i proces 2, zahtijevaju modifikaciju zajedničke strukture podataka D koja se nalazi u središnjoj dijeljenoj memoriji. Pretpostavimo da programski segmenti procesa 7 i procesa 2 izgledaju ovako: f proces 7: ldr1,D addirl, 7 str1,D
proces 2: IdrZD addi r2,2 st r2f D
Budući da su oba procesa konkurentna i da nemamo pretpostavke o njihovim relativnim brzinama, može se dogoditi da se instrukcije gornjih dvaju programskih odsječaka međusobno isprepliću što vodi nepredvidljivom rezultatu: ako pretpostavimo da je početna vrijednost za D bila 0, onda vrijednost D-a nakon procesa 7 i procesa 2 kada se oba izvrše može biti 1, 2 ili 3, ovisno o relativnim vremenima u kojima se instrukcije izvode. Da bi se ta neodređenost izbjegla, odnosno da bismo imali jamstvo da će vrijednost za D biti 3 kadgod se procesi 1 i 2 izvrše, zahtijeva se da gornji programski odsječci budu nedjeljivi',
S. RIBARIČ - GRAĐA RAČUNALA
507 I
što znači da pristupaju i modificiraju D na međusobno isključivi način i promatraju se kao kritični programski odsječci. Da bi se zadovoljili uvjeti nedjeljivosti programskog odsječka i njihovo međusobno isključivanje, upotrebljava se mehanizam zaključavanja (engl. locking)f i to na sljedeći način: Pretpostavimo da smo strukturi podataka D pridružili "ključ" k i dvije operacije lock(k) i uniock(k) kojima se k postavlja u 1 ("zaključana brava"), odnosno 0 ("otključana brava"). Proces može izvesti operaciju lock(k) samo kada je k = 0, odnosno kada je brava otključana. Rezultat operacije lock je postavljanje k u 1 i zato onemogućavanje ostalih procesa da izvedu operaciju lock(k). Bilo koji drugi proces sada mora čekati sve dok proces koji je aktivirao operaciju lock(k) ne postavi k u 0 operacijom uniock(k). Uz pretpostavku da je inicijalna vrijednost za k bila 0, dva kritična programska odsječka se mogu implementirati na sljedeći način: proces 7: lock (k) Idrl, D addirl, 1 strl, D unlock(k) proces 2: lock(k) IdrZD addi r2,2 str2,D unlock(k) Problem uvjetovane sinkronizacije prikazat ćemo također na primjeru sa slike 15.24. U ovom su slučaju procesi proces 7 i proces 2 kooperativni procesi, odnosno procesi koji međusobno surađuju. Pretpostavimo da proces 1 generira niz rezultata i pohranjuje ih slijedno u D, a proces2 slijedno uzima te podatke iz niza i konzumira ih. Radi jednostavnosti, pretpostavimo da D može pohranjivati samo jednu vrijednost tako da se mora osigurati sljedeće: i) kad proces 7 generira vrijednost V. i smještaje u D, on čeka sve dok proces2 ne konzumira vrijednost V.. Tek će poslije toga pohraniti sljedeću vrijednost V.+1 u D; ii) nakon što proces 2 konzumira vrijednost V. iz D, on čeka sve dok proces 1 ne generira sljedeću vrijednost Vj+1. Tek poslije toga ponovo čita iz D. Vidimo da proces 7 i proces 2 moraju biti međusobno sinkronizirani, i to na sljedeći način: proces 7 mora kasniti s upisivanjem u D dok nije određen uvjet postavljen od procesa 2, također, proces 2 mora kasniti sa čitanjem iz D dok određen uvjet nije postavljen od procesa 7. Uvjetovana sinkronizacija može se ostvariti uporabom istog koncepta koji se koristi za međusobno isključivanje. U ovom slučaju imamo dva ključa k1 i k2 koja su pridružena strukturi podataka D: proces 7 "otključava" k2 i time signalizira procesu 2 da je pohranio novu vrijednost u D, dok proces 2 otključava k1 da bi obavijestio proces 1 o konzumiranju vrijednosti koja je posljednja pohranjena u D. Uz pretpostavku da je početna vrijednosti kj jednaka 0, a početna vrijednost k2 jednaka 1, programski odsječci kojima se ostvaruje
508
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
uvjetovana sinkronizacija izgledaju ovako: proces 1: lockfkj generiraj vrijednost i pohrani je u D unlockfkj proces 2: iockfkj konzumiraj vrijednost iz D unlock(k.) f
memorija
procesor P,
procesor P.
SI. 15.24 Shematski prikaz dijeljenja strukture podataka D od strane dvaju procesa Iz operacijskih sustava znamo da postoje dva osnovna pristupa koji se primjenjuju za izvedbu mehanizma za obje vrste sinkronizacije: i) sinkronizacija uporabom dijeljenih varijabli (engl. shared variables) uporabom testand-set primitiva, fetch-and-add primitiva, semafora; ii) sinkronizacija na temelju prosljeđivanja poruka. Prvi mehanizam sinkronizacije pogodan je i zato prevladava u multiprocesorskim sustavima sa središnjom dijeljenom memorijom UMA, dok se drugi koristi u multiprocesorskim sustavima s porazdijeljenom memorijom NUMA.
S. RIBARIČ - GRAĐA RAČUNALA
509 I
15.4. VIŠEDRETVENOST I SIMULTANA VIŠEDRETVENOST Višedretvenost (engl. multithreading) za razliku od hiperdretvenosti, kao što smo u uvodnom dijelu ovog poglavlja vidjeli, podrazumijeva da se više dretvi izvodi u jednom procesoru tako da se izvođenje dretvi međusobno isprepliće, odnosno dretve se naizmjenično izvode u dodijeljenim funkcijskim jedinicama procesora uz nužno prospajanje konteksta sadržanog u tablici dretvi, i to nakon svake izmjene dretve. Dva su glavna pristupa višedretvenosti: • finozrnata višedretvenost (engl. fine-grained multithreading), • grubozrnata višedretvenost (engl. coarse-grained multithreading). Finozrnata višedretvenost podrazumijeva prospajanje dretvi nakon svake instrukcije. (Opaska: procesori s takvom značajkom nazivaju se još i "bačvasti", odnosno barrel procesori.) Te su instrukcije međusobno nezavisne jer pripadaju različitim dretvama tako da se protočna struktura djelotvorno iskorištava. No može se dogoditi povećani broj promašaja priručne memorije zbog narušavanja lokalnosti programa. Obično se izvođenje dretvi u tom slučaju temelji na kružnom prioritetu (engl. round-robin) uz "preskakanje" dretvi koje su u stanju zastoja. Da bi se finozrnata višedretvenost djelotvorno iskoristila, procesor mora biti u stanju prospajati dretve u svakoj periodi signala vremenskog vođenja, a uz to, vrijeme prospajanja konteksta dretvi mora biti vrlo kratko. Očekuje se da je vrijeme potrebno za kućanske poslove koje treba obaviti procesor tijekom izmjene konteksta dretvi kraće od vremena potrebnog za prospajanje procesa. Višedretveni procesori imaju sklopovski podržano brzo prospajanje konteksta dretvi (tzv. hardware based fast context switching) koje se temelji na tome da svaka dretva ima dodijeljene fizičke registre za pohranu konteksta dretvi. Na primjer, višedretveni procesor Tera podržava 128 dretvi, pri čemu je svakoj dretvi dodijeljen 41 64-bitni registar u procesoru Jezgre, osim sklopovski podržanog brzog prospajanja konteksta, imaju i dinamičku izvedbu preimenovanja registara (14. poglavlje) kojim se rješavaju hazardi WAW i WAR koji se nazivaju još i lažne zavisnosti. Grubozrnata višedretvenost predviđa prospajanje dretvi samo onda kada nastupa dulji zastoj u tekućoj dretvi (npr. promašaj u priručnoj memoriji). Za kraće zastoje, na primjer one izazvane u instrukcijskoj protočnoj strukturi uslijed hazarda, ne predviđa se izmjena dretvi te je to jedan od glavnih nedostataka grubozrnate višedretvenosti. Razlog da se ne koristi prospajanje dretvi kod zastoja izazvanih u protočnoj strukturi leži u procjeni cijene i količine posla za pražnjenje protočne strukture da bi se u nju mogao uputiti instrukcijski tok druge dretve. Izmjena dretvi i prospajanje njihova konteksta može se događati i pri svakoj load instrukciji (neovisno o tome je li se dogodio promašaj) ili nakon programskog odsječka (bloka instrukcija) koji pripadaju jednoj dretvi. Grubozrnata i finozrnata višedretvenost može se kombinirati s paralelizmom na razini instrukcija ILP, ali i sa superskalarnosti (višestrukim protočnim strukturama u jednom procesoru). Tri su procesorske konfiguracije moguće u tom slučaju: • superskalarnost s grubozrnatom višedretvenosti, • superskalarnost s finozrnatom višedretvenosti, • superskalarnost sa simultanom višedretvenosti. Superskalarni procesori s grubozrnatom višedretvenosti izvode istodobno veći broj instrukcija koje pripadaju istoj dretvi sve do trenutka kada nastupi dulji zastoj, u tom se trenutku prospaja kontekst dretvi i nastavlja se s izvođenjem druge dretve.
510
15.
POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
Superskalarni procesori s finozrnatom višedretvenosti isprepliću dretve i na taj način eliminiraju možebitne zastoje u izdavanju instrukcija. Budući da samo jedna dretva izdaje instrukcije tijekom periode signala vremenskog vođenja, još uvijek postoje ograničenja u paralelizmu na razini instrukcija. Višejezgreni procesori tvrtke Sun nazvani T1 (Niagara 1) i T2 (Niagara 2) koriste finozrnatu višedretvenost. Simultana višedretvenost SMT (engl. simultaneous multithreading) zasniva se na činjenici da suvremeni (superskalarni) procesori imaju paralelizam na razini funkcijskih jedinica veći od onog koji jedna dretva može iskoristiti. Zato se dinamičkim raspoređivanjem izdaje istodobno više instrukcija iz nezavisnih dretvi u istoj periodi signala vremenskog vođenja. Dakle, u SMT-u se iskorištava paralelizam na razini dretvi i paralelizam na instrukcijskoj razini u kombinaciji s izdavanjem više instrukcija u jednoj periodi signala vremenskog vođenja. Primjeri procesora koji se temelje na SMT zamislima su Intelovi višejezgreni procesori Nehalem i Pentium D te IBM-ovi višejezgreni procesori POWERS, POWER6 i POWER7. Da bismo zorno predočili razliku između superskalarnosti, višedretvenosti (MT) i simultane višedretvenosti (SMT), poslužit ćemo se jednostavnim modelom obrade koji su predložili S. J. Eggers i suradnici. Slika 15.25 prikazuje primjer izvođenja za potonje navedene tri arhitekture procesora. Pretpostavimo da su sva tri procesora superskalarna i da mogu izdavati do četiri instrukcije u jednoj periodi signala vremenskog vođenja. Na slici 15.25 svaki redak predočava stanje četiriju protočnih struktura superskalarnog procesora u koju se upućuju instrukcije na izvođenje, i to tijekom jedne periode signala vremenskog vođenja. Svaki se kvadrat u retku naziva i priključak za izdavanje instrukcije (engl. instruction issue slot). Popunjen kvadrat u retku odgovara u pora bijenom priključku za izdavanje, dok bijeli kvadrat označava da se u toj periodi nije izdala instrukcija za taj priključak i da je on neiskorišten. Na primjer, na slici 15.25 a), koja se odnosi na "obični" superskalarni procesor, od četiri priključka za izdavanje instrukcija samo su dva iskorištena tijekom prve periode signala vremenskog vođenja, što znači da zbog npr. međuzavisnosti instrukcija, odnosno ograničene razine paralelizma na razini instrukcija nije bilo moguće četiri instrukcije uputiti u izvođenje (u prvoj periodi signala vremenskog vođenja). Nekorišteni priključci za izdavanje instrukcija mogu se promatrati kao "horizontalno neiskorišteni priključci" i kao "vertikalno neiskorišteni priključci". Pod horizontalno neiskorištenim priključcima podrazumijevamo slučaj kada su u jednom retku jedan ili više priključaka neiskorišteni (ali ne svi!). Na primjer, na slici 15.25 a) tijekom prve, treće i osme periode imamo slučaj da dva priključka nisu iskorištena - osnovni razlog je skromna razina paralelizma na razini instrukcija u istoj dretvi. Tijekom četvrte periode, zbog velike međuzavisnosti instrukcija, samo je jedan priključak iskorišten. Vertikalno neiskorišteni priključci događaju se kada su tijekom jedne periode svi priključci neiskorišteni - to nastupa zbog dulje latencije (duljeg zastoja u izvođenju) instrukcije, npr. pristupa memoriji, kada je privremeno spriječeno daljnje izdavanje instrukcija. Slika 15.25 a) prikazuje slijed izvođenja instrukcija za konvencionalni superskalarni procesor. U tom se slučaju izvodi jedan program (proces) ili jedna dretva, i to tako da se pokušava naći više instrukcija (do četiri) koje se mogu istodobno izvesti. Kad se to ne može naći, onda se događaju horizontalni i vertikalni neiskorišteni priključci. Slika 15.25 b) prikazuje slijed izvođenja za finozrnati višedretveni procesor (MT) koji podržava sklopovski prospajanje konteksta dretvi. On djeluje tako da tijekom jedne periode signala vremenskog vođenja izvodi veći broj instrukcija iz jedne dretve. Tijekom sljedeće
S. RIBARIČ - GRAĐA RAČUNALA
511 I
periode procesor izvršava instrukcije iz druge dretve. Svakom novom periodom signala vremenskog vođenja, procesor prospaja kontekst dretve i izvršava instrukcije iz nove dretve. Iz slike 15.25 b) vidimo da višedretveni procesor djelotvornije koristi resurse procesora, posebice u situacijama kada bi nastupale dulje latencije instrukcija, odnosno vidimo da se s višedretvenosti uklanjaju vertikalno neiskorišteni priključci. No višedretvenost ne utječe na uklanjanje horizontalno neiskorištenih priključaka jer oni ovise o paralelnosti instrukcija unutar jedne dretve. p r i k l j u č a k za i z d a v a n j e i n s t r u k c i j e • superskalarni procesor
a> *o o > o o> c
MT
• ••• | •• | • • • • | • • •• | • • • • • •| •• | • •• •• • •• • • • • • •
SMT
1 1
10
o a> a) a.
0) E a>
n
1
n
n 1
M
M s
dretva 1 dretva 2 dretva 3
|\\v| dretva 4 dretva 5
••
11 1 1 1 1
1
u
1 11 1
1
1 I1
M M M 1
n
Ivlv! LVH^I
a)
b)
SI. 15.25 Prikaz izvođenja dretvi: a) u superskalarnom procesoru konvencionalne arhitekture, b) u superskalar nom višedretvenom procesoru MT, c) u superskalarnom procesoru sa simultanom višedretvenosti SMT
Slika 15.25 c) pokazuje slijed izvođenja za simultano višedretveni procesor (SMT). Vidimo da u svakoj periodi signala vremenskog vođenja procesor"izabire" instrukcije za izvođenje iz svih dretvi. On iskorištava paralelizam na razini instrukcija izborom instrukcija iz bilo koje dretve. Nakon toga procesor dinamički raspoređuje resurse procesora između instrukcija i osigurava visoku razinu iskoristivosti sklopovskih resursa. Ako neka od dretvi ima visok stupanj paralelizma na razini instrukcija, onda se te instrukcije izvode i pritom je vrlo malo
512
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
horizontalno neiskorištenih priključaka. Ako paralelizam na razini instrukcija za jednu dretvu nije dovoljno visok, onda se izabire još jedna dretva (ili više njih) s nižim stupnjem paralelizma koja će popuniti prazne horizontalne priključke. Na taj se način postiže uklanjanje i vertikalnih neiskorištenih priključaka i u velikoj mjeri horizontalnih neiskorištenih priključaka, tako da se performansa SMT procesora povećava u odnosu na konvencionalni superskalarni procesor, ali i u odnosu na višedretveni procesor. Posebno zanimljiv pristup arhitekturi procesora je pristup koji se naziva treća generacija DPL (engl. Data Parallel Processor) u kojem se kombiniraju vektorske instrukcije, izdavanje instrukcija izvan redoslijeda i preimenovanje registara te simultano izvođenje više dretvi. Procesori s tim značajkama nose oznaku SMV - Simultaneous Multithreaded Vector- simultano višedretveni vektorski procesori.
15.5 VIŠEJEZGRENI PROCESORI Višedretvenost i simultana višedretvenost ostvaruje se uporabom višejezgrenih (engl. multicore) procesora. Opišimo arhitekturu nekoliko vodećih višejezgrenih procesora.
15.5.1
IBM POVVER4 DVOJEZGRENI PROCESOR Godine 2001. tvrtka IBM oblikovala je prvi komercijalni 64-bitni multiprocesorski sustav na čipu (višejezgreni procesor) opće namjene - POVVER4 (slika 15.26). Višejezgreni procesor POVVER4 sadržava dvije jezgre - dva superskalarna procesora na čipu te dijeljenu zajedničku priručnu memoriju druge razine (L2) koja je organizirana u tri bloka (svaki kapaciteta 470 KB) i direktorij za priručnu memoriju razine L3 (kapaciteta 32 MB) koja je ostvarena izvan procesorskog či pa. Jedinica Cl U - Ćore Interface Unit povezuje svaki od L2 blokova priručne memorije s priručnom memorijom podataka LI (kapaciteta 32 KB) i instrukcijskom priručnom memorijom LI (kapaciteta 64 KB) svake od jezgri. Jedinice NC - Non-Cacheable odgovorne su za rukovanje operacijama koje ne koriste priručne memorije jezgara. Sabirnička upravljačka jedinica GX upravlja komunikacijom s U/l jedinicama i podržava dvije tzv. GX sabirnice širine 4 bajta. Fabric Controller glavni je upravljač za sabirničku strukturu i komunikaciju s L2/L3 upravljačima priručne memorije te za komunikaciju više POVVER4 procesora. Dvojezgreni procesor namijenjen je iskorištavanju paralelizma na razini dretvi. Značajke POVVER4 arhitekture su superskalarnost i izvođenje instrukcija izvan redoslijeda. Izvođenje instrukcija izvan redoslijeda omogućuje sklopovlju procesora da "odgodi" instrukcije čiji operandi nisu još raspoloživi, npr. zbog promašaja u priručnoj memoriji tijekom instrukcije load i izvodi neku drugu instrukciju koja ima spremne operande. Nakon što operandi za odgođenu instrukciju postanu raspoloživi, procesor izvršava odgođenu instrukciju. Superskalarna jezgra POVVER4 procesora (slika 15.27) ima osam nezavisnih izvršnih jedinica: dvije jedinice za operacije brojevima s pomičnim zarezom (FPU), dvije jedinice za operacije brojevima sa čvrstim zarezom (FXU), dvije load/store jedinice, jedinicu grananja (BR) i logičku jedinicu (jedinicu uvjetnog registra CR - Conditional-register unit). Superskalarna jezgra može izvoditi do osam operacija u jednoj periodi signala vremenskog vođenja. Svaka od jezgri ima instrukcijsku priručnu memoriju razine L1 kapaciteta 64 KBte dvoulaznu priručnu memoriju podataka razine L1 kapaciteta 32 KB.
S. R1BARIĆ - GRAĐA RAČUNALA
513
SI. 15.26 Organizacija dvojezgrenog procesora POWER4
POWER4 može se koristiti i u konfiguraciji s više čipova POWER4 uporabom MCM - MultiChip Module tako da se mogu kombinirati četiri POWER4 čipa u jednom pakovanju. Višejezgreni procesor POWER4 ostvaren je u 180 nm VLSI tehnologiji SOI (Silicon on Insulator) CMOS i ima 174 milijuna tranzistora, radi na frekvenciji od 1.3 GHz pri čemu mu je potrošak snage oko 115 W. Poboljšana verzija procesora POWER4+ radi na frekvenciji 1.9 GHz i ima 184 milijuna tranzistora na čipu površine 267 mm2 (tehnologija 130 nm SOI CMOS).
514
15.
POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
SI. 15.27 Jezgra procesora POWER4
15.5.2.
ULTRASPARC TI IT2 Krajem 2005. tvrtka Sun najavila je višejezgreni (osam jezgri) procesor Ultra SPARCT1, pod nazivom Niagara, koji je ujedno i višedretveni, a namijenjen je za računarske sustave koji obavljaju funkciju poslužitelja (engl. server). Jedna od arhitektonskih značajki mu je da je orijentiran na djelotvorno iskorištavanje paralelizma na razini dretvi (višedretvenost), više no na razini instrukcija. No svaka od jezgri ima protočnu strukturu koja se sastoji od šest protočnih segmenata (pribavi, izbor dretve, dekodiraj, izvrši, pristup memoriji, upiši natrag). Vidimo da pet protočnih segmenata odgovara onima u "klasičnoj" instrukcijskoj RISC protočnoj strukturi (13. poglavlje) uz dodatak protočnog segmenta za prospajanje dretvi. Zbog relativne jednostavnosti protočne strukture instrukcije grananja i instrukcije load prouzrokuju kašnjenje od tri periode signala vremenskog vođenja, međutim, to se kašnjenje "prekriva" izvođenjem instrukcija drugih dretvi. Jezgra izdaje jednu instrukciju i upućuje je u protočnu strukturu - ne koristi se tehnika izdavanja i završavanja instrukcija izvan redoslijeda što u velikoj mjeri pojednostavnjuje izvedbu procesora. Svaka od osam jezgri podržava istodobno četiri dretve, tako da, zapravo, višejezgreni procesor T1 kombinira višedretvenost na razini procesora (jezgre) i hiperdretvenost - istodobno izvođenje većeg broja dretvi u osam jezgri. Već smo spomenuli da T1 rabi finozrnatu višedretvenost, odnosno da ima značajke "bačvastog" procesora (engl. barrelCPU). Svaka jezgra u svakoj periodi
S. RIBARIČ - GRAĐA RAČUNALA
515 I
signala vremenskog vođenja prospaja dretve. Dretve koje su zbog kašnjenja u protočnoj strukturi ili zbog promašaja priručne memorije u trenutnom zastoju "zaobilaze" se pri raspoređivanju. S obzirom da jezgra rukuje sa četiri dretve, neaktivna je samo u slučaju kada su sve četiri dretve u zastoju. Slika 15.28 prikazuje organizaciju višejezgrenog procesora TI. Osam jezgri, od kojih svaka ima svoju "privatnu" instrukcijsku priručnu memoriju i priručnu memoriju podataka (razina L1), prospojnom su mrežom crossbor spojene sa četiri izdvojene priručne memorije razine 2. Svaka od priručnih memorija razine L2 ima svoj direktorij. Koherencija priručnih memorija razine LI postiže se protokolom koherencije koji se temelji na direktoriju. Procesor T1 ima samo jednu jedinicu za operacije brojevima s pomičnim zarezom (engl. floating-point unit; FPU) kojoj jezgre pristupaju preko prospojne mreže. crossbar prospojna mreža
r — — — — — — — — — — — — — — "I o 0 O O Q
-0-
-0-
o-
-o-
o
-O-
-0
•o
•o
-0
-o
-o
-0-
-0-
-0
-o
-o
-O-
•O
O
-6
•o
O
o
-o
•o
•o
•o
-0
o
-0-
0
priručna memorija 4 (L2)
FPU
-o
priručna memorija 1 (L2)
priručna memorija 2 (L2)
priručna memorija 3 (L2)
SI. 15.28 Organizacija višejezgrenog procesora Sun Ultra SPARC TI (Niagara 1)
Ln
LTt NJ & =h lQ c
Q> O
visejezgreni procesor
NJ X
00
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
8KB L1
8KB L1
8KB LI
8KB LI
8KB
fD
8KB L1
8KB L1
8KB L1
O)
o o fcD n o -*
OJ CO c 3 c r+ —x Q J
LI
prospojna mreža crossbar
90 GB/s (piši skroz)
179 GB/s
4 MB
to
3D n -NIJ
dijeljena priručna memorija L2
razdjeljnici (hub)
A-
V memorijski upravljač
Q>
NJ 21.33 GB/s (čitanje)
10.66 GB/s (pisanje)
667 MHz FBDIMM memorija
visejezgreni procesor
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
jezgra spare
8KB LI
8KB LI
8KB LI
8KB LI
8KB LI
8KB L1
8KB L1
8KB L1
prospojna mreža crossbar
90 GB/s (piši skroz)
£O 0
179 GB/s
4 4 MB
dijeljena priručna memorija L2
A
V
razdjeljnici {hub)
memorijski upravljač
10.66 GB/s (pisanje)
21.33 GB/s (čitanje)
667 MHzFBDIMM memorija
FBDIMM - Fully-buffered DIMM
S. RIBARIČ - GRAĐA RAČUNALA
517 I
Navedimo neke od arhitektonskih značajki višejezgrenog procesora TI: • finozrnata višedretvenost na razini instrukcije, • osam jezgri, • četiri dretve po jezgri, • jedna FPU, • crossbar prospojna mreža, • relativno jednostavna protočna struktura sastavljena od šest poput RISC protočnih segmenata, • jezgra ima priručne memorije razine LI: 16 KB instrukcijske memorije i 8 KB priručne memorije podataka (blok ili linija duljine je 64 bajta), • četiri odvojene priručne memorije razine L2 svaka po 750 KB, • koristi se protokol koherencije koji se temelji na direktoriju. Navedimo još neke tehnološke detalje: izveden je u 90 nm CMOS VLSI tehnologiji, ima 279 milijuna tranzistora ostvarenih na silicijskom čipu površine 379 mm2, potrošak snage mu je 79 W, a maksimalna frekvencija signala vremenskog vođenja je 1.2 GHz. Vršna performansa višejezgrenog procesora TI iznosi oko 9600 MIPS-a i oko 1200 MFLOPS-a. U listopadu 2007. na tržištu se pojavio Ultra SPARC T2 (kodnog imena Niagara 2) (slika 15.29) koji je poboljšana verzija prethodnika T1. Procesor T2 je realiziran u 65 nm VLSI tehnologiji, ima osam jezgri i svaka se jezgra može istodobno koristiti s osam dretvi, dakle T2 ima ukupno 64 konkurentnih dretvi. Svaka je jezgra ostvarena kao protočna jedinica s osam protočnih segmenata i ima i dvije aritmetičko-logičke jedinice koje dijele grupe od po četiri dretve. Umjesto jedne FPU jedinice, sada ih je u T2 osam - po jedna FPU za svaku jezgru. Kapacitet priručne memorije razine L2 je s 3 MB povečan na 4 MB i organizirana je kao 16-putna asocijativna memorija (10. poglavlje). Frekvencija signala vremenskog vođenja je s 1.2 GHz povećana na 1.6 GHz. Performansa procesora T2, u odnosu na T1, znatno je poboljšana tako da ispitni programi pokazuju da je propusnost za cjelobrojne operacije veća od dva puta (u odnosu na T1), propusnost za cjelobrojnu dretvu veća je za 1.4 puta, a performansa dretve koje rabi operacije brojevima s pomičnim zarezom povećana je 5 puta (što je i razumljivo s obzirom na 8 FPU jedinica). Višejezgreni procesori T1 i T2 na ISA {Instruction Set Architecture) razini (poglavlje 3.) odgovaraju porodici Sunovih procesora.
15.5.3. A M D O P T E R O N X 4 2 3 5 6 Višejezgreni procesor Opteron X4 2356 tvrtke AMD jedan je iz brojne porodice 4-jezgrenih procesora serija 1300,2300,4100 i 8300, različitih kodnih imena - od Budapest (serija 1300) do Shangai (serija 8300). Procesor Opteron X4 2356, kodnog imena Barcelona, ima četiri jezgre po čipu, a koristi se kao multiprocesorski sustav koji ima dva podnožja (engl. CPU slot, CPU socket) tako da oblikuje sustav s 8 jezgri. (Opaska: kada se govori o takvim višejezgrenim konfiguracijama, često se koristi izraz "broj jezgri po podnožju", npr. four cores per socket). Slika 15.30 prikazuje organizaciju višejezgrenog procesora Opteron X4 2356. Jezgra je složeni procesor koji ima 6-segmentnu instrukcijsku protočnu strukturu, 72 fizička registra, međuspremnikza cjelobrojne i FP operacije u repu čekanja (engl. operation queue), međuspremnik za load/store operacije u repu čekanja, tri ALU za cjelobrojne operacije, tri FPU (zbrajalo, množilo, mješovite operacije), instrukcijsku priručnu memoriju (razina L1,64 KB) i priručnu memoriju podataka (razina L1,64 KB). Svaka od jezgri ima i dodatnu 512 KB lokalnu priručnu memoriju, tzv. victim cache koja sadržava blokove podataka koji
518
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
su "Izbačeni" iz priručne memorije tijekom zamjene blokova (vidi 9. poglavlje) te dijeli 2MB priručne memorije koja se naziva još i quasi-victim. Svaka od jezgri podržava osam dretvi. Na čipu je ostvareno posebno tzv. sistemsko sučelje SRI (System Request Interface) i prospojna mreža crossbar koja ostvaruje vezu između quasi-victim priručne memorije, memorijskog upravljača i sučelja za komunikaciju s višejezgrenim procesorom (HyperTransport link) koji se nalazi u drugom podnožju. Brzina prijenosa podataka između dvaju sučelja je 4 GB/s. Da bi čitatelj dobio osjećaj o povezivanju višejezgrenih procesora "četiri jezgre po podnožju" u 8-jezgrenu konfiguraciju, navedimo da AMD Opteron koristi LGA (engl. land grid array) podnožje tipa F (Socket F) koje ima preko 1200 priključaka. Višejezgreni procesor Opteron X4 2356 na ISA razini odgovara procesorima sa skupom instrukcija porodice x86 s proširenjem na 64-bitnu arhitekturu (x86/64). Memorijski upravljač ostvaruje pristup 667 MHz DDR2 dinamičkoj memoriji (8. poglavlje) uz propusnost od 10.66 GB/s. Višejezgreni procesor radi s frekvencijom signala vremenskog vođenja od 2.3 GHz i postiže vršnu performansu od 74 GFLOPS-a. Krajem prvog desetljeća ovog stoljeća tvrtka AMD razvila je 12-jezgreni procesor Opteron kodnog imena "Magny Cours". Svaka jezgra Opteron je superskalarni procesor (izdaje do tri instrukcije u jednoj periodi signala vremenskog vođenja) i koristi izdavanje i završavanje instrukcija izvan redoslijeda (13. poglavlje). Jezgra pribavlja (iz instrukcijske priručne memorije) i dekodira do tri X 8 6 - 6 4 instrukcije tijekom svake periode signala vremenskog vođenja. Instrukcije promjenjive duljine pakiraju se u tzv. makrooperacije (mops) čvrste duljine. Nakon toga se makrooperacije upućuje u dvije nezavisne jedinice za raspoređivanje - jedna je za cjelobrojne operacije, a druga za FP i multimedijske operacije. Jedinice za raspoređivanje mogu rasporediti do devet takvih makrooperacija, i to sljedećim izvršnim resursima: • trima cjelobrojnim protočnim izvršnim jedinicama i jedinici za generiranje adrese, • trima FP i multimedijskim protočnim jedinicama, • load/store jedinica. Jezgra ima i load/store jedinicu kojoj se upućuju load i store instrukcije. Load/store jedinica može izvesti dvije load instrukcije i jednu store tijekom svake periode signala vremenskog vođenja. Način izdavanja i izvođenja instrukcija je takav da se za do 72 makrooperacije može preurediti redoslijed njihova izvođenja. Slika 15.31 prikazuje konfiguraciju koja se sastoji od dva čipa koji čine 12-jezgreni procesor tako da su oba čipa smještena u jednom pakiranju MCM (Multichip Module package). Svaki čip ima po šest jezgri, a čipovi komuniciraju, slično kao i u višejezgrenom procesoru Opteron X4 2356, preko HyperTransport 3 sučelja. Pakiranje ima podnožje tipa LGA, ali s 1944 priključka (735 više od prethodne generacije višejezgrenih procesora Opteron). Svaka od Opteron jezgri ima instrukcijsku priručnu memoriju i priručnu memoriju podataka (svaka kapaciteta 64 KB; razina L1). Svakoj je jezgri pridružena i priručna memorija razine L2 kapaciteta 512 KB (nalazi se na procesorskom čipu) te zajednička dijeljena priručna memorija razine L3 (6 MB).
LO
t o o
N
Qi <
n> 3 o IO
jezgra Opteron
jezgra Opteron
jezgra Opteron
jezgra Opteron
o n
512KB priručna memorija
512KB priručna memorija
512KB priručna memorija
512KB priručna memorija
0) (o/> fD -*
c 1
2MB dijeljena priručna memorija
o X
0 &
A SRI / crossbar prospojna mreža
N J L O Ln o> memorijski upravljač
— z ^ 10.66 GB/s
667 MHz FBDIMM memorija
V
A Vr
0 a c 1
i
2x4 GB/s
K fV
jezgra Opteron
jezgra Opteron
jezgra Opteron
jezgra Opteron
512KB priručna memorija
512KB priručna memorija
512KB priručna memorija
512KB priručna memorija
2MB dijeljena priručna memorija SRI / crossbar prospojna mreža
memorijski upravljač
"ZV
7 Y 10.66 GB/s
667 MHz FBDIMM memorija
52515.POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
u
o iy>
A V
(U
U
O £
OJ i—
A
CD
N
m
QC Q Cl
V
\D
IZ
512 KB L2 512 KB L2 512 KB L2 512 KB L2 512 KB L2
m
o m E
c Č T o. t/> o
V
CL
A V
QC Q
O.
O E
512 KB L2
jezgra jezgra jezgra jezgra jezgra jezgra Opteron Opteron Opteron Opteron Opteron Opteron
f }JodsuDJ±JddA(-j
SI. 15.31 Konfiguracija od dva čipa smještenih u M C M pakovanju kojom se oblikuje 12-jezgreni procesor Opteron kodnog imena "Magny Cours"
5. R1BARIĆ - GRAĐA RAČUNALA
15.5.4.
521
1MB POWERS DVOJEZGRENI SMT PROCESOR, POWER61 POWER7 POWER5 je dvojezgreni SMT procesor koji podržava 64-bitnu PowerPC arhitekturu. Najednom čipu su ostvarene dvije identične jezgre pri čemu svaka od njih podržava jednu fizičku dretvu i dvije logičke dretve, pored instrukcijske priručne memorije razine LI kapaciteta 32 KB i priručne memorije podataka razine L1 kapaciteta 32 KB, procesor ima i priručnu memoriju razine L2 kapaciteta 1.875 MB (koju dijele obje jezgre) i direktorij za priručnu memoriju razine L3. Direktorij je namijenjen priručnoj memoriji kapaciteta 36 MB koja je realizirana izvan procesorskog čipa. Procesor POWER5 koristi crossbar prospojnu mrežu. Na procesorskom čipu nalazi se i memorijski upravljač i na taj se način izbjegava dodatno kašnjenje koje je uzrokovano pogonskim sklopovima u slučaju kada je upravljač ostvaren kao vanjski (izvan procesorskog čipa). Jezgra POWER5 podržava dva načina rada: simultanu višedretvenost (SMT način rada) u kojem se izdaje više instrukcija iz različitih dretvi u jednoj periodi signala vremenskog vođenja te jednodretveni način rada ST (engl. single-threaded mode). U simultanom višedretvenom načinu rada POWER5 upotrebljava dva odvojena adresna registra za pohranjivanje programskih brojila za obje dretve. Protočni segment za pribavljanje instrukcija IF naizmjence se koristi za dvije dretve. Dvije dretve dijele in stru kcijsku priručnu memoriju i sklopovlje za adresnu translaciju. U jednodretvenom načinu rada jezgra koristi samo jedno programsko brojilo i pribavlja instrukcije iz jedne dretve. Procesor može pribavljati do osam instrukcija iz instrukcijske priručne memorije (IC - Instruction Cache) tijekom svake periode. Razlog uporabe i jednodretvenog načina rada je u tome što su arhitekti ocijenili da postoji mnogo primjena u kojima nema višdretvenosti te bi "umjetno" izvođenje dviju dretvi u tim slučajevima degradiralo performansu procesora. U oba slučaja (SMT i ST) pribavlja se osam instrukcija iz iste dretve, međutim, njihovo izdavanje će biti, ako je riječ o SMT, takvo da su iz različitih dretvi. Jezgra pribavlja do osam instrukcija, a izdaje ih četiri za izvođenje izvan redoslijeda. Slika 15.32 prikazuje instrukcijsku protočnu strukturu POWERS jezgre. Pribavljene se instrukcije "prosijavaju" u protočnom segmentu za predviđanje grananja (BP - Branch Prediction) i ako se nađe instrukcija grananja, onda se predviđa smjer grananja na temelju složene sheme koja koristi tri tablice povijesti grananja (BHT - Branch History Table). Obje dretve dijele te tri tablice. Nakon pribavljanja, POWER5 smještava instrukcije na predviđene instrukcijske putove u odvojene repove čekanja za obje dretve (protočni segmenti DO - D3). Jezgra raspoređuje do pet instrukcija u svakoj periodi signala vremenskog vođenja. Na temelju prioriteta dretvi procesor izabire instrukcije iz jednog od repova čekanja (D1, D2, D3 protočni segmenti). Sve instrukcije u grupi dolaze iz iste dretve i de kod i raj u se istodobno. Prije no što se grupa instrukcija rasporedi za izvršenje, jezgra mora osigurati raspoloživost resursa. Kada su svi potrebni resursi raspoloživi, grupa instrukcija se raspoređuje. Taj zadatak obavlja protočni segment GD (Group Dispatch). Nakon raspoređivanja, svaka od instrukcija protječe kroz protočni segment MP (Mapping) u kojem se obavlja preimenovanje registara (uklanjanje lažne zavisnosti) tako da se logički registri preslikavaju u fizičke registre. Jezgra ima 120 registara opće namjene i 120 FP registara. Obje dretve dinamički dijele ta dva skupa registara. Nakon preimenovanja registara, instrukcije ulaze u repove za čekanje koje dijele obje dretve. Jezgra POWER5 ima osam izvršnih jedinica (dvije load/store jedinice, dvije cjelobrojne jedinice FXU (Fixed-point Execution Unit), dvije FP jedinice, jedinicu gra-
522
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
nanja BXU (Branch Execution Unit) I posebnu jedinicu za logičke operacije CRL (Condition Register Logical Execution Unit). Kad su svi potrebni operandi za instrukciju raspoloživi, ona postaje prikladna za izdavanje. Prikladne instrukcije izabiru se u protočnom segmentu ISS (Instruction Issue) i šalju se u izvršavanje. Protočni segment ISS ne razlikuje instrukcije po pripadnosti pojedinoj dretvi. Kada su sve instrukcije u grupi izvršene, one se predaju protočnom segmentu CP (Group Commit). U jezgri se oblikuju dvije grupe (po jedna za svaku dretvu) u jednoj periodi signala vremenskog vođenja. Višejezgreni procesor POWER5 radi s frekvencijom signala vremenskog vođenja od 1.9 GHz, ostvaren je u 130 nm VLSI tehnologiji na čipu površine 389 mm2, ima oko 200 milijuna tranzistora te ima potrošak snage od oko 130 W. Poboljšane verzija POWER5+ (2005. i 2006. godina) rade s frekvencijom signala vremenskog vođenja do 2.3 GHz i imaju priručnu memoriju razine L3 ostvarene na procesorskom čipu. POWER5+ realiziranje u 90 nm tehnologiji na komadiću silicija površine 389 mm2. Poboljšana verzija SMT procesora, također s dvije jezgre, je POWER6 procesor (2007.) koji radi na frekvenciji 5.0 GHz. Svaka jezgra ima dvije cjelobrojne aritmetičke jedinice, dvije jedinice za operacije brojevima s pomičnim zarezom FPU, jedinicu za izvođenje SIMD instrukcija (AltiVec unit) i jednu FP jedinicu za operacije decimalnim brojevima (engl. decimal floating-point unit). Jezgra ima instrukcijsku priručnu memoriju kapaciteta 64 KB ostvarenu kao četveroputna memorija sa skupnim asocijativnim preslikavanjem te 64 KB priručne memorije podataka (osamputna memorija sa skupnim asocijativnim preslikavanjem; 10. poglavlje). Osim toga, svaka jezgra ima priručnu memoriju razine L2 kapaciteta 4 MB. Procesor POWER6 ostvaren je na čipu površine 341 mm2 uporabom 65 nm VLSI tehnologije i ima oko 790 milijuna tranzistora. Poboljšana verzija POWER6+ pojavila se na tržištu 2009. godine. Procesor POWER7 (2010.) je prvi IBM-ov 8-jezgreni SMT procesor i predstavlja procesor za poslužitelje nove generacije. Svaka od jezgri podržava četiri istodobne višedretvene operacije, dakle ukupno 32 istodobno izvršljive dretve. Jezgra ima 12 izvršnih protočnih jedinica (dvije cjelobrojne jedinice, dvije load/store jedi nice, četiri FP jedinice dvostruke točnosti, jednu vektorsku jedinicu, jednu jedinicu grananja, jednu FP jedinicu za operacije decimalnim brojevima te jednu posebnu jedinicu za logičke operacije CRU (Condition Register Logic Unit) i istodobno izvodi četiri dretve. U svakoj periodi signala vremenskog vođenja jezgra pribavlja do osam instrukcija, dekodira i raspoređuje do šest instrukcija te izdaje i izvršava do osam instrukcija. Jezgra ima 32 KB instrukcijsku priručnu memoriju (readonly) i 32 KB priručnu memoriju podataka, 256 KB priručne memorije razine L2 te priručnu memoriju razine L3 (kapaciteta 32 MB) također izvedene na procesorskom čipu. POWER7 višejezgreni procesor ima za faktor 4 veću performansu u odnosu na POWER6 višejezgreni procesor. Procesor POWER7 ostvaren je u 45 nm VLSI tehnologiji, ima 1.2 milijarde (!) tranzistora na čipu površine 567 mm2.
ISS - izdavanje instrukcija (Instruction Issue) RF - skup registara (Register File) EX - izvrši (Execute) EA - računanje efektivne adrese (Address Computation) DC - priručna memorija podataka {Data Cache) F6 - protočna struktura FP jednica Fmt - formatiranje podataka WB - upisivanje natrag (Write Back) CP - grupa izvršenih instrukcija (Group Commit)
1
MP 1 ISS 1
RF
i MP i ISS
RF
EX
WB
Xfer
WB
Xfer -
jedinica grananja (BXU)
DC - Fmt
EA
2 p r o t o č n e s t r u k t u r e load/store
i MP i ISS i
RF
WB
Ex
CP Xfer
2 p r o t o č n e strukture c j e l o b r o j n e j e d i n i c e (FXU)
MP ii ISS
RF F6
WB
2 p r o t o č n e s t r u k t u r e za FPU j e d i n i c e
Xfer
524
15.5.5.
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
OCJENA PERFORMANSI MULTIPROCESORA Za ocjenu performansi multiprocesora rabe se posebni paralelni ispitni programi (engl. multiprocessor benchmark) kao što su Unpack- zbirka programa iz područja linearne algebre i Gaussove eliminacijske metode, SPECrate - temelji se na SPEC CPU 2006 ispitnim programima, NAS - NASA ADVENCED Supercomputing - koristi programe kojima se rješavaju problemi iz dinamike fluida, PARSEC (Princeton Application Respository for Shared Memory Computers) - ispitni višedretveni programi koji koriste UNIX API[(Application Programming Interfaces) Pthreads i OpenMP API namijenjen multiprocesorirha s dijeljenom memorijom koji koristi C, C++ ili Fortran, a prvenstveno je namijenjen 0NIX i Microsoft platformama te SPLASH i SPLASH 2 (Stanford Parallel Applications for Shared Memory) koji uključuje ispitne programe kao što su kompleksna 1D FFT (Fast Fourier Transformation), složeni simulacijski programi, prikazi 3D tijela i si.
15.6. GRAFIČKI PROCESORI (GRAFIČKE PROCESNE JEDINICE) Prikaz informacija u grafičkom obliku jedan je od najpodesnijih i najrazumljivijih načina komunikacije čovjeka i računala. Grafičke pri kazne jedinice (engl. graphics display) jedan su od najfascinantnijih U/l uređaja. Zaslon prikazne jedinice može biti katodna cijev CRT (Cathode Ray Tube), zaslon temeljen na tehnologiji tekučih kristala LCD (Liquid Crystal Display), na tehnologiji plazme (engl. plasma display) ili na tehnologiji OLED (Organic Light-emitting Diode) te njezinim inačicama: TOLED - transparent OLED i FOLED - flexible OLED različitih rezolucija. Izvorno su prikazne jedinice osobnih računala imale rezoluciju 640x480 slikovnih elemenata (VGA - Video Graphics Array). Sredinom devedesetih godina uobičajena rezolucija bila je 1024x768 slikovnih elemenata (XGA - Extended VGA), a za web-aplikacije obično se rabila rezolucija 800x600 (SVGA - Super VGA). Današnje prikazne jedinice imaju obično rezoluciju 1280x1024 slikovnih elemenata (SXGA - Super XGA). Rezolucija LCD, ovisno o veličini zaslona prikazne jedinice, kreče se od 640x480 (prva generacija) pa sve do 2560x1600 slikovnih elemenata. Uobičajena rezolucija za LCD prikazne jedinice veličine 21 inča je 1600x1200 slikovnih elemenata. Prikazne jedinice u boji koriste od 8 bitova pa sve do 24 bita za prikaz svake od triju osnovnih boja RGB (engl. red - crvena, green - zelena, blue - plava) tako da se mogu prikazati milijuni boja. Sklopovlje računala koje podržava grafiku sastoji se od slikovnog međuspremnika (engl. frame buffer) ili videomemorije u kojoj se pohranjuje slika za prikaz, upravljača (engl. controller) i sučelja za prikaznu jedinicu. Organizacija grafičkog sučelja za osobna računala tijekom vremena se mijenjala - u jednoj je fazi razvoja sklopovlje namijenjeno grafici bilo isključivo smješteno na matičnoj ploči, a u drugoj je varijanti bilo ostvareno na posebnoj pločici (grafička kartica; engl. video display card, graphics card). I danas prijenosna računala obično imaju grafičko sklopovlje na matičnoj ploči, dok stolna računala vrlo često imaju, uz grafičko sklopovlje na matičnoj ploči, mogućnost priključivanja dodatnih grafičkih kartica. Slika 15.33 prikazuje uobičajenu konfiguraciju osobnog računala početkom devedesetih godina prošlog stoljeća. Sjeverni premosnik (engl. North Bridge) imao je širokopojasno sučelje koje je povezivalo procesor, memoriju i PCI sabirnicu. Sklopovlje grafičke jedinice koje se sastojalo od VGA upravljača (Video Graphics Array Controller), koji je zapravo memorijski upravljač, prikaznog generatora i slikovnog međuspremnika, bilo je priključeno na PCI sabirnicu.
SI. 15.33 Uobičajena konfiguracija osobnog računala početkom devedesetih godina \
Zbog potrebe prijenosa velike količine podataka između procesora, memorije i grafičke jedinice, umjesto priključenja na PCI sabirnicu, koristila se i brza veza točka-točka između memorije i grafičke jedinice preko AGP (Accelerated Graphic Port) pristupa koji predstavlja brzo namjensko sučelje grafičkoj kartici (2,133 GB/s). Slika 15.34 prikazuje konfiguraciju koja je tipična za osobna računala u prvom desetljeću ovog stoljeća. Osnovna značajka je da se koriste dva odvojena procesora - središnja (centralna) procesna jedinica CPU i grafički procesor GPU (Graphics Processing Unit - grafička procesna jedinica) koji imaju dva odvojena memorijska podsustava - jedan namijenjen procesoru CPU i jedan namijenjen grafičkom procesoru GPU. Grafički je procesor PCle (PCIexpress) sabirnicom povezan sa sjevernim premosnikom, čime se ostvaruje vršna brzina prijenosa od 16 GB/s. Sigurno ste primijetili da se u opisu suvremene konfiguracije osobnog računala koristi termin "grafički procesor", odnosno "grafička procesna jedinica". Naime, krajem devedesetih godina razvoj tehnologije VLSI omogućio je da se VGA upravljaču pridoda sklopovlje (tzv. sklopovski akceleratori) kojim se ubrzavaju neke funkcije definirane u logičkoj grafičkoj protočnoj strukturi (engl. logical graphics pipeline) koja je podloga za sklopovsko/programsku izvedbu grafičke jedince. (Opaska: logička grafička protočna struktura (ili grafički protočni sustav) termin je koji se koristi u računalnoj grafici za opisivanje faza potrebnih za prikaz slike (engl. rendering) - od matematičkog modela do 2D prikaza virtualne 3D scene na zaslonu prikazne jedinice.)
526
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
SI. 15.34 Konfiguracija osobnog računala u prvom desetljeću ovog stoljeća \
Opišimo glavne faze u logičkoj grafičkoj protočnoj strukturi i skrenimo pozornost na one funkcije kojima su namijenjeni sklopbyski akceleratori. Logička grafička protočna struktura sastojite od slijednih glavnih funkcija: transformacije vrhova (engl. vertices) kao što su translacija, rotacija, promjena mjerila, gdje vrh u grafici predstavlja strukturu podataka koja opisuje točku u 2DlfT3D prostoru te operacije na atributima koji su pridruženi vrhovima krpica (engl. patch) - malim trokutastim ili pravokutnim poligonima, kojima se predočava ploha objekata. Vrhovima krpica pridružuju se, osim informacije o položaju, drugi grafički atributi kao što su boja, reflektivnost plohe, tekstura te normala na aproksimiranu zakrivljenost plohe. Grafička procesna funkcija koja se izvorno naziva vertex shader (sjenčanje vrhova) koristi se za manipulaciju vrhovima, odnosno njihovim atributima: promjenu položaja, boje i koordinata teksture, proračun osvjetljenja te transformaciju 3D pozicije vrha u virtualnom prostoru u 2D koordinatni sustav zaslona. Transformaciji vrhova slijedi procesna funkcija koja se naziva geometry shader. Pomoću nje se generiraju novi grafički primitivi kao što su točke, linije i plohe, odnosno krpice određene trima ili četirima vrhovima. Sljedeća funkcija u grafičkoj protočnoj strukturi je rasterizacija koja se sastoji od pretvorbe kontinuiranih koordinata u diskretne koordinate u prikaznoj memoriji, otklanjanja neželjenih učinaka uslijed diskretizacije, uklanjanja skrivenih ploha te preslikavanja boje i teksture na poligone (pixelshader). Zadnji segment u grafičkoj protočnoj strukturi jest prikaz oblikovane slike na zaslonu prikazne jedinice. Krajem devedesetih godina sklopovi za ubrzanje (akceleratori) u grafičkim jedinicama bili su namijenjeni funkcijama generiranja grafičkih primitiva te preslikavanju boje i teksture na poligone. Početkom 2000. počinje se koristiti naziv grafički procesor jer se u jednom čipu objedinjuju sve uobičajene funkcije potrebne za djelotvorni prikaz 2D i 3D grafike. Grafički procesor postaje čvrsto definirana funkcijska protočna struktura namijenjena visoko kvalitetnom prikazu jednakom onom filmskom (engl. film-quality rendering) u stvarnom vremenu. Zapravo, krajem 1999. tvrtka NVIDIA uvela je termin "grafička procesna jedinica" GPU Graphics Processing Unit kojim je opisala procesor na čipu GeForce 256 u kojem su integrirane funkcije koje podržavaju logičku grafičku protočnu strukturu.
S. RIBARIČ - GRAĐA RAČUNALA
527 I
Grafička procesna jedinica GeForce 256 obrađivala je 15 M poligona (krpica) u sekundi i 480 M slikovnih elemenata u sekundi. Imao je čvrsto definiranu 32-bitnu FP (engl. floatingpoint) jedinicu za transformacije vrhova, procesor za proračun osvjetljenja (engl. lighting processor) i čvrsto definiranu cjelobrojnu funkciju koja se odnosila na preslikavanje boje i teksture na poligone. Prema podacima iz 2005. prodano je 500 milijuna grafičkih procesora godišnje - od toga najviše (oko 50 milijuna) za interaktivne računalne igre na osobnim računalima. Osim toga, grafički se procesori koriste u radnim stanicama, simulatorima vožnje i letenja. Veliki dio tržišta grafičkih procesora namijenjen je mobitelima. S vremenom, grafički procesori postajali su programirljivi i zamijenili su čvrsto definirane funkcije određene logičkom grafičkom protočnom strukturom. Uz to, računske su se operacije s cjelobrojnih raširile na operacije brojevima s pomičnim zarezom jednostruke i dvostruke točnosti. Trenutačno stanje (2010.) je sljedeće: grafički su se procesori pretvorili u programirljiveparalelne procesore koji svojom procesnom snagom premašuju višejezgrene (engl. multicore) procesore. Grafički procesori i njima pridružene programske rutine (engl. driver) ostvarene s OpenGL i DirectX definiraju različite modele grafičke obrade. OpenGL je otvoreni standard za programiranje funkcija 3D grafike, a DirectX je dio Microsoftovog multimedijskog programskog sučelja koje uključuje i Direct3D za 3D grafiku. Oba aplikacijska programska sučelja API (Application Programming Interfaces) omogućuju oblikovanje djelotvornih sklopovskih ubrzanja grafičkih funkcija. S arhitektonskog gledišta, grafički procesor je visoko paralelni, više dretveni procesor s vrlo velikim brojem jezgri namijenjen vizualnom računanju (engl. visual computing). Vizualno računanje je novi pojam koji se odnosi na složenu mješavinu grafičke obrade i računanja tako da omogućuje vizualnu interakciju u stvarnom vremenu računalno oblikovanih objekata uporabom grafike, slika i videa. Grafičkim procesorima pridodane su nove instrukcije i memorija tako da podržavaju više programske jezike i programska okruženja opće namjene. Grafički procesori sada se mogu programirati u programskim jezicima sličnim C i C++ i postaju procesori opće namjene s vrlo velikim brojem jezgri (engl. manycore)\ U skladu s arhitektonskim značajkama suvremenih grafičkih procesora, definiran je i novi model programiranja jer velika procesna moć koja se odnosi na operacije brojevima s pomičnim zarezom te veliki stupanj paralelizma ostvaren vrlo velikim brojem procesora, odnosno jezgri, nudi djelotvornu primjenu grafičkih procesora na područjima izvan računalne grafike (na primjer, obrada digitalnih slika i videa, složeni postupci optimizacije uporabom evolucijskih algoritama, postupci kriptiranja/dekriptiranja podataka i si.). Jedan od modela paralelnog programiranja namijenjen grafičkim procesorima (ali i višejezgrenim procesorima) nove generacije je CUDA (Compute Unified Device Architecture) koji predstavlja i programsku platformu temeljenu na C/C++ programskom jeziku (CUDA C i CUDA C++). Model CUDA je zapravo SPMD (Single-Program Multiple Data) model u kojem programer piše program za jednu dretvu koja se potom instancira ili oprimjeruje u velikom broju dretvi na velikom broju procesora u grafičkoj procesnoj jedinici.
528
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
15.6.1. NVIDIA TESLA - UNIFICIRANA ARHITEKTURA ZA GRAFIKU I RAČUNANJE Tradicionalna izvedba 3D grafičkog procesora zasniva se na logičkoj grafičkoj protočnoj strukturi utemeljenoj na odvojenim programirljivim stupnjevima procesora za sjenčanje vrhova (engl. vertex processor) koji izvode programe za obradu vrhova i stupnjevima procesora za obradu slikovnih elemenata (engl. fragment pixel processor). U studenom 2006. tvrtka NVIDIA definirala je novu arhitekturu pod nazivom Tesla za grafički procesor GeForce 8800. Osnovna značajka arhitekture Tesla jest da se programi za sjenčanje vrhova (engl. vertex shader) i programi za sjenčanje slikovnih elemenata (engl. pixel-fragment shader) izvode na ujednačenoj (uniformnoj) visokoparalelnoj arhitekturi procesora. Drugim riječima, u grafičkom procesoru koji se temelji na Tesla arhitekturi nema razlike između procesora za sjenčanje vrhova i procesora za sjenčanje slikovnih elemenata. Programi se izvode na jednakim procesorima koji, uz to što objedinjuju obje funkcije, imaju i dodatne funkcije tako da se grafički procesor može koristiti i u negrafičkim aplikacijama koje su vrlo zahtjevne u pogledu performansi. Programi za tu vrstu aplikacija razvijaju se u višim programskim jezicima sličnim C i C++u skladu s modelom paralelnog programiranja ČUDA Jedan od razloga ujednačenosti procesora u arhitekturi Tesla je i zahtjev za dinamičkim uspostavljanjem ravnoteže radnog opterećenja između procesora za sjenčanje vrhova i procesora za sjenčanje slikovni elemenata. Uz to, ujednačenost dopušta djelotvorno uvođenje novih postupaka iz logičke grafičke protočne strukture, primjerice postupaka koji se odnose na generiranje geometrijskih primitiva (engl. geometry shader). Slika 15.35 prikazuje blok-dijagram grafičkog procesora GeForce 8800. Sustavno se arhitektura grafičkog procesora GeForce 8800 može opisati kao hijerarhijska organizacija koja se sastoji od: i) polja tokovnih procesora SPA (Streaming Processor Array), ii) teksturno-procesorske nakupine TPC (Texture/ProcessorCluster), iii) tokovnih mult i procesora SM (Streaming-Multiprocessor), iv) tokovnih procesora SP (Streaming-Processor) i procesora za rasterske operacije ROP (Raster Opertions Processor). Grafički procesor ima polje tokovnih procesora SPA (Streaming Processor Array) koje se sastoji od 128 tokovnih procesora (ili tgkovnih procesorskih jezgri) SP (engl. streaming-processor core). Svaki tokovni procesor SP^je višedretveni procesor koji podržava 96 istodobnih dretvi. Tokovni procesori SP organizirani su u 16 tokovnih muItiprocesora SM (engl streamingmultiprocessor) grupiranih u osam nezavisnih procesorskih jedinica koje se nazivaju tekstu rno-procesorske nakupine TPC (engl. texture/processor cluster). Teksturno-procesorska nakupina (slika 15.36) ima po dva tokovna multiprocesora SM, a svaki od njih ima osam tokovnih procesora SP. Iz toga slijedi da jedan tokovni multiprocesor SM može istodobno izvršavati do 8 x 96 = 768 dretvi. Tokovni multiprocesor SM opisuje se kao procesor SIMT - Single-Instruction, Multiple-Thread (jedna instrukcija višestruke dretve). Teksturnoprocesorska nakupina TPC ima i upravljač geometrijskih operacija koji služi za preslikavanje logičkih grafičkih vrhova u fizičke tokovne multiprocesore. Osim toga, ima i upravljač tokovnih multiprocesora (SMC) i teksturnu jedinicu. Ovdje smo upotrijebili novi termin "tokovna procesorska jezgra" ili "tokovni procesor" (engl. streaming-processor) i trebamo ga objasniti!
in
cn to LH ro O
Host CPU
fTk^
Bridge
System memory
i
CD
ID —i Q>
3 ID
QJ n< O lQ o n
(T> i/i
o
3 CD fl) n fD 00 00
O O
1 2 3 4 5 6
CPU domaćin premosnik sistemska memorija sučelje za CPU domaćina ulazni zbirnik raspoređivanje poslova za procesore za
7 8 9 10
sjenčanje vrhova blokzarasterizaciju raspoređivanje poslova za procesore za sjenčanje slikovnih elemenata raspoređivanje računalnih poslova TPS - teksturno-procesorska nakupina
11 12 13 14 15 16
SM - tokovi multiprocesor SP - tokovni procesor tekstu rna jedinica priručna memorija dijeljena memorija procesor za rasterske operacije
530
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
Arhitektura tokovnog procesora prilagođena je tzv. tokovnom programskom modelu (engl. stream programming model) koji se sastoji od dvije glavne komponente: tokova (engl. stream) i jezgri (engl. kernel). Tokovi se, općenito, mogu opisati kao sljedovi sličnih zapisa podataka, a jezgre kao mali programi koji djeluju na skupini ulaznih tokova generirajući skupine izlaznih tokova. Iz ovog jednostavnog opisa možemo opravdano zaključiti da tokovni programski model odgovara modelu koji se temelji na arhitekturi upravljanoj tokom podataka (engl. dataflow) (poglavlje 1). Tokovni procesor kombinira značajke SIMD arhitekture i arhitekture upravljane tokom podataka. Tokovni procesor se, općenito, sastoji od tokovne memorije (engl. streaming memory), skupa tokovnih registara (engl. stream register file), većeg broja nakupina ALU jedinica koje podržavaju operacije definirane jezgrom te mikroupravljača (engl. micro-controller). U skladu sa SIMD arhitekturom, sve nakupine ALU djeluju istodobno. Tokovna memorija djelotvorno podržava dohvat tokova iz memorijskog sustava te pohranu tokova u memorijski sustav. Skup tokovnih registara pohranjuje veliku količinu podataka i tako je organiziran da omogućuje dohvat (ima ulogu izvora tokova podataka) i pohranu (ponor) tokova na samom procesorskom čipu. Slijed operacija koje definiraju jezgru određuju se mikroupravljačem. Vratimo se opisu GeForce 8800. Grafički procesor GeForce 8800 ima sučelje s procesorom domaćinom (engl. host interface) koje omogućuje komunikaciju s procesorom domaćinom (engl. host CPU) preko PCle sabirnice. Ulazni zbirnik (engl. input assembler) prikuplja geometrijske primitive (točke, linije, krpice). Blokovi za raspodjelu poslova (označeni sa 6,8 i 9; slika 15.35) raspoređuju vrhove, slikovne elemente i dretve teksturnim procesorskim nakupinama TPC. Teksturne procesorske nakupine TPC izvršavaju programe koji se odnose nS operacije vrhovima, geometrijskim primitivima (vertex shader, geometry shader) te ostalim računskim programima. Izlazni se podaci, koji su rezultat potonjih operacija, pohranjuju u spremnike koji se nalaze na procesorskom čipu. Sadržaji tih spremnika prosljeđuju se bloku VCSRZ (viewport/clip/setup/raster/zcull) tako da se rezultati "raste rizi raju" u fragmente slikovnih elemenata. Nakon toga, u skladu s tokovnim modelom, jedinica za raspodjelu poslova koji se odnose na slikovne elemente VWD (Vertex Work Distribution) distribuira fragmente slikovnih elemenata ponovno teksturnim procesorskim nakupinama TPC za obradu slikovnih elemenata (pixel-fragments shader). Sjenčani se slikovni elementi preko pros poj ne mreže šalju procesorima za rasterske operacije ROP (Raster Operations Processor) koji izvode operacije koje se odnose na proračun dubine i miješanje boja s različitim prozirnostima (engl. colour blending). Već smo spomenuli daje procesorslća jezgra SP GeForce 8800 višedretvena i da rukuje istodobno s 96 dretvi. Jezgra ima skup od 1024 32-bitnih registara kojima podržava 96 dretvi, skalarnu jedinicu za množenje i zbrajanje brojeva s pomičnim zarezom MAD (multiply-add) tako da svaki tokovni multiprocesor SM ima osam takvih jedinica. Svaka jezgra podržava 32-bitnu i 64-bitnu cjelobrojnu aritmetiku te logičke PTX (Parallel Thread execution) instrukcije. Procesori su povezani sa šest 64~bitnim DRAM modula pomoću prospojne mreže. Svaki od šesnaest tokovnih multiprocesora SM ima, osim osam jezgri SP, instrukcijsku priručnu memoriju (I cache), višedretvenu instrukcijsku jedinicu za pribavljanje i izdavanje instrukcija MT i priručnu ispisnu (read-only cache) memoriju za pohranu konstanti C-Cache (Constant-cache), dvije specijalne jedinice SFU (Special Function Unit) te zajedničku, dijeljenu memoriju (slika 15.37). Višedretvena instrukcijska jedinica za pribavljanje i izdavanje instrukcija oblikuje, raspoređuje i rukuje dretvama tako da ih grupira po 32 paralelne dretve (u Tesla arhitekturi grupa dretvi se naziva warp) i takvih je grupa do 24, što ukupno
S. RIBARIČ - GRAĐA RAČUNALA
531 I
daje 768 dretvi. U skladu s arhitekturom SIMT (jedna instrukcija višestruke dretve), jedna se instrukcija odnosi na jednu grupu od 32 dretve.
SP
SP
SP
SP
; SP
SP
SP
SP
SP
SP
SP
SP
\ sp
1 2 3 4
upravljač geometrijskih operacija upravljač tokovnih m u Iti procesora teksturna jedinica dijeljena memorija
5 6 7 8
SP :
instrukcijska priručna memorija višedretvena instrukcijska jedinica priručna memorija teksturne jedinice specijalna jedinica za transcedentne funkcije
SI. 15.36 Tekstumo-procesorska nakupina TPC
1
instrukcijska priručna memorija višedretvena instrukcijska jedinica dijeljena memorija specijalna jedinica za transcedentne funkcije priručna ispisna memorija
SI. 15.37 Tokovni multiprocesorSM
Dvije specijalne jedinice SFU namijenjene su za računanje transcedentnih funkcija (sin/cos, log2x, recipročne vrijednosti, recipročne vrijednosti drugog korijena) i za funkcije za interpolaciju atributa pridruženim slikovnim elementima (boja, dubina, koordinate teksture). Svaka SFU ima četiri množila brojeva s pomičnim zarezom. Tokovni multiprocesor SM je ujednačeni grafički i računski multiprocesor koji izvršava programe za sjenčanje vrhova, oblikovanje grafičkih primitiva (engl. geometry shader) i programe za sjenčanje slikovnih elemenata, ali i druge paralelne (ne-grafičke) računske programe.
532
15. POGLAVLJE: VIŠEPROCESORSKI SUSTAVI,VIŠEJEZGREN!I GRAFIČKI PROCESORI
Već smo napomenuli da je tokovni multiprocesor arhitekture SIMT koja je slična SIMD arhitekturi jer se i ovdje jedna instrukcija primjenjuje na višestrukom toku podataka. No postoji jedna važna razlika, SIMT primjenjuje jednu instrukciju istodobno na višestrukim, a ne samo na višestrukim tokovima podataka. Arhitektura SIMT dopušta programeru pisanje paralelnog koda za nezavisne dretve, ali i specifikaciju koda koji se odnosi na paralelne podatke. Spomenute grupe od 32 istodobne dretve (warp) nisu ograničenje programeru u pogledu broja istodobno izvršljivih dretvi. Performansa grafičkog procesora GeForce 8800 ovisno o izvedbi (Ultra ili GTX) je između 518 GFLOPS-a i 576 GFLOPS-a. Zanimljiva je i usporedba performansi grafičkog procesora GeForce 8800 i višejezgrenih procesora. Na primjer, pri množenju dvaju matrica dimenzija 1024 x 1024 GeForce 8800 GTX (radna frekvencija 1.35 GHz) postiže performansu od oko 200 GFLOPS-a, dok četverojezgreni procesor Intel Core-2 (2.4 GHz) postiže performansu od oko 70 GFLOPS-a. Usporedba GeForce 8800 GTX i 4-jezgrenog procesora Intel Xeon (2.8 GHz) pokazuje da je grafički procesor otprilike sedam puta brži u računanju brze Fouriereve transformacije FFT (Fast Fourier Transform). Krajem 2010. na tržištu se pojavio grafički procesor, odnosno grafička kartica NVIDIA GeForce GTX 580 marketinški najavljen kao "najbrži grafički procesor na planeti" koji se temelji na arhitekturi NVIDIA Fermi. GTX 580 ima 512 tokovnih procesora SP koji su organizirani u 16 tokovnih multiprocesora SM i 48 procesora za rasterske operacije ROP. Svaki tokovni procesor ima protočnu cjelobrojnu aritmetičko-logičku jedinicu i protočnu aritmetičku jedinicu FPU (floating-point unit). FPU podržava aritmetičke operacije u skladu sa standardom IEEE 754-2008. Tokovni multiprocesor SM ima 32 tokovna procesora SP, dvije jedinice za raspoređivanje grupa od po 32 dretve (engl. warp scheduler), dvije jedinice za dodjeljivanje (engl. dispatch unit), skup tokovnih registara koji se sastoji od 32768 32-bitnih registara, četiri jedinice SPU, 16 jedinica load/store (LD/ST), prospojnu mrežu, 64 KB rekonfigurabilnu memoriju koja se može organizirati tako da 48 KB bude priručna memorija razine 1, a preostalih 16 KB bude tzv. scratchpad memory, priručnu memoriju razine 2 kapaciteta 768 KB, četiri teksturne jedinice s teksturnom priručnom memorijom (engl. texture cache). Osim svega toga, SM ima i tzv. polimorfni stroj (engl. PolyMorph Enginee) koji je namijenjen grafičkim funkcijama (transformacija pogleda, rukovanje vrhovima). Grafički procesor GTX 580 ima sučelje za PCle 2.0x16 s vršnom brzinom prijenosa do 20 GB/s te memorijsko sučelje GDDR5 (Graphics Double Data Rate version 5) širine 384 bita. Aplikacijsko programsko sučelje API procesora NVIDIA GeForce GTX 580 podržava ČUDA C, ČUDA C++, DirectCompute 5.0, OpenCL, Java, Python i FORTRAN. GPU GTX 580 ostvaren je u 40 nm VLSI tehnologiji i ima 3 milijarde tranzistora (!). Na kraju navedimo još neke proizvođače grafičkih procesora - to su AMD/ATI (grafički procesor AMD Radeon HD 6990 s 2 x 1536 tokovnih procesora!), S3 Graphics, VlATechnologies i Matrox.
S. RIBARIČ - GRAĐA RAČUNALA
533 I
LITERATURA L. Budin, M. Golub, D. Jakobovic, L. Jelenkovic, Operacijski sustavi, Element, Zagreb, 2010. J. J. F. Cavanagh, Digital Computer Arithmetic, Design and Implementation, McGraw-Hill Book Company, New York, 1984. A. Clements, Principles of Computer Architecture, Oxford University Press, Oxford, 2006. P. Conway et al„ Cache Hierarchy and Memory Subsystem of the AMD Opteron Processor, IEEE Micro, March/April 2010., str. 16-29. Y. Chu, Computer Organization and Microprogramming, Prentice Hall, Inc., 1972. D. E. Culler, J. P. Singh, Parallel Computer Architecture, A Hardware/Software Approach, Morgan Kaufman Pub., San Francisco, 1999. P. J. Denning, Virtual Memory, Computer Surveys, vol. 2, September 1970, str. 153-187. S. Dasgupta, Computer Architecture, A Modern Synthesis, John Wiley & Sons, Inc., New York, 1998. S. J. Eggers, et al., Simultaneous Multithreading: A Platform for Next-generation Processors, IEEE Micro, September/October, 1997. str. 12-19. R. Espasa, M. Valero, Exploiting Instruction- and Data-level Parallelism, IEEE Micro, September/ October, 1997. str. 20-27. W-C. Feng, P. Balaji,Tools and Environments for Multicore and Many-Core Architectures, IEEE Computer, December 2009, str. 26-27. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes, Computer Graphics, Principles and Practice, Addison-Wesley, Boston, 1997. H.H. Goldstine,The Computer from Pascal to von Neumann, Princeton University Press, New Jersey, 1972. A. J. van de Goor, Computer Architecture and Design, Addison-Wesley Pub. Company, Workingham, 1989. N. Guid, Racunalniska grafika, Univerza v Mariboru, Maribor, 2001. J. P. Hayes, Computer Architecture and Organization, McGraw-Hill Primis, New York, 2002. J. L. Hennessy, D. A. Patterson, Computer Architecture, A Quantitative Approach, Elsevier, Amsterdam, Morgan Kaufmann Pub., Inc., San Francisco, 2007.(cetvrto izdanje) J. L. Hennessy, D. A. Patterson, Computer Architecture, A Quantitative Approach, Elsevier, Amsterdam, Morgan Kaufmann Pub., Inc., San Francisco, 1996.(drugo izdanje) V. P. Heuring, H. F. Jordan, Computer Systems Design and Architecture, Addison-Wesley, Menlo Park, 1997. M. D. Hill, M. R. Marty, Amdahl's Law in the Multicore Era, Computer, July, 2008., str. 33-38. K. Hwang, Advanced Computer Architecture, Parallelism, Scalability, Programmability, McGraw-Hill, New York, 1993.
534
LITERATURA
IBM Microprocessors, Books LLC, Memphis, 2010. IEEE Micro, Embedded Multicore Processors and Systems, May/June 2009. B. Jacob, W. S. W Ng, D.T. Wang, Memory Systems, Cache, DRAM, Disk, Elsevier, Amsterdam, Morgan Kaufmann Pub., Inc., San Francisco, 2008. R. Kalla, B. Sinharoy, W. J. Starke, Power7: IBM's Next-generation Server Processor, IEEE Micro, April/March 2010., str. 7-15. T. King, B. Knight, Programiranje M68000, ZOTSK, Ljubljana, 1985. V. Korneev, A. Kiselev, Modern Microprocessor, Charles River Media, Inc. 2004. L. A. Leventhal, D. Hawkins, G. Kane, W. D. Cramer, 68000 Assembly Language Programming, Osborne McGraw-Hill, Berkeley, 1986. E. Lindholm, J. Nickolls, S. Oberman, J. Montrym, NVIDIA TESLA: A Unified Graphics and Computing Architecture, IEEE Micro, March-April, 2008, str. 39-55. M. Mano, Digital Logic and Computer Design, Prentice-Hall, Englewood Cliffs, 1979. MC 68030, Enhanced 32-bit Microprocessor User's Manual, Pretnice-Hall, Englewood Cliffs, 1999. J. Nickolls, W. J. Dally, The GPU Computing Era, IEEE Micro, March/April 2010., str. 56-68. NVIDIA's Next Generation CUDA Computer Architecture Fermi, NVIDIA Corporation, 2010/ www.nvidia.com NVIDIA GeForce GTX 580 GPU Datasheet, NVIDIA Corporation, 2010/www.nvidia.com N. S.Parasad, IBM Mainframes, Architecture and Design, McGraw-Hill, New York, 1989. B. Parhami, Computer Architecture, From Microprocessor to Supercomputers, Oxford University Press, Oxford, 2009. (četvrto izdanje) D. A. Patterson, et al., A Case for Intelligent RAM, IEEE Micro, March-April, 1997., str. 34-44. D. A. Patterson, The Top 10 Inovations in the New NVIDIA Fermi Architecture and the Top 3 Next Challenges, Par Lab Report, September 2009. pp. 1-8. D. A. Patterson, J. L. Hennessy, Computer Organization & Design, The Hardware / Software Interface, Morgan Kaufmann Pub., Inc., San Francisco,1998.(drugo izdanje) D. A. Patterson, J. L. Hennessy, Computer Organization & Design, The Hardware / Software Interface, Morgan Kaufmann Pub., Inc^ San Francisco, 2008.(četvrto izdanje) U. Peruško, Digitalna elektronika, Logičko i električko projektiranje, Školska knjiga, Zagreb, 1991. U. Peruško, V. Glavinić, Digitalni sustavi, Školska knjiga, Zagreb, 2005. C. V. Ramamoorthy, H. F. Li, Pipeline Architecture, Computing Surveys, Vol 9, No. 1, March 1977., str. 61-102. K. Reick, etal., Fault-Tolerant Design of the IBM Power6 Microprocessor, IEEE Micro, April-March, 2008., str. 30-38 S. Ribarić, Arhitektura mikroprocesora,Tehnička knjiga, Zagreb, 1982. (prvo izdanje) S. Ribarić, Arhitektura računala pete generacije, Tehnička knjiga, Zagreb, 1986. S. Ribarić, Naprednije arhitekture mikroprocesora, Element, Zagreb, 2006. S. Ribarić, Arhitektura računala RISC i CISC, Školska knjiga, Zagreb, 1996.
S. RIBARIČ - GRAĐA RAČUNALA
535 I
F. Schmidt, The SCSI Bus and IDE Interface, Protocols, Applications and Programming, AddisonWesley, 1995. T. Shanely, D. Anderson, ISA System Architecure, Addisson-Wesley Pub. Company, Reaading, 1995. S. Schneider, J-S. Yeom, D. S. Nikolopoulos, Programming Multiprocessors with Explicitly Managed Memory Hierarchies, IEEE Computer, December 2009., str. 28 - 34. D. Sima,T. Fountain, P. Kacsuk, Advanced Computer Architectures, A Design Space Approach, Addison-Wesley, Harlow, 1997. A. C. Sodan, J. Machina, A. Deshmeh, K. Macnaughton, B. Esbaugh, Parallelism via Multithread and Multicore CPUs, IEEE Computer, March 2010., str. 24-32. W. Stallings, Computer Organization and Architecture, Designing for Performance, Prentice Hall, Upper Saddle River, 1996. A. S.Tanenbaum, Structured Computer Organization, Prentice-Hall Int., Upper Saddle River, 1999. A. S.Tanenbaum, A. S. Woodhull, Operating Systems, Design and Implementation, PrenticeHall Int., Upper Saddle River, 1997. J.Torrellas, Architecture for Extreme Scale Computing, IEEE Computer, November, 2009., str. 28-35. W. A.Triebel, A. Singh,The 68000 Microprocessor, Architecture, Software, an Interfacing Techniques, Prentice-Hall, Englewood Cliffs, 1986. S.Turk, Arhitektura i organizacija digitalnih računala, Školska knjiga, Zagreb, 1988.
S. RIBARIČ - GRAĐA RAČUNALA
537 I
KAZALO POJMOVA A ACIA 48 adresiranje bazno s pomaknućem 86 indeksno 74 izravno 38 adresna zrnatost 65 adresno preslikavanje 339 AEM 291 AGP 380 Aiken, H. 32 akumulator 40 algoritam 1 Amdahlov zakon 106,494 AMD Opteron X4 339 AMD OpteronX4 2356 517 analitički stroj 32 ANSI/IEEE Std 754 217 antizavisnost 452 arbitraža prozivanjem ili glasovanjem 373 arbitraža s nezavisnim zahtijevanjem 374 arbitraže ulančavanjem 373 arhitektura dinamička 25 rekonfigurabilna 25 statička 25 arhitektura računala 18 arhitektura računala upravljana zahtjevom 23 aritmetičke operacije brojevima s pomičnim zarezom 252 aritmetičko-logička jedinica 39,211,256 ARM 34,91 ASCII kod 211 asembler 108 asinkrona sabirnica 365 asocijativna memorija 270 asocijativno preslikavanje 321 ATA 291 AVE 485 В Babbage, C. 31 Backus,J. 55,479 bačvasti posmačni sklop 249 bajt 211
Barcelona procesor 517 Bardeen,J. 32 BCD 219 Big-Endian Byte Ordering 77 binarna aritmetika 220 bit 211 bit prijenosa 220 Booth, A. D. 235 Boothov algoritam 236 Brattain, W. 32 brojilo instrukcijskih lokacija ILC 117 broj s pomičnim zarezom 215 brzo zbrajalo 229 Burks, A. W. 31 C CALL 126 CDC 6600 33 CD-ROM 306 CD-RW 307 Cell procesor 496 CHS 294 CISC 35,59 COLOSSUS 32 COMA 497 Core 2 Kentsfield 97 Cray I 33 CUDA 527 Č četveroputna asocijativna memorija 327 čipset 380 C ćelija DRAM 273 D 2 1/2 D organizacija 275 Dasgupta, S. 506 DDR2 SDRAM 284 DDR3 SDRAM 284 DDR DRAM 284 DDR SDRAM 265 DEC 33 deklarativni stil 3
538
KAZALO POJMOVA
Denningov model virtualne memorije 341 diferencijski stroj 31 dijeljenja obnavljanjem djelomičnog ostatka 241 dijeljenje 240 dijeljenje metodom "olovka i papir" 241 DIMM 285 dinamički RAM (DRAM) 272 Direct3D 527 DirectX 527 Ditzel, D. R. 436 DMA 38,398,425 dretva 474,482,509 DVD-ROM 268 dvojni komplement 212 dvoprolazni asembler 116 dvoputna asocijativna priručna memorija 327 E ECC 289 Eckert, J.P. 32 EDSAC 32 EDVAC 123 efektivna adresa 87 eksplicitni paralelizam 476 eksponent 215 emit polje 188 ENIAC 32 EPIC 476 Euklidov algoritam 1 F FIFO 330 finozrnata višedretvenost 509 FireWire 380,385 fizički adresni prostor 338 FLOPS 100 Flynnova klasifikacija 486 formatirani kapacitet diskovne jedinice 295 format mikroinstrukcije 189 format strojne instrukcije 41 funkcijski paralelizam 473 G Ganttov dijagram 436 GeForce 256 526 GeForce 8800 528 generator signala vremenskog vođenja 186 generator sljedova 183,194 glavna ili radna memorija 272 gniježđenje poziva 128 Goldstein, H.H. 31
GPU 525 grafički procesor 524,528 grananje bezuvjetno 126 uvjetno 126 grubozrnata višedretvenost 509 GTX580 532 gustoča zapisa 294 gustoće staza 294 H harvardski tip priručne memorije 332 hazard 449 HDA 291 horizontalno mikroprogramiranje 203,208 I IA-64 477 IAS 32,41 IBM 32 IBM System/360 Model 30,40,50 i 65 33 IDE 291 IEEE format brojeva s pomičnim zarezom 217 ILP 466,473 implicitni paralelizam 475 instrukcije aritmetičke 80 I grananja 89 logičke 80 mješovite 91 za pristup memoriji 85 instrukcijska protočna struktura 434 instrukcijskidekoder 182 instrukcijski registar 62 Intel 8080 33 interpretacijski dijagram 437 interpreter 22 ISA 77 ISA/EISA 379 ispiranje protočne strukture 458 ispisne memorije 270 Itanium 477 izdavanje instrukcija 468 in-order issue with in-order completion 468 in-order issue with out-of-order completion 468 out-of-order issue with out-of-order completion 469 izlazna zavisnost 452 iznimka 152 izravni način adresiranja 67 izravni pristup memoriji 425
S. RIBARIČ - GRAĐA RAČUNALA
izravno preslikavanje 324 izvorni program 108 IZVRŠI 45 izvršljivi binarni program 108 J JBOD 299 jedinični ili nepotpuni komplement 212 jednostruki format broja s pomičnim zarezom 217 jednotranzistorska MOS ćelija DRAM 273 jednoulazna i dvoizlazna memorija 161 » jezgra operacijskog sustava 22 JSR 139 K K5 468 kapacitet memorije 268 koherencija priručne memorije 317,500 koincidentno adresiranje 274,281 kopiranje nazad 317 L labela 108 latentnost 265 Leibniz, G.W. 31 LFU 330 LIFO 134 linearno adresiranje 278 linija 311 Little-Endian Byte Ordering 79 load-store arhitektura 85,439 LRU 330 M magnetska diskovna memorija 291 magnetska vrpca 305 makroinstrukcije 112 mantisa 215 Mark I 32 maskiran prekid 408 Mauchley,J. 32 MC68000 143 MC 68060 445 memorija s prepletanjem 286 memorijska ćelija 273 memorijska hijerarhija 265 memorijska jedinica 46 memorijska pojasna širina 269 memorijski sustav 265 memorijski štapić USB 305 MESI 334
539 I
Microdrive 293 mikrofaza izvrši 164 pribavi 164 mikroinstrukcija 164 mikrooperacija 165 mikroprogram 164 mikroprogramirana upravljačka jedinica 187 mikroprogramiranje 164 mikroprogramska memorija 164 mikroprogramsko brojilo 188 MIMD 27 minimalni kontekst 146 MISD 27 mjere performanse FLOPS 100 MIPS 98 MOPS 100 SPECmark 102 MMX 485 mnemonik 19 množenje 232 Mooreov zakon 34 Motorola 6800 33,49 MPEG 496 MTBF 297 multiprocesorski sustav 486 MWIPS 105 N nanoinstrukcija 201 nanoprogramirana upravljačka jedinica 201 Nehalem procesor 510 nemaskirajući prekid 410 nepotpuni komplement 212 Neumannov model 3,18,31 Niagara 2 517 Niagara procesor 514 nop 91,454 normalizacije mantise 216 notacija vrijednost + prekoračenje 216 NRU 330 NUMA 497 NVIDIA Fermi 532 NVIDIA Tesla 528 O obrada podataka 1 omjer pogotka 319 omjer promašaja 319 OpenGL 527 Operon "Magny Cours" procesor 518
540
KAZALO POJMOVA
opisnik dretve 483 optičke memorije 306 organizacija računarskog sustava 18 oslobađanje na zahtjev 372 oslobađanje sabirnice istiskivanjem 372 oslobađanje sabirnice nakon korištenja 372 ožičano-ILI 407 P paralelno zbrajalo 224 parcijalni produkt 232 paritet 290 Pascal, B. 31 Patterson, D. A. 93 PCI 374 PC sabirnice EISA 377 ISA 377 MicroChannel 377 PCI 2.2 379 PCI Express 380 PCI-X 2.0 379 PDP-8 33 Pentium 4 Prescott 97 Pentium 4Willamette 97 Pentium D 510 Pentium II 433 Pentium III 485 PentiumPro 468 performansa računala 93 periferni uređaj 393 petlja čekalica 406 PIA 48 PLA 180 podatkovni hazard RAW 451 WAR 451 WAW 451 podatkovni paralelizam 473 pohranjivanje-skroz 333 pojas 299 pojasna jedinica 299 poluoduzimalo 226 poluzbrajalo 220 polja potpunih zbrajala 239 polje operacijskog koda 116 polje operanda 108,116 pop 134 Porodice DRAM EDO DRAM 284 FPM DRAM 284 posmačni sklop 246
posmak aritmetički posmak 252 kružni posmak 250 logički posamak 250 postinkrementno registarsko indirektno adresiranje 403 postupak množenja "olovka i papir" 232 postupkovna zavisnost 466 potpuni ili dvojni komplement 212 potpuno asocijativno preslikavanje 321 potpuno oduzimalo 226 potpuno zbrajalo 222 potrošak snage 163 Poveznik 22 POWER4 512 POWER5 521 POWER6 522 POWER7 59,522 PowerPC 620 468 pozivajući program 126 pozvani program 126 prateći modul 363 precizni i neprecizni prekid 463 predviđanje bita prijenosa 229 predviđanje grananja 461 predznak-apsolutna vrijednost 212 preimenovanje registara 468 prekidni program 147 prekidni ulazno-izlazni prijenos podataka 398,406 prekidni vektor 413 prekid no sklopovsko sučelje 421 prekinuti program 126 preljev V 264 pretpribavljanje 333 PRIBAVI 45 pribavljanje na zahtjev 333 prijenos parametara 130 priključak branch kašnjenja 459 priključak load kašnjenja 469 primarna memorija 268 priručna diskovna memorija 297 priručna memorija 266,311 priručni blok 312 proceduralni stil 3 proces 479 procesor 39 procesorsko vrijeme 95 programirani bezuvjetni prijenos 402 programirani ulazno-izlazni prijenos podataka 398 programirani uvjetni prijenos 406
S. RIBARIČ - GRAĐA RAČUNALA
programirljiva memorija 270 programska izvedba stoga 142 programski model procesora 68 programsko brojilo 44 projektiranje memorijskog modula 278 prospojna matrica 249 prospojna mreža 486 prostorna lokalnost 320 protočna memorija 288 protočni segment 288 protočnost 429 protokol MESI 334, 504 pseudoinstrukcije 109 pulI 134 punilac 22,121 push 134 put podataka 159 R R 10000 468 računski modeli 3 radni skup WS 320 rad u vremenskoj podjeli 484 RAID 299 RAM 48 random 330 razlomački dio mantise 217 registri procesora 266 rekurzija, rekurzivni program 131 resursni konflikti 466 RET 127 RISC 35,59, 77 RISC I 436 ROM 48 RTE 147 RTS 139 S sabirnica 359,361 adresna 361 podatkovna 361 upravljačka 361 sabirnička arbitraža 371 sabirnički ciklus potvrde prekida 363 sabirnički protokol 388 savitljivi disk 305 SCSI 291,381 SDRAM 284 SEC-DED 290 segmentacija 353 segmentacija sa straničenjem 353 sekundarna memorija 268
541 I
Selectron 46 semantika prijelaza stanja 4 semantika toka podataka 4 Serial ATA 291 serijsko zbrajalo 225 Shockley, W. 32 signal vremenskog vođenja 62 SIMD 26 SIMD instrukcije 484 simultana višedretvenost SMT 510 sinkrona protočna struktura 431 sinkrona sabirnica 365 sinkronizacija dretvi 506 sinkronizacija procesa 506 sintetični ispitni programi 105 Drystone 105 VVhetstone 105 SISD 26 sklopovska upravljačka jedinica 165 skupno asocijativno preslikavanje 321 skup registara opće namjene 266 SLED 300 SMV 512 snooping protokol 501 SPEC 102 SPECfp2000 104 SPECmark 102 SPERT-II 496 SPMD 527 SSE 485 statički parametri diskovne jedinice 295 statički RAM (SRAM) 272 statusni registar SR 147 stog 133 straničenje 346 stranični okvir 346 strojni jezik 107 strukturni hazard 449 stvarna zavisnost podataka 466 superskalarni procesor 463 suvišakn 216 Š širenje bita predznaka 83 špekulacija 478 špekulativnog izvršavanj 478 T tablica dretve 483 tablica procesa 481 tablica vektora iznimaka 420 TLB 350
542
KAZALO POJMOVA
TLP 483 tokovni procesor 528 tok podataka 7,8 translacijski spremnik TLB 350 Turingov model računanja 4 Turingov stroj 10 TX-0 33 U ulazno-izlazna jedinica 47 ulazno-izlazni sustav 393 ulazno-izlazni upravljač 393 Ultra SPARCT1,T2 514 UMA 497 UNIVAC 1100 33 upisno-ispisna memorija 270 upravljačka jedinica 48,159 upravljačka jedinica diska 291 upravljačka memorija 164 upravljačka sabirnica 361 upravljački hazard 449 upravljački tok 5 upravljanje zahtjevom 9 USB 380 V vanjska sabirnica 62 VAX 11 33 vektorski broj 407 vektorske instrukcije 491 vektorske jedinice 495 vektorski prekid 413 vektorski prekid procesora MC68000 417 vektorski procesori 487 vertikalno mikroprogramiranje 203,208 V-IRAM 496 Virtualna memorija 337 virtualni adresni prostor 338 virtualni procesor 480 virtualni stranični broj 344 višedretvenost 483 višejezgreni procesori 500,510,517 višeprocesorski MIMD 486 višeprocesorski SIMD 486 višeprogramski rad 474 višestruki formati mikroinstrukcija 206 višetračna vektorska obrada 494 višezadaćni rad 474 viši programski jezici 107 Vizualno računanje 527 VLIW 35 VLIW/EPIC 477
VLSI 31 VME 375 vodeći modul 363 vremena pristupa 268 vremenska lokalnost 320 vremenski ciklus puta podataka 162 vrijeme memorijske periode 269 vrijeme odgovora 265 vrijeme rotacijske latencije 296 vrijeme traženja 298 W Whetstone 105 Whirlwind I 32 Wide SCSI 387 Wilkes, M. 32 WORM 307 Z zakašnjelo grananje 458 zamjena blokova 319 zamjena stranica 353 na zahtjev 353 pretpribavljanjem 353 zastavica C 61,245 zastavica polovičnog prijenosa H 61 zastavica predznaka (negativne vrijednosti) N 61,193 zastavica S 417 zastavica T 417 zastavica V 61 zastavica Z 61,193 zbirke ispitnih programa 104 zbirni jezik 108 znak 211 zrnatost 473 Zuse, K. 32
Knjiga Građa računala - arhitektura i organizacija računarskih sustava bavi se digitalnim računalima, računarskim sustavima i sučeljem sklopovske i programske opreme. Zamišljena je kao udžbenik koji omogućuje sustavni, postupni uvod u to složeno znanstveno područje koje je izloženo v r l o brzim i učestalim tehnološkim promjenama. Zamisli i osnovni koncepti u knjizi predstavljeni su na način koji može osigurati razumijevanje, oblikovanje i održavanje računarskih sustava, od jednostavnih ugrađenih računalnih sustava, osobnih računala pa sve do poslužitelja i računarskih višeprocesorskih SiMD i MIMD sustava. Posebna pozornost posvećena je konceptima arhitekture računarskih sustava koji su vremenski nepromjenjivi i u velikoj mjeri ne ovise o burnom razvoju tehnologije vrlo visokog stupnja integracije (VLSI - Very Large Scale integration). Osim temeljnih zamisli i arhitektonskih koncepata, knjiga sadržava podrobne opise višeprocesorskih i paralelnih sustava, superskalarnih procesora, višedretvenih i simultano višedretvenih arhitektura procesora, višejezgrenih procesora te opise multiprocesorskih grafičkih jedinica. Brojni primjeri i analize slučaja kojima se ilustriraju pojedini arhitektonski koncepti omogućit će čitateljima lakše razumijevanje i savladavanje gradiva. Knjiga je plod dugogodišnjih predavanja o arhitekturi i organizaciji računarskih sustava te građi računala koja je autor izvodio i izvodi na Fakultetu elektrotehnike i računarstva (FER), Fakultetu organizacije i informatike (FOI), Prirodoslovno-matematičkom fakultetu (PMF) Sveučilišta u Zagrebu, Tehničkom fakultetu Sveučilišta u Rijeci, Elektrotehničkom fakultetu Sveučilišta u Osijeku te Fakultetu elektrotehnike. strojarstva i brodogradnje (FESB) Sveučilišta u Splitu. Sadržajno udžbenik u potpunosti pokriva i dijelom nadilazi nastavni plan kolegija Građa računala na Visokoj školi za primijenjeno računarstvo u Zagrebu, koja je i njegov naručitelj. Udžbenik je prvenstveno namijenjen visokoškolskoj nastavi na tehničkim i njima srodnim fakultetima, međutim, neka poglavlja nude gradivo koje se može obrađivati u srednjim školama informatičkog i elektrotehničkog usmjerenja.
www.racunarstvo.hr
ISBN 978-953-322-07 RAČUNARSTVO visoka škola
ALGEBRA GRUPA