ARHITEKTURA RAČUNARA

1

Poglavlje 1

Organizacija i arhitektura

U opisivanju računara često se pravi razlika između njihove 

arhitekture i organizacije. 

Mada je teško 

dati precizne definicije tih termina, postoji saglasnost u vezi sa opštim oblastima koje su obuhvaćene 
svakim od njih.

Arhitektura   računara   odnosi   se   na   one   atribute   sistema   koji   su   vidljivi   programeru   ili, 

drugačije rečeno, one atribute koji imaju direktnog uticaja na logičko izvršenje programa. 

Organizacija   računara   odnosi   se   na   operacionaine   jedinice   i   njihove   međusobne   veze   koje 

realizuju specifikacije arhitekture. 

Primeri atributa arhitekture uključuju skup instrukcija, broj bitova koji se koriste da bi predstavili 

razne tipove podataka (na primer, brojeve, znakove), U/I mehanizme i tehnike za adresiranje memorije. 

Organizacioni atributi uključuju one hardverske detalje koji su transparentni za programera, kao 

što su upravljački signali, intefejsi između računara i periferijskih uređaja i upotrebljena memorijska 
tehnologija.

Na   primer,   pitanje   dizajna   arhitekture   je   da   li   će   računar   imati   instrukciju   za   množenje. 

Organizaciono   pitanje   je   da   li   će   se   ta   instrukcija   implementirati   pomoću   specijalne   jedinice   za 
množenje, ili pomoću mehanizma koji više puta koristi jedinicu za sabiranje sistema. Organizaciona 
odluka može se zasnivati na predviđenoj učestalosti korišćenja instrukcije za množenje, relativnoj 
brzini dva pristupa i ceni i fizičkoj veličini specijalne jedinice za množenje.

Istorijski, pa čak i danas, razlika između arhitekture i organizacije bila je značajna. Mnogi 

proizvođači računara nude porodicu modela računara, od kojih su svi sa istom arhitekturom, ali sa 
razlikama u organizaciji. Zbog toga razni modeli imaju različite cene i karakteristike performanse. 
Pored toga, poneka arhitektura može da se protegne na mnogo godina i da obuhvati brojne različite 
modele računara, a da se njena organizacija menja sa tehnologijom. 

U klasi računara koji se zovu  

mikroračunari

, odnos između arhitekture i organizacije je veoma 

blizak. Promene u tehnologiji ne samo da utiču na organizaciju, nego za rezultat imaju i uvođenje 
moćnijih i složenijih arhitektura. Uopšte, za te manje mašine ima manje zahteva za kompatibilnost od 
jedne do druge generacije. Dakle, postoji više međusobne igre između organizacionih i arhitektonskih 
odluka.   Intrigantan   primer   za   to   je   računar   sa   smanjenim   skupom   instrukcija   (RISC),   koji   ćemo 
analizirati kasnije.

1.2 STRUKTURA i FUNKCIJA

Računar je složen sistem; savremeni računari sadrže na milione elektronskih komponenata. Kako oni 
onda mogu jasno da se opišu? Ključno je da se prepozna hijerarhijska priroda većine složenih sistema, 
uključujući tu i računar. Hijerarhijski sistem je skup podsistema u međusobnom odnosu, od kojih je 
svaki, sa svoje strane, hijerarhijski po strukturi sve dok ne dostignemo neki najniži nivo elementarnog 
podsistema.

Hijerarhijska priroda složenih sistema je od suštinskog značaja, kako za njihovo projektovanje, tako 

i za opis. Projektant treba da se bavi samo posebnim nivoom sistema odjednom. 

Na svakom nivou, sistem se sastoji od skupa komponenata i njihovih međusobnih odnosa. Ponašanje na 

svakom nivou zavisi samo od pojednostavljene, apstrahovane karakterizacije sistema na sledećem nižem 
nivou. Na svakom nivou, projektant se stara o strukturi i funkciji:

Struktura: način na koji su komponente u međusobnom odnosu. 

Funkcija: rad svake pojedinačne komponente kao deo strukture.

2

background image

Struktura

Na slici 1.3 prikazan je najjednostavniji opis računara. Računar na neki način međusobno reaguje sa 
svojim spoljašnjim okruženjem. Uopšte, sva njegova povezivanja sa spoljašnjim okruženjem mogu da se 
klasifikuju kao 

periferijski uređaji ili kao komunikacione linije.

 Biće potrebno da kažemo nešto o obe 

vrste povezivanja.

Mi ćemo se više baviti unutrašnjom strukturom samog računara, što je na gornjem nivou prikazano na 

slici 1.4. Postoje sledeće glavne strukturne komponente:

Centralna procesorska jedinica (CPU):

 upravlja radom računara i izvodi njegove funkcije 

obrade podataka; često se jednostavno naziva 

procesor.

Glavna memorija: 

skladišti podatke.

Sistemsko međupovezivanje: 

neki mehanizam koji obezbeduje komunikaciju izmedu CPU, 

glavne memorije i U/I.

Može   da   postoji   jedna   ili   više   svih   pomenutih   jedinica.   Tradicionalno   je   bila   samo   jedna   CPU. 

Poslednjih godina, sve je veća upotreba višestrukih procesora u jednom računaru. Pojavljuju se neka 
pitanja projektovanja u vezi sa višestrukim procesorima i o tome ćemo kasnije da govorimo.

Svaka   od   tih   komponenata   će   se   detaljno   ispitati   u   drugom   delu.   Međutim,   za   naše   potrebe, 

najzanimljivija i na neki način najsloženija komponenta je CPU; njena struktura je prikazana na slici 1.5. 
Njene glavne strukturne komponente su:

Upravljačka jedinica:

 upravlja radom CPU, a time i računara u celini.

Aritmetička i logička jedinica (ALU):

 izvodi funkcije obrade podataka računara. 

Registri:

 obezbeđuju unutrašnje skladištenje za CPU.

Međupovezivanje CPU:

 neki mehanizam koji obezbeđuje komunikaciju između upravljačke 

jedinice, ALU i registara.

Svaka   od   tih   komponenata   detaljno   će   se   ispitati,   pa   ćemo   videti   da   se   složenost   povećava 

upotrebom   organizacionih   tehnika   paralelne   i   protočne   obrade.   Najzad,   postoji   više   pristupa 
implementaciji   upravljačke   jedinice;   jedan   od   uobičajenih   pristupa   je  

mikroprogramirana 

implementacija

.   Mikroprogramirana   upravljačka   jedinica   u   suštini   radi   tako   što   izvršava 

mikroinstrukcije koje definišu njenu funkcionalnost. Takvim pristupom, struktura upravljačke jedinice 
može da bude opisana kao na slici 1.6. 

Poglavlje 2
EVOLUCIJA I PERFORMANSA RAČUNARA

Evoluciju   računara   su   obeležili   povećanje   brzina   procesora,   smanjivanje   veličine   računara, 
povećavanje veličine memorije i povećavanje kapaciteta i brzine U/I.

Jedan   od   činilaca   odgovornih   za   veliko   povećanje   brzine   procesora   jeste   smanjenje   veličine 
mikroprocesorskih   komponenata;   to   smanjuje   rastojanje   izmedu   komponenata   i   stoga   povećava 
brzinu.   Međutim,   pravi   dobitak   u   brzini   poslednjih   godina   posledica   je   organizacije   procesora, 
uključujući obimnu upotrebu tehnika protočne obrade i paralelnog izvršenja i korišćenje tehnike 
spekulativnog izvršenja, koja rezultuje probnim izvršenjem budućih instrukcija koje bi mogle biti 
potrebne. Sve te tehnike su projektovane da bi se procesor držao zaposlenim u što je moguće većem 
delu vremena.

Najvažnije pitanje u projektovanju računara jeste uravnoteženje performanse raznih elemenata, 
tako da dobici u performansi u jednoj oblasti ne budu ometeni zaostajanjem u drugim oblastima. 

4

Posebno,   brzina   procesora   se   više   povećavala   od   vremena   pristupa   memoriji.   Razne   tehnike   se 
koriste da bi se kompenzovala ta nesaglasnost, uključujući keš memorije, šire putanje podataka od 
memorije do procesora i inteligentnije memorijske čipove.

Našu studiju računara počinjemo kratkom istorijom. Ta istorija je sama po sebi zanimljiva, a takođe 
služi   i   za   obezbeđenje   pregleda   strukture   i   funkcije   računara.   Zatim   ćemo   se   posvetiti   pitanju 
performanse. Razmatranje potrebe za uravnoteženim korišćenjem računarskih resursa pruža kontekst 
koji je koristan u celoj knjizi. Najzad, ukratko razmatram o evoluciju dva sistema koji služe kao ključni 
primeri u celoj knjizi: Pentium i PowerPC.

KRATKA ISTORIJA RAČUNARA

Von   Neumann   i   njegove   kolege   počeli   su,   1946.   godine,   na   Prinstonovom   institutu   za   napredne 

studije, projekat novog računara sa unutrašnjim programom, poznatog kao računar lAS. Računar lAS, 
iako nezavršen do 1952. godine, predstavlja prototip svih sledećih računara opšte namene.

Na slici 2.1 prikazana je opšta struktura računara lAS. Ona se sastoji od:

glavne memorije, u kojoj su uskladišteni i podaci i instrukcije

aritmetičke i logičke jedinice (ALU), sposobne za rad na binarnim podacima; 

upravljačke jedinice, koja interpretira instrukcije u memoriji i prouzrokuje njihovo izvršenje;

ulazne i izlazne (U/I) opreme kojom rukuje upravljačka jedinica.

Ta struktura bila je skicirana u ranijem von Neumannovom predlogu.

Sa retkim izuzecima, svi današnji računari imaju ovu istu opštu strukturu i funkciju, pa se zato zovu 

von Neumannove

 mašine. Dakle, vredi na ovom mestu ukratko opisati rad računara lAS terminologija i 

notacija von Neumanna su se promenile da bi bile u većoj saglasnosti sa savremenom upotrebom; primeri 
i ilustracije uz ovu raspravu zasnovani su na ovom poslednjem tekstu.

Memorija IAS-a sastoji se od 1000 lokacija, koje se zovu 

reči, svaka od po 40 binarnih cifara 

(bitova). Nema univerzalne definicije termina 

reč. 

Uopšte, 

reč

 je uređen skup bajtova ili bitova koji je normalna jedinica u kojoj informacije mogu da se 

skladište, prenose ili na njima radi unutar datog računara. Tipično, ako procesor ima skup instrukcija 
fiksirane dužine, onda je dužina instrukcije jednaka dužini reči.

Tu se skladište i podaci i instrukcije. Dakle, brojevi moraju da se predstavljaju u binarnom obliku, a 

svaka instrukcija takođe mora da bude u binarnom kodu. Na slici 2.2 ilustrovani su ti formati. Svaki broj 
se   predstavlja   pomoću   bita   za   znak   i   39-bitne   vrednosti.   Reč   takođe   može   da   sadrži   20-bitne 
instrukcije,   gde   se   svaka   instrukcija   sastoji   od   8-bitnog   koda   operacije   (opkoda)   koji   određuje 
operaciju za izvođenje i 12-bitne adrese koja označava jednu od reči u memoriji (numerisanih od 0 do 
999).

Upravljačka   jedinica   rukuje   IAS-om   pomoću   donošenja   instrukcija   iz   memorije   i   njihovim 

izvršavanjem, po jedne istovremeno. Da bi se to objasnilo, potreban je detaljniji strukturni dijagram, 
kao što je prikazano na slici 2.3. Ta slika otkriva da i upravljačka jedinica i ALU sadrže memorijske 
lokacije koje se zovu 

registri,

 definisani na sledeći način:

Memorijski bafer registar 

(MBR): sadrži reč koja treba da se skladišti u memoriji ili pošalje u 

U/I jedinicu, ili se koristi da prima reč iz memorije ili iz U/I jedinice.

Memorijski adresni registar (MAR):

 određuje adresu u memorlji reči koja treba da se upiše iz 

MBR-a, ili učita u njega.

Instrukcijski registar (IR):

 sadrži 8-bitni kod operacije instrukcije koja se izvršava.

Instrukcijski bafer registar (IBR):

 koristi se da privremeno drži desnu instrukciju iz reči u 

5

background image

specifično   projektovana   za   to   računanje.   O   procesu   povezivanja   raznih   komponenata   u   željenu 
konfiguraciju, možemo da razmišljamo kao o jednom obliku programiranja. Rezultujući "program" je u 
obliku hardvera i zove se 

ožičeni program.

Razmotrite   sada   ovu   alternativu.   Pretpostavite   da   konstruišemo   konfiguraciju   opšte   namene   za 

aritmetičke i logičke funkcije. Taj skup hardvera će izvoditi razne funkcije na podacima, u zavisnosti od 
upravljačkih   signala   koji   se   dovode   na   hardver.   U   prvo

bitnom   slučaju   posebno 

razvijenog hardvera, sistem prihvata podatke i proizvodi rezultate (slika 3.1a). Sa hardverom opšte 
namene, sistem prihvata podatke i upravljačke signale i proizvodi rezultate. Dakle, umesto da ponovo 
ožičava hardver za svaki nov program, programer treba samo da obezbedi nov skup upravljačkih signala.

Kako da se obezbede upravljački signali? Odgovor je jednostavan, ali ne i suptilan. Ceo program je, u 

stvari, niz koraka. U svakom koraku izvode se neke aritmetičke ili logičke operacije nad nekim podacima. 
Za svaki korak, potreban je nov skup upravljačkih signala. Hajde da obezbedimo jedinstven kod za svaki 
mogući skup upravljačkih signala i da dodamo hardveru opšte namene segment koji može da prihvati kod 
i generiše upravljačke signale (slika 3.1 b).

Programiranje je sada mnogo lakše. Umesto da ponovo ožičavamo hardver za svaki nov program, samo 

treba da obezbedimo nov niz kodova. Svaki kod je u stvari instrukcija, a deo hardvera interpretira 
svaku instrukciju i generiše upravljačke signale. Da bi se razlikovala ta nova metoda programiranja, niz 
kodova instrukcija zove se 

softver.

Na slici 3.1 b prikazane su dve glavne komponente sistema

: interpreter instrukcija i modul opšte 

namene za aritmetičke i logičke funkcije.  

Te dve komponente čine CPU. Potrebno je još nekoliko 

drugih komponenata da bi se dobilo funkcionisanje računara. Podaci i instrukcije moraju da se stave u 
sistem.   Za   to   nam   treba   neka   vrsta  

ulaznog   modula.  

Taj   modul   sadrži   osnovne   komponente   za 

prihvatanje podataka i instrukcija u nekom obliku i njihovo pretvaranje u unutrašnji oblik signala koje 
sistem može da koristi. Potrebno je sredstvo za izveštavanje o rezultatima i ono je u obliku 

izlaznog 

modula

. Uzete zajedno, to se zovu 

U/I komponente.

Potrebna je još jedna komponenta. Ulazni uređaj će doneti instrukcije i podatke sekvencijalno. Ali, 

program se ne izvršava nepromenljivo sekvencijalno; on može da ima skokove (odnosno, lAS instrukciju 
za  skok).   Slično  tome,   operacije   nad  podacima  mogu  da  zahtevaju  pristup   više  nego  samo  jednom 
elementu   istovremeno,   u   unapred   određenoj   sekvenci.   Dakle,   mora   postojati   mesto   za   privremeno 
skladištenje i instrukcija i podataka. Taj modul zove se 

memorija, ili glavna memorija

, za razliku od 

spoljašnje memorije ili periferijskih uređaja. Von Neumann je istakao da bi ista memorija mogla da se 
upotrebi za 

skladištenje i instrukcija i podataka.

Na slici 3.2 ilustrovane su te komponente gornjeg nivoa i nagoveštena su njihova međusobna dejstva. 

CPU razmenjuje podatke sa memorijom. Za tu svrhu on tipično koristi dva unutrašnja (za CPU) registra: 
memorijski adresni registar (MAR), koji određuje adresu u memoriji za sledeće čitanje ili upisivanje i 
memorijski bafer registar (MBR), koji sadrži podatak koji treba da se upiše u memoriju, ili prima 
podatak koji se čita iz memorije. Slično tome, U/I adresni registar (U/IAR) specificira određeni U/I 
uređaj. U/I bafer registar (U/IBR) se koristi za razmenu podataka između U/I modula i CPU-a.

Memorijski modul se sastoji od skupa lokacija, definisanih sekvencijalno numerisanim adresama. 

Svaka lokacija sadrži binarni broj koji može da se interpretira, ili kao instrukcija ili kao podatak. U/I 
modul prenosi podatke iz spoljašnjih uređaja ka centralnoj procesorskoj jedinici i memoriji i obrnuto. 
On sadrži unutrašnje bafere za privremeno držanje tih podataka, dok oni ne budu mogli da se pošalju.

Sad, kada smo ukratko razmotrili glavne komponente, razmotri ćemo kako te komponente funkcionišu 

zajedno da bi izvršile program.

Osnovna funkcija koju izvodi računar je  

izvršenje programa,

  koji se sastoji od skupa instrukcija 

7

uskladištenih   u   memoriji.   Procesor   obavlja   stvarni   posao   izvršavajući   instrukcije   specificirane   u 
programu.   U   ovom   odeljku   daje   se   pregled   ključnih   elemenata   izvršenja   programa.   U   svom 
najjednostavnijem obliku, obrada instrukcija se sastoji od dva koraka: procesor čita (donosi) instrukcije 
iz   memorije,   po   jednu   istovremeno   i   izvršava   svaku   instrukciju.   Izvršenje   programa   se   sastoji   od 
ponavljanja   procesa   donošenja   i   izvršenja   instrukcije.   Izvršenje   instrukcije   može   da   obuhvati   više 
operacija i zavisi od prirode instrukcije (pogledajte, na primer, donji deo slike 2.4).

Obrada koja se zahteva za jednu instrukciju zove se 

instrukcijski ciklus. Koristeći pojednostavljeni 

opis u dva koraka koji je prethodno dat, ciklus instrukcije je prikazan na slici 3.3. Dva koraka se zovu 

ciklus donošenja i ciklus izvršenja. Izvršenje programa zaustavlja se samo ako se mašina isključi, ako se 
pojavi neka vrsta nepopravljive greške, ili ako se naiđe na instrukciju programa koja zaustavlja računar.

Donošenje i izvršenje instrukcije

Na   početku   svakog   instrukcijskog   ciklusa,   procesor   donosi   instrukciju   iz   memorije.   U   tipičnom 
procesoru, registar koji se zove programski brojač (PC) drži adresu instrukcije koja treba sledeća da 
se donese. Ukoliko mu se ne kaže drugačije, procesor uvek povećava sadržaj programskog brojača posle 
svakog donošenja instrukcije, tako da će da donese sledeću instrukciju u nizu (odnosno, instrukciju koja 
se   nalazi   na   sledećoj   višoj   memorijskoj   adresi).   Tako,   na   primer,   zamislite   računar   u   kome   svaka 
instrukcija zauzima jednu 16-bitnu reč memorije. Pretpostavite da je programski brojač postavljen na 
lokaciju 300. Procesor će kao sledeću doneti instrukciju na lokaciji 300. U sledećim instrukcijskim 
ciklusima, on će donositi instrukcije sa lokacija 301, 302, 303 i tako dalje. Ta sekvenca može da se 
promeni, što ćemo uskoro objasniti.

Donesena instrukcija se učitava u registar u procesoru koji je poznat kao instrukcijski registar (IR). 

Instrukcija sadrži bitove koji određuju akciju koju procesor treba da preduzme. Procesor interpretira 
instrukciju i izvodi zahtevanu akciju. Te akcije obično spadaju u jednu od sledeće četiri kategorije:

Procesor-memorija: podaci mogu da se prenose od procesora do memorije ili od memorije do 
procesora.

Procesor-U/I: podaci mogu da se prenose do periferijskog uređaja ili od njega, prenosom između 
procesora i U

II modula.

Obrada podataka: procesor može da izvodi neke aritmetičke ili logičke operacije nad podacima.

Upravljanje: instrukcija može da odredi da se promeni sekvenca izvršenja. Na primer, procesor 
može   da   donese   instrukciju   sa   lokacije   149,   koja   određuje   da   sledeća   instrukcija   bude   sa 
lokacije 182. Procesor će zapamtiti tu činjenicu postavljanjem programskog brojača na 182. 
Dakle, prilikom sledećeg ciklusa donošenja, instrukcija će se doneti sa lokacije 182, a ne 150.

Izvršenje instrukcije može da obuhvati kombinaciju tih akcija.

Razmotrite jednostavan primer, koristeći hipotetičku mašinu koja ima karakteristike izlistane na 

slici 3.4. Procesor sadrži jedan registar za podatke, koji se zove akumulator (AC). I instrukcije i podaci 
su dužine 16 bitova. Dakle, pogodno je organi. zovati memoriju tako da se koriste 16-bitne reči. Format 
instrukcije obezbeđuje 4 bita za kod operacije, pa može da bude 24 = 16 različitih kodova operacije i  
do 212 = 4096 (4K) reči memorije koje mogu direktno da se adresiraju.

Na   slici   3.5   ilustrovano   je   delimično   izvršenje   programa,   pokazujući   bitne   delove   memorije   i 

procesorske registre. Prikazani deo programa dodaje sadržaj memorijske reči na adresi 940 sadržaju 
memorijske reči na adresi 941 i skladišti rezultat u tu poslednju lokaciju. Zahtevaju se tri instrukcije, 
koje mogu da se opišu kao tri ciklusa donošenja i tri ciklusa izvršenja:

1. PC   sadrži   300,   adresu   prve   instrukcije.   Ta   instrukcija   (vrednost   1940   u   heksadecimalnom 

sistemu) učitava se u instrukcijski registar IR i povećava se sadržaj PC-a. Zapazite da taj proces 

8

background image

Stanja u gornjem delu slike 3.6 obuhvataju razmenu između procesora i memorije ili U/I modula. 

Stanja u donjem delu dijagrama obuhvataju samo unutrašnje operacije procesora. Stanje proračuna 
adrese operanda pojavljuje se dva puta zato što instrukcija može da obuhvati čitanje, upisivanje ili oba. 
Međutim, akcija koja se izvodi za vreme tog stanja je u osnovi ista u oba slučaja, pa je potreban samo 
jedan identifikator stanja.

Takođe zapazite da dijagram dozvoljava višestruke operande i višestruke rezultate zato što neke 

instrukcije na pojedinim mašinama to zahtevaju. Na primer, instrukcija ADD A,B na mašini PDP-11 
rezultuje sledećom sekvencom stanja: iac, if, iod, oac, of, oac, of , do, oac, os.

Najzad, na nekim mašinama, jedna instrukcija može da odredi da se operacija izvrši na vektoru 

(jednodimenzionalnoj matrici) brojeva ili nizu (jednodimenzionalnoj matrici) znakova. Kao što se vidi na 
slici 3.6, to bi obuhvatilo ponavljanje operacija donošenja ilili skladištenja.

Prekidi

Skoro svi računari obezbeđuju mehanizam pomoću koga drugi moduli (U/I, memorija) mogu da prekinu 
normalnu obradu procesora. U tabeli 3.1 izlistane su najčešće klase prekida. Treba da uvedemo koncept 
sada   da   bi   se   jasnije   razumela   priroda   instrukcijskog   ciklusa   i   implikacija   prekida   na   strukturu 
međusobnog povezivanja. 

Prekidi

 se obezbeđuju prvenstveno kao način da se poboljša efikasnost obrade. Na primer, većina 

spoljašnjih   uređaja   je   mnogo   sporija   od   procesora.   Pretpostavite   da   procesor   prenosi   podatke   do 
štampača, koristeći šemu instrukcijskog ciklusa sa slike 3.3. Posle svake operacije upisivanja, procesor 
mora da napravi pauzu i ostane besposlen, dok štampač ne uhvati korak. Dužina te pauze može da bude 
reda veličine više stotina ili čak hiljada instrukcijskih ciklusa, koji ne obuhvataju memoriju. Jasno je da 
je to vrlo rasipnička upotreba procesora.

Na slici 3.7a ilustrovano je takvo stanje stvari. Korisnički program izvodi seriju WRITE poziva 

isprepletanih sa obradom. Segmenti koda 1, 2 i 3 odnose se na sekvence instrukcija koje ne obuhvataju 
U/I. Pozivi WRITE se odnose na sistemski uslužni program koji će da izvede stvarnu U/I

 operaciju. U/I 

program se sastoji od tri odeljka:

Sekvenca instrukcija, na slici označena sa 4, za pripremu stvarne U/I operacije. To može da 
uključi kopiranje podataka za izlaz u specijalni bafer i pripremanje parametara za komandu 
uređaja.

Stvarna U/I komanda. Bez upotrebe prekida, jednom kada se ta komanda izda, program mora da 
čeka da U/I uređaj izvede zahtevanu funkciju (ili periodično da proziva taj uređaj). Program 
mora da čeka jednostavno ponavljajući test operaciju kako bi utvrdio da li je U/I operacija 
izvršena.

Sekvenca instrukcija, na slici označena sa 5, za kompletiranje operacije. To može da uključi 
postavljanje signala koji ukazuje na uspeh ili neuspeh operacije.

S obzirom na to da U/I operacija može da traje relativno dugo da bi se kompletirala, U/I program 

može da prestane da čeka da se operacija završi; dakle, korisnički program se zaustavio u tački poziva 
WRITE za izvestan značajan vremenski period.

Prekidi i instrukcijski ciklus

 Kod prekida, procesor može da se angažuje u izvršenju drugih instrukcija 

dok je u toku U/I operacija. Razmotrite tok upravljanja na slici 3.7b. Kao i u prethodnom slučaju, 
program dostiže tačku u kojoj pravi sistemski poziv u obliku WRITE poziva. U/I program koji je pozvan 
u tom slučaju, sastoji se samo od pripremnog koda i stvarne U/I  komande. Pošto se tih  nekoliko 
instrukcija izvrše, upravljanje se vraća korisničkom programu. U međuvremenu, spoljašnji uređaj je 

10

zauzet   prihvatanjem   podataka   iz   računarske   memorije   i   njihovim   štampanjem.   Ta   U/I   operacija 
sprovodi se konkurentno sa izvršenjem instrukcija u korisničkom programu.

Kada spoljašnji uređaj postane spreman da bude opslužen, odnosno, kada je spreman da prihvati još 

podataka iz procesora, U/I modul za taj spoljašnji uređaj šalje procesoru signal 

zahteva za prekidom. 

Procesor   odgovara   prekidanjem   operacije   trenutno   izvršavanog   programa,   grananjem   u   program   za 
opsluživanje   tog   posebnog   U/I   uređaja,   koji   se   zove   upravljački   program   signala   prekida,   i 
nastavljanjem prvobitnog izvršenja kada se uređaj opsluži. Tačke u kojima dolazi do takvih prekida 
obeležene su zvezdicom na slici 3.7b.

Sa tačke gledišta korisničkog programa, prekid je baš to: prekidanje normalne sekvence izvršenja. 

Kada se obrada prekida završi, izvršenje se nastavlja (slika 3.8). Dakle, korisnički program ne mora da 
sadrži nikakav specijalan kod da bi prihvatio prekide; procesor i operativni sistem su odgovorni za 
prekidanje korisničkog programa i zatim njegovo nastavljanje u istoj tački.

Da bi se prihvatili prekidi, instrukcijskom ciklusu dodaje se 

ciklus prekida, kao što je prikazano na 

slici 3.9. U ciklusu prekida, procesor proverava kako bi video da li se pojavio bilo kakav prekid, što se  
pokazuje prisustvom signala prekida. Ako nema nerešenog prekida, procesor prelazi u ciklus donošenja i 
donosi sledeću instrukciju trenutno izvršavanog programa. Ako postoji nerešen prekid, procesor postupa 
na sledeći način:

Suspenduje izvršenje trenutno izvršavanog programa i čuva njegov kontekst. To znači čuvanje 
adrese sledeće instrukcije za izvršenje (trenutni sadržaj programskog brojača) i svih drugih 
podataka značajnih za trenutnu aktivnost procesora.

Postavlja programski brojač na početnu adresu rutine 

upravljačkog programa signala prekida.

Procesor sada produžava u ciklus donošenja i donosi prvu instrukciju upravljačkog programa signala 

prekida, koji će opslužiti prekid. Upravljački program signala prekida obično je deo operativnog sistema. 
Tipično, taj program određuje prirodu prekida i izvodi sve akcije koje su potrebne. U primeru koji smo 
koristili, upravljački program prekida određuje koji U/I modul je generisao prekid i može da skoči na 
program koji će upisati još podataka u taj U/I modul. Kada se rutina upravljačkog programa za signal 
prekida završi, procesor može da nastavi izvršenje korisničkog programa u tački prekida.

Jasno   je   da   u   ovom   procesu   ima   nešto   dodatnog   opterećenja.   Moraju   da   se   izvrše   dodatne 

instrukcije (u upravljačkom programu za signal prekida) kako bi se odredila priroda prekida i da bi se 
odlučilo o odgovarajućoj akciji. Ipak, zbog relativno velike količine vremena koje bi se izgubilo prosto 
čekajući na U/I operaciju, uz upotrebu prekida procesor može efikasnije da se zaposli.

Da biste procenili dobitak u efikasnosti, razmotrite sliku 3.10, koja predstavlja vremenski dijagram 

zasnovan na toku upravljanja na slikama 3.7a i 3.7b. Na slikama 3.7b i 3.10 usvojeno je da je vreme 
potrebno za U/I operaciju relativno kratko: manje od vremena potrebnog da se kompletira izvršenje 
instrukcija između operacija upisivanja u korisničkom programu. U tipičnijem slučaju, posebno za spore 
uređaje   kao   što   je   štampač,   U/I   operacija   će   uzeti   mnogo   više   vremena   od   izvršenja   sekvence 
korisničkih instrukcija. Na slici 3.7c prikazano je takvo stanje stvari. U tom slučaju, korisnički program 
dostiže drugi poziv WRITE pre nego što se završi U/I operacija koju je prouzrokovao prvi poziv. 
Rezultat je da korisnički program prekida u toj tački. Kada se kompletira prethodna U/I operacija, taj 
novi poziv WRITE može da se obradi i započne nova U/I operacija. Na slici 3.11 prikazano je vremensko 
usklađenje za tu situaciju, sa i bez upotrebe prekida. Možemo videti da će i dalje biti dobitka u 
efikasnosti zato što se deo vremena u kome se odvija U/I operacija preklapa sa izvršenjem korisničkih 
instrukcija.

Na   slici   3.12   prikazanje   prerađen   dijagram   stanja   instrukcijskog   ciklusa   koji   uključuje   obradu 

ciklusa prekida.

11

background image

prenos U/I - memorija može da se dogodi bez vezivanja procesora. Za vreme takvog prenosa, U/I modul 
izdaje   komande   za   čitanje   ili   upisivanje   u   memoriju,   oslobađajući   procesor   odgovornosti   za   takvu 
razmenu. Ta operacija je poznata kao direktan pristup memoriji (DMA) i detaljno se ispituje kasnije.

3.3 STRUKTURE ZA MEĐUSOBNO POVEZIVANJE

Računar se sastoji od skupa komponenata ili modula tri osnovne vrste (procesor, memorija, U/I), koji 
komuniciraju jedan sa drugim. U stvari, računar je mreža osnovnih modula. Dakle, moraju da postoje 
putanje za povezivanje modula.

Zbirka putanja koje povezuju razne module zove se 

struktura za medusobno povezivanje. Dizajn te 

strukture će zavisiti od razmena, koje moraju da se prave između modula.

Na slici 3.5 date su potrebne vrste razmena, pomoću ukazivanja na glavne oblike ulaza i izlaza za 

svaku vrstu modula:

Memorija:   memorijski   modul   se   tipično   sastoji   od  

N  reči   jednake   dužine.   Svakoj   reči   se 

pridružuje   jedinstvena   numerička   adresa   (0,2,...,  

N-I).  Reč   podatka   može   da   se   pročita   iz 

memorije, ili u nju upiše. Priroda operacije je pokazana pomoću upravljačkih signala za čitanje i 
upisivanje.

U/I   modul:  sa   (za   računar)   unutrašnje   tačke  gledišta,   U/I   je  funkcionalno  sličan  memoriji. 
Postoje dve operacije, čitanje i upisivanje. Pored toga, U/I modul može da upravlja jednim ili više 
spoljašnjih uređaja. Na svaki od interfejsa ka spoljašnjim uređajima pozivaćemo se kao na 

port i 

svakom ćemo dati jedinstvenu adresu (na primer 0, 1,..., 

M-I). Uz to, postoje spoljašnje putanje 

podataka za ulaz i izlaz podataka sa spoljašnjeg uređaja. Najzad, U/I modul može biti sposoban 
da šalje procesoru signale prekida.

Procesor: procesor čita instrukcije i podatke, upisuje podatke posle obrade i koristi upravljačke 
signale da upravlja celokupnim radom sistema. On takođe prima i signale prekida.

Prethodna lista definiše podatke koji treba da se razmenjuju. Struktura međusobnog povezivanja 

mora da podrži sledeće vrste prenosa:

Memorija ka procesoru: procesor čita instrukciju ili jedinicu podataka iz memorije.

Procesor ka memoriji: procesor upisuje jedinicu podataka u memoriju.

U/I ka procesoru: procesor čita podatke iz U/I uređaja preko U/I modula.

Procesor ka U/I: procesor šalje podatke ka U/I uređaju.

U/I ka memoriji ili od nje: za ta dva slučaja, U/I modulu se dozvoljava da razmenjuje podatke 
direktno   sa   memorijom,   bez   prolaženja   kroz   procesor,   koristeći   direktan   pristup   memoriji 
(DMA).

Tokom godina, isproban je veliki broj struktura za međusobno povezivanje. Najzastupljenije su 

magistrala i različite strukture sa višestrukim magistralama. Ostatak ovog poglavlja posvećen je proceni 
struktura magistrala.

3.4 MEĐUSOBNO POVEZIVANJE MAGISTRALOM

Magistrala   je   komunikaciona   putanja,   koja   povezuje   dva   ili   više   uređaja.   Ključna   karakteristika 
magistrale je da je ona deljeni prenosni medijum. Više uređaja se priključuju na magistralu, a signal koji 
prenosi bilo koji uređaj na raspolaganju je za prijem svim ostalim uređajima priključenim na magistralu. 
Ako dva uređaja predaju u istom vremenskom periodu, njihovi signali će se preklopiti i pokvariti. Dakle, 
samo jedan uređaj može uspešno da predaje istovremeno.

Magistrala se tipično sastoji od više komunikacionih putanja, ili linija. Svaka linija je sposobna da 

prenosi signale koji predstavljaju binarne cifre 1 i O. U toku vremena, sekvenca binarnih cifara može da 

13

se prenese preko jedne linije. Uzete zajedno, više linija magistrale mogu da se upotrebe da istovremeno 
(paralelno) predaju binarne cifre. Na primer, 8-bitna jedinica podataka može da se preda preko osam 
linija magistrale.

Računarski   sistemi   sadrže   izvestan   broj   različitih   magistrala   koje   obezbeđuju   putanje   između 

komponenata   na   raznim   nivoima   hijerarhije   računarskog   sistema.   Magistrala   koja   povezuje   glavne 
računarske komponente (procesor, memoriju, U/I) zove se 

sistemska magistrala. Najčešće računarske 

strukture za međusobno povezivanje zasnivaju se na upotrebi jedne ili više sistemskih magistrala.

Struktura magistrale

Sistemska magistrala se tipično sastoji od oko 50 do više stotina posebnih linija. Svakoj liniji dodeljuje 
se posebno značenje ili funkcija. Mada postoji mnogo različitih konstrukcija magistrala, na svakoj od 
njih linije mogu da se klasifikuju u tri funkcionalne grupe (slika 3.16): linije za podatke, adresne i 
upravljačke linije.

Unije podataka obezbeđuju putanju za pomeranje podataka između modula sistema. Te linije se 

zajedno zovu 

magistrala podataka. Magistrala podataka može da se sastoji od 32 do više stotina linija, 

na šta se poziva kao na 

širinu magistrale podataka. S obzirom na to da jedna linija može da prenosi samo 

1 bit istovremeno, broj linija određuje koliko bitova može da se prenosi odjednom. Širina magistrale 
podataka je ključni činilac u određivanju ukupne performanse sistema. Na primer, ako je magistrala 
podataka širine 8 bitova, a svaka instrukcija duga 16 bitova, onda procesor mora da pristupa memoriji 
dva puta za vreme svakog instrukcijskog ciklusa.

Adresne linije se koriste da označe izvor ili odredište podataka na magistrali podataka. Na primer, 

ako procesor želi da čita reč (od 8, 16 ili 32 bita) podataka iz memorije, on stavlja adresu željene reči 
na adresne linije. Jasno, širina adresne magistrale određuje maksimalno moguć kapacitet memorije 
sistema. Pored toga, adresne linije se obično koriste i za adresiranje U/I portova. Bitovi višeg reda se 
tipično   koriste   da   se   izabere   određeni   modul   na   magistrali,   a   bitovi   nižeg   reda   da   se   izabere 
memorijska lokacija ili U/I port unutar modula. Na primer, na 8-bitnoj adresnoj magistrali, adrese 
01111111 i niže bi mogle da se odnose na memorijski modul (modul O) sa 128 reči memorije, a adrese 
10000000 i više bi mogle da se odnose na uređaje priključene na U/I modul (modul!).

Upravljačke linije se koriste da se upravlja pristupom i upotrebom linija za podatke i adrese. S 

obzirom na to da linije za adrese i podatke dele sve komponente, one moraju da budu sredstvo za 
upravljanje njihovom upotrebom. Upravljački signali predaju i komandne i vremenske informacije između 
modula sistema. Vremenski signali ukazuju na validnost informacija o podacima i adresama. Komandni 
signali određuju operacije koje treba da se izvedu. Tipične upravljačke linije uključuju:

Upis u memoriju: prouzrokuje da se podatak na magistrali upiše u adresiranu lokaciju.

Čitanje iz memorije: prouzrokuje da se podatak iz adresirane lokacije postavi na magistralu.

U/I upis: prouzrokuje da podatak na magistrali izađe na adresirani U/I port.

U/I čitanje: prouzrokuje da se podatak iz adresiranog U/I porta postavi na magistralu. 

Prenos ACK: pokazuje da je podatak prihvaćen sa magistrale, ili postavljen na nju.

Zahtev za magistralu: pokazuje da je modulu potrebno da dobije upravljanje nad magistralom.

Odobrenje magistrale: pokazuje da je modulu koji je to zahtevao odobreno upravljanje nad 
magistralom.

Zahtev za prekidom: pokazuje da je prekid nerešen.

Prekid ACK: potvrđuje da je nerešen prekid prepoznat.

Clock: koristi se za sinhronizaciju operacija.

Reset: inicijalizuje sve module.

14

background image

aranžman   dozvoljava   sistemu   da   podrži   veoma   raznovrsne   U/I   uređaje   i   da   u   isto   vreme   izoluje 
saobraćaj od memorije do procesora, od U/I saobraćaja.

Na slici 3.18a prikazani su neki tipični primeri U/I uređaja koji bi mogli da se priključe na magistralu 

za proširenje. Mrežna povezivanja uključuju lokalne računarske mreže (LAN), kao što je 10 Mb/s 
Ethernet i povezivanja za regionalne računarske mreže (WAN), kao što je mreža sa komutacijom 
paketa. SC SI (interfejs malih računarskih sistema) je i sam vrsta magistrale koja se koristi da podrži 
lokalne diskove i druge periferijske uređaje. Serijski port bi mogao da se upotrebi da podrži štampač ili 
skener.

Ta tradicionalna arhitektura magistrale je razumno efikasna, ali počinje da koči kada U/I uređaji 

postaju sve brži. Odgovor na te rastuće zahteve je uobičajeni pristup industrije da gradi veoma brze 
magistrale koje su blisko integrisane sa ostatkom sistema, zahtevajući samo most između procesorske 
magistrale i magistrale velike brzine. Takav aranžman se ponekad zove arhitektura međusprata.

Na slici 3.18b prikazana je tipična realizacija tog pristupa. Opet postoji lokalna magistrala koja 

povezuje procesor sa kontrolerom keša, koji je sa svoje strane povezan sa sistemskom magistralom koja 
podržava glavnu memoriju. Kontroler keš memorije je integrisan u most, ili uređaj za baferovanje, koji 
je povezan sa magistralom velike brzine. Ta magistrala podržava povezivanja sa veoma brzim LAN-
ovima,   kao   što   je   Fast   Ethernet   na   100   Mb/s,   kontrolere   video   i   grafičkih   radnih   stanica,   kao   i 
kontrolere na lokalnim periferijskim magistralama, uključujući tu SCSI i FireWire. Ova poslednja je 
aranžman magistrale velike brzine, projektovana posebno da podrži U/I uređaje velikog kapaciteta. 
Uređaji manje brzine se i dalje podržavaju sa magistrale za proširenje, pomoću interfejsa koji baferuje 
saobraćaj između magistrale za proširenje i magistrale velike brzine.

Prednost tog aranžmana je u tome što magistrala velike brzine dovodi zahtevne uređaje u bližu 

integraciju   sa   proces~rom,   a   u   isto   vreme   je   nezavisna   od   procesora.   Dakle,   razlike   u   brzinama 
procesora i magistrale velike brzine i definicijama signalnih linija se tolerišu. Promene u arhitekturi 
procesora ne utiču na magistralu velike brzine i obrnuto.

Elementi projektovanja magistrale

lako ima raznih implementacija magistrale, postoji malo parametara ili elemenata za projektovanje koji 
služe da se klasifikuju magistrale i da se među njima napravi razlika. U tabeli 3.2 data je lista ključnih 
elemenata.

Vrste magistrala

 Linije magistrale mogu da budu razdvojene u dve generičke vrste: namenske i 

multipleksirane. Namenska magistrala je stalno dodeljena ili jednoj funkciji, ili fizičkom podskupu 
računarskih komponenata.

Primer funkcionalne namene je upotreba razdvojenih namenskih adresnih linija i linija za podatke, 

što   je   uobičajeno   na   mnogim   magistralama.   Međutim,   to   nije   od   suštinskog   značaja.   Na   primer, 
informacije o adresama i podacima mogu da se prenose preko istog skupa linija, koristeći upravljačku 
liniju Address Valid (adresa validna). Na početku prenosa podataka, adresa se postavlja na magistralu i 
aktivira se linija Address Valid. U tom trenutku svaki modul ima određeni vremenski period da kopira 
adresu i utvrdi da li je on adresiran. Adresa se onda uklanja sa magistrale i iste veze magistrale se 
koriste za sledeći prenos pročitanog ili upisanog podatka. Ta metoda korišćenja istih linija za višestruke 
namene poznata je kao 

vremensko multipleksiranje.

Prednost vremenskog multipleksiranja je upotreba manjeg broja linija, što štedi prostor, a obično i 

troškove. Nedostatak je što je potrebno složenije elektronsko kolo unutar svakog modula. Takođe, 
postoji moguće smanjenje performanse zato što izvesni događaji koji dele iste linije ne mogu da se 
dešavaju paralelno.

16

Fizička namena se odnosi na upotrebu višestrukih magistrala, od kojih svaka povezuje samo podskup 

modula. Tipičan primer je upotreba U/I magistrale da bi se međusobno povezali svi U/I moduli; ta 
magistrala se onda povezuje sa glavnom magistralom preko neke vrste U/I adapterskog modula. Moguća 
prednost   fizičke   namene   je   velika   propusna   moć   zato   što   ima   manje   nadmetanja   za   magistralu. 
Nedostatak je povećanje dimenzija i cene sistema.

Metoda arbitraže

  U svim sistemima, sem u onim najjednostavnijim, više od jednog modula mogu da 

zahtevaju upravljanje nad magistralom. Na primer, U/I modulu može biti potrebno da čita ili upisuje 
direktno   u   memoriju,   bez   slanja   podataka   u   procesor.   S   obzirom   na   to   da   samo   jedna   jedinica 
istovremeno može da uspešno predaje preko magistrale, potrebna je neka metoda arbitraže. Razne 
metode mogu grubo da se klasifikuju kao centralizovane ili distribuirane. U centralizovanoj šemi, jedan 
hardverski   element,   na   koji   se   poziva   kao   na  

kontroler   magistrale,  ili  arbitar,  odgovoran   je   za 

dodeljivanje vremena na magistrali. Uređaj može da bude poseban modul ili deo procesora. U distri-
buiranoj   šemi,   nema   centralnog   kontrolera.   Umesto   toga,   svaki   modul   sadrži   pristupnu   upravljačku 
logiku, a moduli rade zajedno deleći magistralu. Kod obe metode arbitraže, svrha je da se označi jedan 
uređaj, bio to procesor ili U/I modul kao gospodar (eng!.  

master).  Gospodar onda može da započne 

prenos podataka (odnosno da čita ili upisuje) sa nekim drugim uređajem, koji za tu posebnu razmenu 
deluje kao sluga (eng!. 

slave).

Vremensko   usklađivanje   se   odnosi   na   način   na   koji   se   koordiniraju   događaji   na   magistrali. 

Magistrale koriste ili sinhrono ili asinhrono vremensko usklađivanje.

Kod sinhronog vremenskog uskladivanja, pojavu događaja na magistrali određuje generator takta. 

Magistrala ima liniju generatora takta, preko koje generator takta predaje pravilan niz binarnih cifara 1 
i 0. Jedna predaja 1- 0 naziva se  

ciklus generatora takta  ili  ciklus magistrale  i definiše vremenski 

odsečak. Svi drugi uređaji na magistrali mogu da čitaju liniju takta i svi događaji počinju na početku 
ciklusa generatora takta. Na slici 3.19 prikazan je tipičan, ali uprošćen vremenski dijagram za operacije 
sinhronog čitanja i upisivanja (za opis vremenskih dijagrama pročitajte dodatak 3A). Ostali signali 
magistrale mogu da se menjaju na prednjoj ivici signala generatora takta (uz malo kašnjenje reakcije). 
Većina   događaja   zauzima   jedan   ciklus   generatora   takta.   U   ovom   jednostavnom   primeru,   procesor 
postavlja memorijsku adresu na adresne linije za vreme prvog ciklusa generatora takta i može da 
potvrdi   razne  linije   stanja.   Jednom   kada  su  se  adresne   linije  stabilizovale,   procesor   izdaje   signal 
omogućenja adrese. Za operaciju čitanja, procesor izdaje komandu čitanja na početku drugog ciklusa. 
Memorijski modul prepoznaje adresu i, posle kašnjenja od jednog ciklusa, postavlja podatak na linije za 
podatke. Procesor čita podatak sa linija za podatke i obara signal čitanja. Za operaciju upisivanja, 
procesor stavlja podatak na linije za podatke na početku drugog ciklusa i izdaje komandu za upisivanje 
kada su se linije za podatke stabilizovale. Memorijski modul kopira informaciju sa linija za podatke za 
vreme trećeg ciklusa generatora takta.

Kod asinhronog vremenskog usklađivanja, pojava jednog događaja na magistrali sledi i zavisi od 

pojave prethodnog događaja. U jednostavnom primeru čitanja sa slike 3.20a, procesor postavlja adresu 
i signale stanja na magistralu. Posle zastanka da bi se ti signali stabilizovali, on izdaje komandu za 
čitanje, ukazujući na prisustvo validne adrese i upravljačkih signala. Odgovarajuća memorija dekoduje 
adresu i odgovara postavljanjem podatka na linije za podatke. Jednom kada su se linije za podatke 
stabilizovale, memorijski modul daje signal na liniji za potvrđivanje da bi obavestio procesor da je 
podatak raspoloživ. Kada gospodar pročita podatak sa linija za podatke, on ukida signal za čitanje. 
Najzad, kada se linija za potvrđivanje obori, gospodar uklanja adresnu informaciju.

Na slici 3.30b prikazana je jednostavna asinhrona operacija upisivanja. U tom slučaju, gospodar 

postavlja podatak na linije za podatke u isto vreme kada stavlja signale na linije za stanja i adrese. 

17

background image

savremenih   sistema;   potrebno   je   vrlo   malo   čipova   da   bi   se   ona   implementirala   i   podržala   druge 
magistrale, priključene na PCI magistralu.

Intel je započeo radove na PCI magistrali 1990. godine, za svoje sisteme zasnovane na procesoru 

Pentium. Intel je uskoro objavio sve patente u javnom domenu i promovisao stvaranje industrijskog 
udruženja PCI SIG, da dalje razvija i održava kompatibilnost specif1kacija PCI. Rezultat je da je PCI 
magistrala bila široko prihvaćena i da je sve veća njena upotreba u personalnim računarirna, radnim 
stanicama i serverskim sistemima. S obzirom na to da je specif1kacija u javnom domenu i da je podržava 
širok   presek   industrije   mikroprocesora   i   periferijskih   uređaja,   PCI   proizvodi   koje   prave   razni 
proizvođači su kompatibilni.

PCI   magistrala   je   projektovana   da   podrži   razne   konfiguracije   zasnovane   na   mikroprocesorima, 

uključujući i jednoprocesorske i multiprocesorske sisteme. Prema tome, ona obezbeđuje skup funkcija 
opšte namene. Ona koristi sinhrono vremensko usklađivanje i centralizovanu šemu arbitraže.

Na   slici   3.22a   prikazana   je   tipična   upotreba   PCI   magistrale   u   jednoprofesorskom   sistemu. 

Kombinovani   kontroler   DRAM   memorije   i   most   ka   PCI   magistrali   obezbeđuje   čvrsto   sprezanje   sa 
procesorom i sposobnost da se podaci isporučuju velikom brzinom. Most radi kao bafer za podatke, tako 
da brzina magistrale PCI može da se razlikuje od U/I sposobnosti procesora. U mu1tiprocesorskom 
sistemu (slika 3.22b), jedna ili više PCI konfiguracija mogu da se povežu pomoću mostova sa sistemskom 
magistralom procesora. Sistemska magistrala podržava samo jedinice procesora/keš memorije, glavnu 
memoriju   i   PCI   mostove.   I   ovde   upotreba   mostova   održava   PCI   magistralu   nezavisnom   od   brzine 
procesora, a da ipak obezbeđuje sposobnost da se podaci brzo primaju i isporučuju.

Struktura magistrale

PCI može da se konfiguriše kao 32-bitna ili 64-bitna magistrala. U tabeli 3.3 definisano je 49 obaveznih 
linija za PCI magistralu. One se dele na sledeće funkcionalne grupe:

Sistemski pinovi: uključuju pinove za generator takta ireset.

Pinovi za adrese i podatke: uključuju 32 linije koje se vremenski multiplfksiraju za adrese i 
podatke. Ostale linije u toj grupi se koriste da interpretirajl1 i vrše validaciju signalnih linija 
koje nose adrese i podaci.

Pinovi upravljačkog interfejsa: upravljaju vremenskim usklađenjem transakcija 

obezbeđuju koordinaciju između inicijatora i ciljeva.

Pinovi za arbitražu: za razliku od ostalih signalnih linija PCI, ove nisu deljene. Umesto toga, svaki 
gospodar PCI magistrale ima sopstveni par linija za arbitražu

,  koji   ga   direktno   povezuje   sa 

arbitrom PCI magistrale.

Pinovi za izveštavanje o greškama: koriste se da izveste o greškama parnosti i drugim greškama.

Pored toga, specifikacija PCI magistrale definiše 51 opcionalnu signalnu liniju (tabela 3.4), koje su 
podeljene na sledeće funkcionalne grupe:

Pinovi za prekide: oni su dati PCI uređajima koji mogu da generišu zahteve za uslu

gama.   Kao 

kod pinova za arbitražu, to nisu deljene linije. Umesto toga, svaki PCI  uređaj   ima   sopstvenu 
liniju ili linije za prekide, koje vode do kontrolera prekida.

Pinovi za podršku keš memorija: ti pinovi su potrebni da podrže memoriju na PCI magistrali, koja 
može da bude keširana u procesoru ili nekom drugom uređaju. Ti pinovi podržavaju ispitne keš 
protokole (pročitajte poglavlje 18 radi diskusije o takvim protokolima).

Komande PCI

Aktivnost magistrale se odvija u obliku transakcija između inicijatora, ili gospodara, i ciljnog uređaja. 
Kada gospodar magistrale dobije upravljanje nad magistralom, on određuje vrstu transakcije koja će se 

19

sledeća dogoditi. Za vreme adresne faze transakcije, linije C/BE se koriste da signaliziraju vrstu 
transakcije. Komande su sledeće:

potvrda prekida,

specijalan ciklus,

U/I čitanje,

U/I upisivanje,

čitanje memorije,

čitanje reda memorije,

višestruko čitanje memorije,

upisivanje u memoriju,

upisivanje u memoriju i poništavanje,

čitanje konfiguracije,

upisivanje konfiguracije,

dvostruki adresni ciklus.

Potvrda   prekida   je   komanda   čitanja,   namenjena   za   uređaj   koji   radi   kao   kontroler   prekida   na 

magistrali PCI. Adresne linije se ne koriste za vreme adresne faze, alinije za omogućavanje bajta 
pokazuju veličinu identifikatora prekida koji treba da se vrati.

Komandu specijalni ciklus koristi inicijator da difuzno emituje poruku ka jednom ili više ciljnih 

uređaja.

Komande U/I čitanje i upisivanje koriste se za prenos podataka između inicijatora i U/I kontrolera. 

Svaki U/I uređaj ima sopstveni adresni prostor, a adresne linije se koriste da pokažu određeni uređaj i 
specificira ju podatke koji treba da se prenesu u taj uređaj ili iz njega. Koncept U/I adresa istražuje 
se u poglavlju 7.

Komande za memorijsko čitanje ili upisivanje koriste se da odrede prenos niza podataka, zauzimajući 

jedan ili više ciklusa. Interpretacija tih komandi zavisi od toga da li memorijski kontroler na magistrali 
PCI podržava ili ne podržava PCI protokol za prenose između memorije i keša. Ako podržava, prenos 
podataka u memoriju i iz nje odvija se tipično u vidu keš redova, ili blokova2. Tri komande čitanja  
memorije imaju primene navedene u tabeli 3.5. Komanda upisivanja u memoriju i poništavanja prenosi 
podatke u memoriju u jednom ili više ciklusa. Pored toga, ona garantuje da je najmanje jedan red keša 
upisan. Ta komanda podržava keš funkciju upisivanja reda natrag u memoriju.

Dve komande za konfiguraciju 6mogućavaju gospodaru da čita i ažurira paramere konfiguracije u 

uređaju priključenom na PCI. Svaki PCI uređaj može da uključi lo 256 unutrašnjih regi~tara koji se 
koriste za vreme inicijalizacije sistema da bi se konfigurisao taj uređaj. 

Komandu dvostrukog adresnog ciklus koristi gospodar kako bi pokazao da uporebljava 64-bitno 

adresiranje.
prenosi podataka svaki prenos podataka na magistrali PCI je jedna transakcija koja se sastoji od jedne 
ze adrese i jedne ili više faza podataka. U ovoj diskusiji, ilustrujemo tipičnu operaciju čitanja; operacija 
upisivanja odvija se na sličan način.

Na slici 3.23 prikazano je vremensko usklađenje transakcije čitanja. Svi događaji su sinhronizovani 

sa opadajućim prelaskom signala generatora takta, koji se javlja u sredini svakog ciklusa takta. Uređaji 
na magistrali uzorkuju linije magistrale na prednjoj ivici na početku ciklusa magistrale. Ovo su značajni 
događaji koji su označeni na dijagramu:
Jednom kada je gospodar dobio upravljanje nad magistralom, on može da počne transakciju potvrđujući 
FRAME. Ta linija ostaje potvrđena sve dok inicijator ne bude spreman da kompletira poslednju fazu 
podatka. Inicijator takođe stavlja adresu na adresnu magistralu i komandu čitanja na linije C/BE.

20

background image

sledećeg ciklusa generatora takta.
Na   početku   takta   5,   B   otkriva   da   su   IRDY   i   FRAME   oboreni,   pa   je   tako   sposoban   da   preuzme 
upravljanje magistralom potvrđivanjem FRAME. On takođe obara signal na svojoj liniji REQ zato što želi 
da izvede samo jednu transakciju.

Zatim se gospodaru A odobrava pristup magistrali radi sledeće transakcije. Zapazite da se arbitraža 

dešava u isto vreme kada trenutni gospodar magistrale izvodi prenos podatka. Dakle, nijedan ciklus 
magistrale se ne gubi na izvođenje arbitraže. To se zove 

skrivena arbitraža.

Poglavlje 4

KEŠ MEMORIJA
KLJUČNE TEZE

Računarska memorija je hijerarhijski organizovana. Na najvišem nivou (najbliže procesoru) nalaze se 
procesorski registri. Zatim dolazi jedan ili više nivoa keš memorije. Kada se koristi više nivoa, oni se 
označavaju sa L1, L2 itd. Zatim dolazi glavna memorija, koja se obično pravi od dinamičke memorije 
sa   slučajnim   pristupom   (DRAM).   Sve   dosada   spomenute   memorije   smatraju   se   unutrašnjim 
memorijama računarskog sistema. Hijerarhija se nastavlja spoljašnjom memorijom, čiji je sledeći 
nivo obično fIksirani čvrsti disk i jedan ili više nivoa ispod njega, koji se sastoje od izmenljivih 
medijuma, kao što su optički diskovi i trake.

Kako   idemo   niz   memorijsku   hijerarhiju,   nailazimo   na   smanjivanje   cene   po   bitu,   povećavanje 

kapaciteta i duže vreme pristupa. Bilo bi lepo koristiti samo najbržu memoriju, ali, imajući u vidu da 
je ona najskuplja, pravimo kompromis vremena pristupa i cene, više koristeći sporiju memoriju. Izazov 
za projektovanje je da se podaci i programi organizuju u memoriji tako da su memorijske reči kojima 
se pristupa obično u bržoj memoriji.

Uopšte, verovatno je da će većina budućih pristupanja procesora glavnoj memoriji biti ka onim 

lokacijama kojima se nedavno pristupalo. Zato se u keš memoriji zadržavaju kopije nekih nedavno 
korišćenih reči iz DRAM memorije. Ako je keš projektovan kako treba, onda će u većini slučajeva 
procesor zahtevati memorijske reči koje se već nalaze u kešu.

Mada   je   naizgled   konceptualno   jednostavna,   računarska   memorija   ima   možda   najširi   opseg   vrsta, 
tehnologije, organizacije, performanse i cene od svih svojstava računarskog sistema. Posledica toga je 
da je računarski sistem opremljen hijerarhijom memorijskih podsistema, od kojih su neki unutrašnji za 
sistem (direktno pristupačni procesom), a neki spoljašnji (pristupačni procesoru preko U/I modula).

4.1 PREGLED RAČUNARSKOG MEMORIJSKOG SISTEMA
Karakteristike memorijskih sistema

Sa   složenom   temom   računarske   memorije   lakše   ćemo   izaći   na   kraj   ako   memorijske   sisteme 
klasifikujemo prema njihovim ključnim karakteristikama. One najvažnije nabrojane su u tabeli 4.1.

Pojam lokacija u tabeli 4.1 odnosi se na to da li je memorija unutrašnja ili spoljašnja za računar. 

Unutrašnja memorija se često izjednačava sa glavnom memorijom.

Ali, postoje i drugi oblici unutrašnje memorije. Procesor zahteva sopstvenu lokalnu memoriju, u 

obliku registara (pogledajte sliku 2.3). Pored toga, kao što ćemo videti, deo procesora upravljačka 
jedinica može takođe da zahteva sopstvenu unutrašnju memoriju. Objašnjenja ove poslednje dve vrste 
unutrašnje memorije odložićemo do nekih narednih poglavlja. Keš je drugi oblik unutrašnje memorije. 
Spoljašnja memorija se sastoji od periferijskih uređaja za skladištenje, kao što su disk i traka, kojima 
procesor može da pristupa preko U/I kontrolera.

Očigledna   karakteristika   memorije   je   njen  

kapacitet.  

Za   unutrašnju   memoriju,   on   se   obično 

22

izražava u bajtovima (1 bajt = 8 bitova), ili u rečima. Uobičajene dužine reči su 8, 16 i 32 bita. 
Kapacitet spoljašnje memorije se tipično izražava u bajtovima.

Srodan koncept je  

jedinica prenosa.  

Za unutrašnju memoriju, jedinica prenosa jednaka je broju 

linija za podatke koje vode u memorijski modul i iz njega. Ona može da bude jednaka dužini reči, ali je 
češće veća, na primer 64, 128 ili 256 bitova. Da biste  

to  razjasnili, zamislite tri povezana koncepta 

unutrašnje memorije:

Reč 

Reč je "prirodna" jedinica organizacije memorije. Veličina reči je tipično jednaka broju 

bitova koji se koriste da bi se predstavio ceo broj i dužina instrukcije. Nažalost, ima mnogo 
izuzetaka. Na primer, CRAY C90 ima 64-bitnu dužinu reči, ali koristi 46-bitnu predstavu 
celog broja. VAX ima fantastično šarenilo dužina instrukcija, izraženih u umnošcima bajtova i 
dužinu reči od 32 bita.

Adresibilne jedinice 

U nekim sistemima, adresibilna jedinica je reč. Međutim, mnogi sistemi 

dozvoljavaju   adresiranje   na  nivou  bajta.  U  svakom   slučaju,   odnos  između   dužine   adrese 
ubitovima 

A i broja adresibilnih jedinica N je 2  = N.

Jedinica prenosa 

Za glavnu memoriju, to

 je broj čitanja bitova iz memorije ili upisivanja u 

nju u vremenu. Jedinica prenosa ne mora da bude reč ili adresibilna jedinica. Za spoljašnju 
memoriju,  podaci se  često  prenose u jedinicama mnogo  većim  od  reči, koje se nazivaju 
blokovima.

Druga razlika među vrstama memorije je  

metoda pristupanja  

jedinicama  podataka.

 

Te metode 

uključuju sledeće:

Sekvencijalni pristup

 Memorija je organizovana po jedinicama podataka koje se zovu zapisi. 

Pristup   mora   da   se   napravi   u   specifičnoj   linearnoj   sekvenci.   Zapamćena   informacija   za 
adresiranje upotrebljava se za razdvajanje zapisa i pomoć u njihovom izdvajanju. Koristi se 
deljeni mehanizam za čitanje/upisivanje, a on mora da se premešta sa svoje trenutne na 
željenu lokaciju, prolazeći i odbacujući svaki zapis koji se nalazi između. Prema tome, vreme 
za pristupanje nekom proizvoljnom zapisu veoma je promenijivo. Jedinice traka, o kojima se 
govori u poglavlju 6, koriste sekvencijalni pristup.

Direktan   pristup

  Kao   kod   sekvencijalnog,   i   kod   direktnog   pristupa   koristi   se   deljeni 

mehanizam za čitanje/upisivanje. Međutim, pojedinačni blokovi ili zapisi imaju jedinstvenu 
adresu, zasnovanu na fizičkoj lokaciji. Pristup se ostvaruje direktnim pristupom da bi se 
postigla opšta susednost, plus sekvencijalno traženje, brojanje ili čekanje da bi se dostigla 
konačna   lokacija.   I   ovde   je   vreme   promenijivo.   Jedinice   diskova,   o   kojima   se   govori   u 
poglavlju 6, koriste direktan pristup.

Slučajan   pristup

  Svaka   adresibilna   jedinica   u   memoriji   ima   jedinstven,   fizički   ožičen 

mehanizam za adresiranje. Vreme za pristup datoj lokaciji konstantno je i nezavisno od 
sekvence prethodnih pristupa. Glavna memorija i neki sistemi keš memorija koriste slučajan 
pristup.

Asocijativan   pristup

  Taj   pristup   koristi   vrsta   memorije   sa   slučajnim   pristupom,   koja 

omogućava da se porede željene lokacije bitova unutar reči, da bi se postigla podudarnost sa 
određenim uzorkom, i da se to uradi za sve reči istovremeno. Dakle, reč se izvlači zasnovano 
na delu njenog sadržaja, a ne na osnovu njene adrese. Kao i kod obične memorije sa slučajnim 
pristupom, svaka lokacija ima sopstveni mehanizam za adresiranje, a vreme izvlačenja je 
konstantno, nezavisno od lokacije ili prethodnih uzoraka pristupanja. Keš memorije mogu da 
koriste asocijativan pristup.

Sa tačke gledišta korisnika, dve najvažnije karakteristike memorije su kapacitet i performansa. 

23

background image

memorije mora da bude razumna u odnosu na druge komponente.

Kao što bi se moglo i očekivati, postoji kompromis između tri ključne karakteristike memorije: cene, 

kapaciteta   i   vremena   pristupa.   U   bilo   kom   datom   trenutku,   koriste   se   razne   tehnologije   da   se 
implementiraju memorijski sistemi. U celom tom spektru tehnologija, važe sledeći odnosi:

kraće vreme pristupa, veća cena po bitu; 

veći kapacitet, manja cena po bitu;

veći kapacitet, duže vreme pristupa.

Dizajner   se   suočava   sa   jasnom   dilemom.   On   bi   voleo   da   koristi   tehnologije   koje   obezbeđuju 

memorije velikog kapaciteta, kako zbog toga što je kapacitet potreban, tako i zato što je cena po bitu 
niska. Međutim, da bi ispunio zahtev performanse, projektant mora da upotrebi skupu memoriju, sa 
kratkim vremenom pristupa i relativno malim kapacitetom.

Način da se ta dilema razreši nije u oslanjanju samo na jednu memorijsku komponentu ili tehnologiju, 

nego da se upotrebi 

memorijska hijerarhija. 

Tipična hijerarhija ilustrovana je na slici 4.1. Kako se ide 

niz hijerarhiju, događa se sledeće:

smanjuje se cena po bitu;

povećava se kapacitet;

povećava se vreme pristupa;

smanjuje se učestalost pristupa memoriji od strane procesora.

Na taj način, skuplje, brže memorije dopunjavaju se većim, jeftinijim i sporijim memorijama. Ključ 

za uspeh te organizacije je u stavki (d): smanjivanju učestalosti pristupa. Ispitivaćemo taj koncept 
detaljnije, kada budemo govorili o keš memoriji, kasnije u ovom poglavlju, i virtueinoj memoriji, u 
poglavlju 8. Sada dajemo samo kratko objašnjenje.

Korišćenje dva nivoa memorije da bi se smanjilo srednje vreme pristupa u principu radi, ali samo ako 

su ispunjeni uslovi od (a) do (d). Primenom različitih tehnologija, postoji spektar memorijskih sistema 
koji zadovoljavaju uslove od (a) do (c). Srećom, uslov (d) često takođe važi.

Osnova važenja uslova (d) je u principu koji je poznat kao 

lokalnost reference 

[DENN68]. U toku 

izvršenja programa, reference memorije od strane procesora, kako za instrukcije tako i za podatke, 
teže da se grupišu. Programi obično sadrže jedan broj iterativnih petlji i potprograma. Jednom kada se 
uđe u petlju ili potprogram, ponavljaju se reference na mali skup instrukcija. Slično tome, operacije nad 
tabelama i nizovima obuhvataju pristup grupisanom skupu reči sa podacima. U toku dugog vremenskog 
perioda, grupe u upotrebi se menjaju, ali u kratkom vremenu procesor uglavnom radi sa fiksiranim 
grupama referenci memorije.

Prema tome, moguće je organizovati podatke kroz hijerarhiju, tako da procenat pristupa svakom 

sledećem nižem nivou bude značajno manji od onog prema nivou iznad. Razmotrite upravo predstavljen 
primer   sa   dva   nivoa.   Neka   memorija   nivoa   2   sadrži   sve   instrukcije   i   podatke   programa.   Trenutno 
postojeće grupe mogu privremeno da se smeste u nivo 1. S vremena na vreme, jedna od grupa iz nivoa 1 
će morati da se vrati nazad u nivo 2 da bi napravila mesto za novu grupu koja dolazi u nivo 1. Međutim, u 
proseku, većina referenci će biti instrukcije i podaci koji se nalaze u nivou 1.

Taj   princip   može   da   se   primeni   preko   više   od   dva   nivoa   memorije,   kao   što   se   nagoveštava 

hijerarhijom  prikazanom   na   slici  4.1.   Najbrža,   najmanja  i   najskuplja  vrsta  memorije   sastoji   se  od 
registara koji su interni za procesor. Procesor će tipično sadržati nekoliko desetina takvih registara 
mada neke mašine mogu da ih imaju na stotine. Ako preskočimo dva nivoa naniže, glavna memorija je 
najvažnija unutrašnja memorija računara. Svaka lokacija u glavnoj memoriji ima jedinstvenu adresu. 
Glavna memorija se obično proširuje bržim i manjim kešom. Keš obično nije vidljiv za programera ili, 
zaista,   za   procesor.   To   je   uređaj   za   privremeno   prihvatanje   podataka   između   glavne   memorije   i 

25

procesora da bi se poboljšala performansa.

Tri upravo opisana oblika memorije su, tipično, nepostojane i koriste poluprovodničku tehnologiju. 

Upotreba tri nivoa eksploatiše činjenicu da poluprovodnička memorija dolazi u više vrsta, koje se 
razlikuju u brzini i ceni. Podaci se trajnije skladište na spoljašnjim masovnim memorijskim uređajima, od 
kojih su najčešći čvrsti disk i izmenljivi medijumi, kao što su zamenljivi magnetski disk, traka i optička 
memorija. Spoljašnje, trajne memorije takođe se zovu i sekundarne ili pomoćne memorije. One se 
koriste za skladištenje programa i datoteka podataka i obično su za programera vidljive samo u obliku 
datoteka   i   zapisa,   suprotno   od   pojedinačnih   bajtova   ili   reči.   Disk   se   takođe   koristi   da   obezbedi 
proširenje glavne memorije koje je poznato kao virtueina memorija, o čemu se govori u poglavlju 8.

U   hijerahiju   mogu   da   se   uključe   i   drugi   oblici   memorije.   Na   primer,   veliki   IBM-ovi   računari 

obuhvataju oblik. unutrašnje memorije koji je poznat kao prošireno skladište 

(Expanded Storage). Ono 

koristi   poluprovodničku   tehnologiju   koja   je   sporija   i   jeftinija   od   one   u   glavnoj   memoriji.   Strogo 
govoreći, ta memorija se ne uklapa u hijerahiju, nego predstavlja sporednu granu: podaci mogu da se 
kreću između glavne memorije i proširenog skladišta, ali ne i između proširenog skladišta i spoljašnje 
memorije. Drugi oblici sekundarne memorije uključuju optičke i magnetno-optičke diskove. Najzad, 
efektivno može da se doda još nivoa hijerarhije u softveru. 

Deo glavne memorije može da se upotrebi 

kao bafer, da privremeno drži podatke koji treba da se učitaju na disk. Takva tehnika, koja se ponekad 
zove disk keš, poboljšava performansu na dva načina:

Upisi na disk su grupisani. Umesto mnogo

  malih prenosa podataka, imamo malo velikih prenosa 

podataka. To poboljšava performansu diska i minimizuje umešanost procesora.

Ponekad podaci predodređeni za upisivanje mogu da budu referencirani programom pre sledećeg 
izbacivanja na disk. U tom slučaju, podaci se veoma brzo izvlače iz softverskog keša, umesto da 
se to sporo uradi sa diska.

PRINCIPI KEŠ MEMORIJE

Keš   memorija   je   namenjena   da   pruži   memoriji   brzinu   koja   se   približava   onoj   koju   imaju   najbrže 
raspoložive memorije, a u isto vreme da obezbedi veliki kapacitet memorije po ceni jeftinijih vrsta 
poluprovodničkih memorija. Koncept je ilustrovan na slici 4.3. Postoji relativno velika i spora glavna 
memorija, zajedno sa manjom i bržom keš memorijom. Keš sadrži kopiju delova glavne memorije. Kada 
procesor pokuša da čita reč memorije, napravi se provera da bi se utvrdilo da li je reč u kešu. Ako  
jeste, reč se isporučuje procesoru. Ako nije, blok glavne memorije, koji se sastoji od nekog fiksnog 
broja reči, učitava se u keš i onda se reč isporučuje procesoru. Zbog fenomena lokalnosti reference, 
kada se blok podataka donese u keš da bi se zadovoljila jedna referenca memorije, verovatno će biti 
budućih referenci na tu istu memorijsku lokaciju, ili na druge reči u bloku.

Na slici 4.4 prikazana je struktura sistema keš/glavna memorija. Glavna memorija se sastoji od 2  

adresibilnih reči, gde svaka reč ima jedinstvenu 

n-bitnu adresu. U svrhu preslikavanja, ta memorija je 

zamišljena da se sastoji od izvesnog broja blokova fiksne dužine, svaki po K

 reči. To znači da postoji M 

=  2 /K

  blokova. Keš memorija se sastoji od C  

redova.  

Svaki red sadrži K reči, plus tag od nekoliko 

bitova; broj reči u redu zove se 

veličina reda. 

Broj redova je mnogo manji od broja blokova u glavnoj 

memoriji (C

«M). U bilo kom trenutku, neki podskup blokova memorije nalazi se u redovima u kešu. Ako se 

čita reč u bloku memorije, taj blok se prenosi u jedan od redova keša. S obzirom na to da ima više 
blokova od redova, pojedinačni red ne može da se jedinstveno i trajno dodeli određenom bloku. Prema 
tome, svaki red uključuje 

tag 

koji identifikuje koji određeni blok je trenutno uskladišten. Tag je obično 

deo adrese glavne memorije, što se opisuje kasnije u ovom odeljku.

Na slici 4.5 ilustrovana je operacija čitanja. Procesor generiše adresu, RA, reči koja treba da se 

26

background image

U starijim računarima, najčešća forma skladišta sa slučajnim pristupom za glavnu memoriju računara 
bio je niz prstenasto oblikovanih feromagnetskih petlji, koje su se zvale

 jezgra (engl. cores). Dakle, na 

glavnu memoriju se često pozivalo kao na

  jezgro,  što je termin koji je opstao do danas. Pronalazak 

mikroelektronike i njene prednosti odavno su već istisnule memoriju od magnetskih jezgara. Danas je 
upotreba poluprovodničkih čipova za glavnu memoriju skoro univerzalna. U ovom odeljku se objašnjavaju 
ključni aspekti te tehnologije.

Organizacija

Osnovni element poluprovodničke memorije je memorijska ćelija. Mada se koriste razne elektronske 
tehnologije, sve poluprovodničke memorijske ćelije dele izvesne osobine:

one imaju dva stabilna (ili polustabilna) stanja, koja mogu da se upotrebe kako bi se 
predstavile binarne cifre 1 i 0; 

one su sposobne da se u njih upisuje (bar jednom) kako bi uspostavile stanje; 

one su sposobne da se iz njih čita kako bi se saznalo njihovo stanje.

Na slici 5.1 prikazan je rad memorijske ćelije. Ćelija najčešće ima tri funkcionalna terminala koji su 

u stanju da nose električni signal. Terminalom za izbor, kao što mu ime nagoveštava, bira se memorijska 
ćelija  za   operaciju  čitanja  ili  upisivanja.  Upravljački   terminal   ukazuje   na  čitanje   ili  upisivanje.   Za 
upisivanje, drugi terminal obezbeđuje električni signal kojim se stanje ćelije postavlja na 1 ili O. Za 
čitanje, taj terminal se koristi za izlaz stanja ćelije. Detalji unutrašnje organizacije, funkcionisanja i 
vremenskog usklađivanja memorijske ćelije zavise od specifične upotrebljene tehnologije integrisanih 
kola i izlaze iz domena ove knjige, izuzev u vidu kratkog pregleda. Za naše potrebe, uzećemo kao dato da 
pojedinačne ćelije mogu da se izaberu za operacije čitanja i upisivanja.

DRAM i SRAM

Sve vrste memorija koje ćemo istražiti u ovom poglavlju su sa slučajnim pristupom. To znači da se 
pojedinačnim rečima memorije pristupa direktno, preko ožičene logike za adresiranje.

U tabeli 5.1 navedene su glavne vrste poluprovodničke memorije. Najzastupljenija od njih zove se 

memorija sa slučajnim pristupom, odnosno RAM (engl. random-access memory). To je, naravno, pogrešna 
upotreba   termina   zato   što   su   sve   vrste   navedene   u   tabeli   sa   slučajnim   pristupom.   Jedna   od 
karakteristika kojom se odlikuje RAM memorija je to što se podaci mogu čitati iz memorije i novi podaci 
u nju upisivati, na lak i brz način. I čitanje i upisivanje se postižu upotrebom električnih signala.

Druga posebna karakteristika RAM memorije je da je ona nepostojana. RAM memoriji mora da se 

obezbedi stalno napajanje električnom energijom. Ako se napajanje prekine, podaci se gube. Prema 
tome, RAM memorija može da se upotrebi samo kao privremeno skladište. Dva tradicionalna oblika RAM 
memorije koji se koriste u računarima su DRAM i SRAM memorije.

Dinamička   RAM   memorija

  Tehnologija   RAM   memorija   deli   se   na   dve   tehnologije:   dinamičku   i 

statičku. Dinamička RAM memorija (DRAM) pravi se od ćelija koje skladište podatke kao naelektrisanja 
na kondenzatorima. Prisustvo ili odsustvo naelektrisanja na kondenzatoru interpretira se kao binarna 
cifra 1 ili O. S obzirom na to da kondenzatori imaju prirodnu težnju da se prazne, dinamičke RAM  
memorije zahtevaju periodično osvežavanje naelektrisanja da bi se održalo skladište podataka. Termin 

dinamička  odnosi se na tu težnju uskladištenih podataka da iščeznu, čak i kada je napajanje trajno 
uključeno.

Na  slici   5.2a  prikazana  je  tipična   struktura  DRAM  memorije   za  pojedinačnu   ćeliju  u   kojoj   se 

skladišti jedan bit. Adresna linija se aktivira kada vrednost bita u toj ćeliji treba da se pročita, ili da se 
upiše. Tranzistor radi kao prekidač koji je zatvoren (dozvoljavajući struji da teče) ako se dovede napon 

28

na adresnu liniju, ili otvoren (struja ne teče) ako nema napona prisutnog na adresnoj liniji.

Za operaciju upisivanja, naponski signal se dovodi na liniju bita; visok napon predstavlja 1, a nizak 

napon O. Zatim se signal dovede na adresnu liniju, dozvoljavajući naelektrisanju da se prenese na 
kondenzator.

Za   operaciju   čitanja,   kada   se   izabere   adresna   linija,   tranzistor   se   uključuje   i   naelektrisanje 

uskladišteno u kondenzatoru prenosi se na liniju bita i sens pojačavač. Sens pojačavač poredi napon 
kondenzatora sa referentnom vrednošću i određuje da li ćelija sadrži logičku cifru 1 ili O. Očitavanje 
ćelije prazni kondenzator, koji mora da se obnovi kako bi se završila operacija.

Mada se ćelija DRAM memorije koristi za skladištenje jednog bita (O ili 1), ona je u suštini analogni  

uređaj. Kondenzator može da skladišti bilo koju vrednost naelektrisanja unutar opsega; vrednost praga 
određuje da li se naelektrisanje interpretira kao 1 ili O.

Statička RAM memorija 

Suprotno od toga, statička RAM (SRAM) memorija je digitalni uređaj, koji koristi iste logičke 

elemente kao što su oni koji se upotrebljavaju u procesoru. U SRAM memoriji, binarne vrednosti se 
skladište koristeći konfiguracije tradicionalnih flip-flop logičkih kola (o njima se govori u dodatku B). 
Statička   RAM   memorija   će   držati   svoje   podatke   sve   dok   joj   se   dovodi   napajanje   električnom 
energijom.

Na   slici   5.2b,   prikazana   je   tipična   struktura   SRAM   memorije   za   pojedinačnu   ćeliju.   Četiri 

tranzistora (TI, T2, T3 i T4) su unakrsno povezani, u rasporedu koji proizvodi stabilno logičko stanje. U 
logičkom stanju 1, tačka Cl je na visokom, a tačka C2 na niskom nivou; u tom stanju, T1 i T4 su 
isključeni, a T2 i T3 su uključeni.! U logičkom stanju O, tačka C1 je na niskom, a tačka C2 na visokom 
nivou; u tom stanju, TI i T4 su uključeni, a T2 i T3 su isključeni. Oba stanja su stabilna, sve dok je 
uključen jednosmerni (dc) napon. Za razliku od DRAM memorije, nije potrebno nikakvo osvežavanje da 
bi se zadržali podaci.

Kao i kod DRAM memorije, kod SRAM memorije se koristi adresna linija da bi se otvorio ili zatvorio 

prekidač. Adresna linija upravlja sa dva tranzistora (Ts i T6). Kada se na tu liniju dovede signal, dva 
tranzistora se uključuju, dozvoljavajući operaciju čitanja ili upisivanja. Za operaciju upisivanja, željena 
vrednost bita dovodi se na liniju B, dok se njen komplement dovodi na liniju B. To prisiljava četiri 
tranzistora (TI, T2, T3 i T4) da uđu u odgovarajuće stanje. Za operaciju čitanja, vrednost bita očitava 
se sa linije B.

SRAM prema DRAM memoriji i statička i dinamička RAM memorija su nepostojane; to znači da 

se mora obezbediti trajno napajanje električnom energijom kako bi se očuvale vrednosti bitova. Ćelija 
dinamičke memorije jednostavnija je i manja od ćelije statičke memorije. Dakle, DRAM memorija je 
gušća (manje ćelije = više ćelija po jedinici površine) i jeftinija od odgovarajuće SRAM memorije. S 
druge strane, DRAM memorija zahteva elektronska kola za podršku osvežavanju. Za veće memorije, 
f1ksirana cena kola za osvežavanje je više nego kompenzovana manje promenljivom cenom DRAM ćelija. 
Prema tome, DRAM memorije teže da budu favorizovane kod velikih zahteva za memorijom. Poslednji 
aspekt u ovom razmatranju je činjenica da su SRAM memorije obično brže od DRAM memorija. Zbog 
tih relativnih karakteristika, SRAM memorije se koriste za keš memoriju (kako na čipu, tako i van 
njega), a DRAM memorija za glavnu memoriju.

Vrste ROM memorija

Kao što joj i ime nagoveštava, memorija samo za čitanje 

(read-only memory, ROM) sadrži stalni uzorak 

podataka koji ne može da se menja. ROM memorija je trajna; to znači da se ne zahteva izvor napajanja 

29

background image

sekundi, što je mnogo brže od EPROM memorije. Pored toga, moguće je obrisati samo blokove memorije, 
a ne ceo čip. Fleš memorija dobija svoje ime zato što je čip organizovan tako da se odeljci memorijskih 
ćelija brišu jednostrukom akcijom ili "flešom". Međutim, fleš memorija ne obezbeđuje brisanje na nivou 
bajta. Kao i EPROM memorija, fleš memorija koristi samo jedan tranzistor po bitu i tako postiže veliku 
gustinu EPROM memorije (u poređenju sa EEPROM memorijom).

Poglavlje 6
SPOLJAŠNJA MEMORIJA

U   ovom   poglavlju   ispituje   se   niz   uređaja   i   sistema   spoljašnje   memorije.   Počinjemo   sa   najvažnijim 
uređajem, magnetnim diskom. Magnetni diskovi su temelj spoljašnje memorije u skoro svim računarskim 
sistemima. U sledećem odeljku ispituje se upotreba grupa diskova da bi se postigla bolja performansa, 
sa posebnim osvrtom na familiju sistema poznatih kao RAID (engl.  

Redundant Array of Independent 

Disks,  redundantna   grupa   nezavisnih   diskova).   Spoljašnja   optička   memorija   je   sve   značajnija 
komponenta mnogih računarskih sistema i o tome se govori u trećem delu. Najzad opisuje se magnetna 
traka.

MAGNETNI DISK

Disk   je   kružna  ploča,   konstruisana  od   nemagnetnog  materijala,  koja   se  zove  supstrat,   presvučena 
materijalom koji se može namagnetisati. Supstrat je tradicionalno bio od aluminijuma ili aluminijumske 
legure. U novije vreme, uvedeni su supstrati od stakla. Stakleni supstrat donosi više koristi, uključujući:

poboljšanje uniformnosti površine magnetnog filma da bi se povećala pouzda

nost diska;

značajno smanjenje ukupnih neispravnosti površine da bi se potpomoglo smanjivanje broja 
grešaka čitanja-upisivanja;

sposobnost podrške manjih visina preleta (što se objašnjava kasnije u tekstu); 

bolju čvrstinu da bi se smanjila dinamika diska;

veću sposobnost izdržavanja udara i oštećenja.

Magnetni mehanizmi za čitanje i upisivanje

Podaci se upisuju na disk i posle sa njega izvlače preko provodnog namotaja koji se zove glava; u mnogim 
sistemima postoje dve glave, za čitanje i za upisivanje.

Za vreme operacije čitanja ili upisivanja, glava je stacionarna, dok ploča rotira ispod nje.
Mehanizam za upisivanje koristi činjenicu da elektricitet koji teče kroz namotaj stvara magnetno 

polje. Električni impulsi se šalju u glavu za upisivanje i rezultujući magnetni uzorak se zapisuje na 
površinu ispod glave, sa različitim uzorcima za pozitivne i negativne struje. Sama glava za upisivanje 
napravljena je od materijala koji se lako namagnetiše i u obliku je pravougaonog prstena sa procepom 
duž jedne strane i nekoliko namotaja provodne žice duž suprotne strane (slika 6.1). Električna struja u 
žici indukuje magnetno polje preko procepa koje, sa svoje strane, namagnetiše malu površinu medijuma 
za upisivanje. Menjanje smera struje obrće smer namagnetisanja na medijumu za zapis.

Tradicionalni mehanizam za čitanje koristi činjenicu da magnetno polje, koje se kreće relativno u 

odnosu na namotaj, u njemu stvara električnu struju. Kada površina diska prolazi ispod glave, ona stvara 
struju istog polariteta kao što je ona koja je već zapisana. Struktura glave za čitanje je u tom slučaju u 
suštini ista kao i ona za upisivanje i stoga ista glava može da se koristi za obe operacije. Takve 
jednostruke glave koriste se za sisteme fleksibilnih disketa i za starije sisteme čvrstih diskova.

Savremeni sistemi čvrstih diskova koriste drugačiji mehanizam za upisivanje, koji zahteva posebnu 

31

glavu za čitanje, zbog pogodnosti postavljenu u blizini glave za upisivanje. Glava za čitanje sastoji se od 
delimično oklopljenog magnetno-otpornog (MR) senzora.  

MR  

materijal ima električnu otpornost koja 

zavisi   od   smera   namagnetisanja   medijuma   koji   se   kreće   ispod   njega.   Proticanjem   struje   kroz  

MR 

senzor,   otkrivaju   se   promene   otpornosti   kao   naponski   signali.  

MR  

dizajn   dozvoljava   rad   na   višim 

frekvencijama, što znači veće gustine skladišta i brzine rada.

Organizacija i formatiranje podataka

Glava je relativno mali uređaj, sposoban za čitanje iz dela ploče koja rotira ispod njega, ili za upisivanje 
u taj deo ploče. To postavlja pitanje organizacije podataka na ploči u koncentričnom skupu prstenova 
koji se zovu staze. Svaka staza je iste širine kao i glava. Postoje hiljade staza na površini diska.

Na   slici   6.2   prikazan   je   taj   raspored   podataka.   Susedne   staze   razdvojene   su   razmacima.   To 

sprečava, ili u najmanju ruku minimizuje greške zbog razdešenosti glave ili jednostavne interferencije 
magnetnih polja.

Podaci se prenose na disk i sa njega u sektorima (slika 6.2). Postoje na stotine sektora po stazi i 

mogu da budu fiksne ili promenljive dužine. U većini savremenih sistema, koriste se sektori fiksne 
dužine, gde je 512 bajtova skoro univerzalna veličina sektora. Da bi se izbeglo postavljanje nerazumnih 
zahteva za preciznošću pred sistem, susedni sektori se razdvajaju razmacima između sektora i između 
staza.

Disk koji rotira prolazi fiksiranu tačku (kao što je glava za čitanje-upisivanje) sporije nešto bliže 

centru rotacije nego nešto dalje od njega. Prema tome, mora da se pronađe neki način da se kompenzuje 
promenljivost  brzine   tako  da   glava   može  da  čita   sve  bitove   istom   brzinom.  To  može  da  se  uradi 
povećavanjem razmaka između bitova informacije zapisane li segmentima diska. Informacija onda može 
da se skenira istom brzinom rotacijom diska fiksiranom brzinom, poznatom kao  

konstantna ugaona 

brzina 

(constant angular velocity, CAV). Na slici 6.3a prikazan je nacrt diska koji koristi CAV. Disk je 

podeljen na izvestan broj sektora i niz koncentričnih staza. Prednost korišćenja CAV-aje u tome što 
pojedinačni blokovi podataka mogu direktno da se adresiraju po stazi i sektoru. Da bi se glava pomerila 
sa svoje trenutne pozicije na specifičnu adresu, potreban je samo kratak pokret glave na određenu 
stazu i kratko vreme da se odgovarajući sektor obrne do mesta ispod glave. Nedostatak CAV-a je to što 
je količina podataka koja može da se uskladišti na dužim spo!jašnjim stazama ista kao i ona koja može da 
se uskladišti na kraćim unutrašnjim stazama.

Zbog   gustine,   u   bitovima   po   linearnom   in   ču,   povećanja   u   kretanju   od   najspoljašnjije   do 

najunutrašnjije staze, kapacitet skladišta diska u direktnom CAV sistemu ograničen je maksimalnom 
gustinom zapisivanja koja može da se postigne na najunutrašnjijoj stazi. Da bi se povećala gustina, 
savremeni sistemi čvrstih diskova koriste tehniku koja je poznata kao zapisivanje u više zona, gde je 
površina podeljena na izvestan broj koncentričnih zona (obično 16). Zone koje su dalje od centra sadrže 
više bitova (više sektora) od onih koje su mu bliže. To dozvoljava veći ukupan kapacitet skladišta po cenu 
nešto složenijih elektronskih kola. Kako se glava diska pomera sa jedne zone na drugu, dužina (po stazi) 
pojedinačnih bitova se menja, što prouzrokuje prornenu u vremenu za čitanje i upisivanje. Na slici 6.3b 
nagoveštava se struktura zapisivanja u više zona; na toj ilustraciji, svaka zona je širine samo jedne 
staze.

Potrebno   je   neko   sredstvo   da   bi   se   locirale   pozicije   sektora   unutar   staze.   Jasno   je   da   mora 

postojati neka polazna tačka na stazi i način kako da se identifikuju početak i kraj svakog sektora. Ti 
zahtevi se opslužuju pomoću upravljačkih podataka zapisanih na disku. Prema tome, disk je formatiran 
sa nekim dodatnim podacima koje koristi samo uređaj diska i koji nisu dostupni korisniku.

Primer formatiranja diska prikazan je na slici 6.4. U tom slučaju, svaka staza sadrži 30 sektora 

32

background image

Kao zanimljivu istorijsku činjenicu, napominjemo da je termin Winchester prvobitno koristila firma 

IBM

 

kao šifrovano ime za model diska 3340 pre njegovog uvođenja. Model 3340 bio je izmenljivi paket 

diskova sa glavama zatopljenim u pakovanju. Termin se sada primenjuje na bilo koju zatopljenu jedinicu 
diskova   sa   aerodinamičkom   konstrukcijom   glave.   Winchester   disk   se   obično   nalazi   ugrađen   u 
personalnim računarima i radnim stanicama, gde se naziva 

čvrstim diskom.

Parametri performanse diskova

Stvarni detalji U/I operacije diska zavise od računarskog sistema, operativnog sistema i prirode U/I 
kanala i hardvera kontrolera diska. Opšti vremenski dijagram U/I prenosa diska prikazan je na slici 6.7.

Kada uređaj diska radi, disk rotira konstantnom brzinom. Da bi čitala ili upisivala, glava mora da se 

postavi na željenu stazu i na početak željenog sektora na stazi. Izbor staze obuhvata pomeranje glave u 
sistemu sa pokretnom glavom, ili elektronski izbor jedne od glava u sistemu sa fiksnim glavama. U 
sistemu sa pokretnom glavom, vreme koje je potrebno da bi se glava postavila na stazu zove se vreme 
pozicioniranja (engl. 

seek time). U oba slučaja, jednom kada se staza izabere, kontroler diska čeka dok 

se odgovarajući sektor ne obrne da bi se poravnao sa glavom. Vreme koje je potrebno da bi početak 
sektora   stigao   do   glave   zove   se   rotaciono   kašnjenje   (engl.  

Rotational   latency).  Zbir   vremena 

pozicioniranja, ako ga ima, i rotacionog kašnjenja daje vreme pristupa, koje predstavlja vreme potrebno 
da se dođe na položaj za čitanje ili upisivanje. Kada je glava na tom položaju, izvodi se operacija čitanja 
ili upisivanja kako se sektor pomera ispod glave; to je deo prenosa podataka operacije; vreme potrebno 
za prenos je vreme prenosa.

Pored   vremena   pristupa   i   vremena   prenosa,   postoji   više   kašnjenja   čekanja   koja   se   normalno 

pridružuju U/I operaciji diska. Kada proces izda U/I zahtev, on mora prvo da čeka u redu da mu se 
uređaj stavi na raspolaganje. U tom trenutku, uređaj se dodeljuje procesu. Ako uređaj deli jedan U/I 
kanal ili skup U/I kanala sa drugim uređajima diskova, onda može doći do dodatnog čekanja da kanal 
bude raspoloživ. U tom trenutku izvodi se pozicioniranje da bi počeo pristup disku.

U   nekim   vrhunskim   sistemima   za   servere,   koristi   se   tehnika   poznata   kao   rotaciono   poziciono 

detektovanje   (RPS).   Ona   radi   na   sledeći   način:   kada   se   izda   komanda   za   pozicioniranje,   kanal   se 
oslobađa da bi opslužio druge U/I operacije. Kada se pozicioniranje završi, uređaj određuje kada će 
podatak rotirati ispod glave. Kako se taj sektor približava glavi, uređaj pokušava da ponovo uspostavi 
komunikacionu putanju nazad ka hostu. Ako su upravljačka jedinica ili kanal zauzeti drugim U/I, onda 
pokušaj ponovnog uspostavljanja veze ne uspeva i uređaj mora da rotitra još jedan ceo obrtaj pre nego 
što može da pokuša ponovno povezivanje, što se zove RPS promašaj. To je dodatni element kašnjenja koji 
mora da se sabere sa vremenima na slici 6.7.

Vreme pozicioniranja  

Vreme pozicioniranja je vreme potrebno da se ručica diska pomeri na 

zahtevanu   stazu.   Ispostavlja   se   da   je   to   veličina   koju   je   teško   staviti   u   određen   okvir.   Vreme 
pozicioniranja   sastoji   se   od   dve   ključne   komponente:   početnog   vremena   startovanja   i   vremena 
potrebnog za prelazak staza koje treba da se prođu jednom kada je pristupna ručica postigla svoju 
brzinu. Nažalost, vreme prelaska nije linearna funkcija broja staza, nego obuhvata vreme uspostavljanja 
(vreme od pozicioniranja glave iznad ciljne staze dok se ne potvrdi identifikacija staze).

Mnogo poboljšanja dolazi od manjih i lakših komponenata diskova. Pre nekoliko godina, tipičan disk 

bio je prečnika 14 inča (36 cm), dok je danas najzastupljenija veličina od 3,5 inča (8,9 cm), što 
smanjuje rastojanje koje treba da pređe ručica. Tipično vreme pozicioniranja na savremenim čvrstim 
diskovima je ispod 10 ms.

Rotaciono kašnjenje 

Diskovi različiti od fleksibilnih disketa, rotiraju brzinama koje se kreću od 

34

3600 o/min (za ručne uređaje, kao što su digitalne kamere) do, u trenutku pisanja ovog teksta, 15000 
o/min; pri ovoj poslednjoj brzini, imamo jedan obrtaj na 4 ms. Dakle, u proseku, rotaciono kašnjenje biće 
2 ms. Fleksibilne diskete tipično rotiraju između 300 i 600 o/min. Prema tome, prosečno kašnjenje će 
biti između 100 i 50 ms.

Vreme prenosa  

Vreme prenosa na disk ili sa njega zavisi od brzine rotacije diska na sledeći 

način:
T=b/N gde je

T = vreme prenosa

b = broj bajtova koji treba da se prenesu 

N = broj bajtova na stazi

r = brzina rotacije, u obrtajima po sekundi

Prema tome, ukupno srednje vreme pristupa može da se izrezi kao

Ta =Ts +1/2r+/rN

gde je  

T,  prosečno vreme pozicioniranja. Zapazite da je na zoniranom uređaju broj bajtova po stazi 

promenljiv, što usložnjava proračun.

Vremensko   poređenje  

Sada,   kada   smo   definisali   prethodne   parametre,   razmotrićemo   dve 

različite U/I operacije koje ilustruju opasnost od oslanjanja na srednje vrednosti. Zamislite disk sa 
objavljenim srednjim vremenom pozicioniranja od 4 ms, brzinom rotacije od 15000 o/min i 5l2-bajtnim 
sektorima, sa 500 sektora po stazi. Pretpostavite da želimo da čitamo datoteku koja se sastoji od 2500 
sektora, što je ukupno 1,28 MB. Hteli bismo da procenimo ukupno vreme za prenos.

Pretpostavimo najpre da je datoteka uskladištena na disku što je moguće kompaktnije. To znači da 

datoteka zauzima sve sektore na 5 susednih staza (5 staza x 500 sektora/stazi = 2500 sektora): to je 
poznato kao  

sekvencijalna organizacija.  Vreme potrebno za čitanje prve staze računa se na sledeći 

način:
Prosečno pozicioniranje 

4ms

Prosečno rotaciono kašnjenje 

2ms

Čitanje 500 sektora

4ms

-------
10 ms

Pretpostavite da preostale staze sada mogu da se čitaju u suštini bez vremena pozicioniranja. To znači 
da U/I operacija može da nastavi sa tokom podataka sa diska. Onda, u najgorem slučaju, imamo posla sa 
rotacionim kašnjenjem za svaku narednu stazu. Na taj način, svaka naredna staza se čita u 2 + 4 = 6 ms. 
Da bi se pročitala cela datoteka, potrebno je

Ukupno vreme = 10 + (4 x 6) = 34 ms = 0,034 sekunde.

Hajde sada da izračunamo vreme koje se zahteva za čitanje istih podataka kada se koristi slučajni, 

a ne sekvencijalni pristup; to znači da su pristupi sektorima slučajno raspodeljeni po disku. Za svaki 
sektor imamo
Prosečno pozicioniranje 

4ms

Rotaciono kašnjenje 

2ms

Čitanje jednog sektora

0,008 ms

6,008 ms

Ukupno vreme = 2500 x 6,008 = 15020 ms = 15,02 sekundi.

Jasno je da redosled u kome se sektori čitaju sa diska ima ogroman uticaj na U/I performansu. U 

slučaju pristupa datoteci u kome se više sektora čita ili u njih upisuje, imamo neku kontrolu nad načinom 

35

background image

vidimo kao U/I uređaje, dok smo ih u poglavlju posmatrali kao memorijske uređaje. Sa tačke gledišta 
funkcije, ti uređaji su deo memorijske hijerarhije i o njihovoj upotrebi se na odgovarajući način govori 
u poglavlju 6. Sa tačke gledišta strukture, tim uređajima upravljaju U/I moduli i zato se razmatraju u 
ovom poglavlju.

Komunikacioni uređaji omogućavaju računaru da razmenjuje podatke sa udaljenim uređajima, koji 

mogu biti čitljivi za ljude kao što je terminal, čitljivi za mašine, ili čak i drugi računar.

Veoma uopšteno, priroda spoljašnjeg uređaja prikazana je na slici 7.2. Interfejs prema U/I modulu 

je u obliku signala za upravljanje, podatke i stanje. 

Upravljački signali određuju funkciju koju će uređaj 

izvršavati, kao što je slanje podataka U/I modulu (INPUT ili READ), prihvatanje podataka iz U/I modula 
(OUTPUT ili WRITE), izveštavanje o stanju ili izvođenje neke upravljačke funkcije specifične za uređaj 
koji je u pitanju (na primer, pozicioniranje glave diska). Podaci

 su u obliku skupa bitova koji treba da se 

šalju ili primaju iz U/I modula. 

Signali stanja ukazuju na stanje uređaja. Primeri su READY/NOT-READY 

koji pokazuju da li je uređaj spreman za prenos podataka.

Upravljačka logika  pridružena uređaju upravlja radom uređaja, kao odzivom na naredbu iz U/I 

modula. 

Pretvarač pretvara podatke iz električnog u druge oblike energije za vreme izlaza i iz drugih 

oblika u električni za vreme ulaza. Tipično, pretvaraču se pridružuje bafer za privremeno držanje 
podataka koji se prenose između U/I modula i spoljašnjeg okruženja; uobičajena veličina bafera je od 8 
do 16 bitova.

Interfejs između U/I modula i spoljašnjeg uređaja će se ispitati u odeljku 7.7. Interfejs između 

spoljašnjeg uređaja i okruženja je izvan domena ove knjige, ali se daje nekoliko kratkih primera.

Tastatura/monitor

Najzastupljenije   sredstvo   za   interakciju   računara   i   korisnika   jeste   aranžman   tastatura/monitor. 
Korisnik daje ulaz preko tastature. Taj ulaz se onda prenosi u računar i može takođe da se prikazuje na 
monitoru. Pored toga, monitor prikazuje podatke koje obezbeđuje računar.

Osnovna jedinica razmene je znak. Svakom znaku pridružen je kod, dužine tipično 7 ili 8 bitova. 

Najčešće   korišćen   tekstualni   kod   je   međunarodna   referentna   azbuka  

(International   Reference 

Alphabet,  IRA). Svaki znak u tom kodu predstavlja se jedinstvenim 7-bitnim binarnim kodom; dakle, 
može se predstaviti 128 različitih znakova. U tabeli 7.1 navedene su sve vrednosti kodova. U toj tabeli, 
bitovi svakog znaka označeni su od b , koji je najznačajniji bit, do bi, koji je najmanje značajan bit. 
Postoje dve vrste znakova: za štampanje i upravljački (tabela 7.2). Znakovi za štampanje su slovni, 
numerički i specijalni znakovi koji mogu da se štampaju na hartiji ili prikazuju na ekranu. Na primer, 
predstava znaka "K" je b7b6b5b4b3b2b1 = 1001011. Neki od upravljačkih znakova moraju da se bave 
upravljanjem štampanjem ili prikazivanjem znakova; primer je znak za povratak na novi red. Drugi 
upravljački znakovi se staraju o komunikacionim procedurama.

IRA 

je definisana u ITU-T Preporuci T.50 i bila je prvo poznata kao Međunarodna azbuka 5 (IA5). 

Nacionalna verzija SAD IRA-e zove se American Standard Code for Information Interchange (ASCII).

IRA-kodovani znakovi se skoro uvek skladište i predaju koristeći 8 bitova po znaku. Osmi bit je za 

parnost i koristi se za otkrivanje greške. 

Bit 

parnosti je najznačajniji bit i zato se označava sa b,.

Kod   unosa   sa   tastature,   kada   korisnik   pritisne   taster,   on   generiše   elektronski   signal   koga 

interpretira pretvarač tastature i prevodi ga u uzorak bitova odgovarajućeg koda IRA. Taj uzorak 
bitova se zatim prenosi do U/I modula u računaru. U računaru, tekst može da se skladišti u istom kodu 
IRA. Na izlazu, kodovi IRA se prenose ka spoljašnjem uređaju iz U/I modula. Pretvarač u uređaju 
interpretira taj kod i šalje traženi elektronski signal u izlazni uređaj da bi prikazao ukazani znak ili da 
bi izveo zahtevanu upravljačku funkciju.

37

Uređaj diska

Uređaj diska sadrži elektroniku za razmenu signala podataka, upravljanja i stanja sa U/I modula, plus 
elektroniku   za   upravljanje   mehanizmom   diska   za   čitanje/upisivanje.   U   disku   sa   fiksnom   glavom, 
pretvarač je sposoban da konvertuje podatke između magnetnih uzoraka na površini diska i bitova u 
baferu   uređaja   (slika   7.2).   Disk   sa   pokretnom   glavom   mora   takođe   biti   sposoban   da   prouzrokuje 
kretanje ručice diska radijaIno preko površine diska.

7.2 U/I MODULI
Funkcija modula

Glavne funkcije ili zahtevi za U/I modul spadaju u sledeće kategorije:

upravljanje i vremensko usklađivanje;

komunikacija procesora;

komunikacija uređaja;

baferovanje podataka;

otkrivanje grešaka.

U   bilo   kom   trenutku,   procesor   može   da   komunicira   sa   jednim   ili   više   spoljašnjih   uređaja   po 

nepredvidivim uzorcima, u zavisnosti od potreba programa za ulazom/izlazom.

Unutrašnji resursi, kao što su glavna memorija i sistemska magistrala, moraju da se dele između više 

aktivnosti, uključujući U/I podataka. Prema tome, funkcija U/I uključuje zahtev za upravljanjem i 
vremenskim uskladivanjem da bi upravljala tokom saobraćaja između unutrašnjih resursa i spoljašnjih 
uređaja. Na primer, upravljanje prenosom podataka od spoljašnjeg uređaja do procesora bi moglo da 
obuhvati sledeći niz postupaka:
1. Procesor ispituje U/I modul da bi proverio stanje priključenog uređaja.
2. U/I modul vraća stanje uređaja.
3. Ako je uređaj operativan i spreman da predaje, procesor zahteva prenos podataka, pomoću komande 
U/I modulu.
4. U/I modul dobija jedinicu podataka (odnosno, 8 ili 16 bitova) od spoljašnjeg uređaja. 
5. Podaci se prenose od U/I modula do procesora.

Ako sistem koristi magistralu, onda svaka od interakcija između procesora i U/I modula obuhvata 

jedno ili više arbitriranja magistrale.

Prethodni pojednostavljeni scenario takođe ilustruje da U/I modul mora da komunicira sa 

procesorom i sa  spoljašnjim uređajem. Komunikacija procesora obuhvata sledeće:

Dekodovanje komande: U/I modul prihvata komande od procesora, koje se tipično šalju kao 
signali na upravljačkoj magistrali. Na primer, U/I modul za uređaj diska bi mogao da prihvati 
sledeće komande: READ SECTOR, WRITE SECTOR, SEEK broj staze, i SCAN zapis ID. 
Svaka od poslednje dve komande uključuje parametar koji se šalje na magistralu podataka.

Podaci

: podaci se razmenjuju između procesora i U/I modula preko magistrale

podataka.

Izveštavanje o stanju:

 s obzirom na to da su periferijski uređaji tako spori, važno je znati 

stanje U/I modula. Na primer, ako se od U/I modula traži da pošalje podatke procesoru 
(čitanje), on može biti nespreman da to uradi zato što još uvek radi na prethodnoj U/I 
komandi. O toj činjenici može da se izvesti pomoću signala stanja. Uobičajeni signali stanja 
su BUSY i READY. Mogu takođe da postoje signali za izveštavanje o raznim uslovima grešaka.

Prepoznavanje adrese:

 baš kao što svaka reč memorije ima adresu, to važi i za svaki U/I 

uređaj.   Zbog   toga   U/I   modul   mora   da   prepozna   jednu   jedinstvenu   adresu   za   svaki 
periferijski uređaj kojim upravlja.

38

background image

7.3 

PROGRAMIRANI 

U/I

Za   U/I   operacije   moguće   su   tri   tehnike.   Kod  

programiranog   U/I,  podaci   se   razmenjuju   između 

procesora   i   U/I   modula.   Procesor   izvršava   program   koji   mu   daje   direktno   upravljanje   nad   U/I 
operacijom, uključujući otkrivanje stanja uređaja, slanje komandi za čitanje ili upisivanje i prenošenje 
podataka. Kada procesor izda komandu U/I modulu, on mora da čeka dok se ne završi U/I operacija. Ako 
je procesor brži od U/I modula, to je čisto gubljenje procesorskog vremena. Kod  

U/I uprav/janog 

prekidima,  procesor izdaje U/I komandu i nastavlja da izvršava druge instrukcije, a U/I modul ga 
prekida kada završi svoj posao. I kod programiran og U/I i kod U/I upravljanog prekidima, procesor je 
odgovoran   za   izvlačenje   podataka   iz   glavne   memorije   radi   izlaza   i   skladištenje   podataka   u   glavnu 
memoriju radi ulaza. Alternativa je poznata kao 

direktan pristup memoriji (DMA). U tom režimu, U/I 

modul i glavna memorija razmenjuju podatke direktno, bez učešća procesora.

U tabeli 7.3 prikazan je odnos između te tri tehnike. U ovom odeljku, istražujemo programirani U/I. 

U/I sa prekidima i DMA ćemo ispitati u sledeća dva odeljka, respektivno.

Pregled programiranog U/I

Kada procesor izvršava program i naiđe na instrukciju koja se odnosi na U/I, on je izvršava izdajući 
komandu za odgovarajući U/I modul. Kod programiran og U/I, U/I modul će izvesti zahtevanu akciju i 
zatim postaviti odgovarajuće bitove u U/I registru stanja (slika 7.3). U/I modul ne preduzima nikakvu 
dalju akciju da bi uzbunio procesor. Posebno, on ne prekida procesor. Prema tome, na procesoru je 
odgovornost da periodično proverava stanje U/I modula dok ne otkrije da je operacija završena.

Da bismo objasnili tehniku programiranog U/I, sagledaćemo je prvo sa tačke gledišta U/I komandi 

koje procesor izdaje U/I modulu, a zatim sa tačke gledišta U/I instrukcija koje izvršava procesor.

U/I komande

Da bi izvršio instrukciju u vezi sa U/I, procesor izdaje adresu, koja određuje poseban U/I modul i 
spoljašnji uređaj, i U/I komandu. Postoje četiri vrste U/I komandi koje U/I modul može da primi kada 
ga adresira procesor:

Upravljanje: 

koristi se za aktiviranje periferijskog uređaja i da mu se kaže šta da radi. Na 

primer,  jedinici   magnetne   trake   može  da  se  dostavi   instrukcija   da  premota,   ili  po  meri 
unapred za jedan zapis. Te komande su prilagođene za posebnu vrstu periferijskog uređaja.

Test:

 koristi se za ispitivanje uslova stanja pridruženih U/I modulu i njegovim periferijskim 

uređajima.   Procesor   će   želeti   da   zna   da   je   periferijski   uređaj   od   interesa   uključen   i 
raspoloživ za upotrebu. On će takođe želeti da zna da li je najskorija U/I operacija završena 
i da li se dogodila bilo kakva greška.

Čitanje: 

prouzrokuje da U/I modul dobije stavku podataka sa periferijskog uređaja i smesti 

je u unutrašnji bafer (opisan kao registar podataka na slici 7.3). Procesor zatim može da 
dobije stavku podataka zahtevanjem daje U/I modul postavi na magistralu podataka.

Upisivanje:  

prouzrokuje da U/I modul uzme stavku podataka (bajt ili reč) sa magistrale 

podataka i posle je prenese na periferijski uređaj.

Na   slici   7.4a   dat   je   primer   upotrebe   programiranog   U/I   za   učitavanje   bloka   podataka   sa 

periferijskog uređaja u memoriju (na primer, zapis sa trake). Podaci se čitaju po jedna reč (odnosno 16 
bitova) istovremeno. Za svaku reč koja se pročita, procesor mora da ostane u ciklusu provere stanja 
dok ne odredi da je reč raspoloživa u registru podataka U/I modula. Taj dijagram toka ističe glavni 
nedostatak te tehnike: to je proces koji troši vreme i bez potrebe zapošljava procesor.

40

U/I instrukcije

Kod programiranog U/I, postoji bliska korespondencija između instrukcija koje se odnose na U/I koje 
procesor donosi iz memorije i U/I komandi koje procesor izdaje U/I modulu da izvrši instrukcije. 
Odnosno, instrukcije se lako preslikavaju u U/I komande i među njima često postoji odnos jedan prema 
jedan. Oblik instrukcija zavisi od načina na koji se spoljašnji uređaji adresiraju.

Tipično, biće mnogo U/I uređaja povezanih sa sistemom preko U/I modula. Svakom uređaju dat je 

jedinstven   identifikator   ili   adresa.   Kada   procesor   izda   U/I   komandu,   ona   sadrži   adresu   željenog 
uređaja. Prema tome, svaki U/I modul mora da interpretira adresne linije kako bi odredio da li je 
komanda za njega.

Kada procesor, glavna memorija i U/I dele zajedničku magistralu, moguća su dva načina adresiranja: 

memorijski preslikan i izolovan. Kod  

memorijski preslikanog  

U/I, postoji jedan adresni prostor za 

memorijske lokacije i U/I uređaje. Procesor postupa sa registrima stanja i podataka U/I modula kao sa 
memorijskim lokacijama i koristi iste mašinske instrukcije da bi pristupao i memoriji i U/I uređajima. 
Tako, na primer, sa 10 adresnih linija, kombinovanih ukupno 210 = 1024 memorijskih lokacija i U/I 
adresa može da se podrži u bilo kakvoj kombinaciji.

Kod memorijski preslikanog U/I, na magistrali su potrebne jedna linija za čitanje i jedna linija za 

upisivanje. Alternativno, magistrala može da se opremi linijom za čitanje i upisivanje u memoriju i 
upravljačkom linijom za ulaz i izlaz. U tom slučaju, upravljačka linija određuje da li se adresa odnosi na 
memorijsku lokaciju ili na U/I uređaj. Celokupan adresni opseg može da bude na raspolaganju i jednom i 
drugom. Opet, sa 10 adresnih linija, sistem sada može da podržava i 1024 memorijske lokacije i 1024 
U/I adrese. To se zove 

izolovani 

U/I zato što je adresni prostor za U/I izolovan od onog za memoriju.

Na slici 7.5 suprotstavljene su te dve tehnike programiranog U/I. Na slici 7.5a pokazano je kako 

interfejs za jednostavan U/I uređaj, kao što je tastatura, može da izgleda programeru koji koristi 
memorijski preslikan U/I. Pretpostavite 10-bitnu adresu sa 512-bajtnom memorijom (lokacije od 0 do 
511) i do 512 U/I adresa (lokacije 5121023). Dve adrese namenjene su za ulaz tastature sa određenog 
terminala. Adresa 516 odnosi se na registar podataka, a adresa 517 na registar stanja, koji takođe 
funkcioniše kao upravljački registar za primanje komandi od procesora. Prikazani program će učitati 1 
bajt podataka sa tastature u akumulatorski registar u procesoru. Skrećemo vam pažnju da je procesor 
u petlji sve dok bajt podataka ne bude raspoloživ.

Kod izolovanog U/I (slika 7.5b, U/I portovima se može pristupiti samo pomoću specijalnih U/I 

komandi, koje aktiviraju U/I komandne linije na magistrali.

Za većinu procesora, postoji relativno veliki skup različitih instrukcija za referenciranje memorije. 

Ako se koristi izolovani U/I, postoji samo mali broj U/I instrukcija. Prema tome, prednost memorijski 
preslikanog  U/I   je   u  tome  što  može   da  se  koristi  taj  veliki   repertoar  instrukcija,  što  dozvoljava 
efikasnije programiranje. Nedostatak je što se rasipa dragoceni memorijski prostor. Često se koriste i 
memorijski preslikan i izolovani U/I.

7.4 U/I

 

UPRAVLJAN PREKIDIMA

Problem kod programiranog U/I je u tome što procesor treba vrlo dugo da čeka kako bi U/I modul 

koji je u pitanju bio spreman, bilo za prijem bilo za predaju podataka.

Dok čeka, procesor mora više puta da ispituje stanje U/I modula. Rezultat je ozbiljno degradirana 

performansa celog sistema.

Alternativa za procesor je da izda U/I komandu modulu i onda ode da radi neki drugi koristan posao. 

U/I modul će onda prekinuti procesor da bi zahtevao uslugu kada bude spreman za razmenu podataka sa 
procesorom.   Procesor   onda   izvršava   prenos   podataka,   kao   i   pre,   a   zatim   nastavlja   sa   prethodnom 

41

background image

se na sistemskom steku. Međutim, postoje i druge informacije koje se smatraju delom 
"stanja" programa koji se izvršava. Posebno, treba da se zapamti sadržaj procesorskih 
registara   zato   što   te   registre   može   da   koristi   i   opsluživač   prekida.   Dakle,   sve   te 
vrednosti,   plus   svaka   druga   informacija   o   stanju,   treba   da   se   memorišu.   Tipično, 
opsluživač prekida će početi sa memorisanjem sadržaja svih registara na steku. Na slici 
7.7a prikazan je jednostavan primer. U tom slučaju, korisnički program se prekida posle 
instrukcije na lokaciji 

N. Sadržaj svih registara, plus adre~a sledeće instrukcije (N + I), 

stavljaju se na stek. Pokazivač steka se ažurira da pokazuje na vrh steka, a programski 
brojač da pokazuje na početak rutine za opsluživanje prekida.

Opsluživač prekida zatim obrađuje prekid. To obuhvata ispitivanje informacija o stanju 
koje se odnose na U/I operaciju ili drugi događaj koji je prouzrokovao prekid. To može da 
obuhvati i slanje dodatnih komandi ili potvrda U/I uređaju.

Kada   se   obrada   prekida   završi,   sačuvane   vrednosti   registara   se   uzimaju   sa   steka   i 
obnavljaju u registrima (slika 7.7b).

Konačni čin je obnavljanje vrednosti PSW i programskog brojača sa steka. Rezultat je da 
će sledeća instrukcija koja treba da se izvrši biti iz prethodno prekinutog programa.

Važno   da   se   sačuvaju   sve   informacije   stanja   prekinutog   programa   radi   njegovog   kasnijeg 

nastavljanja. To je zato što prekid nije rutina koja se poziva iz programa. Prekid može da se pojavi u 
bilo kom trenutku i stoga na bilo kom mestu izvršenja korisničkog programa. Njegovo pojavljivanje je 
nepredvidivo. Zaista, kao što ćemo videti u sledećem poglavlju, dva programa ne moraju imati ništa 
zajedničko i mogu pripadati različitim korisnicima.

Pitanja projektovanja

Prilikom implementiranja U/I, postavljaju se dva pitanja projektovanja. Prvo, kako procesor određuje 
koji uređaj je izdao prekid, s obzirom na to da će skoro uvek postojati više U/I modula? I drugo, ako se 
pojavilo više prekida, kako procesor odlučuje koji od njih da obradi?

Prvo ćemo razmotriti identifikaciju uređaja. Uobičajeno se koriste četiri opšte kategorije tehnika:

više linija prekida;

softversko prozivanje;

zrakasto ulančavanje (hardversko prozivanje, vektorsko); 

arbitraža magistrale (vektorska).

Najdirektniji pristup problemu je da se obezbedi više linija prekida između procesora i U/I modula. 

Međutim, nije praktično nameniti više od nekoliko linija magistrale ili pinova procesora za linije prekida. 
Zbog toga, čak i ako se koriste višestruke linije, verovatno će na svaku liniju biti priključeno više U/I 
modula. Prema tome, jedna od druge tri tehnike mora da se upotrebi na svakoj liniji.

Jedna od alternativa je softversko prozivanje. Kada procesor otkrije prekid, on skoči u rutinu za 

opsluživanje prekida čiji je posao da prozove svaki od U/I modula kako bi odredila koji modul je 
prouzrokovao prekid. Prozivanje može da bude u obliku posebnog reda komande (na primer, TESTU/I). 
U tom slučaju, procesor podiže TESTU /1 i postavlja adresu određenog U/I modula na adresne linije. 
U/I modul odgovara pozitivno ako je on postavio prekid. Alternativno, svaki modul bi mogao da sadrži 
adresibilni registar stanja. Procesor onda čita registar stanja svakog modula da bi identifikovao modul 
koji je postavio prekid. Jednom kada se pravi modul identifikuje, procesor skače u rutinu uređaja, 
specifičnu za taj uređaj.

Nedostatak softverskog prozivanja je u tome što troši mnogo vremena. Efikasnija tehnika je da se 

upotrebi zrakasto ulančavanje, koje u stvari obezbeđuje hardversko prozivanje. Primer konfiguracije 

43

zrakastog ulančavanja prikazan je na slici 3.26. Za prekide, svi U/I moduli dele zajedničku liniju za 
zahtev prekida. Linija za potvrdu prekida je zraka sto ulančana kroz module. Kada procesor otkrije 
prekid, on šalje potvrdu prekida. Taj signal se prostire kroz nizove U/I modula dok ne stigne do modula 
koji je postavio zahtev. Taj modul tipično odgovara postavljanjem reči na linije podataka. Ta reč se 
zove  

vektor  i predstavlja adresu U/I modula ili neki drugi jedinstveni identifikator. U oba slučaja, 

procesor koristi vektor kao pokazivač na odgovarajuću rutinu za uslugu uređaju. Tako se izbegava 
potreba da se prvo izvrši opšta rutina za opsluživanje prekida. Ta tehnika se zove 

vektorski prekid.

Postoji druga tehnika koja koristi vektorske prekide, a to je arbitraža magistrale. Kod arbitraže 

magistrale, U/I modul mora prvo da dobije upravljanje nad magistralom pre nego što podigne signal na 
liniji za zahtev prekida. Prema tome, samo jedan modul može da podigne tu liniju istovremeno. Kada 
procesor otkrije prekid, on odgovara preko linije za potvrdu prekida. Zahtevajući modul onda postavlja 
svoj vektor na linije podataka.

Gore pomenute tehnike služe da se identifikuje U/I modul koji je postavio zahtev. One takođe 

obezbeđuju način dodeljivanja prioriteta kada više od jednog uređaja zahteva uslugu prekida. Kod 
višestrukih linija, procesor samo izabere liniju sa najvišim prioritetom. Kod softverskog prozivanja, 
redosled   u   kome   se   moduli   prozivaju   određuje   njihov   prioritet.   Slično   tome,   redosled   modula   u 
zrakastom   ulančavanju   određuje   njihov   prioritet.   Najzad,   arbitraža   magistrale   može   da   upotrebi 
prioritetnu šemu, o čemu se govori u odeljku 3.4.

Poglavlje 8

PODRŠKA OPERATIVNOG SISTEMA

Mada se u ovoj knjizi govori uglavnom o računarskom hardveru, postoji jedna oblast softvera kojom 
treba da se bavimo: operativni sistem računara. Operativni sistem je program koji upravlja resursima 
računara, pruža usluge programerima i  raspoređuje izvršavanje drugih  programa.  Da bi  se shvatili 
mehanizmi   pomoću   kojih   centralna   procesorska   jedinica   upravlja   računarskim   sistemom,   važno   je 
izvesno   poznavanje   operativnih   sistema.   Posebno,   efekti   prekida   i   upravljanje   memorijskom 
hijerarhijom najbolje se objašnjavaju u tom kontekstu.

U najvećem delu poglavlja razmatraju se dve funkcije operativnog sistema koje su najbitnije za 

proučavanje organizacije i arhitekture računara: raspoređivanje i upravljanje memorijom.

8.1 PREGLED OPERATIVNOG SISTEMA

Ciljevi i funkcije operativnog sistema
Operativni sistem je program koji upravlja izvršavanjem aplikativnih programa ideluje kao interfejs 
između korisnika računara i računarskog hardvera. O njemu može da se misli kao da ima dva cilja:

Pogodnost: 

operativni sistem čini računar pogodnijim za upotrebu.

Efikasnost: 

operativni sistem dozvoljava da se resursi računarskog sistema koriste na efikasan 

način.

Redom ćemo ispitati ta dva aspekta operativnog sistema.

Operativni sistem kao interfejs između korisnika i računara 

Hardver i softver koji se koriste da bi 

se korisniku obezbedila aplikacija mogu se sagledati na slojevit ili hijerarhijski način, prikazan na slici 
8.1. Korisnik tih aplikacija, krajnji korisnik, obično se ne brine o arhitekturi računara. Prema tome, 
krajnji korisnik vidi računarski sistem preko aplikacije. Ta aplikacija može da se izrazi u jeziku za 
programiranje   i   razvija   je   aplikacioni   programer.   Razvoj   aplikacionog   programa   u   vidu   skupa 

44

background image

termostata koji je potpuno izdvojen od aparatura za proizvođenje i distribuciju toplote.) To nije slučaj 
kod operativnog sistema koji je, kao upravljački mehanizam, neuobičajen u dva pogleda:

Operativni sistem funkcioniše na isti način kao i običan računarski softver; 

odnosno,   to 

je program koji izvršava procesor.

Operativni sistem se često odriče upravljanja i mora zavisiti od procesora kako bi mu on 
dozvolio da ponovo preuzme pravljanje.

Operativni sistem, u stvari, nije ništa više od računarskog programa. Kao i svaki drugi računarski 

program,   on   daje   procesoru   instrukcije.   Ključna   razlika   je   u   nameni   programa.   Operativni   sistem 
upravlja   procesorom   u   upotrebi   ostalih   sistemskih   resursa   i   vremenskom   usklađivanju   njegovog 
izvršavanja drugih programa. Ali da bi procesor mogao da radi bilo šta od toga, on mora prestati da 
izvršava program operativnog sistema i početi da izvršava druge programe. Dakle, operativni sistem se 
odriče upravljanja da bi procesor uradio neki "koristan'; posao i zatim ponovo preuzima upravljanje, 
dovoljno dugo da bi pripremio procesor da uradi sledeći deo posla. Mehanizmi koji su obuhvaćeni svim 
tim biće detaljnije objašnjeni u ovom poglavlju.

Na slici 8.2 nagoveštava se da operativni sistem upravlja glavnim resursima. Deo operativnog sistema 

je   u   glavnoj   memoriji.   On   obuhvata   jezgro,   ili   nukleus,   koji   sadrži   najčešće   korišćene   funkcije 
operativnog   sistema   i,   u   datom   trenutku,   druge   delove   operativnog   sistema   koji   se   tada   koriste. 
Ostatak glavne memorije sadrži korisničke programe i podatke. Kao što ćemo videti, dodeljivanjem tog 
resursa (glavne memorije) zajednički upravljaju operativni sistem i hardver za upravljanje memorijom u 
procesoru. Operativni sistem odlučuje kada program u izvršenju može da koristi U/I uređaj, a upravlja i 
pristupom datotekama i njihovom upotrebom. I sam procesor je resurs, pa operativni sistem mora da 
odredi koliko procesorskog vremena treba da se nameni izvršavanju određenog korisničkog programa. U 
slučaju višeprocesorskog sistema, ta odluka može da se proširi na sve procesore.
Vrste operativnih sistema
Neke   ključne   karakteristike   služe   da   se   napravi   razlika   između   vrsta   operativnih   sistema.   Te 
karakteristike se kreću duž dve nezavisne dimenzije. Prva dimenzija određuje da li je sistem namenjen 
za paketnu obradu, ili je interaktivan. U interaktivnom sistemu, korisnik/programer direktno međusobno 
deluje sa računarom, obično preko terminala tastatura/displej, da bi zahtevao izvršenje posla ili izveo 
transakciju. Štaviše, korisnik može, zavisno od prirode aplikacije, da komunicira sa računarom u toku 
izvršenja posla. Sistem za paketnu obradu je suprotan interaktivnom sistemu. Korisnikov program se 
pakuje zajedno sa programima drugih korisnika i sve ih na izvršenje podnosi operator računara. Kada se 
program završi, rezultati se štampaju za korisnika. Danas su retki sistemi samo za paketnu obradu. 
Međutim, za opis savremenih operativnih sistema je korisno da se ukratko ispitaju sistemi za paketnu 
obradu.

Nezavisna dimenzija određuje da li sistem primenjuje, ili ne primenjuje muItiprogramiranje. Kod 

multiprogramiranja je učinjen pokušaj da se procesor drži zaposlenim što je više moguće tako što radi 
na više od jednog programa istovremeno. Više programa se učitava u memoriju, a procesor brzo prelazi 
sa jednog na drugi među njima. Alternativa je jednoprogramirani sistem koji radi na samo jednom 
programu odjednom.

Prvi sistemi 

Kod najranijih sistema, od kraja 1940-ih do sredine 1950-ih godina, programer je direktno 

međusobno   delovao   sa   računarskim   hardverom;   nije   bilo   operativnog

  sistema.   Tim   procesorima   se 

upravljalo sa konzole, koja se sastojala od sijalica displeja, prekidača, neke vrste ulaznog uređaja i 
štampača. Programi u procesorskom kodu su se unosili preko ulaznog uređaja (na primer, čitača kartica). 
Ako bi neka greška zaustavila program, uslov greške bi se prikazao pomoću sijalica. Programer je mogao 

46

da nastavi sa ispitivanjem registara i glavne memorije kako bi utvrdio uzrok greške. Ako bi program 
nastavio do normalnog završetka, izlaz bi se pojavio na štampaču.

Ti rani sistemi su postavili dva glavna problema:

Raspoređivanje 

Većina instalacija je koristila upisnu listu za rezervisanje procesorskog vremena. 

Tipično, korisnik je mogao da se upiše za blok vremena u umnošcima od pola sata i slično. Korisnik 
je   mogao   da   se   upiše   za   jedan   sat   i   da   završi   za   45   minuta:  to

  bi  rezultovalo  rasipanjem 

računarskog vremena u besposlici. Sa druge strane, korisnik bi mogao da ima problema ako ne 
završi u dodeljenom vremenu i bude prisiljen da zaustavi upotrebu mašine pre završetka svog 
posla.

Vreme   uspostavljanja  

Pojedinačan   program,   koji   se   zvao  

posao,  

mogao   je   da   obuhvati 

učitavanje   u   memoriju   kompajlera   plus   programa   u   jeziku   visokog   nivoa   (izvorni   program), 
skladištenje   prevedenog   programa   (objektni   program),   a   zatim   učitavanje   i   povezivanje 
objektnog programa i zajedničkih funkcija. Svaki od tih koraka je mogao da obuhvati montiranje 
ili demontiranje traka, ili postavljanje paketa kartica. Ako bi došlo do greške, nesrećni korisnik 
je tipično morao da se vraća na početak sekvence uspostavljanja. Prema tome, značajna količina 
vremena se trošila samo na uspostavljanje programa da bi se izvršavao.

Taj režim rada mogao bi se nazvati serijskom obradom, odražavajući činjenicu da korisnici imaju 

pristup računaru u seriji. Vremenom, razvijen je niz raznih softverskih alatki u pokušaju da se serijska 
obrada   učini   efikasnijom.   One   obuhvataju   biblioteke   zajedničkih   funkcija,   povezivače,   punioce, 
programe za otklanjanje grešaka i U/I upravljačke rutine, koje su kao zajednički softver bile na 
raspolaganju svim korisnicima.

Jednostavni   sistemi   za   paketnu   obradu  

Prvi   procesori   bili   su   vrlo   skupi   i   zato   je   bilo   važno 

maksimizovati iskorišćenje procesora. Vreme izgubljeno zbog raspoređivanja i uspostavljanja bilo je 
neprihvatljivo.

Da bi se poboljšalo iskorišćenje, razvijeni su jednostavni sistemi za paketnu obradu. Kod takvog 

sistema, koji se takođe zvao i 

monitor, 

korisnik više nije imao direktan pristup procesoru. Umesto toga, 

korisnik podnosi posao na karticama ili traci operatoru računara, koji sekvencijalno pakuje poslove 
zajedno i stavlja ceo paket na ulazni uređaj da bi ga upotrebio monitor.

Da   biste   razumeli   kako   ta   šema   radi,   razmotrićemo   je   sa   dve   tačke   gledišta:   monitorove   i 

procesorove. Sa tačke gledišta monitora, on je taj koji upravlja sekvencom događaja. Da bi to bilo 
moguće, najveći deo monitora mora uvek da bude u glavnoj memoriji i na raspolaganju za izvršenje (slika 
8.3).   Taj   deo   se   zove  

rezidentni   monitor.  

Ostatak   monitora   sastoji   se   od   uslužnih   programa   i 

zajedničkih funkcija koje se učitavaju kao potprogrami korisničkog programa na početku svakog posla 
koji ih zahteva. Monitor učitava poslove, po jedan odjednom, iz ulaznog uređaja (tipično čitača kartica 
ili trake). Kada se učita, posao se smešta u oblast korisničkih programa i upravljanje se prepušta tom 
poslu. Kada se posao završi, on vraća upravljanje monitoru, koji odmah učitava sledeći posao. Rezultati 
svakog posla štampaju se za isporuku korisniku.

Sada razmotrite tu sekvencu sa tačke gledišta procesora. U izvesnom trenutku, procesor izvršava 

instrukcije iz dela glavne memorije koji sadrži monitor. Te instrukcije prouzrokuju da se sledeći posao 
učita u drugi deo glavne memorije. Kada se posao učita, procesor će u monitoru naići na instrukciju 
grananja koja ga upućuje da nastavi sa izvršavanjem na početku korisničkog programa. Procesor će 
zatim izvršavati instrukcije u korisnikovom programu sve dok ne naiđe da završetak, ili na uslov greške. 
Prema tome, izraz "upravljanje se prepušta poslu" jednostavno znači da procesor sada donosi i izvršava 
instrukcije iz korisničkog programa, a "upravljanje se vraća monitoru" znači da procesor sada donosi i 
izvršava instrukcije iz programa monitora.

47

background image

završetka izvršenja posmatrane instrukcije.

Sledeća instrukcija koja treba da se donese, nalazi se u glavnoj memoriji ili, u slučaju virtueInog 

memorijskog sistema, u glavnoj memoriji ili sekundarnoj memoriji (na disku). U većini slučajeva, sledeća 
instrukcija koja treba da se donese neposredno sledi iza tekuće instrukcije. U tim slučajevima nema 
eksplicitne reference na sledeću instrukciju. Kada je potrebna eksplicitna referenca, onda mora da se 
obezbedi adresa u glavnoj ili virtueInoj memoriji. O obliku u kome se obezbeđuje ta adresa govori se u 
poglavlju Il.

Operandi izvora i rezultata mogu da budu u jednoj od sledeće tri oblasti:

Glavna ili virtuelna memorija:

 kao i kod reference na sledeću instrukciju, mora da se obezbedi 

adresa u glavnoj ili u virtueInoj memoriji.

Registar procesora:

 sa retkim izuzecima, procesor sadrži jedan ili više registara koji mogu da se 

referenciraju mašinskim instrukcijama.  Ako  postoji samo jedan registar, referenca na njega 
može da bude implicitna. Ako postoji više od jednog registra, onda se svakom registru dodeljuje 
jedinstven broj, a instrukcija mora da sadrži broj željenog registra.

U/I   uređaj:

  instrukcija   mora   da   odredi   U/I   modul   i   uređaj   za   operaciju.  Ako

  se   koristi 

memorijski preslikan U/I, to je samo druga adresa u glavnoj ili virtueInoj memoriji.

Predstavljanje instrukcije

Unutar računara, svaka instrukcija predstavlja se nizom bitova. Instrukcija je podeljena na polja koja 
odgovaraju  elementima koji  su sastavni  delovi  instrukcije.  Jednostavan  primer formata instrukcije 
prikazan je na slici 10.2. Kao drugi primer, format instrukcije lAS prikazan je na slici 2.2. Kod većine 
skupova instrukcija, koristi se više od jednog formata. Za vreme izvršenja instrukcije, ona se učitava u 
instrukcijski registar (IR) u procesoru. Procesor mora da bude u stanju da izdvoji podatke iz raznih 
polja instrukcije kako bi izveo zahtevanu operaciju.

Teško je i za programera i za čitaoca udžbenika da se bave binarnim predstavljanjima mašinskih 

instrukcija.   Stoga   je   postala   uobičajena   praksa   da   se   koristi  simboličko   predstavljanje  mašinskih 
instrukcija. Primer toga je upotrebljen za skup instrukcija lAS u tabeli 2.1.

Operacioni kodovi predstavljaju se skraćenicama koje se zovu  mnemonici  i ukazuju na operaciju. 

Uobičajeni primeri su:

ADD  Sabiranje
SUB  Oduzimanje
MPY  Množenje
DIV 

Deljenje

LOAD  Učitavanje podatka iz memorije
STOR Skladištenje podatka u memoriji

Operandi se takođe predstavljaju simbolički. Na primer, instrukcija

ADD R,Y

može da znači: saberi vrednost koja je sadržaj u lokaciji podatka Y sa sadržajem registra R. U tom 
primeru, Y se odnosi na adresu lokacije u memoriji, a R na određeni registar. Obratite pažnju na to da 
se operacija izvodi nad sadržajem lokacije, a ne nad njenom adresom.

Prema tome, moguće je napisati program u mašinskom jeziku u simboličkom obliku. Svaki simbolički 

operacioni kod ima fiksno binarno predstavljanje, a programer određuje specifičnu lokaciju svakog 
simboličkog operanda. Na primer, programer bi mogao da počne sa listom definicija:

X = 513

49

Y = 514

i   tako   dalje.   Jednostavan   program   bi   prihvatio   taj   simbolički   ulaz,   pretvorio   operacione   kodove   i 
reference operanada u binarni oblik i konstruisao binarne mašinske instrukcije.

Programeri u mašinskom jeziku su retki i gotovo da iščezavaju. Većina programa danas se piše u 

jeziku visokog nivoa ili, u njegovom nedostatku, u asemblerskom jeziku, o čemu se govori na kraju ovog 
poglavlja. Međutim, simbolički mašinski jezik ostaje koristan alat za opisivanje mašinskih instrukcija i mi 
ćemo ga koristiti u tu svrhu.

Vrste instrukcija

Razmotrite instrukciju jezika visokog nivoa koja bi mogla da se izrazi u jeziku kao što je BASIC ili 
FORTRAN. Na primer,

X = X + Y

Taj iskaz upućuje računar da doda vrednost uskladištenu u Y vrednosti uskladištenoj u X i da stavi 
rezultat u X. Kako bi se to moglo izvršiti mašinskim instrukcijama? Pretpostavimo da X i Y odgovaraju 
lokacijama 513 i 514. Ako pretpostavimo jednostavan skup mašinskih instrukcija, ta operacija bi se 
mogla izvršiti pomoću tri instrukcije:

1. Učitaj u registar sadržaj memorijske lokacije 513.
2. Saberi sadržaj memorijske lokacije 514 sa sadržajem registra.
3. Uskladišti sadržaj registra u memorijsku lokaciju 513.
Kao što se može videti, jednostavna instrukcija BASIC-a može da zahteva tri mašinske instrukcije. 

To je tipično za odnos između jezika visokog nivoa I mašinskog jezika. Jezik visokog nivoa izražava 
operacije u sažetom algebarskom obliku, koristeći promenljive. Mašinski jezik izražava operacije u 
osnovnom obliku, obuhvatajući pomeranje podataka u registre ili iz njih.

Imajući na umu ovaj jednostavan primer, razmotrimo vrste instrukcija koje moraju da se uključe u 

praktičnom računaru. Računar bi trebalo da ima skup instrukcija koji dozvoljava korisniku da formuliše 
bilo koji zadatak obrade podataka. Drugi način da se to sagleda je da se razmotre sposobnosti jezika za 
programiranje visokog nivoa. Svaki program napisan u jeziku visokog nivoa mora da se prevede u mašinski 
jezik da bi se izvršio. Prema tome, skup mašinskih instrukcija mora da bude dovoljan da izrazi svaku od 
instrukcija iz jezika visokog nivoa. Imajući to u vidu, možemo da razvrstamo instrukcije na sledeći 
način:

Obrada podataka: 

aritmetičke i logičke instrukcije.

Skladištenje podataka: 

memorijske instrukcije. 

Pomeranje podataka: 

U/I instrukcije.

Upravljanje: 

instrukcije za testiranje i grananje.

Aritmetičke instrukcije obezbeđuju sposobnosti računanja za obradu numeričkih podataka. Logičke 

(Bulove) instrukcije rade na bitovima reči, a ne na brojevima; zato one obezbeđuju sposobnosti za 
obradu   bilo   kog   drugog   tipa   podataka   koji   bi   korisnik   želeo   da   upotrebi.   Te   operacije   se   izvode 
prvenstveno nad podacima u registrima procesora. Zato moraju da postoje memorijske instrukcije za 
pomeranje podataka između memorije i registara. U/I instrukcije su potrebne da prenose programe i 
podatke u memoriju i rezultate računanja natrag ka korisniku. Instrukcije za testiranje koriste se za 
ispitivanje vrednosti reči podataka ili stanja računanja. Instrukcije za grananje se upotrebljavaju da bi 
se prešlo na drugi skup instrukcija, u zavisnosti od donesene odluke.

Kasnije ćemo detaljnije ispitati razne vrste instrukcija.

Broj adresa

50

background image

Korisno je ako se struktura steka obezbedi kao deo implementacije procesora. Kao što je rečeno u 
odeljku 10.4, jedna od upotreba steka je da se upravlja pozivima i povracima iz procedura. Stekovi 
takođe mogu da koriste programeru. Primer je procena izraza o kojoj se govori kasnije u ovom odeljku.

Implementacija   steka   delimično   zavisi   od   njegovih   potencijalnih   upotreba.   Ako   se   želi   da   se 

operacije sa stekom stave na raspolaganje programeru, onda će skup instrukcija uključiti operacije 
orijentisane na stek, kao što su PUSH, POP i operacije koje koriste jedan ili dva gornja elementa steka 
kao operande. Zbog toga što se sve te operacije pozivaju na jedinstvenu lokaciju, odnosno vrh steka, 
adresa operanda ili operanada je implicitna i ne treba da bude uključena u instrukciju. To su nulto-
adresne instrukcije koje su referencirane u odeljku 10.1.

Ako mehanizam steka treba da koristi samo procesor, za namene kao što je rukovanje procedurom, 

tada   u   skupu   instrukcija   neće   biti   instrukcija   eksplicitno   orijentisanih   na   stek.   U   oba   slučaja, 
implementacija steka zahteva da postoji neki skup lokacija koje se koriste za skladištenje elemenata 
ste ka. Tipičan pristup ilustrovan je na slici 10.14a. Za stek se rezerviše blok uzastopnih lokacija u 
glavnoj memoriji (ili u virtueInoj memoriji). U najvećem delu vremena, blok je delimično popunjen 
elementima steka, a njegov ostatak je na raspolaganju za porast steka.

Za ispravan rad, potrebne su tri adrese i one se često skladište u registrima procesora:

Pokazivač steka:  

sadrži adresu vrha steka. Ako stavka treba da se doda u stek ili iz njega 

ukloni, pokazivač se povećava ili smanjuje kako bi sadržao adresu novog vrha steka.

Osnova steka: 

sadrži adresu lokacije na dnu rezervisanog bloka. Ako se pokuša 

izvršenje 

instrukcije 

POP 

kada je stek prazan, izveštava se o grešci.

Granica steka: 

sadrži adresu drugog kraja rezervisanog bloka. Ako se pokuša 

izvršenje 

instrukcije PUSH kada je blok potpuno iskorišćen za stek, izveštava se o grešci.

Tradicionalno,   a   i   na   svim   današnjim   mašinama,   osnova   steka   je   na   adresi   većeg   kraja   bloka 

rezervisanog za stek, a granica je na adresi manjeg kraja. Prema tome, stek raste sa većih ka manjim 
adresama.

Da bi se ubrzale operacije sa stekom, dva njegova gornja elementa često se skladište u registrirna, 

kao što je prikazano na slici 1O.14b. U tom slučaju, pokazivač steka sadrži adresu trećeg elementa 
steka.

Procena izraza

Matematičke formule se obično izražavaju na način koji je poznat kao 

infiksna 

notacija. U tom obliku, 

binarna operacija se pojavljuje između operanada (na primer, a + b). Za složene izraze, koriste se 
zagrade da bi se odredio redosled procene izraza. Na primer, a + (b x c) će dati različit rezultat od (a + 
b) x c. Da bi se minimizovala upotreba zagrada, operacije imaju implicitnu prednost. Uopšte no govoreći, 
množenje ima prednost nad sabiranjem, pa je a + b x c ekvivalentno a + (b x c).

Alternativna   tehnika   je   poznata   kao  

inverzna   poljska   ili   postfiksna  

notacija.   U   toj   notaciji, 

operator prati svoja dva operanda. Na primer:
a+b 

postaje a b +

a + (b x c) 

postaje abc x +

(a+b)xc

postaje a b + c x 

Zapazite da, bez obzira na složenost izraza, kada se koristi inverzna poljska notacija, nisu potrebne 
nikakve zagrade.

Prednost postfiksne notacije je što se izraz u tom obliku lako procenjuje koristeći stek. Izraz u 

postfiksnoj notaciji se skenira sa leva nadesno. Za svaki element izraza, primenjuju se sledeća pravila:

1. Ako je element promenljiva ili konstanta, stavlja se na stek.
2. Ako je element operator, skidaju se dva gornja elementa steka, izvodi operacija i rezultat 

52

stavlja na stek.

Pošto se skenira ceo izraz, rezultat se nalazi na vrhu steka.

Jednostavnost tog algoritma čini ga pogodnim za procenu izraza. U skladu sa tim, mnogi kompajleri 

će uzeti izraz u jeziku visokog nivoa, pretvoriti ga u postfiksnu notaciju, a zatim generisati mašinske 
instrukcije iz te notacije. Na slici 10.15 prikazuje se niz mašinskih instrukcija za procenjivanje f= (a - 
b)f(c   +   d   x   e),   koristeći   instrukcije   orijentisane   na   stek.   Na   slici   se   takođe   prikazuje   upotreba 
jednoadresnih i dvoadresnih instrukcija. Zapazite da je, čak i ako se u poslednja dva slučaja ne koriste 
pravila orijentisana na stek, postfiksna notacija poslužila za generisanje mašinskih instrukcija. Niz 
događaja za program steka prikazan je na slici 10.16.

Proces pretvaranja infiksnog izraza u postfiksni izraz se samo po sebi najlakše obavlja pomoću 

steka. Postupci su sledeći:

1. Ispituje se sledeći element ulaza. 
2. Ako je operand, daje se na izlaz.
3. Ako je leva zagrada, stavlja se na stek.
4. Ako je operator, onda

ako je na vrhu steka leva zagrada, operator se stavlja na stek;

ako   ima   viši   prioritet   od   vrha   steka   (množenje   i   deljenje   imaju   viši   prioritet   od 
sabiranja i oduzimanja), operator se stavlja na stek;

inače, skida se operacija sa steka na izlaz i ponavlja postupak 4.

5. Ako je desna zagrada, skidaju se operatori na izlaz sve dok se naiđe na levu zagradu. Skida 

se sa steka i odbacuje leva zagrada.

6. Ako ima još ulaza, ide se na postupak 1.
7. Ako više nema ulaza, skidaju se preostali operatori sa steka.

Na slici 10.17 prikazana je upotreba tog algoritma. Taj primer bi čitaocu trebalo da pruži izvestan 

osećaj o snazi algoritama zasnovanih na steku.)

Moguće je, u stvari, da se za neke instrukcije posao uradi bez ijedne adrese. Instrukcije bez adresa 

su primenljive u specijalnoj organizaciji memorije koja se zove stek. Stek je skup lokacija sa kojima se 
radi po pravilu "poslednji u stek - prvi iz steka". Stek je na poznatoj lokaciji i, često, najmanje gornja 
dva njegova elementa su u registrima procesora. Prema tome, instrukcija bez adrese bi referencirala 
gornja dva elementa steka. Stekovi su opisani u dodatku 10A. Njihova upotreba se istražuje kasnije u 
ovom poglavlju, kao i u poglavlju 11.

U tabeli 10.1 zbirno su data tumačenja instrukcija sa nula, jednom, dve ili tri adrese. U svakom 

slučaju, u tabeli, pretpostavljeno je da je adresa sledeće instrukcije implicitna i da treba da se izvrši 
jedna operacija sa dva izvorna operanda i jednim operandom za rezultat.

Broj   adresa   po   instrukciji   je   osnovna   odluka   za   projektovanje.   Manje   adresa   po   instrukciji 

rezultovaće   instrukcijama   koje   su   primitivnije   i   zahtevaju   manje   složen   procesor.   To   će   takođe 
rezultovati kraćim instrukcijama. Sa druge strane, program ukupno sadrži više instrukcija, što obično 
ima za posledicu duža vremena izvršenja i duže, složenije programe. Takođe, postoji jedan značajan 
prag između jednoadresnih i višadresnih instrukcija. Sa jednoadresnim instrukcijama, programer obično 
ima na raspolaganju samo jedan registar opšte namene, akumulator. Sa višeadresnim instrukcijama, 
obično se poseduje više registara opšte namene. To dozvoljava da se neke od operacija izvode samo na 
registrirna. Zbog toga što su reference registara brže od referenci memorije, to ubrzava izvršenje. 
Zbog fleksibilnosti i mogućnosti upotrebe više registara, većina savremenih mašina koristi mešavinu 
dvoadresnih   i   troadresnih   instrukcija.procesor.   To   će   takođe   rezultovati   kraćim   instrukcijama.   Sa 

53

background image

adrese;

brojevi;

znakovi;

logički podaci.

Kada budemo govorili o načinima adresiranja u poglavlju 11, videćemo da su adrese, u stvari, oblik 

podataka. U mnogim slučajevima, neka računanja moraju da se izvrše na referenci operanda u instrukciji 
kako bi se odredila adresa u glavnoj ili virtuelnoj memoriji. U tom kontekstu, adrese mogu da se 
smatraju neoznačenim celim brojevima.

Ostali uobičajeni tipovi podataka su brojevi, znakovi i logički podaci i svaki od njih se ukratko 

ispituje u ovom odeljku. Pored toga, u nekim mašinama se definišu specijalizovani tipovi podataka ili 
strukture podataka. Na primer, mogu da postoje mašinske operacije koje rade direktno sa listom ili 
nizom znakova.

Brojevi

Svi mašinski jezici uključuju numeričke tipove podataka. Čak i u nenumeričkoj obradi podataka, brojevi 
su potrebni da deluju kao brojači, širine polja itd. Značajna razlika između brojeva koji se koriste u 
običnoj matematici i brojeva koji su uskladišteni u računaru je što su ovi poslednji ograničeni. To je 
tačno u dva smisla. Prvo, postoji granica apsolutne vrednosti brojeva koji se mogu predstaviti u mašini i 
drugo,   u   slučaju   brojeva   u   pokretnom   zarezu,   postoji   ograničenje   njihove   tačnosti.   Prema   tome, 
programer se suočava sa razumevanjem posledica zaokruživanja, prekoračenja i podbačaja.

U računarima su uobičajena tri tipa numeričkih podataka: 

celi brojevi ili brojevi u fiksnom zarezu;

brojevi u pokretnom zarezu;

decimalni brojevi.

Prva dva tipa smo detaljno ispitali u poglavlju 9. Preostaje da kažemo nekoliko reči o decimalnim 
brojevima.

Mada su sve unutrašnje računarske operacije po prirodi binarne, korisnici sistema, kao ljudi, rade sa 

decimalnim brojevima. Prema tome, potrebno je da se decimalni brojevi pretvaraju u binarne na ulazu i 
binarni brojevi u decimalne na izlazu. Za aplikacije u kojima ima mnogo U/I i, u poređenju sa tim, malo 
jednostavnih   računanja,   poželjno   je   skladištiti   i   raditi   sa   brojevima   u   decimalnom   obliku. 
Najzastupljenije predstavljanje sa tom namenom je 

pakovani decimalni 

broji.

Kod pakovanog decimainog broja, svaka decimalna cifra predstavlja se 4-bitnim kodom, na očigledan 

način, sa dve cifre koje se skladište po bajtu. Prema tome, O = 0000, 1 = 0001, ... , 8 = 1000, i 9 = 1001.  
Obratite pažnju daje to prilično neefikasan kod zato što se koristi samo 10 od 16 mogućih 4-bitnih  
vrednosti. Da bi se formirali brojevi, 4-bitni kodovi se nižu zajedno, obično u umnošcima od po 8 bitova. 
Prema tome, kod za 246 je 0000 0010 0110. Jasno je da je taj kod manje kompaktan od direktnog 
binarnog   predstavljanja,   ali   izbegava   dodatni   rad   na   pretvaranju.   Negativni   brojevi   mogu   da   se 
predstave uključivanjem 4-bitne cifre predznaka na levom ili desnom kraju niza pakovanih decimalnih 
cifara. Na primer, kod 1111 bi mogao da posluži za predznak minus.

Mnoge mašine obezbeđuju aritmetičke instrukcije za izvođenje operacija direktno na pakovanim 

decimalnim brojevima. Algoritmi su slični onima opisanim u odeljku 9.3, ali moraju da uzmu u obzir 
operaciju decimalnog prenosa.

Znakovi

Opšti oblik podataka je tekst ili niz znakova. Mada su tekstualni podaci najpogodniji da ih čitaju ljudi, 

55

oni ne mogu, u obliku znakova, lako da se skladište ili prenose u sistemima za obradu podataka ili 
komunikacionim sistemima. Takvi sistemi su pIojektovani za binarne podatke. Zato je smišljen jedan 
broj kodova, pomoću kojih se znakovi predstavljaju kao nizovi bitova. Možda je prvi opšteprihvaćen 
primer bio Morzeov kod. Danas, najviše korišćen kod za znakove je International Reference Alphabet 
(IRA), koji se u SAD zove American Standard Code for Information Interchange (ASCII; pogledajte 
tabelu 7.1). Svaki znak u tom kodu predstavlja se jedinstvenim 7-bitnim oblikom; prema tome, može da 
se predstavi 128 znakova. To je veći broj nego što je potrebno da bi se predstavili znakovi koji se mogu  
štampati, pa neki oblici predstavljaju upravljačke znakove. Neki od tih upravljačkih znakova su u vezi sa 
upravljanjem štampanjem znakova na stranici. Drugi se staraju o komunikacionim procedurama. lRA-
kodovani znakovi se skoro uvek skladište i prenose koristeći 8 bitova po znaku. Osmi bit može da se  
postavi na O ili da se koristi kao bit parnosti za otkrivanje greške. U tom poslednjem slučaju, bit se 
postavlja tako da ukupan broj binarnih cifara 1 u svakom oktetu bude uvek neparan (neparna parnost), ili 
uvek paran (parna parnost).

Zapazite   u   tabeli   7.1   da   se   za   IRA   oblik   bitova   011XXXX,   cifre   O   do   9   predstavljaju   svojim 

binarnirri ekvivalentima, 0000 do 1001, na 4 bita krajnje desno. To je isti kod kao pakovani decimalni, 
što olakšava pretvaranje između 7-bitnog IRA i 4-bitnog pakovanog decimalnog predstavljanja.
I u udžbenicima se to obično zove binarno kodovan decimalni broj (BCD). Strogo govoreći. BCD se 
odnosi na kodovanje svake decimalne cifre jedinstvenim 4-bitnim nizom. Pakovani decimalni broj se 
odnosi na skladištenje BCD-kodovanih cifara koristeći jedan bajt za svake dve cifre.

Drugi kod koji se koristi za kodovanje znakova je Extended Binary Coded Decimal Intechange Code 

(EBCDIC). EBCDIC se koristi na IBM-ovim glavnim računarima. To je 8-bitni kod. Kao i IRA, EBCDIC je 
kompatibilan sa pakovanim decimalnim. U slučaju EBCDIC, kodovi 11110000 do 1111001 predstavljaju 
cifre O do 9.

Logički podaci

Naravno, sa  svakom reči  ili nekom  drugom jedinicom  koja se može  adresirati  (bajt,  polureč itd.), 
postupa se kao sa jednom jedinicom podataka. Međutim, ponekad je korisno da se razmatra n-bitna 
jedinica kao da se sastoji od n 1-bitnih podataka, od kojih svaki ima vrednost O ili 1. Kada se podaci 
posmatraju na taj način, oni se smatraju !ogičkim podacima.

Ovakav   pogled,   orijentisan   na   bitove,   ima   dve   prednosti.   Prvo,   možemo   ponekad   poželeti   da 

skladištimo niz Bulovih ili binarnih podataka, u kome svaki od njih može uzeti samo vrednosti 1 (istinit) i 
O (neistinit). Kod logičkih podataka, memorija se najefikasnije koristi za to skladištenje. Drugo, postoje 
prilike kada želimo da manipulišemo bitovima u podatku. Na primer, ako se operacije u pokretnom zarezu 
implementiraju u softveru, potrebno je da možemo da pomeramo značajne bitove u nekim operacijama. 
Drugi primer: da bismo pretvorili IRA u pakovani decimalni kod, treba da izdvojimo 4 bita krajnje desno 
iz svakog bajta.

Obratite pažnju na to da se u prethodnim primerima sa istim podacima ponekad postupa kao sa 

logičkim   podacima,  a   ponekad   kao  sa  numeričkim  podacima  ili   sa  tekstom.  "Tip"  jedinice  podataka 
određuje se operacijom koja se na njoj izvodi. Iako to obično nije slučaj kod jezika visokog nivoa, u 
mašinskom jeziku skoro uvek se postupa na taj način.

VRSTE OPERACIJA

Broj različitih operacionih kodova znatno se menja od jedne do druge mašine. Međutim, neke opšte 
vrste operacija nalaze se na svim mašinama. Korisna i tipična kategorizacija operacija je sledeća:

operacije za prenos podataka;

aritmetičke operacije;

56

background image

Izvršenje aritmetičke instrukcije može da obuhvati operacije prenosa podataka da bi se postavili 

operandi za ulaz u aritmetičku i logičku jedinicu (ALU) i da bi se isporučio izlaz iz ALU. Na slici 3.5 
i1ustrovana su pomeranja obuhvaćena i uprenosu podataka i u aritmetičkim operacijama. Pored toga, deo 
procesora za ALU izvodi 

Logičke operacije

Većina mašina takođe obezbeđuje niz raznih operacija za manipulisanje pojedinačnim bitovima reči ili 
neke druge jedinice koja se može adresirati, što se često zove "poigravanje sa bitovima". One su 
zasnovane na Bulovim operacijama (pročitajte dodatak B).

Neke   od   osnovnih   logičkih   operacija   koje   mogu   da   se   izvedu   na   Bulovim   ili   binarnim   podacima, 

prikazane su u tabeli 10.6. Operacija NE invertuje bit.  

I, ILI  

i ekskluzivno-ILI su najčešće logičke 

funkcije sa dva operanda. JEDNAKO je koristan binarni test.

Te logičke operacije mogu da se primene po bitovima na n-bitne logičke jedinice podataka. Prema 

tome, ako dva registra sadrže podatke

(RI) = 10100101 
(R2) = 00001111
onda je
(R) I (R2) = 00000101
gde notacija (X) znači sadržaj u lokaciji X. Prema tome, operacija I može da se koristi kao  maska 
pomoću koje se biraju izvesni bitovi u reči i postavljaju na nulu preostali bitovi. Kao drugi primer, ako 
dva registra sadrže
(RI) = 10100101 
(R2) = 11111111
onda je
(R) ekskluzivno-ILI (R2) = 01011010
Kada je jedna reč postavljena tako da sve binarne cifre budu 1, operacija ekskluzivno-ILI

 

invertuje sve 

bitove druge reči (komplement jedinice).

Pored logičkih operacija sa bitovima, većina mašina obezbeđuje razne funkcije pomeranja i rotiranja. 

Većina osnovnih operacija ilustrovana je na slici 10.5. Kod 

logičkog pomeranja, 

bitovi reči se pomeraju 

ulevo ili udesno. Na jednom kraju, gubi se bit koji se pomeri napolje. Na drugom kraju, unutra se pomera 
0. Logička pomeranja se koriste prvenstveno za izdvajanja polja unutar reči. Binarne cifre 0 koje se 
pomeraju li reč, izbacuju neželjene informacije koje se pomeraju napolje na drugom kraju.

Kao primer, pretpostavite da želimo da prenosimo znakove podataka na U/I uređaj, po 1 znak 

odjednom. Ako je svaka memorijska reč dužine 16 bitova i sadrži dva znaka, moramo da raspakujemo 
znakove pre nego što oni mogu da se šalju. Da bi dva

znaka u reči mogli da se pošalju:

reč se učitava u registar;

vrši se logička operacija I sa vrednošću 1111111100000000; to maskira znak desno; 

pomera se udesno osam puta; to pomera preostali znak u desnu polovinu registra; 

izvodi se U/I operacija; U/I modul čita 8 manje značajnih bitova sa magistrale podataka.

Prethodni postupci rezu1tuju slanjem znaka na levoj strani. Da bi se poslao znak na desnoj strani: 

reč se opet učitava u registar; 

vrši se logička operacija I sa 0000000011111111; 

izvodi se U/I operacija.

Operacija 

aritmetičkog pomeranja 

postupa sa podatkom kao sa označenim celim brojem i ne pomera 

58

bit predznaka. Kod aritmetičkog pomeranja udesno, bit predznaka se replicira u poziciju bita sa njegove 
desne strane. Kod aritmetičkog pomeranja ulevo, logičko pomeranje ulevo izvodi se na svim bitovima, 
izuzev na bitu predznaka, koji se zadržava. Te operacije mogu da ubrzaju neke aritmetičke operacije. 
Kod brojeva u notaciji komplementa dvojke, aritmetičko pomeranje udesno odgovora deljenju sa 2, uz 
skraćivanje neparnih brojeva. I aritmetičko pomeranje ulevo i logičko pomeranje ulevo odgovaraju 
množenju sa 2 gde nema prekoračenja. Ako dodje do prekoračenja, aritmetičko i logičko pomeranje 
ulevo   daju   različite   rezultate,   ali   aritmetičko   pomeranje   ulevo   zadržava   predznak   broja.   Zbog 
mogućnosti prekoračenja, mnogi procesori nemaju tu instrukciju, uključujući PowerPC i Itanium. Ostali, 
kao što je IBM 8/390, nude tu instrukciju. Zanimljivo je da arhitektura Pentiuma uključuje aritmetičko 
pomeranje ulevo, ali ga definiše da bude identično logičkom pomeranju ulevo.

Operacije  

rotiranja,  

ili cikličkog pomeranja, zadržavaju sve bitove na kojima se radi. Jedna od 

upotreba rotiranjaje da se svaki od bitova redom dovede na krajnju levu poziciju, gde može da se 
identifikuje ispitivanjem znaka podatka (sa kojim se postupa kao sa brojem).

Kao   kod  aritmetičkih   operacija,  logičke  operacije  obuhvataju   aktivnost   ALU   i  mogu  da  uključe 

operacije prenosa podataka. U tabeli 10.7 dati su primeri svih operacija pomeranja i rotiranja o kojima 
se govori u ovom pododeljku.

Pretvaranje

Instrukcije   za   pretvaranje   su   one   koje   menjaju   format   ili   rade   na   formatu   podatka.   Primer   je 
pretvaranje iz decimalnog u binarni oblik. Primer složenije instrukcije za editovanje je instrukcija 
Translate (TR) procesora S/390. Ta instrukcija može da se upotrebi da bi se pretvaralo iz jednog 8-
bitnog koda u drugi i ima tri operanda:
TR RI, R2, L
Operand R2 sadrži adresu početka tabele 8-bitnih kodova. Bajtovi L, koji počinju na adresi određenoj u 
Rl, prevode se, zamenjujući svaki bajt sadržajem stavke tabele indeksirane tim bajtom. Na primer, da 
bismo preveli iz koda EBCDIC u kod IRA, prvo pravimo 256-bajtnu tabelu u lokacijama memorije, 
recimo,   od   1000   do   10FF   heksadecimalno.   Tabela   sadrži   znakove   koda   IRA   uredosledu   binarnih 
predstavljanja   koda   EBCDIC;   odnosno,   kod   IRA   se   stavlja   u   tabelu   na   relativnu   lokaciju   jednaku 
binarnoj vrednosti koda EBCDIC za isti znak. Prema tome, lokacije 10F0 do 10F9 će sadržati vrednosti 
30 do 39, zato što je F0 kod EBCDIC za cifru 0, a 30 je kod IRA za cifru 0, i tako redom, do cifre 9. 
Sad pretpostavite da imamo kod EBCDIC za cifre 1984 koji počinje na lokaciji 2100 i želimo da 
prevedemo u kod IRA. Pretpostavite sledeće:

lokacije 2100 do 2103 sadrže Fl F9 F8 F4; . R1 sadrži 2100;

R2 sadrži 1000.

Tada, ako izvršimo 
TR R1, R2, 4 
lokacije 2100 do 2103 će sadržati 31 39 38 34.

Ulaz/izlaz

O instrukcijama za ulaz/izlaz smo do izvesne detljnosti govorili u poglavlju 7. Kao što smo videli, postoje 
razni pristupi, uključujući programirani U/I, memorijski preslikan programirani U/I, D MA i upotreba 
U/I procesora. Mnoge implementacije obezbeđuju samo nekoliko U/I instrukcija, gde se specifične 
aktivnosti određuju parametrima, kodovima, ili komandnim rečima.

Upravljanje sistemom

59

background image

BROX Skok na lokaciju X ako dođe do prekoračenja.

U svim tim slučajevima, rezultat na koji se poziva je rezultat poslednje operacije koja postavlja kod 

uslova.

Drugi pristup, koji može da se preduzme kod troadresnog formata instrukcija, je da se izvede 

poređenje i odredi grananje u istoj instrukciji. Na primer,
BRE Rl, R2, X       Skok na X ako je sadržaj R1 = sadržaju R2.

Na slici 10.6 prikazani su primeri tih operacija. Zapazite da grananje može da bude  unapred  (na 

instrukciju sa višom adresom) ili unazad (niža adresa). U primeru se pokazuje kako mogu da se upotrebe 
bezuslovna i uslovna grananje da bi se napravila petlja instrukcija. Instrukcije u lokacijama 202 do 210 
će se ponovno izvršavati sve dok rezultat oduzimanja Y od X ne bude 0.

Instrukcije preskoka

  Drugi uobičajen oblik instrukcije za prenošenje upravljanja je instrukcija za 

preskok.   Instrukcija   za   preskok   obuhvata   implicitnu   adresu.   Tipično,   preskok   ukazuje   na   to   da 
instrukcija treba da se preskoči; prema tome, implicitna adresa je jednaka adresi sledeće instrukcije 
plus dužina jedne instrukcije.

Zbog toga što instrukcija za preskok ne zahteva polje za adresu odredišta, ona može da radi druge 

stvari. Tipičan primer je instrukcija za povećavanje i preskok ako je rezultat nula (ISZ). Razmotrite 
sledeći odlomak iz programa:

U tom odlomku, upotrebljene su dve instrukcije za prenos upravljanja da bi se napravila iterativna 

petlja. U R1 se postavlja negativan broj iteracija koje treba da se izvedu. Na kraju petlje, R1 se 
povećava. Ako nije jednak 0, program se grana unazad na početak petlje. U suprotnom, grananje se 
preskače i program nastavlja sa sledećom instrukcijom posle kraja petlje.

Instrukcije   za   poziv   procedure  

Procedura  je   možda   najznačajnija   inovacija   u   razvoju   jezika   za 

programiranje. Procedura je samostalan računarski program koji se ugrađuje u veći program. U svakoj 
tački programa može da se pozove procedura. Procesoru se kaže da ide i izvrši celu proceduru, a zatim 
vrati u tačku iz koje je došlo do poziva.

Dva glavna razloga za upotrebu procedura su ekonomičnost i modularnost. Procedura dozvoljava da 

se isti deo koda koristi mnogo puta. To je značajno za ekonomičnost u programiranju i za najefikasnije 
iskorišćenje   memorijskog   prostora   u   sistemu   (program   mora   da   se   skladišti).   Procedure   takođe 
dozvoljavaju da se veliki zadaci programiranja podele na manje jedinice. Ta upotreba  modularnosti  u 
velikoj meri olakšava zadatak programiranja.

Mehanizam procedure obuhvata dve osnovne instrukcije: instrukciju poziva, koja vrši grananje od 

trenutne lokacije na proceduru, i instrukciju povratka, kojom se vraća iz procedure na mesto sa koga je 
ona bila pozvana. Obe instrukcije su oblici instrukcija grananja.

Na slici 10.7a ilustrovana je upotreba procedura da bi se konstruisao program. U tom primeru, 

postoji glavni program koji počinje na lokaciji 4000. Taj program uključuje poziv procedure PROC1, koja 
počinje na lokaciji 4500. Kada naiđe na tu instrukciju poziva, procesor suspenduje izvršenje glavnog 
programa i počinje izvršenje PROC1

,  

donoseći sledeću instrukciju iz lokacije 4500. Unutar PROC1 

postoje dva poziva procedure PROC2 na lokaciji 4800. U oba slučaja, izvršenje PROC1 se suspenduje i 
izvršava   se   PROC2.   Iskaz   RETURN   prouzrokuje   da   se   procesor   vraća   u   program   koji   je   pozvao 
proceduru   i   nastavlja   izvršenje   instrukcije   posle   odgovarajuće   instrukcije   CALL.   Takvo   ponašanje 
ilustrovano je na slici 10.7b.

Vredi zapaziti nekoliko činjenica:

1.

Procedura može da se poziva sa više od jednog mesta.

2.

Poziv procedure može da se pojavi unutar procedure. To dozvoljava ugneždavanje procedura do 

61

proizvoljne dubine.

3.

Svaki poziv procedure je uparen sa povratkom u program koji je napravio taj poziv.

Zbog toga što bi nam se sviđalo da možemo da pozivamo proceduru sa raznih mesta, procesor mora 

na neki način da sačuva adresu povratka, tako da povratak može ispravno da se obavi. Postoje tri 
uobičajena mesta za skladištenje adrese povratka:

registar;

početak pozvane procedure; 

vrh steka.

Zamislite instrukciju mašinskog jezika CALL X, koja znači  poziv procedure na lokaciji X.  Ako se 

preduzme registarski pristup, CALL X prouzrokuje sledeće akcije:

RN   PC + 

Δ

PC   X

gde je RN registar koji se uvek koristi za tu namenu, PC je programski brojač, a Δ je dužina 

instrukcije. Pozvana procedura sada može da sačuva sadržaj RN da bi bio iskorišćen za kasniji povratak.

Druga mogućnost je da se adresa povratka uskladišti na početku procedure. U tom slučaju, CALL X 

prouzrokuje
X   PC +  Δ
PC    X + I
To je baš zgodno. Adresa povratka je bezbedno sačuvana.

Oba   prethodna   pristupa   rade   i   bili   su   primenjivani.   Jedino   ograničenje   tih   pristupa   je   što   oni 

sprečavaju upotrebu višestruko ulaznih procedura. Višestruko ulazna procedura je ona koja može da ima 
više   poziva   otvorenih   u   isto   vreme.   Rekurzivna   procedura   (ona   koja   samu   sebe   poziva)   je   primer 
upotrebe tog svojstva.

Opštiji i moćniji pristup je da se koristi stek (za raspravu o steku pročitajte dodatak IOA). Kada 

procesor izvršava poziv, on postavlja adresu povratka na stek. Kada izvršava povratak, on koristi adresu 
sa steka. Na slici 10.8 ilustrovana je upotreba steka.

Pored   obezbeđenja   adrese   povratka,   često   je   potrebno   da   se   uz   poziv   procedure   proslede   i 

parametri.   Oni   mogu   da   se   proslede   u   registre.   Druga   mogućnost   je   da   se   parametri   skladište   u 
memoriji, odmah posle instrukcije CALL. U tom slučaju, povratak mora da bude na lokaciju koja sledi 
parametre. I u ovim slučajevima, oba pomenuta pristupa imaju nedostatke. Ako se koriste registri, 
pozvani program i program koji poziva moraju da budu tako napisani da osiguraju pravilno korišćenje 
registara. Skladištenje parametara u memoriji otežava razmenu promenljivog broja parametara. Oba 
pristupa sprečavaju upotrebu višestruko ulaznih procedura.

Fleksibilniji pristup je da se parametri proslede na stek. Kada procesor izvršava poziv, on na stek ne 

stavlja samo adresu povratka, nego i parametre koji treba da se proslede pozvanoj proceduri. Pozvana 
procedura može da pristupi parametrima sa steka. Parametri povratka takođe mogu da se stave na stek. 
Ceo skup parametara, uključujući i adresu povratka, koji je uskladišten za poziv procedure, zove se 
okvir steka.

Primer je dat na slici 10.9. Odnosi se na proceduru P u kojoj se deklarišu lokalne promenljive x1 i  x2 i 

proceduru Q, koju P može da pozove i u kojoj se deklarišu lokalne promenljive y1 i y2. Na toj slici, tačka 
povratka za svaku proceduru je prva stavka koja se skladišti u odgovarajućem okviru steka. Zatim se 
skladišti pokazivač na početak prethodnog okvira. To je potrebno ako su broj ili dužina parametara koji 
treba da se skladište promenljivi.

Asemblerski jezik

62

background image

Razvoj asemblerskog jezika predstavljao je glavnu prekretnicu u razvoju računarske tehnologije. To 

je   bio   prvi   korak   ka   jezicima   visokog   nivoa   koji   se   danas   koriste.   Iako   malo   programera   koristi 
asemblerski   jezik,   skoro   sve   mašine   imaju   jedan   od   njih.   Oni   se   koriste,   ako   ni   za   šta   drugo,   za 
sistemske programe, kao što su kompajleri i U/I rutine.

Poglavlje 11
SKUPOVI INSTRUKCIJA: NACINI I FORMATI ADRESIRANJA
ADRESIRANJE

Adresno polje, ili polja, u tipičnom formatu instrukcije relativno su mala. Voleli bismo da možemo da 
referenciramo širok opseg lokacija u glavnoj memoriji ili u nekim sistemima, virtuelnoj memoriji. Da bi 
se postigao taj cilj, primenjuju se razne tehnike adresiranja. Sve one uključuju neki kompromis između 
opsega adresa sa jedne strane i/ili fleksibilnosti izračunavanja adrese, sa druge strane. U ovom odeljku, 
ispitujemo najzastupljenije tehnike adresiranja:

neposredno,

direktno,

indirektno,

registarsko,

registarsko indirektno, 

sa pomerajem,

pomoću steka.

Ti načini adresiranja ilustrovani su na slici 11.1. U ovom odeljku koristimo sledeću notaciju:

A

= sadržaj polja adrese u instrukciji.

= sadržaj polja adrese u instrukciji koje referencira registar.

EA 

= stvarna (efektivna) adresa lokacije koja sadrži referencirani operand.

(X)

= sadržaj memorijske lokacije X ili registra X.

U tabeli 11.1 prikazana su izračunavanja adresa za svaki način adresiranja.

Pre nego što započnemo ovu raspravu, treba da damo dva komentara. Prvo, skoro sve arhitekture 

računara obezbeđuju više od jednog od tih načina adresiranja. Postavlja se pitanje kako procesor može 
da odredi koji način adresiranja se koristi u određenoj instrukciji. Preduzima se više pristupa. Često će 
različiti kodovi operacije koristiti različite načina adresiranja. Takođe, jedan ili više bitova u formatu 
instrukcije mogu da se upotrebe kao  

polje za način adresiranja.  Vrednost polja za način adresiranja 

određuje koji se način koristi.

Drugi komentar se odnosi na tumačenje efektivne adrese (EA). U sistemu bez virtueine memorije, 

efektivna adresa će biti ili adresa u glavnoj memoriji ili registar. Stvarno preslikavanje na fizičku 
adresu je funkcija mehanizma straničenja i nevidljivo je za programera.

Neposredno adresiranje

Najjednostavniji oblik adresiranja je neposredno adresiranje, u kome je vrednost operanda prisutna u 
instrukciji

Operand = A

Taj   način   može   da   se   upotrebi   da   definiše   i   koristi   konstante   ili   da   postavlja   početne   vrednosti 
promenijivih. Tipično, broj će biti uskladišten u obliku komplementa dvojke; krajnji levi bit polja za 
operand se koristi kao bit predznaka. Kada se operand učita u registar za podatke, bit predznaka se 
proširuje nalevo do potpune veličine reči podatka.

Prednost neposrednog adresiranja je što nema drugih referenci memorije sem donošenja instrukcije 

64

koje se zahteva da bi se dobio operand, pa se prema tome štedi jedan ciklus memorije ili keša u ciklusu 
instrukcije. Nedostatak je što je veličina broja ograničena dimenzijom polja za adresu, koja je, u većini 
skupova instrukcija, mala u poređenju sa dužinom reči.

Direktno adresiranje

Direktno adresiranje je veoma jednostavan oblik adresiranja, u kome polje za adresu sadrži efektivnu 
adresu operanda:

EA=A

Ta tehnika je bila uobičajena u ranijim generacijama računara, ali se ne sreće često u savremenim 
arhitekturama.  Zahteva  samo  jednu referencu  memorije i nema posebnih izračunavanja. Očigledno 
ograničenje je to što obezbeđuje samo ograničen adresni prostor.

Indirektno adresiranje

Kod direktnog adresiranja, dužina polja za adrese je obično manja od dužine reči, što ograničava 
adresni opseg. Jedno rešenje je da se u adresnom polju referencira na adresu reči u memoriji, koja sa  
svoje strane sadrži adresu operanda potpune dužine. To je poznato kao 

indirektno adresiranje:

EA = (A)

Kao   što   je   ranije   definisano,   zagrade   se   tumače   kao   značenje  

sadržaja.  Očigledna   prednost   tog 

pristupa je da je sada, za dužinu reči od 

N, na raspolaganju prostor od 2N. Nedostatak je što izvršenje 

instrukcije zahteva dve reference memorije da bi se doneo operand: jednu da se dobije njegova adresa 
i drugu da se dobije njegova vrednost.

Mada je broj reči koje mogu da se adresiraju sada jednak 

2N, broj različitih efektivnih adresa koje 

mogu da se referenciraju u bilo kom trenutku je ograničen na  

2K,  gde je  K  dužina polja za adrese. 

Tipično, to nije toliko neugodno ograničenje kao što bi se moglo pomisliti i čak može da bude prednost. 
U okruženju virtueine memorije, efektivne adrese lokacija mogu da se zatvore u stranici O svakog 
procesa. Zbog toga što je polje za adresu u instrukciji malo, ono će prirodno proizvesti direktne adrese 
malih brojčanih vrednosti koje će se pojaviti na stranici O. (Jedino ograničenje je to što veličina 
stranice mora da bude veća ili jednaka 

2K.) Kada je proces aktivan, biće višestrukih referenciranja na 

stranicu O, što prouzrokuje da ona ostaje u glavnoj memoriji. Prema tome, indirektno adresiranje će 
obuhvatiti, najviše, jednu grešku straničenja umesto dve.

Retko korišćena varijanta indirektnog adresiranja je adresiranje u više nivoa ili kaskadno indirektno 

adresiranje:

EA=(….(A)…)

U tom slučaju, jedan od bitova adrese pune reči je indirektni marker (I). Ako je bit I jednak 0, onda 
reč sadrži EA. Ako je bit I jednak 1, onda se poziva drugi nivo indirektnosti. Izgleda da nema neke 
naročite prednosti tog pristupa, a njegov nedostatak je to što bi se zahtevalo tri ili više memorijskih  
referenci da bi se doneo operand.

Registarsko adresiranje

Registarsko adresiranje je slično direktnom adresiranju. Jedina razlika je to što adresno polje 
referencira registar, a ne adresu u glavnoj memoriji:

EA=R

Da bismo to razjasnili, ako je sadržaj registarskog adresnog polja u instrukciji 5, onda je registar 

R5 nameravana adresa, a vrednost operanda se nalazi u R5. Tipično, adresno polje koje referencira 

65

background image

se adresnom polju da bi se proizvela EA. Tipično, sa adresnim poljem se za ovu operaciju postupa kao sa 
brojem u komplementu dvojke. Prema tome, efektivna adresa je pomeraj relativan u odnosu na adresu 
instrukcije.

Relativno adresiranje koristi koncept lokalnosti o kome se govorilo u poglavljima 4 i 8. Ako je većina 

referenci memorije relativno bliska instrukciji koja se izvršava, onda upotreba relativnog adresiranja 
štedi adresne bitove u instrukciji.

Adresiranje sa osnovnim registrom 

Za adresiranje sa osnovnim registrom postoji slede će tumačenje: 

referencirani registar sadrži adresu u glavnoj memoriji, a adresno polje sadrži pomeraj (obično u 
predstavljanju neoznačenog celog broja) od te adrese. Referenca registra može biti eksplicitna ili 
implicitna.

Adresiranje sa osnovnim registrom takođe koristi lokalnost memorijskih referenci. To je pogodno 

sredstvo za implementiranje segmentacije, o čemu je bilo reči u poglavlju 8. U nekim implementacijama, 
koristi se jedan segmentni osnovni registar da drži osnovnu adresu segmenta, a instrukcije moraju 
eksplicitno da ga referenciraju. U tom poslednjem slučaju, ako je dužina adresnog polja  

K,  a broj 

mogućih registara 

N, onda jedna instrukcija može da referencira bilo koju od N oblasti od po 2K reči.

Indeksiranje 

Za indeksiranje, tipično tumačenje je sledeće: adresno polje referencira adresu u glavnoj 

memoriji, a referencirani registar sadrži pozitivan pomeraj od te adrese. Obratite pažnju na to da je 
ta upotreba upravo suprotna od tumačenja za adresiranje sa osnovnim registrom. Naravno, to je više 
nego samo stvar korisnikovog tumačenja. Zbog toga što se adresno polje smatra memorijskom adresom 
u indeksiranju, ono obično sadrži više bitova od adresnog polja u uporedivoj instrukciji sa osnovnim 
registrom. Takođe, videćemo da postoje neka usavršavanja indeksiranja koja ne bi bila tako korisna u 
kontekstu osnovnog registra. Svejedno, metoda proračuna EA je ista i za adresiranje sa osnovnim 
registrom i za indeksiranje, a u oba slučaja referenca registra je ponekad eksplicitna, a ponekad 
implicitna (za različite vrste procesora).

Značajna   upotreba   indeksiranja   je   da   obezbedi   efikasan   mehanizam   za   izvođenje   iterativnih 

operacija. Razmotrite, na primer, listu brojeva koji su uskladišteni počevši od lokacije A. Pretpostavite 
da bismo želeli da dodamo 1 svakom elementu na listi. Treba da donesemo svaku vrednost, dodamo joj 1 i 
opet je uskladištimo nazad. Sekvenca efektivnih adresa koje su nam potrebne je A, A + 1, A + 2, ... , sve 
do poslednje lokacije na listi. Sa indeksiranjem, to se lako uradi. Vrednost A se uskladišti u adresno 
polje instrukcije, a izabrani registar, koji se zove 

indeksni registar, inicijalizuje se na 0. Posle svake 

operacije, indeks ni registar se povećava za 1.

Zbog toga što se indeksni registar obično koristi za takve iterativne zadatke, tipično je da postoji 

potreba za povećavanjem ili smanjivanjem indeksnog registra posle svake reference na njega. Imajući u 
vidu da je to česta operacija, neki sistemi je rade automatski, kao deo istog instrukcijskog ciklusa. To 
je poznato kao  

autoindeksiranje.  Ako su izvesni registri posvećeni isključivo indeksiranju, onda se 

autoindeksiranje može pozvati implicitno i automatski. Ako se koriste registri opšte namene, može biti 
potrebno da se operacija autoindeksiranja signalizira pomoću jednog bita u instrukciji. Autoindeksiranje 
koje koristi povećavanje može da se opiše na sledeći način:

EA = A + (R)

(R) 

 (R) + I

U nekim mašinama, obezbeđeni su i indirektno adresiranje i indeksiranje, a moguće je primeniti i oba 

u istoj instrukciji. Postoje dve mogućnosti: indeksiranje se izvodi pre ili posle indirekcije.

Ako se indeksiranje izvodi posle indirekcije, to se zove p

ostindeksiranje:

EA = (A) + (R)

Prvo se koristi sadržaj adresnog polja da bi se pristupilo memorijskoj lokaciji koja sadrži direktnu 

67

adresu. Ta adresa se onda indeksira vrednošću registra. Ta tehnika je korisna za pristupanje jednom od 
izvesnog broja blokova podataka fiksnog formata. Na primer, u poglavlju 8 opisano je da operativni 
sistem treba da upotrebi blok za upravljanje procesom za svaki proces. Operacije koje se izvode su 
iste, bez obzira na to kojim blokom se manipuliše. Prema tome, adrese instrukcija koje referenciraju 
blok bi mogle da pokažu na lokaciju (vrednost = A) koja sadrži promenljivi pokazivač na početak bloka za 
upravljanje procesom. Indeksni registar sadrži pomeraj unutar bloka.

Kod 

preindeksiranja, indeksiranje se izvodi pre indirekcije:

EA = (A + (R))

Adresa se proračunava kao kod jednostavnog indeksiranja. Međutim, u ovom slučaju, izračunata adresa 
ne sadrži operand, nego adresu operanda. Primer upotrebe te tehnike je kada se konstruiše tabela 
grananja na više putanja. U određenoj tački u programu, može postojati grananje na jednu od nekoliko 
lokacija, zavisno od uslova. Može da se uspostavi tabela koja počinje na lokaciji A. Indeksiranjem u toj 
tabeli, može da se pronađe zahtevana lokacija.

Skup instrukcija tipično ne sadrži i preindeksiranje i postindeksiranje.

Adresiranje pomoću steka

Poslednji način adresiranja koji razmatramo je adresiranje pomoću steka. Kao što je definisano u 
dodatku 9A, stek je linearni niz lokacija. On se ponekad zove i  

lista potiska naniže,  ili  red poslednji 

unutra  -  prvi napolje.  Stek je rezervisan blok lokacija. Stavke se dodaju na vrh steka tako da je, u 
svakom datom trenutku, blok delimično popunjen. Steku je pridružen pokazivač, čija vrednost je adresa 
vrha steka. Alternativno, dva gornja elementa steka mogu da budu u registrima procesora, u kom slu-
čaju pokazivač steka referencira treći element steka (slika 10.14b). Pokazivač steka se održava u 
registru.  Prema  tome,  reference na  lokacije  steka u memoriji  su,  u stvari, registarske indirektne 
adrese.

Način adresiranja pomoću steak je oblik implicitnog adresiranja. Mašinske instrukcije ne uključuju 

memorijsku referencu, nego implicitno rade na vrhu steka.

FORMATI INSTRUKCIJA

Format instrukcije definiše raspored bitova jedne instrukcije, u vidu polja od kojih se sastoji. Format 
instrukcije mora da uključi kod operacije i, implicitno ili eksplicitno, nula ili više operanada. Svaki 
eksplicitni   operand   referencira   se   koristeći   jedan   od   načina   adresiranja   opisanih   u   odeljku  

11.1. 

Format mora, implicitno ili eksplicitno, da pokaže način adresiranja za svaki operand. U većini skupova 
instrukcija, koristi se više od jednog formata instrukcija.

Dužina instrukcije

Najosnovnije pitanje sa kojim se suočava projektant je dužina formata instrukcije. Ta odluka utiče, a i 
na   nju   utiču,   veličina   memorije,   organizacija,   struktura   magistrale,   složenost   procesora   i   brzina 
procesora. Ta odluka određuje bogatstvo i fleksibilnost mašine kako je vidi programer u asemblerskom 
jeziku.

Ovde je najočigledniji kompromis između želje za moćnim repertoarom instrukcija i potrebom da se 

uštedi prostor. Programeri žele više operacionih kodova, više operanada, više načina adresiranja i veći 
opseg adresa. Više operacionih kodova i operanada olakšava život programeru zato što mogu da se pišu 
kraći programi da bi se izvršili postavljeni zadaci. Slično tome, više načina adresiranja pruža program 
eru veću fleksibilnost u implementiranju izvesnih funkcija, kao što su rad sa tabelama i grananje po više 
putanja.   I,

 

naravno,   sa   povećanjem   glavne   memorije   i   sve   većom   upotrebom   virtuelne   memorije, 

68

background image

upotrebi za referenciranje operanada, manje bitova je potrebno. Veliki broj studija ukazuje da 
je poželjno ukupno od 8 do 32 registra vidljivih za korisnika. Većina savremenih arhitektura ima 
najmanje 32 registra.

Broj skupova registara

  Većina savremenih mašina ima jedan skup registara opšte namene, sa 

tipično 32 ili više registara u skupu. Ti registri mogu da se koriste za skladištenje podataka i za 
adrese kod adresiranja sa pomenijem. Neke arhitekture, uključujući i onu Pentiumovu, imaju 
zbirku od dva ili više specijalizovanih skupova (kao što su registri za podatke i za pomeraje). 
Jedna   od   prednosti   tog   poslednjeg   pristupa   je   što,   za   fiksan   broj   registara,   funkcionalno 
razdvajanje zahteva da se koristi manje bitova u instrukciji. Na primer, sa dva skupa od po osam 
registara, potrebna su samo tri bita da se identifikuje registar; operacioni kOd će implicitno 
odrediti koji skup registara se referencira.

Opseg   adresa  

Za   adrese   koje   referenciraju   memoriju,   opseg   adresa   koje   mogu   da   se 

referenciraju   povezan   je   sa   brojem   adresnih   bitova.   Zbog   toga   što   to   nameće   ozbiljno 
ograničenje, direktno adresiranje se retko koristi. Kod adresiranja sa pomerajem, opseg se 
otvara do dužine adresnog registra. Čak i tada, još uvek je pogodno dozvoliti prilično velike 
pomeraje od registarske adrese, što zahteva relativno veliki broj adresnih bitova u instrukciji.

Granularnost adresiranja 

Za adrese koje referenciraju memoriju, a ne registre, drugi činilac je 

granularnost adresiranja. U sistemu sa 16- ili 32-bitnim rečima, adresa može da referencira reč 
ili bajt, po projektantovom izboru. Adresiranje bajtova je pogodno za rad sa znakovima, ali 
zahteva više bitova za memoriju fiksne veličine.

Prema tome, projektant se suočava sa mnoštvom činilaca koje treba da razmatra i usklađuje. Nije 

jasno koliko su razni izbori kritični. Uz dosledan skup pretpostavki nije primećena nikakva značajna 
razlika u prostoru koda ili vremenu izvršenja.

Hajde da kratko razmotrimo kako su se u konstrukcijama dve istorijske mašine uravnotežavali ti 

razni činioci.

Instrukcije promenljive dužine

Primeri koje smo do sada razmatrali koristili su jednu fiksnu dužinu instrukcija i mi smo implicitno 
raspravljali   o   kompromisima   u   tom   kontekstu.   Ali   projektant   može   umesto   toga   da   izabere   razne 
formate   instrukcija   različitih   dužina.   Ta   taktika   olakšava   da   se   obezbedi   veliki   repertoar   kodova 
operacija,   sa   različitim   dužinama   tih   kodova.   Adresiranje   može   da   bude   fleksibilni   je,   sa   raznim 
kombinacijama registarskih i memorijskih referenci i načina adresiranja. Kod instrukcija promenIjivih 
dužina, te mnogobrojne varijacije mogu da se obezbede na efikasan i kompaktan način.

Najveća cena koju treba platiti za instrukcije promenljive dužine je povećanje složenosti procesora. 

Stalni pad cena hardvera, upotreba mikroprogramiranja (o čemu se govori u četvrtom delu ove knjige) i 
opšte   povećanje   razumevanja   principa   projektovanja   procesora   su   doprineli   da   je   ta   cena   mala. 
Međutim, videćemo da RISC i superskalarne mašine mogu da iskoriste instrukcije fiksne dužine da bi 
pružile poboljšanu performansu.

Upotreba instrukcija promenljive dužine ne uklanja poželjnost pravljenja svih dužina instrukcija da 

budu integralno povezane sa dužinom reči. Zbog toga što procesor ne zna dužinu sledeće instrukcije 
koja treba da se donese, tipična strategija je da se donese izvestan broj bajtova ili reči koji je jednak 
najmanje naj dužoj mogućoj instrukciji. To znači da se ponekad donese više instrukcija odjednom. 
Međutim, kao što ćemo videti u poglavlju 12, to je strategija koju je dobro primenjivati u svakom 
slučaju.

70

Poglavlje 12
STRUKTURA I FUNKCIJA PROCESORA

ORGANIZACIJA PROCESOR

Da bi vam organizacija procesora bila jasnija, razmotrimo najpre zahteve koji se ovoj komponenti 
ispostavljaju, odnosno zadatke koje on treba da izvrši:

Donošenje instrukcija: 

procesor čita instrukcije iz memorije (registra, keša ili glavne 

memorije).

Interpretiranje instrukcija: 

dekodovanjem instrukcija ustanovljuje se koju je akciju 

potrebno preduzeti.

Donošenje podataka: 

izvršavanje instrukcije može da zahteva čitanje podataka iz memorije 

ili nekog U/I

 modula.

Obrada podataka: 

izvršavanje instrukcije može da zahteva izvršavanje neke aritmetičke ili 

logičke operacije nad podacima.

Upisivanje podataka: 

rezultati izvršavanja mogu zahtevati upisivanje podataka u memoriju ili 

U/I modul.

Očigledno je da procesor mora privremeno da uskladišti neke podatke kako bi mogao da izvrši 

navedene zadatke. On mora da zapamti lokaciju poslednje instrukcije kako bi znao gde da potraži 
narednu. Za vreme izvršavanja instrukcije procesor mora da skladišti druge instrukcije i podatke. Dakle, 
procesoru je neophodna mala unutrašnja memorija.

Slika   12.1   predstavlja   pojednostavljeni   prikaz   procesora   u   kome   je   istaknuta   njegova   veza   sa 

ostatkom   sistema   putem   sistemske   magistrale.   Sličan   interfejs   bio   bi   neophodan   za   bilo   koju   od 
struktura međusobnog povezivanja o kojima smo govorili u poglavlju 3. Verovatno se sećate da su 
osnovne komponente procesora  

aritmetička  i  logička jedinica  (ALU) i  upravljačka jedinica  (CU). ALU 

jedinica zadužena je za izračunavanja i obradu podataka, dok upravljačka jedinica upravlja ulaskom 
podataka i instrukcija u procesor i njihovim izlaskom iz njega, kao i radom jedinice ALU. Osim toga, na  
ovoj slici možete da vidite i minimalnu internu memoriju koju čini skup skladišnih lokacija po imenu 

registri.

Slika 12.2 predstavlja nešto detaljniji prikaz procesora. Na ovoj slici istaknute su putanje prenosa 

podataka i logičke kontrole, kojima pripada i element po imenu  

interna magistrala procesora.  Ovaj 

element neophodan je za prenos podataka između različitih registara i jedinice ALU zato što ALU, u 
stvari, operiše samo podacima koji se nalaze u internoj memoriji procesora. Osim toga, na ovoj slici 
prikazani su i tipični osnovni elementi jedinice ALU. Verovatno i sami zapažate sličnost između interne 
strukture računara, kao celine i interne strukture procesora. U oba slučaja postoji mali skup glavnih 
elemenata (računar: procesor, U/I, memorija; procesor: upravljačka jedinica, ALU, registri) koji su 
povezani putanjama podataka.

ORGANIZACIJA REGISTARA

Kao što smo već napomenuli u poglavlju 4, u računarskom sistemu postoji hijerarhija memorije. Na višim 
nivoima   hijerarhije   memorija   je   brža,   manja   i   skuplja   (po   bitu).   U   okviru   procesora   postoji   skup 
registara koji funkcionišu kao memorijski nivo koji se u hijerarhiji nalazi iznad glavne memorije i keš 
memorije. Registri u procesoru izvršavaju dve uloge:

Registri vidljivi za korisnike:

  omogućavaju programeru mašinskog ili asemblerskog jezika da, 

optimalnim   korišćenjem   registara,   svede   na   najmanju   moguću   meru   referenciranje   glavne 

71

background image

je imati između 8 i 32 registra. Manji broj registara povlači veće referenciranje memorije, dok ga 
njihov veći broj ne smanjuje u nekoj značajnijoj meri.  i o njemu ćemo govoriti u poglavlju 13.

Konačno, tu je i aspekt dužine registra. Jasno je da registri u kojima se nalaze adrese treba da budu 

dugački najmanje da mogu da drže najveću adresu. Registri podataka treba da budu u stanju da prime 
većinu tipova podataka. Na nekim računarima moguće je koristiti dva susedna registra za čuvanje 
vrednosti dvostruke dužine.

Poslednja  kategorija  registra,   koja  je  bar   delimično  vidljiva  za  korisnika,   čuva  

uslovne  kodove 

(pominju se i pod terminom  

oznake).  Uslovni kodovi predstavljaju bitove koje procesor dobija kao 

rezultat operacija. Na primer, aritmetičkom operacijom mogao bi da se dobije pozitivan ili negativan 
rezultat, nula ili prekoračenje. Osim samog rezultata koji se skladišti u registru ili memoriji, definiše se 
i uslovni kOd. Ovaj kod naknadno može da se proveri kao deo operacije uslovnog grananja.

Bitovi uslovnog koda grupišu se u jedan ili više registara. Oni obično formiraju deo upravljačkog 

registra. Uopšteno govoreći, mašinske instrukcije omogućavaju čitanje ovih bitova od strane implicitnih 
referenci, s tim što programer ne može da ih menja.

Mnogi procesori, uključujući tu i one koji su bazirani na arhitekturi IA-64, kao i MIPS procesore, 

uopšte ne koriste uslovne kodove. Kod njih se instrukcijama uslovnog grananja, bez skladištenja uslovnog 
koda, naznačavaju poređenje koje treba da se izvrši i akcija koja je rezultat datog poređenja. U tabeli 
12.1, koja je bazirana na dokumentu, navedene su prednosti i nedostaci uslovnih kodova.

U nekim računarima poziv potprograma rezultuje automatskim čuvanjem svih za korisnika vidljivih 

registara koji se zatim obnavljaju prilikom povratka u pozivajući program. Procesor izvršava čuvanje i 
obnavljanje   kao   deo   izvršenja   instrukcija   poziva   i   povratka.   To   svakom   potprogramu   omogućava 
nezavisno   korišćenje   registara   koji   su   vidljivi   za   korisnika.   Kod   nekih   drugih   računara   programer, 
dodavanjem   konkretnih   instrukcija   u   program,   mora   da   razmišlja   o   čuvanju   sadržaja   relevantnih 
registara vidljivih za korisnika koje prethodi pozivu potprograma.

Upravljački i statusni registri

Postoji mnogo procesorskih registara koji se koriste za upravljanje radom procesora. Oni, u većini 
slučajeva, nisu vidljivi za korisnika. Neki od ovih registara mogu biti vidljivi za mašinske instrukcije koje 
se izvršavaju u upravljačkom režimu ili režimu operativnog sistema.

Naravno,   različiti   računari   imaće   i   različite   organizacije   registara   i   drugačiju   terminologiju.   U 

produžetku smo naveli relativno kompletnu listu tipova registara i dali kratak opis svakog od njih.

Za izvršavanje instrukcija, ključni značaj imaju četiri registra:

Programski brojač (PC):

 sadrži adrese instrukcija koje treba doneti.

Instrukcijski registar (IR):

 sadrži instrukciju koja je poslednja donesena.

Memorijski adresni registar (MAR):

 sadrži adresu lokacije u memoriji.

Memorijski bafer registar (MBR):

 sadrži reč ili podatke koji će se zapisati u memoriju ili 

poslednju pročitanu reč.

Interni registri označeni kao MAR i MBR ne postoje kod svih procesora, ali je, u tom slučaju, 

neophodan   neki   alternativni   mehanizam   za   baferovanje   koji   omogućava   prihvatanje   bitova   koji   se 
prenose na magistralu sistema i privremeno skladištenje bitova koji treba da se pročitaju sa magistrale 
podataka.

Procesor obično ažurira programski brojač (PC) nakon svakog novog donošenja instrukcija, tako da 

on   uvek   pokazuje   na   instrukciju   koja   treba   da   bude   izvršena   sledeća.   Instrukcija   za   grananje   ili 
preskakanje   takođe   menja   sadržaj   programskog   brajača.   Prihvaćena   instrukcija   učitava   se   u 
instrukcijski registar u kome se analiziraju operacioni kod i specifikatori operanada. Razmena podataka 

73

sa memorijom odvija se putem memorijskog adresnog registra i memorijskog bafer registra. U sistemu 
organizovanom oko magistrale, memorijski adresni registar direktno se povezuje sa magistralom adrese, 
a memorijski bafer registar sa magistralom podataka. Registri vidljivi za korisnike razmenjuju podatke 
sa memorijskim bafer registrom.

Četiri registra, koje smo upravo pomenuli, koriste se za pomeranje podataka između procesora i 

memorije.  Unutar procesora podaci se moraju ispostaviti aritmetičkoj i  logičkoj  jedinici (ALU) na 
obradu.   ALU   jedinica   može   imati   direktan   pristup   memorijskom   bafer   registru   i   registrima   koje 
korisnik može da vidi. Isto tako, na granici sa ALU jedinicom mogu da postoje dodatni registri za 
baferovanje. Ovi registri imaju ulogu ulaznih i izlaznih registara za ALU jedinicu i razmenjuju podatke 
sa registrom memorijskog bafera i registrima vidljivim za korisnike.

U dizajnu mnogih procesora, postoji registar ili skup registara po imenu  

statusna reč instrukcija 

(PSW) koja sadrži statusne informacije. U PSW reči obično se nalaze uslovni kod ovi, kao i neke druge 
statusne informacije. U uobičajena polja ili oznake ove reči spadaju:

Znak:

 sadrži bit sa znakom rezultata poslednje aritmetičke operacije.

Nula:

 postavlja se kada je rezultat nula.

Prenos:

 postavlja se ukoliko je rezultat operacije prenos (dodavanje) u bit višeg reda ili 

pozajmljivanje (oduzimanje) iz njega. Koristi se za aritmetičke operacije od više reči.

Jednako:

 postavlja se ukoliko je rezultat logičkog poređenja jednakost.

Prekoračenje:

 koristi se za naznačavanje aritmetičkog prekoračenja.

Prekid omogućen/onemogućen

: koristi se za omogućavanje ili onemogućavanje prekida.

Supervizor:

  naznačava da li procesor radi u režimu supervizora ili u korisničkom režimu. 

Određene privilegovane instrukcije mogu da se izvršavaju samo u režimu supervizora. Isto 
tako, nekim oblastima memorije moguće je pristupiti samo iz režima supervizora.

U dizajnima konkretnih procesora, moguće je pronaći mnogo različitih registara koji su povezani sa 

statusom i upravljanjem. U nekim od njih postoji pokazivač koji pokazuje na blok memorije u kome se 
nalaze   dodatne   statusne   informacije   (na   primer,   blokovi   upravljanja   procesom).   Kod   računara   sa 
vektorskim   prekidima,   nekada   postoji   registar   vektora   prekida.   Ukoliko   se   za   implementiranje 
određenih funkcija (recimo, za pozive potprograma) koristi stek, neophodan je pokazivač sistemskog 
steka.   U   sistemima   sa   virtueInom   memorijom,   primenjuje   se   pokazivač   tabele   stranica.   Konačno, 
registri mogu da se koriste za upravljanje U/I operacijama.

Dizajn organizacije upravljačkih i statusnih registara zavisi od mnoštva različitih faktora. Jedan od 

ključnih aspekata predstavlja podrška operativnog sistema. Određeni tipovi upravljačkih informacija 
imaju konkretnu upotrebljivost za operativni sistem. Ako dizajner procesora u osnovi dobro razume 
ciljni   operativni   sistem,   organizacija   registara   se   može,   u   izvesnoj   meri,   prilagoditi   potrebama 
operativnog sistema.

Sledeću bitnu odluku u dizajnu procesora predstavlja raspodela upravljačkih informacija na registre 

i memoriju.  Uobičajeno  je da se prvih  (najnižih) nekoliko stotina  ili  hiljada  reči memorije nameni 
potrebama upravljanja. Dizajner mora da odluči koliko će upravljačkih informacija biti u registrirna, a 
koliko u memoriji. Ovde se obično traži ravnoteža između cene i brzine.

INSTRUKCIJSKI CIKLUS

U odeljku 3.2 opisali smo instrukcijski ciklus procesora (slika 3.9). Podsećamo vas da instrukcijski ciklus 
obuhvata sledeće potcikluse:
1   S   obzirom   na   to   da   procesor   MC68000   već   koristi   32-bitne   registre.   kod   procesora   MC68020 
[MACG84] koji ima punu 32-bitnu strukturu upotrebljena je identična organizacija registara.

74

background image

programskog   brojača   prebacuje   u   memorijski   bafer   registar   kako   bi   bio   upisan   u   memoriju.   Iz 
upravljačke jedinice se u memorijski adresni registar učitava posebna memorijska lokacija rezervisana 
upravo za ovu situaciju. To bi, primera radi, mogao da bude pokazivač steka. U programski brojač se 
učitava   adresa   rutine   prekida.   Kao   rezultat   toga,   sledeći   instrukcijski   ciklus   počinje   donošenjem 
odgovarajuće instrukcije.

PROTOCNA OBRADA INSTRUKCIJA

Razvoj   računarskih   sistema   omogućio   je   da   se,   korišćenjem   pogodnosti   koje   pružaju   poboljšanja 
tehnologije kao što su, primera radi, brža elektronska kola, postignu bolje performanse. Pored toga, 
poboljšanja procesora u smislu njegove organizacije takođe mogu da dovedu do boljih performansi. Do 
sada smo se već upoznali sa nekim primerima ove vrste kao što je, na primer, korišćenje većeg broja 
registara nasuprot jednom akumulatoru, ili korišćenje keš memorije. Sledeći, veoma uobičajen, primer 
tog organizacionog pristupa predstavlja protočna obrada instrukcija.

Strategija protočne obrade

Protočna   obrada   instrukcija   ima   mnogo   sličnosti   sa   fabričkim   proizvodnim   trakama.   Fabričke 
proizvodne trake zasnivaju se na činjenici da proizvod mora da prođe kroz nekoliko proizvodnih etapa. 
Raščlanjivanje   proizvodnog   procesa   na   proizvodnu   traku   omogućava   istovremeni   rad   u   različitim 
etapama proizvodnje. Za ovaj proces se takođe koristi i termin 

protočna obrada (engl. pipelining) zato 

što se, kao i u protoku cevovoda, novi ulazni elementi na jednom kraju prihvataju pre nego što se 
prethodno prihvaćeni elementi pojave kao izlazi na drugom kraju.

Da bismo ovaj koncept mogli da primenimo na izvršavanje instrukcija, najpre nam mora biti jasno da 

se instrukcija, zapravo, sastoji od više faza. Primera radi, na slici 12.5 instrukcijski ciklus je podeljen na 
10 zadataka koji se nadovezuju jedan na drugi. Jasno je da to otvara vrata za primenu protočne obrade.

U pojednostav1jenom obliku pretpostavićemo da u procesu obrade instrukcija postoje dve etape: 

donošenje instrukcija i njihovo izvršenje. Za vreme izvršenja instrukcije postoje trenuci u kojima se ne 
pristupa glavnoj memoriji. Ovi trenuci su, stoga, pogodni za donošenje sledeće instrukcije koje će se 
odvijati paralelno sa izvršenjem one koja je u toku. Na slici 12.9a ilustrovali smo ovaj pristup. Protočna 
obrada sastoji se od dve nezavisne etape. U prvoj fazi odvija se donošenje i baferovanje instrukcije. 
Čim   druga   etapa   postane   slobodna,   prva   joj   prosleđuje   baferovane   instrukcije.   Tokom   izvršavanja 
instrukcije u drugoj etapi, prva etapa koristi sve neiskorišćene memorijske cikluse za donošenje i 
baferovanje   sledeće   instrukcije.   Ovakav   način   rada   naziva   se  

preddonošenje   instrukcija  (engl. 

instruction prefttch) ili preklapanje donošenja (eng!. fetch overlap).

Već na prvi pogled jasno je da ovaj proces ubrzava izvršavanje instrukcija. Kada bi etape donošenja i 

izvršavanja bile jednake po trajanju, instrukcijski ciklus trajao bi upola kraće. Međutim, ako se nešto 
detaljnije pozabavimo ovom protočnom obradom (slika12.9b), videćemo da ovo udvostručavanje brzine 
izvršenja nije verovatno iz dva razloga:

Izvršenje   u   osnovi   traje   duže   od   donošenja.   Ono   podrazumeva   čitanje   i   skladištenje 
operanada i oslanja se na performanse nekih operacija. To znači da će etapa donošenja možda 
morati da sačeka sa pražnjenjem svog bafera.

Uslovno grananje instrukcija čini adresu sledeće instrukcije za preuzimanje nepoznatom. To 
znači   da   etapa   donošenja   mora   čekati   na   prijem   adrese   sledeće   instrukcije   od   etape 
izvršenja.   Etapa   izvršenja   će,   nakon   toga,   možda   morati   da   čeka   na   donošenje   sledeće 
instrukcije.

Predviđanjem   možemo   skratiti   gubitak   vremena   usled   ovog   drugog   razloga.   Postoji   jednostavno 

76

pravilo: kada se instrukcija za uslovno grananje prosleđuje iz etape donošenja u etapu izvršenja, etapa 
donošenja donosi sledeću instrukciju iz memorije nakon instrukcije o grananju. U tom slučaju, ukoliko 
nema grananja, nema ni gubljenja vremena. Međutim, ako postoji grananje, donesena instrukcija mora da 
se odbaci, a donosi se nova.

Mada ovi faktori umanjuju potencijalnu efikasnost dvofazne protočne obrade, postoje i neke uštede 

na vremenu. Dodatno ubrzanje protočne obrade postiže se povećanjem broja etapa. Razmotrimo sada 
obradu instrukcija koja je razložena na sledeći način:

Donošenje   instrukcija   (FI):   učitavanje   sledeće   očekivane   instrukcije   u   bafer.   Dekodiranje 
instrukcija (DI): određivanje operacionog koda i specifikatora operanada.

Izračunavanje operanada (CO): izračunavanje efektivne adrese svakog izvornog 

operanda. 

Ova etapa može da podrazumeva pomeraj, registarsko indirektno, 

indirektno   ili   neko   drugo 

izračunavanje adrese.

Donošenje operanada (FO): donošenje svakog operanda iz memorije. Operandi u registrima ne 
moraju da se preuzimaju.

Izvršavanje instrukcije (El): izvršavanje naznačene operacije i skladištenje rezultata   (ako 
postoji) na naznačenoj lokaciji odredišnog operanda.

Zapisivanje operanda (WO): skladištenje rezultata u memoriji.

Ovako   razložene,   različite   etape   imaće   približno   jednako   trajanje.   Za   potrebe   ilustracije 

pretpostavićemo da traju identično. Oslanjajući se na ovu pretpostavku, na slici 12.10 pokušali smo da 
vam pokažemo kako šestofazna protočna obrada može da skrati trajanje izvršenja 9 instrukcija sa 54 
na 14 vremenskih jedinica.

Na dijagramu se pretpostavlja da svaka instrukcija prolazi kroz svih šest etapa protočne obrade, što 

u stvarnosti neće uvek biti slučaj. Primera radi, instrukciji učitavanja faza WO (zapisivanje operanada) 
nije neophodna. Međutim, da bismo pojednostavili hardver protočne obrade, u trajanju se pretpostavlja 
da svaka instrukcija mora da prođe kroz svih šest etapa. Isto tako, ovde je pretpostavljeno da svih šest 
etapa mogu da se odvijaju simultano. Da budemo sasvim precizni, ovde je pretpostavljeno da ne postoje 
nikakvi konflikti u vezi sa memorijom. Konkretno, etape PI (preuzimanje instrukcija), FO (preuzimanje 
operanada) i WO (zapisivanje operanada) podrazumevaju pristup memoriji.

Iz našeg dijagrama sledi da svi ovi pristupi mogu da se odigraju istovremeno. Međutim, većina 

memorijskih sistema to jednostavno ne bi dozvolila. Sa druge strane, željena vrednost se može nalaziti 
u kešu, ili etape FO i WO mogu biti prazne. Prema tome, u većini slučajeva memorijski konflikti ne 
usporavaju protočnu obradu.

Postoji još nekoliko faktora koji ograničavaju poboljšanje performansi. Ukoliko šest pomenutih etapa 

nemaju isto trajanje, u određenim etapama protočne obrade biće čekanja, sličnog onom koje smo 
pomenuli u dvofaznoj protočnoj obradi. Sledeću smetnju predstavlja instrukcija o uslovnom grananju 
koja   može   da   poništi   nekoliko   preuzetih   instrukcija.   Prekidi   takođe   predstavljaju   na   sličan   način 
nepredvidive događaje. Na slici 12.11, na primeru istog programa kao na slici 12.10, ilustrovane su posle-
dice uslovnog grananja. Pretpostavimo da instrukcija 3 predstavlja uslovno grananje ka instrukciji 15. 
Sve dok se ova instrukcija ne izvrši, ne postoji način da se sazna koja će instrukcija biti sledeća. 
Protočna obrada u ovom prim eru jednostavno učitava sledeću instrukciju iz sekvence (instrukcija 4) i 
nastavlja. Na slici 12.10 nema grananja, tako da imamo maksimalno poboljšanje performansi. Međutim, na 
slici 12.11 postoji grananje koje postaje očigledno tek nakon isteka vremenske jedinice 7. U ovoj fazi iz 
protočne obrade moraju da se izbace sve beskorisne instrukcije. Za vreme osme vremenske jedinice, u 
protočnu obradu ulazi jedinica 15. Između etapa 9 i 12 nema kompletiranja instrukcija; ovo se negativno 
odražava na performanse zato što nismo mogli da predvidimo grananje. Na slici 12.12 naznačili smo 

77

background image

U   osnovi,   vremensko   kašnjenje  

d  jednako   je   impulsnom   signalu   generatora   takta,   a  Tm»   d. 

Pretpostavimo sada da se 

n instrukcija obrađuje bez ikakvog grananja. Neka Tk,n bude ukupno vreme 

koje je protočnoj obradi sa 

k etapa potrebno za izvršavanje n instrukcija.

Tk,n = [k + (n -1)]7    

(12.1)

Za   kompletno   izvršavanje   prve   instrukcije   potrebno   je   ukupno  

k  ciklusa,   dok   preostalih   n-I 

instrukcija zahteva  

n-I  ciklusa2. Ovajednačina može lako da se proveri pomoću slike 12.10. Deveta 

instrukcija se završava u vremenskoj fazi 14:
14=[6+(9-1)]

Razmotrimo sada procesor sa ekvivalentnim funkcijama, ali bez protočne obrade, i pretpostavimo da 

je trajanje instrukcijskog ciklusa  

kr.  Faktor ubrzanja koje donosi protočna obrada definiše se na 

sledeći način:

1; 

n

nkT

S = --'-- =

k Tk,n [k + (n -1)]7

nk k+(n-l)

(12.2)

Na slici 12.14a faktor ubrzanja prikazan je kao funkcija broja instrukcija koje se izvršavaju bez 

grananja. Kao što se može i očekivati, na granici  

(n  --> 00) imamo  kstruko ubrzanje. Na slici 12.14b 

faktor ubrzanja predstavlja funkciju broja etapa u protočnoj obradi instrukcija3. U ovom slučaju, 
vrednost faktora ubrzanja približava se broju instrukcija koji je 11loguće ubaciti u protočnu obradu bez 
grananja. Prema tome, što je veći broj etapa protočne obrade, veća je i mogućnost ubrzanja. Međutim, 
u praksi potencijalne uštede koje donosi povećanje etapa protočne obrade prate i pove
2 Ovde nismo bili previše precizni. Vremenski ciklus može da se izjednači sa maksimalnom vrednošću r 
samo kada se sve etape završe, Na početku, vreme ovog ciklusa može biti kraće za prvu ili nekoliko prvih 
etapa,
3 Skrećemo vam pažnju na to da je osa X na slici l2J4a logaritamska, a na slici l2J4b linearna, ćanje 
troškova, kašnjenja između etapa, kao i činjenica da grananje prati neophodnost izbacivanja iz protočne 
obrade.

Grananje

Jedan   od   najvećih   problema   u  dizajniranju   protočne  obrade  instrukcija  predstavlja  obezbeđivanje 
postojanog   toka   instrukcija   u   inicijalnim   fazama   protočne   obrade.   Kao   što   ste   već   videli,   osnovnu 
smetnju predstavlja instrukcija o uslovnom grananju. Sve dok se ona zaista i ne izvrši, nemoguće je reći 
da li će biti grananja ili ne.

Izlaženju na kraj sa uslovnim grananjima može se pristupiti na više načina:

višestrukim tokovima,

preddonošenjem cilja grananja, . baferom petlje,

predviđanjem grananja,

odložen im grananjem.

Višestruki tokovi 

Jednostavna protočna obrada plaća danak grananju instrukcija u tom smislu što ovde moraju da se 
preuzmu jedna ili dve naredne instrukcije, a ovaj izbor može biti pogrešan. Nimalo sofisticirano rešenje 
ove situacije predstavlja kopiranje inicijalnih delova protočne obrade što joj, kroz korišćenje dva toka, 
omogućava da preuzme obe instrukcije. U ovakvom pristupu javljaju se dva problema:

Kod višestrukih protočnih obrada javlja se dodatno kašnjenje sadržaja vezano

za pristup 

79

registrima i memoriji.

Instrukcije o dodatnom grananju mogu da uđu u protočnu obradu (svejedno u koji   njen   niz)   pre 
razrešenja prvobitnog grananja. U tom slučaju svakoj instrukciji potreban je dodatni tok.

Uprkos pomenutim nedostacima, ova strategija može da popravi performanse. U primere procesora sa 
dva ili više tokova protočne obrade spadaju IBM 370/168 i IBM 3033.

Preddonošenje cilja grananja

  Kod ovog pristupa, čim se ustanovi uslovno grananje, osim instrukcije 

koja sledi grananje, unapred se donosi i cilj grananja. Ovaj cilj se skladišti i zatim čeka na izvršenje 
instrukcije o grananju. Ukoliko se krene u grananje, njegov cilj je već unapred preuzet. Kod procesora 
IBM 360/91, upotrebljen je upravo ovaj pristup.

Bafer   petlje

  Bafer   petlje   predstavlja   malu   i   veoma   brzu   memoriju   koju   održava   faza   donošenja 

instrukcija protočne obrade, a koja sadrži 

n najskorije preuzetih instrukcija po redu. Ukoliko dođe do 

grananja, hardver naj pre proverava da li je njegov cilj već u baferu. Ako jeste, to znači da se sledeća 
instrukcija preuzima iz bafera. Bafer petlje donosi tri pogodnosti:

Kod preddonošenja u baferu petlje, nalaziće se neke instrukcije koje se u redosledu nalaze ispred 
adrese preuzimanja aktuelne instrukcije. To znači da će instrukcije preuzete u sekvenci biti 
dostupne bez uobičajenog vremena potrebnog za pristup memoriji.
Ukoliko   se   ispostavi   da   je   cilj   grananja   samo   nekoliko   lokacija   ispred   adrese   instrukcije   o 
grananju, on će se već nalaziti u baferu. Ova činjenica je veoma korisna za veoma uobičajenu 
sekvencu IF-TREN i IF-THEN-ELSE.
Ova strategija je naročito pogodna za petlje ili ponavljanja; otuda i ime  

bajer petlje.  Ako je 

bafer petlje dovoljno veliki za skladištenje svih instrukcija petlje, to znači da će ove instrukcije 
morati   da   se   preuzmu   iz   memorije   samo   jednom   -   za   prvo   ponavljanje.   Za   sva   naknadna 
ponavljanja, sve neophodne instrukcije su već u baferu.

Po   svojim   karakteristikama,   bafer   petlje   veoma   podseća   na   keš   memoriju   koja   je   dodeljena 

instrukcijama. Osnovne razlike su te da bafer zadržava samo instrukcije u sekvenci i da je mnogo manji 
po veličini, pa stoga i jeftiniji.

Na slici 12.15 dali smo primer bafera petlje. Ukoliko bafer sadrži 256 bajtova, a koristi se bajtno 

adresiranje,   onda   se   8   najmanje   značajnih   bitova   koriste   za   indeksiranje   bafera.   Proveravanjem 
preostalih značajnijih bitova, ustanovljuje se da li se cilj grananja nalazi unutar okruženja koje je 
obuhvatio bafer.

Među računarima koji koriste bafer petlje nalaze se neki CDC računari (Star-lOO, 6600, 7600) i 

CRAY-l. Kod procesora Motorola 68010, postoji posebna forma bafera petlje u kojoj se izvršava petlja 
sa   tri   instrukcije   koja   obuhvata   DBcc   (smanjenje   i   grananje   pod   uslovom)   instrukcije   (pročitajte 
problem 12.14). Sve dok se uslov petlje ne zadovolji, ova petlja od tri reči se održava, a procesor iznova 
izvršava njene instrukcije.
nanje pod uslovom) instrukcije (pročitajte problem 12.14). Sve dok se uslov petlje ne zadovolji, ova 
petlja od tri reči se održava, a procesor iznova izvršava njene instrukcije.

Predviđanje grananja 

Postoje različite tehnike za predviđanje grananja, a najčešće se koriste:

predviđanje da se nikada neće dogoditi;

predviđanje da će se uvek dogoditi;

predviđanje od strane operacionog koda;

prekidač postoji/ne postoji;

tabela istorije grananja.

Prva tri pristupa su statička. Na njih istorija izvršenja do trenutka kada se pojavi prva instrukcija o 

grananju ne utiče ni na koji način. Poslednja dva pristupa su dinamička, što znači da se oslanjaju na 

80

background image

12.17). Ova vrsta predstavljanja veoma je uobičajena u literaturi.

Korišćenje bitova za evidentiranje istorije koje smo upravo opisali ima i jedan nedostatak. Ukoliko se 

donese odluka o grananju, ciljna instrukcija ne može da se preuzme sve dok se ciljna adresa, koja 
predstavlja operand u okviru instrukcije o uslovnom grananju, ne dekodira. Bilo bi efikasnije kada bi se 
preuzimanje instrukcije iniciralo onog trenutka kada se donese odluka o grananju. Međutim, za to je 
potrebno više uskladištenih informacija koje se čuvaju u nečemu što se naziva bafer cilja grananja ili 
tabela istorije grananja.

Tabela istorije grananja jeste mala keš memorija koja je povezana sa fazom donošenja instrukcija 

protočne obrade. Svaki unos ove tabele sastoji se od tri elementa: adrese instrukcije o grananju, nekog 
broja bltova za evidentiranje istorije kojima se beleži status korišćenja date instrukcije i informacije o 
cilj noj instrukciji. U većini predloga i implementacija, u ovom trećem polju nalazi se adresa ciljne 
instrukcije.
Drugo rešenje je da se u ovom trećem polju nalazi sama ciljna instrukcija. Dilema je u ovom slučaju 
sasvim   jasna:   skladištenje   ciljne   adrese   povlači   manju   tabelu,   ali   i   duže   trajanje   preuzimanja   od 
skladištenja ciljne instrukcije [RECH98].

Na slici 12.18 možete da vidite kako izgleda šema suprotne strategije - predviđanja da grananja 

nikada neće biti. U prethodno opisanom pristupu, faza preuzimanja instrukcija uvek preuzima adresu 
koja je sledeća na redu. Ukoliko dođe do grananja, neka logika u procesoru to ustanovljuje i naređuje da 
se sledeća instrukcija donese sa cilj ne adrese (pored oslobađanja protočne obrade).

Tabela istorije grananja tretira se kao keš. Svako preddonošenje inicira pretragu tabele istorije 

grananja. Ukoliko se ne pronađe poklapanje, za donošenje se koristi sledeća adresa po redu. U slučaju 
pronalaženja preklapanja, predviđanje će se bazirati na statusu instrukcije: logika izbora rukovodi se ili 
sledećom adresom po redu ili adresom cilja grananja.

Nakon izvršenja instrukcije o grananju, faza izvršenja javlja rezultat logici tabele sa istorijom gra-!

1anja. Status instrukcije se ažurira u skladu sa tačnim ili netačnim predviđanjem. Ukoliko predviđanje 
nije tačno, logika izbora se preusmerava ka pravoj adresi sledećeg preuzimanja. Prilikom suočavanja sa 
instrukcijom o uslovnom grananju koja ne postoji u tabeli, nova instrukcija se upisuje u tabelu, a jedan 
od postojećih upisa odbacuje korišćenjem nekog od algoritama za zamenu keša o kojima smo govorili u 
poglavlju 4.

Jedan od primera implementacije tabele istorije grananja predstavlja procesor Advanced Micro 

Device AMD29000.
Odloženo grananje Performanse protočne obrade mogu se poboljšati i automatskim preraspoređivanjem 
instrukcija u okviru programa tako da se instrukcije o grananju pojave kasnije nego što ih zaista želimo. 
O ovom interesantnom pristupu govorićemo u poglavlju 13.

Postojanje dve faze dekodiranja omogućava protočnoj obradi da podrži opterećenje od skoro jedne 

instrukcije po ciklusu generatora takta. Složene instrukcije i uslovno grananje mogu da usp ore ovu 
brzinu.

Na   slici   12.19   možete   da   vidite   primere   načina   rada   protočne   obrade.   U   delu   (a)   vidi   se   da 

neophodnost pristupa memoriji ne dovodi do kašnjenja u protočnoj obradi. Međutim, kao što možete da 
vidite u delu (b), kašnjenja su moguća za vrednosti koje se koriste za izračunavanje adresa u memoriji. 
Odnosno, ukoliko se vrednost učitava iz memorije u registar, i taj registar se zatim koristi kao bazni 
registar za narednu instrukciju, procesor će stati jedan ciklus. U ovom primeru, procesor pristupa kešu 
u EX fazi prve instrukcije i skladišti dobijenu vrednost u registru tokom faze WB. Međutim, sledećoj 
instrukciji je ovaj registar neophodan u njegovoj fazi D2. Odnosno, ukoliko se vrednost učitava iz 
memorije u registar, i taj registar se zatim koristi kao bazni registar za narednu instrukciju, procesor 

82

će stati jedan ciklus. U ovom primeru, procesor pristupa kešu u EX fazi prve instrukcije i skladišti 
dobijenu vrednost u registru tokom faze WB. Međutim, sledećoj instrukciji je ovaj registar neophodan 
u njegovoj fazi D2. I

Na slici 12.19c ilustrovan je vremenski raspored instrukcije o grananju, pod pretpostavkom da je 

došlo do grananja. Poređenjem instrukcija ažurira ju se uslovni kodovi faze WB, a putanje preskakanja 
ih istovremeno čine dostupnim za fazu EX instrukcije o skoku. Procesor tokom EX faze instrukcije o 
skoku paralelno vodi spekulativni ciklus preuzimanja sa cilja datog skoka. Ukoliko ustanovi pogrešan uslov 
grananja, procesor odbacuje ovo preddonošenje i nastavlja sa izvršenjem sledeće instrukcije po redu 
(već donesene I dekodirane).

Poglavlje 13
KLJUČNE TEZE

Proučavanja ponašanja izvršenja programa napisanih u jezicima visokog niovoa, obezbedila su 
smernice   za   dizajniranje   novog   tipa   arhitekture   procesora:   računara   sa   smanjenim   skupom 
instrukcija  

(Reduced lnstruction Set Computer,  RISC). Ovde dominiraju iskazi dodeljivanja, iz 

čega se može zaključiti da jednostavno premeštanje podataka treba još optimizirati. Osim toga, 
postojanje velikog broja IF i LOOP instrukcija govori da i kontrolni mehanizam sekvence, koji se 
nalazi u osnovi, takođe treba optimizirati kako bi se dobila efikasna protočna obrada. Na osnovu 
proučavanja šablona referenciranja operanada, može se zaključiti da je poboljšanje performansi 
uz očuvanje umerenog broja operanada u registrima sasvim izvodljivo.

Iz pomenutih proučavanja proistekle su ključne karakteristike RISC mašina: (1) ograničen skup 
instrukcija fiksiranog formata, (2) veliki broj registara ili korišćenje kompajlera koji optirnizira 
njihovo korišćenje i (3) naglasak na optimiziranju protočne obrade instrukcija.

Jednostavan skup instrukcija RISC procesora omogućava efikasnu protočnu obradu budući da se 
za svaku instrukciju izvršava manji broj operacija koje su predvidljive. Arhitektura RISC skupa 
instrukcija isto tako omogućava primenu tehnike odloženog grananja u kojoj se instrukcije o 
grananju   preureduju   zajedno   sa   ostalim   instrukcijama   radi   poboljšanja   efikasnosti   protočne 
obrade.

Od   razvoja   računara   sa   internim   programima   iz   1950-ih,   bilo   je   zapravo   samo   nekoliko   istinskih 
inovacija u oblastima organizacije i arhitekture računara. Evo nekih od najznačajnijih inovacija koje su 
se dogodile nakon pojave računara:

Koncept porodice: ovaj koncept je uveo IBM svojim računarom System/360 iz 1964. godine, 
nakon koga su se pojavili DEC i PDP-8. Koncept porodice odvaja mašinu od njene implementacije. 
Korisnicima se nudi nekoliko računara različite cene i karakteristika koji prema korisnicima 
pokazuju istu arhitekturu. Razlike u ceni i karakteristikama potiču od različitih implementacija 
iste arhitekture.

Mikroprogramirana   upravljačka   jedinica:   ovu   inovaciju   predložio   je   Vilks   1954.   godine,   a 
realizovao   1964.   godine   IBM   svojom   linijom   S/360.   Mikroprogramiranje   olakšava   posao 
dizajniranja i implementiranja upravljačke jedinice i istovremeno obezbeđuje podršku za koncept 
porodice.

Keš memorija: keš memorija se 1968. godine prvi put komercijalno pojavila na račun aru IBM 
S/360 Model 85. Dodavanjem ovog elementa u hijerarhiju memorije, performanse su drastično 
poboljšane.

83

background image

inspirisali su neke istraživače da potraže drugačiji pristup da arhitekturu koja podržava 

HLL 

pokušaju 

da učine što je moguće jednostavnijom.

Da biste u potpunosti razumeli argumente zagovornika RiSC računara, naj prećemo vam ukratko 

prikazati karakteristike izvršenja instrukcija. Ovde su posebno zanimljivi sledeći računski aspekti:

Izvršene operacije: 

ove operacije određuju funkcije koje će procesor izvršiti,

kao

 

njegovu interakciju sa memorijom.

Upotrebljeni operandi: 

od tipova operanada, kao i učestalosti njihovog korišće

nja,   zavisi 

način organizacije memorije prilikom njihovog skladištenja, kao i 

načini

 

adresiranja 

prilikom njihovog preuzimanja.

Redosled izvršenja: 

ovaj aspekt određuje organizaciju upravljanja i protočne obrade.

U nastavku ovog odeljka rezimiraćemo rezultate brojnih istraživanja 

HLL 

programa. Svi ovi rezultati 

zasnivaju se na dinamičkim merenjima. To znači da su merenja prikupljena kroz izvršenje programa 
registrovanjem broja pojavljivanja određene funkcije, ili istinitosti nekog svojstva. Nasuprot tome, 
statička merenja odnose se samo na izvorni tekst programa. Ona nam ne mogu pružiti upotrebljive 
podatke o performansama zato što se kod njih ne registruje broj izvršenja svakog iskaza.

Operacije

Postoji mnogo studija u kojima je analizirano ponašanje 

HLL 

programa. U tabeli 4.8, koju smo razmatrali 

u poglavlju 

4, 

navedeni su ključni rezultati iz nekoliko različitih studija. U pogledu dobijenih rezultata, 

iz   mnoštva   različitih   jezika   i   aplikacija   postoji   sasvim   solidan   konsenzus.   Iz   dominacije   iskaza 
dodeljivanja može se zaključiti da je prosto premeštanje podataka veoma značajno. Isto tako mnogo 
ima i uslovnih iskaza (IF, LOOP). Ovi iskazi implementirani su u mašinski jezik nekim vidom poređenja i 
instrukcijom o grananju. Iz toga se može zaključiti da je mehanizam za upravljanje redosledom skupa 
instrukcija takođe veoma bitan.

Dobijeni rezultati predstavljaju smernice za dizajnere skupova mašinskih instrukcija, u tom smislu 

da one tipove iskaza koji se najčešće pojavljuju treba podržati na «optimalan» način. Međutim, iz ovih 
rezultata ne može se zaključiti na koje iskaze odlazi najviše vremena prilikom izvršavanja tipičnih 
programa. Odnosno, u domenu kompajliranih programa u mašinskom jeziku - koje instrukcije izvornog 
jezika prouzrokuju izvršenje najvećeg broja instrukcija mašinskog jezika?

Da bi se razjasnio ovaj fenomen, programi Patterson [PATT82aJ, opisani u dodatku 4A, kompajlirani 

su   na   procesorima   VAX,  

PDP-ll  

i   Motorola   68000,   kako   bi   se   odredio   prosečan   broj   mašinskih 

instrukcija i referenciranja memorije po tipovima iskaza. U drugoj i trećoj koloni tabele 13.2 navedena 
je relativna učestalost pojavljivanja raznih  

HLL  

instrukcija u najrazličitijim programima; podaci su 

dobijeni posmatranjem pojavljivanja u aktivnim programima, a ne evidentiranjem njihovog pojavljivanja u 
izvornom kodu. Prema tome, u pitanju su dinamički pokazatelji učestalosti pojavljivanja.

Da bi se dobili podaci za četvrtu i petu kolonu (udeo mašinskih instrukcija), svaka vrednost iz druge i 

treće kolone morala je da se pomnoži brojem mašinskih instrukcija koje je proizveo kompajler. Ovi 
rezultati su zatim normalizovani, tako da kolone četiri i pet pokazuju relativnu učestalost pojavljivanja 
merenu brojem mašinskih  instrukcija  

po HLL  

iskazu.  Slično  tome,  vrednosti šeste  i sedme kolone 

dobijene su množenjem učestalosti pojavljivanja svakog tipa iskaza relativnim brojem referenciranja 
memorije   prouzrokovanog   svakim   iskazom.   Podaci   u   kolonama   od   četiri   do   sedam   predstavljaju 
alternativne mere stvarnog vremena provedenog u izvršenju raznih tipova iskaza. Dobijeni rezultati 
govore   da   poziv/povratak   procedure   u   tipičnim  

HLL  

predstavlja   operaciju   sa   najvećim   utroškom 

vremena.

Ovde želimo da vam skrenemo pažnju na značaj tabele 13.2. Ova tabela pokazuje relativni značaj 

raznih tipova iskaza u  

HLL  

jeziku kada je dati  

HLL  

jezik kompajliran za savremenu arhitekturu sa 

85

tipičnim   skupom   instrukcija.   Na   nekim   drugim   arhitekturama   dobili   bismo   i   drugačije   rezultate. 
Međutim, ovim proučavanjem dobijeni su rezultati koji su reprezentativni za savremene arhitekture 
računara sa složenim skupom instrukcija (CISC). Stoga ovi rezultati mogu da obezbede smernice onima 
koji traže efikasnije načine podrške 

HLL 

jezika.

Operandi

Uprkos njihovoj važnosti, pojavljivanju pojedinih tipova operanada posvećena je mnogo manja pažnja. 

Ovde postoji nekoliko značajnih aspekata.

U istraživanju na koje smo se već pozivali [PATT82a], Paterson se bavio i dinamičkom učestalošću 

pojavljivanja klasa promenljivih (tabela 13.3). Rezultati, koji su bili dosledni za Pascal i C programe, 
pokazali su da većina referenci vodi ka jednostavnim skalarnim promenljivim.

Ustanovljeno je i to da su u više od 80% slučajeva skalarne promenljive bile lokalne (za proceduru). 

Osim toga, reference ka nizovima i strukturama zahtevaju prethodno referenciranje njihovog indeksa 
ili pokazivača, koji je obično opet lokalna skalarna promenljiva. Prema tome, uočava se dominantno 
referenciranje skalarnih promenIjivih koje su u visokom procentu lokalizovane.

U   svom   proučavanju   Paterson   je   ispitao   dinamičko   ponašanje   HLL   programa,   nezavisno   od 

arhitekture na kojoj se oni zasnivaju. Međutim, kao što smo već napomenuli, detaljnija proučavanja 
programa   podrazumevaju   i   ispitivanje   same   arhitekture.   U   jednoj   studiji   [LUND77]   dinamički   su 
ispitane DEC-1O instrukcije i ustanovljeno je da svaka instrukcija u proseku referencira 0,5 operanada 
u memoriji i 1,4 registara. Slični rezultati dobijeni su i u studiji [HUCK83] za C, Pascal i FORTRAN 
programe   na   računarima   Sj370,   POP-lI   i   VAX.   Naravno,   ovi   rezultati   u   velikoj   meri   zavise   i   od 
arhitekture i od kompajlera, ali se može reći da ilustruju učestalost pristupa operandima.

Iz ove poslednje dve studije može se zaključiti da je arhitektura veoma značajna za brz pristup 

operandima, posebno ako se ima u vidu učestalost ove operacije. Na osnovu rezultata Patersonovog 
proučavanja, mogli bismo zaključiti da najpre treba optimizirati mehanizam za skladištenje i pristup 
lokalnim skalarnim promenljivama.

Pozivi procedure

Videli smo da pozivi i ishodi procedure predstavljaju važan aspekt HLL programa. Činjenice (tabela 13.2) 
pokazuju da je reč o operacijama na koje se u HLL programima utroši najviše vremena. Zbog toga je 
veoma značajno razmotriti načine njihove što je moguće efikasnije implementacije. U tom smislu dva 
aspekta su posebno značajna: broj parametara i promenljivih sa kojima procedura treba da se nosi i 
dubina ugnežđivanja.
U svom proučavanju Tanebaum [TANE78] je ustanovio da 98% dinamički pozvanih procedura dobije 
manje od šest argumenata, a da je 92% njih koristilo manje od šest lokalnih skalarnih promenljivih. 
Slične rezultate dobio je i RISC tim Univerziteta Berkli [KATE83], što možete da vidite u tabeli 13.4. 
Ovi rezultati pokazuju da broj reči koji je neophodan za aktiviranje procedure nije veliki. U rezultatima 
istraživanja, koja smo već pominjali, videli smo da se visok procenat referenciranja operanada vezuje za 
lokalne skalarne promenljive. Ova istraživanja pokazuju nam i to da su ove reference u stvari svedene na 
relativno mali broj promenijivih.

Pomenuta grupa sa Berklija bavila se i šablonima poziva i ishoda procedure u okviru HLL programa. 

Ustanovili su da se veoma retko događa da nakon dugog i neprekidnog niza poziva procedura sledi i 
odgovarajući niz ishoda, a program ostaje ograničen na prilično uske okvire dubine poziva procedura.

Ovo je ilustrovano i na slici 4.16 koju smo razmatrali u poglavlju 4. Ovi rezultati samo potvrđuju 

zaključak da su reference operanada visoko lokalizovane.

Implikacije

Razni istraživački timovi došli su do sličnih rezultata, tako da je opšti zaključak da pokušaj pravljenja 

86

background image

roditeljskog programa moraju da se obnove (učitaju nazad u registre) i rezultati se moraju proslediti 
natrag do roditeljskog programa.

Rešenje ovog problema bazira se na dva zaključka koji su izvedeni iz istraživanja pominjanih u 

odeljku 13.1. Najpre, tipičan poziv procedure primenjuje samo nekoliko predatih parametara i lokalnih 
promenijivih (tabela 13.4). Zatim, dubina aktiviranja procedure koleba se u relativno uskim okvirima 
(slika 4.16). Radi iskorišćavanja ovih karakteristika, koristi se više malih skupova registara od kojih je 
svaki   dodeljen   različitoj   proceduri.   Poziv   procedure,   umesto   skladištenja   registara   u   memoriji, 
automatski prebacuje procesor na korišćenje različitog prozora registara fiksirane veličine. Prozori 
susednih procedura se poklapaju, što omogućava predavanje parametara.

Ovaj koncept ilustrovali smo na slici 13.1. U bilo kom trenutku vidljiv je samo jedan prozor sa 

registrirna; jedino njega je moguće adresirati zato što izgleda kao da je to jedini skup sa registrima (na 
primer, adrese od O do 

N - 1). Prozor je podeljen na tri oblasti fiksirane veličine. Registri parametara 

čuvaju parametre koje je predala naniže procedura koja je pozvala aktuelnu proceduru, kao i vrednosti 
koje će biti predate naviše. Lokalni registri koriste se za lokalne promenljive, onako kako ih dodeljuje 
kompajler. Privremeni registri koriste se za razmenu parametara i rezultata sa sledećim nižim nivo om 
(procedurom koju je pozvala aktuelna procedura).

Privremeni registri jednog nivoa su fizički isti kao registri parametara sledećeg nižeg nivoa. Ovo 

preklapanje omogućava predavanje parametara bez stvarnog premeštanja podataka.

Da bi se moglo rukovati svim mogućim kombinacijama poziva i povrataka, broj prozora sa registrima 

trebalo bi da bude neograničen. Međutim, prozori registara mogu da se koriste za čuvanje nekoliko 
najskorije aktiviranih procedura. Starija aktiviranja moraju se sačuvati u memoriji odakle se obnavljaju 
kada se dubina ugnežđivanja smanji. Stoga stvarna organizacija datoteke registra podseća na kružni 
bafer od preklapajućih prozora. Dva očigledna primera ovog pristupa su arhitektura SPARC kompanije 
Sun koju smo opisali u odeljku 13.7 i arhitektura IA-64 Intelovog procesora Itanium koji je opisan u 
poglavlju 15.

Na slici 13.2 prikazana je kružna organizacija sa baferom od šest prozora. Bafer se popunjava do 

dubine 4 (A poziva B; B poziva C; C poziva D) i proceduraD je aktivna. Pokazivač aktuelnog prozora 

(current-window pointer, CWP) pokazuje na prozor trenutno aktivne procedure. Ovaj pokazivač pomera 
referenciranja registra od strane mašinskih instrukcija kako bi se odredio stvarni fizički registar. 
Pokazivač   sačuvanog   prozora   identifikuje   prozor   koji   je   poslednji   sačuvan   u   memoriji.   Ukoliko 
procedura D sada pozove proceduru E, argumenti za E se smeštaju u privremene registre procedure D 
(preklapanje između w3 i w4), a CWP prelazi jedan prozor unapred.

Ukoliko procedura E zatim pozive proceduru F, ovaj poziv neće biti moguć sa trenutnim stanjem 

bafera. To je zato što se prozor procedure F preklapa sa prozorom procedure A. Ako procedura F, 
pripremajući se za poziv, počne da učitava svoje privremene registre, ona će ih zapisati preko registara 
parametara procedure A (A.in). Prema tome, kada se vrednost pokazivača CWP poveća (modulo 6) i 
izjednači sa pokazivačem SWP, događa se prekid i prozor procedure A se snima. Potrebno je snimiti 
samo prva dva dela (A.in i A.loc) ovog prozora. Zatim se vrednost pokazivača SWP povećava, a poziv 
procedure F nastavlja. Sličan prekid može da se dogodi i kod povratka. Na primer, nakon aktiviranja 
procedure F, kada se procedura B vrati do A, vrednost pokazivača CWP se smanjuje i izjednačava sa 
vrednošću pokazivača SWP. Ovo takođe dovodi do prekida i obnavljanja prozora procedure A.

Iz svega prethodno rečenog možete videti da datoteka registara sa 

N prozora može da čuva samo 

N-I aktivacija procedura. Vrednost 

N ne mora da bude velika. Kao što je rečeno u dodatku 4A, u jednom 

istraživanju [TAMI83] ustanovljeno je daje, uz 8 prozora, snimanje ili obnavljanje neophodno u samo 1 
% poziva ili povrataka. Berkli RISC računari koriste 8 prozora sa po 16 registara, a računari Pyramid 16 

88

prozora sa po 32 registra.

Globalne promenljive

Šema   prozora   koju   smo   upravo   opisali   predstavlja   efikasnu   organizaciju   za   skladištenje   lokalnih 
skalarnih   promenIjivih   u   registrirna.   Ipak,   ova   šema   ne   rešava   problem   skladištenja   globalnih 
promenIjivih   kojima   pristupa   veći   broj   procedura.   Dve   opcije   nameću   se   same   od   sebe.   Najpre, 
promenIjivama koje su u HLL jeziku deklarisane kao globalne, kompajler može da dodeli memorijske 
lokacije,   a   sve   mašinske   instrukcije   koje   referenciraju   ove   promenljive   koristiće   operande   za 
referenciranje   memorije.   Ovaj   pristup   je   jednostavan   i   iz   perspektive   hardvera   i   iz   perspektive 
softvera   (kompajlera).   Međutim,   za   globalne   promenljive   kojima   se   često   pristupa,   ova   šema   nije 
efikasna.

Alternativno rešenje bilo bi inkorporisanje skupa globalnih registara u procesor. Broj ovih registara 

bio   bi   fiksiran   i   oni   bi   bili   dostupni   za   sve   procedure.   Objedinjenom   šemom   numerisanja,   format 
instrukcija može da se pojednostavi. Na primer, reference ka registrima od O do 7 mogu da se odnose 
na jedinstvene globalne registre, dok se reference ka registrima od 8 do 31 mogu pomeriti kako bi se  
odnosili   na  fizičke  registre   u  aktuelnom   prozoru.  Ova  podela  u  adresiranju  registara  stavlja  veće 
zahteve pred hardver. Osim toga, kompajler mora da odluči koje globalne promenljive treba do de liti 
registrirna.

Velika registarska datoteka ili keš

Registarska datoteka organizovana u prozore ponaša se kao mali i brz bafer za čuvanje podskupa 
promenIjivih za koje se pretpostavlja da će najviše biti korišćene. Iz ove perspektive registarska 
datoteka ponaša se veoma slično keš memoriji, od koje je ipak mnogo brža. Ovde se postavlja pitanje da 
li bi bilo jednostavnije i bolje koristiti keš i malu tradicionalnu registarsku datoteku.

U   tabeli   13.5   uporedili   smo   karakteristike   ova   dva   pristupa.   Registarska   datoteka   bazirana   na 

prozorima   čuva   sve   lokalne   skalarne   promenljive   (osim   u   retkom   slučaju   prekoračenja   prozora) 
najskorijih N-I aktivacija procedure. U kešu se nalazi izbor nedavno korišćenih skalarnih promenIjivih. 
Registarska   datoteka   bi   trebalo   da   donese   uštedu   vremena   budući   da   se   sve   lokalne   skalarne 
promenljive zadržavaju. Sa druge strane, keš bi, zahvaljujući svom dinamičkom načinu reagovanja na 
novonastale situacije, mogao da doprinese efikasnijem korišćenju prostora.

Osim toga, keš praktično sva referenciranja memorije, uključujući tu instrukcije i ostale tipove 

podataka, tretira na isti način. To znači da uštede u ovim ostalim oblastima donosi keš, a ne registarska 
datoteka.

Može se dogoditi da registarska datoteka ne koristi prostor na ekonomičan način zato što mnogim 

procedurama neće biti potreban celokupan dodeljeni prostor prozora. Nasuprot tome, keš pogađa drugi 
oblik neefikasnosti: u njega se podaci keš učitavaju u blokovima. Dok registarska datoteka sadrži samo 
one promenljive koje se koriste, keš prima blokove podataka od kojih dobar deo uopšte neće biti 
upotrebljen.

Keš može da rukuje i globalnim i lokalnim promenljivim. Obično postoji mnogo različitih globalnih 

skalara, ali se samo nekoliko njih koristi u većoj meri [KATE83]. Keš dinamički otkriva ove promenljive i 
zadržava ih. Ukoliko su u registarsku datoteku koja je bazirana na prozorima dodati i globalni registri, 
ona   takođe   može   da   čuva   i   neke   globalne   skalarne   promenljive.   Međutim,   izdvajanje   globalnih 
promenljivih koje će se koristiti u većoj meri predstavlja prilično težak posao za kompajler.

Kod   registarske   datoteke,   pomeranje   podataka   od   registra   do   memorije   određuje   se   dubinom 

ugnežđivanja procedure. S obzirom na to da izmene ove dubine obično nisu velike, memorija se retko 
koristi. Keš memorije su, u većini slučajeva, asocijativne sa malom veličinom skupa. Zbog toga postoji 
opasnost da se ostali podaci ili instrukcije upišu preko često korišćenih promenljivih.

89

background image

Uopšteno govoreći, uvek treba stremiti ravnoteži između velikog skupa registara i optimiziranja 

baziranog na kompajleru. Na primer, u radu [BRAD9la] analizirano je istraživanje koje je u RISe 
arhitekturu uvelo funkcije slične onim koje imaju procesori Motorola 88000 i MIPS R2000. Istraživači 
su, menjajući broj registara (od 12 do 128), razmatrali i korišćenje samo registara opšte namene i 
njihovu podelu na deo za cele brojeve i deo namenjen pokretnom zarezu. Njihovo proučavanje pokazalo 
je da, čak i uz jednostavnu optimizaciju, više od 64 registra ne donosi nikakvu korist. Primena relativno 
sofisticiranih tehnika optimizacije registara donosi minimalno poboljšanje performansi ukoliko je broj 
registara veći od 32. Konačno, ovi istraživači ustanovili su i to da je, ukoliko je broj registara mali 
(recimo, 16), izvršenje brže na računarima sa organizacijom zajedničkih registara, nego kod onih kod 
kojih su registri podeljeni.

Slični zaključci mogu se izvesti i iz rada [HUGU91] u kome je prikazano istraživanje čiji su se autori 

više bavili optimiziranjem korišćenja malog broja registara nego dovođenjem u vezu velikih skupova i 
nastojanja da se oni optimiziraju.

13.4 ARHITEKTURA SMANJENOG SKUPA INSTRUKCIJA

U   ovom   odeljku   bavićemo   se   nekim   opštim   karakteristikama   arhitekture   sa   smanjenim   skupom 
instrukcija, kao i razlozima njene primene. U nastavku ovog poglavlja videćete i neke konkretne primere 
ove arhitekture. Ali, pre svega toga, razmotrimo najpre kojim se karakteristikama odlikuju savremene 
arhitekture sa složenim skupovima instrukcija.

Zašto CISC?

Već smo vam ukazali na trend sve obimnijih skupova instrukcija u koje se ubacuje veliki broj sve 
složenijih instrukcija. Ovaj trend motivisala su dva osnovna razloga: želja da se kompajleri pojednostave 
i stremljenje boljim performansama. U pozadini ovih razloga nalazio se prelaz programera na HLL 
jezike; dizajneri su jednostavno pokušali da naprave sisteme koji bolje podržavaju HLL jezike.

U   ovom   poglavlju   nam   nije   bila   nam   era   da   kritikujemo   smer   kojim   su   krenuli   CISC   dizajneri. 

Naprotiv.   Imajući   u   vidu   neprekidan   razvoj   tehnologije   i   postojanje   čitavog   spektra   različitih 
arhitektura   (a   ne   samo   dve   jasno   suprotstavljene),   za   isključivost   jednostavno   nema   mesta. 
Komentarima koji slede želeli smo da istaknemo neke od mogućih nedostataka u ClSC pristupu, kao i da 
vam približimo pozicije pristalica RISC arhitekture.

Prvi od dva navedena razloga - pojednostavljenje kompajlera - nameće se sam po sebi. Zadatak pisca 

kompajlera jeste generisanje sleda mašinskih instrukcija za svaki HLL iskaz. Ukoliko postoje mašinske 
instrukcije koje su bliske HLL iskazima, ovaj posao biće jednostavniji. Međutim, zagovornici i istraživači 
RISe   arhitekture   suprotstavili   su   se   ovoj   koncepciji   ([HENN82],   [RADI83],   [PATI82b]).   Oni   su 
ustanovili da je složene mašinske instrukcije često teško iskoristiti zato što kompajler mora da pronađe 
one slučajeve koji se uklapaju u konstrukciju. Posao optimiziranja generisanog koda u smislu minimizova-
nja njegove veličine, smanjenja broja izvršenja instrukcija i poboljšanja protočne obrade, mnogo je teži 
u složenom skupu instrukcija. Kao dokaz ove tvrdnje u istraživanjima na koja smo se pozivali na početku 
ovog poglavlja, naznačeno je da većinu instrukcija u kompajliranom programu čine one koje su relativno 
jednostavne.

Drugi bitan razlog koji smo naveli odnosio se na očekivanje da će Cl SC arhitektura dovesti do 

manjih i bržih programa. Ispitajmo sada oba aspekta ove tvrdnje - da će programi biti manji i da će se 
brže izvršavati.

Manji programi imaju dve prednosti. Najpre, oni zauzimaju manje memorije, tako da donose uštedu 

ovog   resursa.   Međutim,   današnje   veoma   niske   cene   memorije   učinile   su   ovu   potencijalnu   prednost 
praktično nebitnom. Mnogo je značajnije to da mali programi donose poboljšanje performansi, i to na 
dva načina. Najpre, manji broj instrukcija znači i preuzimanje manjeg broja bajtova. Zatim, u okruženju 

91

sa straničenjem manji programi zauzimaju manji broj stranica, što povlači i manju verovatnoću grešaka 
u straničenju.

Ovoj koncepciji moglo bi da se zameri samo to što CISC program uopšte ne mora biti manji od  

odgovarajućeg RISe programa. U velikom broju slučajeva CISC program, izražen simboličkim mašinskim 
jezikom, može biti  

kraći  (imaće manji broj instrukcija), ali to ne mora značiti da je i broj zauzetih 

bitova memorije mnogo 

manji. U tabeli 13.6 prikazani su rezultati tri istraživanja u kojima je poređena 

veličina kompajliranih C programa na nekoliko različitih računara, uključujući tu i RISC I koji ima 
arhitekturu sa smanjenim skupom instrukcija. Skrećem o vam pažnju na to da Cl SC ne donosi praktično 
nikakvu uštedu u odnosu na RISe. Veoma je zanimljivo i to da računar VAX donosi veoma malu uštedu u 
odnosu na PDP-l1 od koga se razlikuje mnogo složenijim skupom instrukcija. Ove rezultate potvrdili su i 
istraživači IBM-a [RADI83] koji su ustanovili da računar IBM 801 (RISC računar) generiše kod koji ima 
0.9 veličine koda računara IBM S/370. U ovom istraživanju korišćenje skup PL/I programa. arhitekturu 
sa smanjenim skupom instrukcija. Skrećemo vam pažnju na to da Cl SC ne donosi praktično nikakvu 
uštedu u odnosu na RISe. Veoma je zanimljivo i to da računar VAX donosi veoma malu uštedu u odnosu 
na   PDP-l1   od   koga   se   razlikuje   mnogo   složenijim   skupom   instrukcija.   Ove   rezultate   potvrdili   su   i 
istraživači IBM-a [RADI83] koji su ustanovili da računar IBM 801 (RISC računar) generiše kod koji ima 
0.9 veličine koda računara IBM S/370. U ovom istraživanju korišćenje skup PL/I programa.

Postoji nekoliko razloga za ove prilično iznenađujuće rezultate. Već smo napomenuli da kompajleri na 

CISC računarima teže favorizovanju jednostavnijih instrukcija tako da konciznost složenih instrukcija 
retko   dolazi   do   izražaja.   Isto   tako,   zbog   većeg   broja   instrukcija,   Cl   SC   računari   zahtevaju  duže 
operacione kodove koji daju i duže instrukcije. Konačno, kod RISC računara referenciranje registara je 
češće nego referenciranje memorije, za šta je neophodno manje bitova. Uskoro ćemo vam ponuditi i 
primer koji ilustruje ovu poslednju konstataciju.

Dakle,   očekivanje   da   će   Cl   SC   računari   generisati   manje   programe   i   doneti   prednost   u   smislu 

servisiranja, ne mora uvek da se ostvari. Drugi razlog zbog koga su napravljeni veoma složeni skupovi 
instrukcija bilo je očekivanje da će se instrukcije brže izvršavati. Na prvi pogled je sasvim logično 
očekivati da će se složena 

HLL 

operacija izvršavati brže kao jedna složena mašinska instrukcija nego 

kao serija mnogo jednostavnijih instrukcija. Međutim, pomenuta sklonost jednostavnijim instrukcijama 
dovodi ovu koncepciju u pitanje. Obimniji skup instrukcija zahteva da ce1a upravljačka jedinica bude 
složenija i/ili upravljačka memorija mikroprograma veća.

U stvari, neki istraživači su ustanovili da je ubrzanje koje donose složene instrukcije pre povezano 

sa njihovim stalnim prisustvom u upravljačkom skladištu velike brzine, nego što je to posledica njihovog 
kvaliteta [RADI83]. Zbog toga se upravljačko skladište ponaša kao keš za instrukcije. Prema tome, 
posao dizajnera hardvera je da pokuša da definiše potprograme ili funkcije koje će se najčešće koristiti 
i da ih, implementiranjem u mikrok6d, dodeli upravljačkom skladištu. Međutim, dobijeni rezultati bili su 
više nego skromni. Na sistemima Sj390 instrukcije kao što su Translate i Extended-Precision-Floating-
Point-Divide rezidentne su u skladištu velike brzine, dok se sekvenca koja u'čestvuje u pripremi poziva 
procedure ili iniciranju opsluživanja prekida nalazi u sporijoj glavnoj memoriji.

Zbog svega ovoga ne bi se moglo reći da je trend ka sve složenijim skupovima instrukcija sasvim 

opravdan. Upravo zato, veliki broj istraživača krenuo je sasvim suprotnim putem.

Karakteristike arhitekture sa smanjenim skupom instrukcija

lako postoji mnogo različitih pristupa u dobijanju arhitekture sa smanjenim skupom instrukcija, za sve 
njih zajedničke su sledeće karakteristike:

jedna instrukcija po ciklusu;

direktne operacije između registara;

92

background image

kompajlere.   Kod   jednostavnijih   instrukcija   postoje   mogućnosti   za   vađenje   funkcija   iz   petlji, 
reorganizovanje koda u cilju povećanja njegove efikasnosti, maksimizovanje korišćenja registara itd. 
Čak   je   moguće   izračunavati   delove   složenih   instrukcija   u   vremenu   kompajliranja.   Primera   radi, 
instrukcija Move Characters (MVC) računara Sj390 premešta niz znakova sa jedne lokacije na drugu. 
Prilikom svakog njenog izvršenja, premeštanje će zavisiti od dužine niza, toga da li se lokacije preklapaju 
i u kom pravcu i toga kakvo je poravnanje ovih znakova. U većini slučajeva, sve ovo biće poznato u 
vremenu   kompajliranja.   Prema   tome,   kompajler   može   da   generiše   optimiziran   sled   jednostavnih 
instrukcija za ovu funkciju.

Drugi aspekt o kome smo već govorili jeste to da su instrukcije koje generiše kompajler u velikoj 

većini ionako relativno jednostavne. Zvuči sasvim realno da upravljačka jedinica koja je napravljena baš 
za ove instrukcije i koja koristi jako malo mikrokoda može da ih izvršava brže od odgovarajućeg CISC 
sistema.

Treći aspekt povezan je sa korišćenjem protočne obrade instrukcija. Istraživači RISC sistema misle 

da tehnika protočne obrade instrukcija može da se primeni mnogo efIkasnije kada imamo smanjeni skup 
instrukcija. Uskoro ćemo veoma detaljno ispitati i ovaj koncept.

Poslednji aspekt za koji se može reći da je nešto manje značajan jeste to da RISC procesori brže 

reaguju na prekide zato što se ti prekidi proveravaju između veoma jednostavnih operacija. Arhitekture 
sa složenim instrukcijama ili ograničavaju prekide na granice instrukcija ili se u njima moraju definisati 
konkretne tačke prekida i implementirati mehanizmi za ponovno pokretanje instrukcija.

Argumenti koji govore o poboljšanju performansi i idu u prilog arhitekturi sa smanjenim skupom 

instrukcija prilično su ubedljivi, ali ipak ne bi trebalo da budemo nepravedni prema ClSC sistemima. 
Tačno je da o rezultatima govore mnogobrojna istraživanja, ali ona nisu izvedena na računarima sa 
uporedivom tehnologijom i snagom. Osim toga, u većini ovih istraživanja nije bilo pokušaja da se efekti 
smanjenog   skupa   instrukcija   odvoje   od   efekata   velike   registarske   datoteke.   «Posredni   dokazni 
materijal» ipak zvuči veoma ubedljivo.
Poređenje Karakteristika CISC i RISC sistema
Nakon početnog entuzijazma koji je pratio RISC računare, sve je prisutnije uverenje da (1) RISC 
sistemi mogu imati koristi od uvođenja nekih Cl SC funkcija i da (2) CISC sistemi mogu imati koristi od 
uvođenja nekih RISC karakteristika. Zahvaljujući tome, za neke savremenije RISC računare kao što je, 
na primer, PowerPC ne može se reći da su «čisti» RISC dizajn. Isto tako, CISC sistemi kao što su 
Pentium II i aktuelniji Pentium modeli imaju neke karakteristike RISC sistema.

Jedno veoma interesantno poređenje [MASH95] pomoći će nam u rasvetljavanju ove teme. U tabeli 

13.7 navedeno je nekoliko procesora i upoređene neke njihove karakteristike. Evo šta se, za potrebe 
poređenja, smatra tipičnim RISC sistem om:

1. Jedna veličina instrukcija.
2. Veličina instrukcija obično je 4 bajta.
3. Mali broj načina za adresiranje podataka - obično manje od pet. U ovom zahtevu, međutim, nije 

lako istrajati. U tabeli registri i literalni načini se ne računaju, dok se različiti formati sa 
različitim veličinama pomeraja računaju posebno.

4. Nema indirektnog adresiranja koje podrazumeva da se adresa drugog operanda u memoriji 

pribavlja pristupom memoriji.

5. Nema operacija koje kombinuju operacije učitavanja/skladištenja sa aritmetičkim operacijama 

(na primer, saberi iz memorije ili saberi u memoriju).

6. Nema više od jednog memorijski adresiranog operanda po instrukciji. 
7. Ne podržavaju proizvoljno poravnanje podataka za operacije učitavanja/skladištenja. 

94

8. Maksimalan broj korišćenja jedinice za upravljanje memorijom (MMU) za adresu podataka u 

instrukciji.

9. Broj bitova specifikatora celobrojnog registra ima vrednost pet ili više. To znači da u istom 

trenutku može eksplicitno da se referencira najmanje 32 celobrojna registra.

10. Broj bitova specifikatora registra u pokretnom zarezu ima vrednost četiri ili više.  To znači da 

u istom trenutku može eksplicitno da se referencira najmanje 16 registara u pokretnom zarezu.

Stavke od 1 do 3 predstavljaju pokazatelj složenosti dekodiranja instrukcija. Stavke od 4 do 8 

govore o lakoj ili teškoj protočnoj obradi, naročito u prisustvu zahteva virtueine memorije. Stavke 9 i 
10 povezane su sa mogućnošću iskorišćavanja kompajlera.

Prvih osam procesora u tabeli očigledno imaju R1SC arhitekturu, sledećih pet su Cl SC procesori, dok 

se na poslednja dva gleda kao na R1SC procesore, ali oni zapravo imaju mnogo osobina CISC sistema.

Protočna obrada sa regularnirn instrukcijama

Kao što smo rekli u odeljku 12.4, poboljšanje performansi često se postiže primenom protočne obrade 
instrukcija. Sada ćemo se na ovu temu vratiti, ali u kontekstu RISe arhitekture. Većinu instrukcija čine 
instrukcije tipa registar ka registru, a instrukcijski ciklus ima sledeće dve etape:

I: donošenje instrukcije.

E: izvršavanje - izvođenje svih ALU operacija sa ulazom i izlazom registra.

Kod operacija učitavanja i skladištenja neophodne su tri etape:

I: donošenje instrukcija.

E: izvršenje - izračunavanje memorijske adrese.

D: memorija - operacije tipa registar ka registru ili memorija ka registru.

Na   slici   l3.6a   možete   da   vidite   vremenski   raspored   sleda   instrukcija   bez   protočne   obrade. 

Očigledno je da ovde nije postignuto optimalno korišćenje resursa. Čak i sasvim jednostavna protočna 
obrada može značajno da poboljša performanse. Na slici l3.6b prikazana je šema dvofazne protočne 
obrade u kojoj se faze I i E dve različite instrukcije izvršavaju istovremeno. Primenom ove šeme može 
se   dobiti   i   do   dva   puta   brže   izvršenje   od   serijske   šeme.   Međutim,   postizanje   maksimalne   brzine 
sprečavaju dva problema. Najpre, pretpostavili smo da je korišćena memorija sa jednim portom i da je u 
jednoj etapi moguć samo jedan pristup memoriji. Zbog toga se u neke instrukcije mora ubaciti stanje 
čekanja.

Zatim, instrukcija o grananju prekida redni tok izvršenja. Ubacivanjem NOOP instrukcije u niz 

instrukcija od strane kompajlera ili asemblera postiže se prilagođavanje ovoj karakteristici uz minimum 
elektronskih kola.

Efikasnost protočne obrade može se poboljšati i dozvoljavanjem dva pristupa memoriji u jednoj 

etapi. Ovim se dobija s1ed koji je prikazan na slici 13.6c. Sada je moguće preklapanje tri instrukcije, a 
obrada je i do tri puta brža. Međutim, i u ovom slučaju instrukcije o grananju sprečavaju maksimalno 
moguće ubrzanje. Skrećemo vam pažnju na to da i međuzavisnosti podataka ovde takođe imaju bitnu 
ulogu. Ukoliko je instrukciji potreban operand koga je izmenila prethodna operacija, zadržavanje je 
neizbežno. Ovo se takođe može postići instrukcijom NOOP.

Onako kako smo o njoj do sada pričati, protočna obrada najbolje funkcioniše ako njene tri etape 

imaju približno jednako trajanje. S obzirom na to da obično podrazumeva i ALU operaciju, faza E može 
biti i duža. U ovom slučaju ovu fazu možemo podeliti na dve potfaze:

E1: čitanje registarske datoteke i

E2: ALU operacija i zapisivanje registra.

I zahvaljujući jednostavnosti i regularnosti RISe skupa instrukcija, podela na tri ili četiri etape 

obično se lako postiže. Na slici 13.6d možete da vidite kako izgleda četvorofazna protočna obrada. 

95

background image

registara.

KONTRAVERZA – RISC ILI CISC

Godinama   unazad,   opšti   trend   u   organizaciji   i   arhitekturi   računara   bilo   je   povećanje   složenosti 
procesora - više instrukcija, više režima adresiranja, više specijalizovanih registara itd. Pojavljivanje 
RISC   arhitekture   predstavlja   fundamentalan   raskid   sa   filozofijom   koja   je   motivisala   ovaj   trend. 
Naravno, pojava RISC sistema i objavljivanje radova u kojima su zagovornici ove arhitekture veličali 
njene prednosti, isprovocirali su reakciju stručnjaka koji su stajali iza CISC arhitekture.

Nastojanja da se procene vrednosti RISC arhitekture mogu da se grupišu u dve kategorije:

Kvantitativni: 

reč je o pokušajima poređenja veličine programa i brzine izvrše

nja   RISC   i 

CISC računara koji koriste sličnu tehnologiju.

Kvalitativni: 

u pitanju su ispitivanja aspekata kao što su podrška jezika visokog

nivoa   ili 

optimalno korišćenje raspoloživog prostora na VLSI čipu.

Najveći doprinos kvantitativnoj proceni RISC sistema dali su stručnjaci koji su radili na njima 

[PATI82, HEAT84, PATT84] i njihovi rezultati su u velikoj meri naginjali RISC filozofiji. Međutim, 
postoje i radovi čiji su autori praktično bili neodlučni [COLW85a, FLYN87, DAVI87]. U pokušajima da 
se naprave paralele između ova dva sistema, javljale su se sledeće teškoće [SERL86]:

Ne postoji par RISC i CISC sistema koji bi mogli da se porede prema ceni životnog veka, nivou 
tehnologije,   složenosti   logičkih   kola,   sofisticiranosti   kompajlera,   nivou   podrške   operativnog 
sistema itd.

Ne postoji definitivan probni skup programa. Performanse se menjaju od programa do programa.

Teško je izolovati uticaj hardvera na performanse od uticaja koji se vezuju za 

umešnost 

pisaca kompajlera.

Najveći deo komparativnih analiza RISC sistema izvršen je na računarima «igračkama», a ne na 
komercijalnim proizvodima. Osim toga, većina za javnost dostupnih računara, koji se reklamiraju 
kao RISC sistemi, u stvari predstavlja mešavinu RISC i ClSC karakteristika. Stoga je veoma 
teško izvesti njihovo valjano poređenje sa komercijalnim "čistim" CISC računarima (recimo, VAX 
ili Pentium).

Kvalitativne procene su, praktično prema svojoj definiciji, subjektivne. Više istraživača bavilo se 

ovom vrstom procena [COLW85a, WALL85], ali su njihovi rezultati, u najboljem slučaju, nedorečeni. 
Ovi rezultati izazvali su brojne reakcije protivnika [PATT85b], a zatim i pravu polemiku [COLW85b].

U novije vreme ova suprotstavljenost RISC i ClSC sistema u najvećoj meri je zamrla, pre svega zbog 

postupnog približavanja ovih tehnologija. Kako su se gustina čipova i sirova snaga hardvera povećavali, 
RISC sistemi su postajali sve složeniji. Istovremeno, u nastojanjima da se iz CISC sistema izvuku 
maksimalne performanse, njihovi dizajneri su se usredsredili na aspekte koji su tradicionalno dovođeni u 
vezu sa RISC sistemima. U pitanju su aspekti kao što je, na primer, povećanje broja registara opšte 
namene ili posvećivanje veće pažnje dizajnu protočne obrade instrukcija.

Poglavlje 14
PARALELIZAM NA NIVOU 

INSTRUKCUA I SUPERSKALARNI PROCESORI

SuperskaIarni procesor 

je onaj kod koga se koristi više nezavisnih protočnih obrada instrukcija. Sve 

protočne obrade imaju više etapa, što znači da svaka od njih može u istom trenutkuda se bavi većim 
brojem instrukcija. Višestrukim protočnim obradamadobijen   je   novi   nivo   paralelizma   koji   omogućava 
istovremenu obradu većeg broja nizova instrukcija. Na superskalarnim procesorima primenjuje se  

pa

ralelizam nivoa instrukcija, 

pod kojim se podrazumeva stepen u kome instrukcije  nekog   programa 

mogu da se izvršavaju paralelno.

97

….
Nasuprot tome, na većini superskalarnih procesora do poboljšanja efikasnosti protočne obrade stiže se 
korišćenjem tradicionalnih metoda predviđanja grananja.

Superskalarna   implementracija   arhitekture   procesora   jeste   ona   u   kojoj   česte   instrukcije   - 

aritmetika celih brojeva i brojeva u pokretnom zarezu, operacije učitavanja, skladištenja ili uslovnog 
grananja - mogu da se iniciraju istovremeno i izvršavaju nezavisno. Najsloženiji aspekti dizajna ovakvih 
implementacija povezani su sa protočnom obradom instrukcija.

Superskalarni   dizajn   pojavio   se   odmah   nakon   RISC   arhitekture.   Iako   pojednostavljeni   skup 

instrukcija RISC računara predstavlja pogodnu osnovu za primenu superskalarnih tehnika, ovaj pristup 
može da se koristi i na CISC arhitekturama.

Od početka istraživanja RISC arhitekture i računara IBM 801 i Berkeley RISC I, pa do pojave prvih 

komercijalnih RISC računara, prošlo je između sedam i osam godina. Nasuprot tome, prvi komercijalni 
superskalrani računari pojavili su se samo godinu ili dve nakon što je prvi put upotrebljen termin 

superskalarni.  Danas   superskalarni   pristup   predstavlja   standardnu   metodu   za   implementiranje 
mikroprocesora visokih performansi.

Ovo   poglavlje   započećemo   prikazom   superskalarnog   pristupa   i   njegovim   poređenjem   sa 

superprotočnošću.   Nakon   toga,   pozabavićemo   se   nekim   ključnim   aspektima   dizajna   koji   su 
karakteristični   za   superskalarne   implementacije.   Osim   toga,   prikazaćemo   vam   i   neke   prim   ere 
superskalarne arhitekture.

14.1 PREGLED

Termin  

superskalarni  koji   je   prvi   put   upotrebljen   1987.   [AGER87]   odnosi   se   na   procesor   koji   je 

dizajniran tako da poboljša izvršenje skalarnih instrukcija. U većini aplikacija najveći broj operacija 
izvodi se na skalarnim kvantitetima. Iz toga proističe da superskalarni pristup predstavlja sledeći korak 
u evoluciji opštenamenskih procesora visokih performansi.

Suštinu   superskalarnog   pristupa   predstavlja   mogućnost   nezavisnog   i   istovremenog   izvršavanja 

instrukcija u različitim protočnim obradama. Ovaj koncept može jošbolje da se iskoristi ukoliko se 
omogući promena redosleda (u odnosu na originalni program) kojim se instrukcije izvršavaju. Slika 14.1 
predstavlja   uopštenu   ilustraciju   ovog   pristupa.   Višestruke   funkcionalne   jedinice,   od   kojih   je   svaka 
implementirana kao protočna obrada, podržavaju paralelno izvršenje više instrukcija. U našem primeru 
istovremeno mogu da se izvršavaju dve operacije sa celim brojevima, dve u pokretnom zarezu ijedna 
memorijska operacija (učitavanje ili skladištenje).

Iz   mnogobrojnih   istraživanja   procesora   koji   imaju   superskalarne   karakteristike   možemo   da 

zaključimo da oni donose poboljšanje performansi. U tabeli 14.1 navedena su dokumentovana poboljšanja 
performansi. Razlike u rezultatima povezane su sa razlikama u hardveru i softveru računara na kojima 
su provere izvršene.

Poređenje superskalarnih i superprotočnih procesora

Drugi način za poboljšanje performansi procesora jeste superprotočnost - termin koji je prvi put 
upotrebljen 1988. godine [JOUP88]. Superprotočnost se zasniva na činjenici da mnoge etape protočne 
obrade izvršavaju zadatke za koje je potrebno manje od pola ciklusa generatora takta. Prema tome, 
udvostručena interna brzina generatora takta omogućava izvršavanje dva zadatka u jednom eksternom 
ciklusu generatora takta. Kao primer ovakvog pristupa naveli smo računar MIPS R4000.

Na slici 14.2 uporedili smo ova dva pristupa. U gornjem delu dijagrama ilustrovana je obična protočna 

obrada koja je upotrebljena kao osnov za poređenje.

98

background image

Tipičnom RISC procesoru su, zbog kašnjenja prilikom pristupa memoriji koja nije na čipu ili usled 

pristupa kešu, za izvršavanje učitavanja iz memorije potrebna dva (ili više) ciklusa. Ovo kašnjenje može 
da se kompenzuje time što će kompajler da preuredi instrukcije i u protočnu obradu ubaci jednu ili više 
naknadnih instrukcija koje nisu uslovljene učitavanjem iz memorije. Ovakva šema je manje efikasna u 
slučaju   superskalarne   protočne   obrade:   nezavisne   instrukcije   koje   se   izvršavaju   tokom   učitavanja 
najverovatnije će se izvršiti u prvom ciklusu učitavanja, što znači da procesor neće imati posla sve do 
završetka učitavanja.
Proceduralne zavisnosti Kao što smo rekli u poglavlju 12, postojanje grananja u nizu instrukcija u velikoj 
meri komplikuje protočnu obradu. Instrukcije koje slede nakon grananja (svejedno da li se ono dogodi ili 
ne) proceduralno zavise od njega i mogu da se izvrše tek nakon što se grananje izvrši. Na slici 14.3 
ilustrovali smo efekat grananja na superskalarnu protočnu obradu drugog stepena.

Kao što ste videli, ovaj tip proceduralne zavisnosti pogađa i skalarnu protočnu obradu. Pri tom, 

posledice su kod superskalarne protočne obrade teže zato što se sva. kim kašnjenjem mnogo više gubi.

Prilikom korišćenja instrukcija promenljive dužine, pojavljuje se novi oblik proceduralne zavisnosti. S 

obzirom na to da dužina bilo koje od ovakvih instrukcija nije poznata, one se, bar delimično, moraju 
dekodirati kako bi mogla da se preuzme sle. deća instrukcija. Ovim se sprečava istovremeno donošenje 
koje je u superskalarnoj protočnoj obradi neophodno. Upravo zato su superskalarne tehnike podesnije 
za RISe i slične arhitekture u kojima je dužina instrukcija fiksirana.
Konflikt resursa Konflikt resursa jeste situacija u kojoj se dve ili više instrukcija istovremeno nadrneću 
za isti resurs. Pod resursima se podrazumevaju memorije, keš, magistrale, portovi registarske datoteke 
i funkcionalne jedinice (na primer, ALU sabirač).

U kontekstu protočne obrade, konflikt resursa ispoljava se slično kao i zavisnost podataka (slika 

14.3). Naravno, između njih postoje i određene razlike. Najpre, konflikti resursa mogu da se prevaziđu 
dupliranjem   resursa,   dok   prava   zavisnost   podataka   nikako   ne   može   da   se   izbegne.   Isto   tako,   kod 
operacija koje dugo traju, konflikti resursa mogu da se minimizuju protočnom obradom odgovarajuće 
funkcionalne jedinice.

14.2 ASPEKTI DIZAJNA

Paralelizam nivoa instrukcija i maši nsk i paralelizam
U [JOUP89a] je napravljena razlika između dva povezana koncepta - paralelizrna nivoa instrukcija 
imašinskog paralelizrna. Paralelizam nivoa instrukcija postoji kada su instrukcije nekog niza nezavisne 
tako da se preklapanjem mogu izvršavati paralelno.

Kao primer koncepta paralelizrna nivoa instrukcija, razmotrimo sada sledeća dva fragmenta koda 

[JOUP89b]:
Laad R1 +- R2
Add R3 +- R3, "1" Add R4 +- R4, R2
Add R3 +- R3, "1" Add R4 +- R3, R2 Stare [R4] +- RO
Tri instrukcije sa leve strane su nezavisne i sve tri bi mogle da se izvršavaju paralelno. Nasuprot tome, 
tri instrukcije sa desne strane ne mogu da se izvršavaju paralelno zato što druga instrukcija koristi 
rezultat prve, a treća rezultat druge.

Stepen   paralelizrna   nivoa   instrukcija   određen   je   učestalošću   istinskih   zavisnosti   podataka   i 

proceduralnih   zavisnosti   u   kodu.   Ovi   faktori,   dalje,   zavise   od   arhitekture   skupa   instrukcija   i   od 
aplikacije. Na paralelizam nivoa instrukcija značajno utiče parametar koji je [JOUP89b] nazvao vreme 
kašnjenja operacije. U pitanju je dužina čekanja da rezultat jedne instrukcije postane dostupan za 
operande   sledeće   instrukcije.   Od   ovog   vremena   kašnjenja   zavisi   koliko   će   ukupno   kašnjenje 

100

prouzrokovati zavisnost podataka ili proceduralna zavisnost.

Mašinski   paralelizam  

predstavlja   merilo   sposobnosti   procesora   da   iskoristi   paralelizam   nivoa 

instrukcija. Mašinski paralelizam zavisi od broja instrukcija koje se mogu preuzeti i izvršiti istovremeno 
(broj paralelnih protočnih obrada), kao i od brzine i savršenosti mehanizama pomoću kojih procesor 
pronalazi nezavisne instrukcije.

Oba pomenuta paralelizrna imaju veoma važnu ulogu u poboljšanju performansi. Događa se da u 

programu nema dovoljno paralelizrna nivoa instrukcija, tako da ne može optimalno da iskoristi mašinski 
paralelizam. Korišćenje arhitekture sa skupom instrukcija fiksirane dužine (recimo, RISe arhitektura), 
pozitivno   se   odražava   na   paralelizam   nivoa   instrukcija.   Sa   druge   strane,   mali   mašinski   paralelizam 
ograničava performanse bez obzira na prirodu programa.

Politika izdavanja instrukcija

Kao što smo već rekli, mašinski paralelizam ne može da se svede samo na pitanje postojanja višestrukih 
primeraka svake etape protočne obrade. Procesor takođe mora biti u stanju da identifikuje paralelizam 
nivoa instrukcija i koordinira paralelnim donošenjem, dekodiranjem i izvršenjem instrukcija. Termin 

izdavanje   instrukcija  

odnosi   se   na   iniciranje   izvršenja   instrukcija   u   procesorovim   funckionalnim 

jedinicama, atermin  

politika izdavanja instrukcija  

na protokol koji se koristi prilikom izdavanja ovih 

instrukcija [JOHN91]. Uopšteno govoreći, izdavanje instrukcija događa se kada se instrukcija premešta 
iz etape za dekodiranje u prvu etapu za izvršenje protočne obrade.

U osnovi, procesor pokušava da "gleda" ispred aktuelne tačke izvršenja kako bi locirao instrukcije 

koje mogu da se dovedu u protočnu obradu i izvrše. U ovom kontekstu bitne su tri vrste redosleda:

redosled donošenja instrukcija;

redosled izvršenja instrukcija i

redosled kojim instrukcije ažuriraju sadržaj registara i memorijskih lokacija.

Što je procesor savršeniji, manje će ga ograničavati striktni odnosi između ovih redosleda. Da bi 

optimizirao iskorišćavanje različitih elemenata protočne obrade, procesor mora da izmeni jedan ili više 
ovih redosleda u odnosu na redosled koji postoji u striktnom rednom izvršenju. Jedini zahtev koji se 
pred njega stavlja je da krajnji rezultat bude tačan. Prema tome, procesor mora da uvaži različite 
zavisnosti i konflikte o kojima smo već govorili.

Uopšteno govoreći, politike izdavanja instrukcija superskalarnih procesora mogu da se grupišu u 
sledeće tri kategorije:

izdavanje u redosledu sa završavanjem uredosledu;

izdavanje u redosledu sa završavanjem van redosleda; 

izdavanje van redosleda sa završavanjem van redosleda.

Izdavanje u redosledu sa završenjem uredosledu Najjednostavnija politika izdavanja instrukcija jeste 
ona u kojoj se instrukcije izdaju onim redom kojim bi se to događalo u rednom izvršenju (izdavanje u 
redosledu). Rezultati se takođe zapisuju istim redom (završavanje u redosledu). Čak ni u skalarnim 
protočnim obradama ne primenjuje se ovako jednostavan pristup. Ipak, korisno je obratiti pažnju i na 
ovu politiku zato što će nam ona biti osnova sa kojom ćemo porediti savršenije pristupe.

Slika 14.4 predstavlja primer ove politike. Zamislićemo superskalarnu protočnu obradu koja u istom 

trenutku može da donosi i dekodira dve instrukcije, a ima tri posebne funkcionalne jedinice (na primer, 
dve za aritmetičke operacije u pokretnom zarezu i jednu za aritmetičke operacije sa celim brojevima) i 
dva   primerka   etape   za   upisivanje   rezultata.   U   prim   eru   su   pretpostavljena   sledeća   ograničenja 
fragmenta koda sa šest instrukcija:

za izvršenje Il potrebna su dva ciklusa;

101

background image

postane dostupna u etapi izvršenja, instrukcija se iz instrukcijskog okvira može izdati etapi izvršenja. 
Na ovaj način može da se izda svaka instrukcija pod uslovom (I) da joj je potrebna neka funkcija koja je 
raspoloživa i (2) da je ne blokiraju nikakvi konflikti ili zavisnosti.

Ovakva   organizacija   pruža   procesoru   mogućnost   gledanja   unapred   i   identifikovanja   nezavisnih 

instrukcija koje se mogu ubaciti u etapu izvršenja. Instrukcije se izdaju iz instrukcijskog prozora bez 
mnogo   poštovanja   njihovog   prvobitnog   redosleda   u   programu.   Kao   i   ranije,   jedini   zahtev   je   da   se 
program ponaša korektno.

Na slici 14.4c ilustrovali smo ovu politiku. Tokom svakog od prva tri ciklusa, po dve instrukcije se 

donose u etapi za dekodiranje. U svakom ciklusu, a u skladu sa veličinom bafera, dve instrukcije se iz 
etape za dekodiranje premeštaju u instrukcijski okvir. U ovom primeru moguće je izdati instrukciju 16 
pre instrukcije 15 (podsećamo vas da 15 zavisi od 14, ali 16 ne zavisi). To znači da se u etapama 
izvršenja i upisivanja štedi po jedan ciklus. U odnosu na sliku 14.4b, krajnja ušteda je jedan ciklus.

Na slici 14.4c nacrtali smo i instrukcijski okvir kako bismo vam ilustrovali njegovu ulogu. Ovaj prozor, 

međutim, ne predstavlja novu etapu protočne obrade. Kada kažemo da se instrukcija nalazi u okviru, to 
u stvari znači da procesor ima dovoljno informacija o njoj kako bi mogao da odluči kada da je izda.

Na politiku izdavanja i završetka van redosleda utiču ograničenja koja smo već pomenuli. Instrukcija 

ne može da se izda ukoliko krši zavisnost ili dovodi do konflikta. Razlika je u tome što u ovoj politici 
imamo veći broj raspoloživih instrukcija za izdavanje, čime se smanjuje verovatnoća da se protočna 
obrada zaustavi. Međutim, ovde se pojavljuje i nova vrsta zavisnosti koju smo već nazvali antizavisnost 
(ili zavisnost čitanja-upisivanja). KOd kojim smo se već bavili ilustrovaće nam ovu novu zavisnost:

11: R3 +- R3 op RS 12: R4 +- R3 + 1 13: R3 +- RS + 1 14: R7 +- R3 op R4

Izvršenje instrukcije 13 ne može da se završi pre nego što instrukcija 12 počne sa izvršenjem i 

preuzme svoje operande. To je zato što instrukcija I3 ažurira registar R3 koji predstavlja izvorni 
operand instrukcije 12. Termin  

antizavisnost  koristi se zato što ovo ograničenje podseća na istinsku 

zavisnost podataka, ali je obrnuto: umesto da prva instrukcija generiše vrednost koju druga instrukcija 
treba da koristi, ovde druga instrukcija uništava vrednost koju prva instrukcija koristi.

Preimenovanje registara

Kada su izdavanje instrukcija preko reda i njihovo završavanje preko reda dozvoljeni, povećava se 
verovatnoća   javljanja   izlaznih   zavisnosti   i   antizavisnosti.   Ove   zavisnosti   se   razlikuju   od   istinskih 
zavisnosti podataka i konflikata oko resursa koji odražavaju tok podataka kroz program i sekvencu 
izvršenja. Sa druge strane, izlazne zavisnosti i antizavisnosti javljaju se zato što registri više nisu u 
skladu sa sledom vrednosti koji diktira tok programa.

Kada se instrukcije izdaju i kompletiraju u redosledu, sadržaj svakog registra može da se precizira 

u svakoj tački izvršenja. Kod tehnika van redosleda, vrednosti registara ne mogu biti sasvim poznate u 
svakoj vremenskoj tački samo na osnovu razmatranja sleda instrukcija koje diktira program. Zbog toga, 
vrednosti dolaze u konflikt oko korišćenja registara, a procesor, da bi rešio ove konflikte, povremeno 
mora da zaustavi protočnu obradu.

Antizavisnosti i izlazne zavisnosti predstavljaju primere konflikata oko skladištenja. Više instrukcija 

konkuriše za korišćenje istih registarskih lokacija, što dovodi do ograničenja protočne obrade koja se 
negativno odražavaju na performanse. Ovaj problem još više dolazi do izražaja prilikom korišćenja 
tehnika   za   optimiziranje   registara   (poglavlje   13)   zato   što   ove   tehnike   pokušavaju   da   maksimalno 
poboljšaju korišćenje registara i samim tim povećavaju i broj konflikata oko skladištenja.

Jedna od metoda za prevazi1aženje ovih konflikata oko skladištenja bazira se na tradicionalnom 

rešenju   za   konflikte   oko   resursa   -   njihovom   dupliranju.   U   ovom   kontekstu,   ova   tehnika   naziva   se 

103

preimenovanje   registara.  

U   osnovi,   hardver   procesora   dinamički   raspodeljuje   registre   i   oni   se 

povezuju sa vrednostima koje su instrukcijama neophodne u različitim vremenskim tačkama. Kada se 
generiše nova registarska vrednost (odnosno, kada se izvrši instrukcija koja ima registar kao odredišni 
operand), njoj se dodeljuje novi registar. Sve naknadne instrukcije koje pristupaju toj vrednosti u vidu 
odredišnog   operanda,   u   datom   registru   moraju   da   prođu   kroz   postupak   preimenovanja:   reference 
registra u ovim instrukcijama moraju se izmeniti kako bi se odnosile na registar koji sadrži potrebnu 
vrednost. To znači da se ista originalna referenca registra u više različitih instrukcija može odnositi na 
različite stvarne registre ukoliko je namera bila dobijanje različitih vrednosti.

Pogledajmo sada kako se preimenovanje registara može primeniti u našem probnom fragmentu koda: .

I1: R3b E- R3a op R5a 
I2: R4b E- R3b + 1 
I3: R3c E- R5a + 1 
I4: R7b E- R3c op R4b

Referenca registra bez indeksa odnosi se na logičku referencu registra koja se nalazi u instrukciji, 

dok se referenca sa indeks om odnosi na dodeljeni hardverski registar u kome se čuva nova vrednost. 
Kada se za određeni logički registar izvrši novo dodeljivanje, to povlači menjanje referenci instrukcija 
kojima se u tom registru nalazi odredišni operand i njihovo upućivanje na nedavno dodeljeni hardverski 
registar (nedavno u smislu sleda instrukcija datog programa).

U ovom prim eru, pravljenjem registra R3c u instrukciji 13, izbegava se antizavisnost kod druge 

instrukcije i izlazna zavisnost kod prve. Sa druge strane, instrukcija 14 i dalje može da pristupi tačnoj 
vrednosti. Zahvaljujući tome, instrukcija 13 može da se izda odmah; bez preimenovanja instrukcija 13 
mogla bi da se izda tek nakon završetka prve i izdavanja druge instrukcije.
U prethodnim odeljcima videli ste da se za poboljšanje performansi superskalarnih procesora mogu 
koristiti tri tehnike - dupliranje resursa, izdavanje instrukcija van redosleda i preimenovanje. Postoji 
istraživanje [SMIT89] u kome je rasvetljen odnos između ovih tehnika. U istraživanju je napravljena 
simulacija proces ora sa karakteristikama modela MIPS R2000 koji je obogaćen raznim superskalarnim 
funkcijama, a simulirano je više različitih programskih sekvenci.

Na slici 14.5 možete da vidite rezultate ovog istraživanja. Na svakom od ovih grafikona, vertikalna 

osa odnosi se na srednje poboljšanje performansi superskalarnih procesora u odnosu na skalarne. Na 
horizontalnim osama prikazani su rezultatu za četiri alternativne organizacije procesora.

Na računaru koji je poslužio kao osnova poređenja nema dupliranja bilo kakvih funkcionalnih jedinica, 

ali postoji izdavanje instrukcija van redosleda. U drugoj konfiguraciji duplirana je funkcionalna jedinica 
za učitavanje/sk1adištenje koja pristupa podacima u keš memoriji. U trećoj konfiguraciji duplirana je 
ALU jedinica, a u četvrtoj i jedinica za učitavanje/sk1adištenje i ALU. Na svakom grafikonu postoje 
rezultati za okvire veličine 8, 16 i 32 instrukcije, od kojih zavisi u kojoj će meri procesor moći da gleda  
unapred. Ova dva grafikona razlikuju se po tome što je u drugom dozvoljeno preimenovanje. Drugim 
rečima, na prvom grafikonu prikazan je procesor koji je ograničen svim zavisnostima, dok procesor na 
drugom grafikonu pogađaju samo prave zavisnosti.

Ova dva grafikona  pomoći  će nam da formulišemo neke važne zaključke.  Prvi bi bio taj  da se 

dodavanje funkcionalnih jedinica bez preimenovanja registara najverovatnije ne isplati. Njime se dobija 
izvesno poboljšanje performansi, ali po cenu veće složenosti hardvera. Kada se primeni preimenovanje 
registara kojim se eliminišu antizavisnosti i izlazne zavisnosti, dodavanjem funkcionalnih jedinica stiže 
se   do   značajnog   poboljšanja   performansi.   Ipak,   skrećemo   vam   pažnju   i   na   to   da   je   stepen   ovog 
poboljšanja bitno različit kod prozora veličine 8 instrukcija i onih većih. Iz ovoga se može zaključiti da 
kod previše malih instrukcijskih okvira zavisnosti podataka sprečavaju efikasno iskorišćavanje dodatnih 

104

background image

uslovnom grananju i donošenjem iza njega, istovremeno donosi više instrukcija. Ove funkcije 
zahtevaju da se u protočnoj obradi koriste višestruke etapa za donošenje i dekodiranje 
instrukcija, kao i logika za predviđanje grananja.

Logika za ustanovljavanje istinskih zavisnosti između vrednosti registara i mehanizmi za 
komunikaciju ovih vrednosti sa etapama u kojima su neophodne tokom izvršenja.

Mehanizmi za paralelno iniciranje ili izdavanje više instrukcija.

Resursi za paralelno izvršavanje više instrukcija, uključujući tu i višestruke funkcionalne 
jedinice   protočne   obrade   i   memorijske   hijerarhije   koje   omogućavaju   istovremeno 
servisiranje više memorijskih referenciranja.

Mehanizmi za predaju stanja procesa u pravilnom redosledu.

RAD UPRAVLJAČKE JEDINICE
KLJUČNE TEZE

Izvršavanje instrukcije obuhvata izvršavanje niza potkoraka, koji se uopšteno nazivaju ciklusi. Na 
primer, izvršavanje se može sastojati od ciklusa donašenja, indirektnag ciklusa, izvršnog ciklusa i 
ciklusa   prekida.   Sa   druge   strane,   svaki   ad   ovih   ciklusa   sačinjen   je   od   niza   još   osnovnijih 
operacija,   koje   se   nazivaju   mikrooperacije.   Jedna   mikrooperacija   uopšteno   obuhvata   prenos 
između   registara,   prenos   između   registra   i   spoljne   magistrale   ili   jednastavnu   operaciju 
aritmetičko-Iogičke jedinice.

Upravljačka jedinica procesora obavlja dva zadatka: (I) dovodi da toga da procesar izvršava 
mikrooperacije po pravilnom redosledu koji je određen programam koji se izvršava i (2) generiše 
upravljačke signale koji dovode do toga da se sve mikrooperacije izvrše.

Upravljački signali koje generiše upravljačka jedinica izazivaju otvaranje I zatvaranje logičkih 
kola, što za posledicu ima prenos podataka u registre i iz registara, kao i rad aritmetičko-
Iogičke jedinice.

Jedna   od   tehnika   za   implementiranje   upravljačke   jedinice   poznata   je   kao   ožičena 
implementacija, u kojoj je upravljačka jedinica kombinatorno kolo. Njeni ulazni signali, određeni 
tekucom mašinskom instrukcijom, pretvaraju se u skup izlaznih upravljačkih signala.

U poglavlju 10 istakli smo da skup mašinskih instrukcija prolazi dug put prema procesoru. Ukoliko znamo 
skup   mašinskih   instrukcija,   što   znači   da   razumemo   šta   operativni   kodovi   rade   i   razumemo   režime 
adresiranja i ukaliko znamo skup registara vidljivih korisniku, tada znamo koje funkcije procesor mora 
da izvrši. To nije sve. Moramo poznavati spoljni interfejs, što je najčešće magistrala, i to kako se 
upravlja prekidima. Kada nam je to jasno, pojavljuje se sledeći spisak elemenata neophodnih da bi 
se .odredilo funkcionisanje procesora:

1. operacije (operativni kodovi), 
2. režimi adresiranja,
3. registri,
4. interfejs U/I modula, 
5. interfejs memorijskag modula, struktura 
6. obrade prekida.

laka uopšten, ovaj spisak je prilično potpun. Stavke od 1 do 3 definisane su skupom instrukcija. 

Stavke 4 i 5 obično su definisane određivanjem sistemske magistrale. Stavka 6 delimično je definisana 
sistemskam magistralom, a delimično tipom podrške koju procesor nudi operativnom sistemu.

106

Ovaj spisak od šest stavki magao bi se nazvati funkcionalni zahtevi za procesoar. Oni određuju šta 

procesor mora da radi. Time sma se najviše bavili u drugom i trećem delu. Sada nas zanima to kako se 
ove funkcije izvršavaju ili, još tačnije, kako se upravlja različitim delovima procesora da bi se te 
funkcije   obavile.   Stoga,   našu   pažnju   usmeravamo   ka   upravljačkoj   jedinici,   koja   upravlja   radom 
procesora.
Već smo videli da se rad računara, prilikom izvršavanja programa, sastoji od niza instrukcijskih ciklusa, 
sa jednom mašinskom instrukcijom po ciklusu. Naravno, moramo se podsetiti da redosled instrukcijskih 
ciklusa   nije   obavezno   isti   kao   i  

redosled   pisanja  instrukcija   od   kojih   je   program   sačinjen,   zbog 

postojanja instrukcija grananja. Ovde je reč o izvršavanju 

vremenskog redosleda instrukcija.

Dalje smo videli da se svaki instrukcijski ciklus sastoji od određenog broja jednostavnijih celina. 

Jedna od pogodnih podela je podela na ciklus donošenja, indirektni ciklus, izvršni ciklus i ciklus prekida, 
pri čemu se samo ciklus donošenja i izvršni ciklus obavezno dešavaju.

Za   projektovanje   upravljačke   jedinice   neophodno   je   da   dodatno   raščlanimo   ovu   podelu.   Pri 

razmatranju protočne obrade u poglavlju 12, uvideli smo da je dalja dekompozicija moguća. U stvari, 
videćemo da svi manji ciklusi obuhvataju niz koraka, od kojih svi obuhvata ju registre procesora. Ove 
korake   nazvaćemo  

mikrooperacije.  Prefiks  mikro  označava   činjenicu   da   je   svaki   korak   veoma 

jednostavan i da obavlja malo toga. Na slici 16.1 prikazan je međusobni odnos između različitih pojmova 
o kojima smo govorili. Ukratko da ponovimo, izvršavanje programa sastoji se od izvršavanja instrukcija 
jedne za drugom. Sve instrukcije izvršavaju se tokom instrukcijskog ciklusa koji se sastoji od kraćih 
potciklusa (npr. ciklusa donošenja, indirektnog ciklusa, izvršnog ciklusa, ciklusa prekida). Izvršavanje 
svakog od potciklusa obuhvata jednu ili više kraćih operacija, to jest, mikrooperacija.

Mikrooperacije

 su najmanje moguće, ili atomske, operacije procesora. U ovom odeljku, istraži ćemo 

mikrooperacije kako bismo razumeli to da se događaji u bilo kom instrukcijskom ciklusu mogu opisati kao 
niz takvih mikrooperacija. Koristiće se jednostavan primer. U ostatku ovog poglavlja pokazaćemo kako 
znanje o mikrooperacijama služi kao smernica za projektovanje upravljačke jedinice.

Ciklus donošenja

Počećemo razmatranjem ciklusa donošenja koji se odvija na početku svakog instrukcijskog ciklusa i 
dovodi do toga da se instrukcija preuzme iz memorije. Za potrebe našeg razmatranja, pretpostavićemo 
organizaciju opisanu na slici 12.6. Uključena su četiri registra:

memorijski adresni registar  

(Memory Address Register,  MAR): povezan sa adresnim linijama 

sistemske magistrale; određuje adresu u memoriji za operaciju čitanja ili upisivanja;

memorijski   bafer   registar  

(Memory   BufJer   Registar,  MBR):   povezan   sa   linijom   podataka 

sistemske magistrale; sadrži vrednosti koje treba upisati u memoriju ili poslednju vrednost 
učitanu iz memorije;

programski brojač 

(Program Counter, PC): drži adresu sledeće instrukcije koju treba doneti;

instrukcijski registar 

(Instruction Registar, IR): drži poslednju donetu instrukciju.

Pogledajmo redosled događaja za ciklus donošenja sa tačke gledišta registara procesora i koje 

posledice ima na njih. Primer je prikazan na slici 16.2. Na početku ciklusa donošenja, adresa sledeće 
instrukcije koja treba da se izvrši nalazi se u programskom brojaču (PC); u ovom slučaju, adresa je 
1100100. Prvi korak je da se ta adresa premesti i memorijski adresni registar (MAR) pošto je to jedini 
registar   povezan   sa   adresnim   linijama   sistemske   magistrale.   Drugi   korak   je   uvođenje   instrukcije. 
Željena adresa (u MAR registru) smešta se na adresnu magistralu, upravljačka jedinica izdaje komandu 
za učitavanje (READ) upravljačkoj magistrali i rezultat se pojavljuje na magistrali podataka i kopira se 
u memorijski bafer registar (MBR). Takođe, neophodno je da povećamo vrednost PC registra za 1 da 
bismo bili spremni za sledeću instrukciju. Pošto ove dve akcije (učitavanje iz memorije, dodavanje 1 u PC 

107

background image

tI: t2: t3:

Polje adrese u instrukciji prenosi se u MAR registar. On se zatim koristi za donošenje adrese 

operanda. Konačno, polje adrese IR registra se ažurira iz MBR registra, tako da sada sadrži direktnu 
umesto indirektne adrese.

IR registar je sada u istom stanju kao da indirektno adresiranje nije ni korišćeno i spreman je za 

izvršni ciklus. Na trenutak ćemo preskočiti ovaj ciklus i razmotrićemo ciklus prekida.

Ciklus prekida

Po završetku izvršnog ciklusa, vrši se provera kako bi se ustanovilo da li se dogodio neki od dozvoljenih 
prekida. Ukoliko je tako, događa se ciklus prekida. Priroda ovog ciklusa veoma se razlikuje od jednog do 
drugog procesora. Prikazujemo veoma jednostavan niz događaja, onako kako su prikazani na slici 12.8. 
Imamo:
tI: t2:
MBR ~ (PC)
MAR ~ adresa_čuvanja PC ~ adresa_rutine
t3:
memorija ~ (MBR)

U prvom koraku, sadržaj PC registra prenosi se u MBR registar, tako da se može sačuvati za 

povratak iz prekida. Zatim se u MAR registar učitava adresa na kojoj je sačuvan sadržaj PC registra, a 
u PC registar se učitava adresa početka rutine za obradu prekida. Ove dve akcije mogu biti zasebne 
mikrooperacije. Međutim, pošto većina procesora nudi više tipova i/ili nivoa prekida, možda će biti 
potrebna jedna ili više dodatnih mikrooperacija kako bi se dobile adresa_čuvanja i adresa_rutine pre 
nego što se prenesu u MAR i PC registre, respektivno. U svakom slučaju, kada se to obavi, poslednji 
korak je skladištenje u memoriju MBR registra, koji sadrži staru vrednost PC registra. Procesor je sada 
spreman da otpočne sledeći instrukcijski ciklus.

Izvršni ciklus

Ciklus donošenja, indirektni ciklus i ciklus prekida su jednostavni i predvidivi. Svi oni obuhvataju male, 
nepromenljive nizove mikrooperacija i, u svim slučajevima, iste mikrooperacije ponavljaju se svaki put 
ispočetka.

Ovo ne važi za izvršni ciklus. Za procesor sa  

N  različitih operacionih kodova, postoji  N  različitih 

redosleda po kojima se mikroperacije mogu odvijati. Razmotrimo nekoliko hipotetičkih primera.

Prvo, razmatramo instrukciju sabiranja:

ADD RI, X
kojom se sadržaj lokacije X dodaje u registar R1. Moguće je da se desi sledeći niz mikrooperacija:
tI: t2: t3:
MAR <E- (IR (adresa)) MBR <E- memorija
RI <E- (RI) + (MBR)

Počinjemo sa registrom  

IR  

koji sadrži instrukciju za sabiranje, ADD. U prvom koraku, deo  

IR 

registra sa adresom unosi se u MAR registar. Zatim se učitava memorijska lokacija na koju se ta adresa 
poziva. Konačno, aritmetičko logička jedinica sabira sadržaje registara RI i MBR. Ponavljamo, ovo je 
pojednostavljen primer. Moguće je da budu potrebne dodatne mikrooperacije za izvlačenje reference 
registra iz 

IR 

i možda za smeštanje ulaza i izlaza aritmetičko logičke jedinice u neke međuregistre.

Razmotrimo dva složenija primera. Uobičajena instrukcija je povećanje vrednosti i preskakanje 

ukoliko je vrednost nula:
ISZ X

Sadržaj lokacije X povećava se za 1. Ukoliko je rezultat O, preskače se sledeća instrukcija. Mogući 

109

redosled mikrooperacija je:
tI: t2: t3: t4:
MAR <E- (IR (adresa) )
MBR <E- memorija
MBR <E- (MBR) + 1
memorija <E- (MBR)
Ukoliko ((MBR) = O) tada (PC <E- (PC) + I)

Ovde je uvedeno nešto novo, a to je uslovna akcija. Registar PC se povećava ukoliko je (MBR) = O. 

Ova   provera   i   akcija   mogu   se   izvesti   u   jednoj   mikrooperaciji.   Primećujete   takođe   da   se   ova 
mikrooperacija može izvršiti tokom iste jedinice vremena tokom koje se ažurirana vrednost u MBR 
registru ponovo skladišti u memoriju.

Na kraju, razmotrimo instrukciju za pozivanje potprograma. Kao primer, razmotrimo instrukciju za 

grananje i čuvanje adrese:
BSA X

Adresa instrukcije, koja sledi posle instrukcije BSA, čuva se u lokaciji X, a izvršavanje se nastavlja 

na lokaciji X + I. Sačuvana adresa kasnije će biti iskorišćena za povratak. Ovo je jednostavna tehnika za 
pozivanje potprograma. Dovoljne su sledeće mikrooperacije:
tl:
MAR ~ (IR (adresa) ) MBR ~ (PC)
PC ~ (IR (adresa) ) memorija ~ (MBR)
PC ~ (PC) + I
t2:
t3:

Adresa u PC registru na početku instrukcije je adresa sledeće instrukcije u nizu. Ona se čuva u 

adresi naznačenoj u  

IR  

registru. Ova druga adresa se takođe povećava da bi se obezbedila adresa 

instrukcije za sledeći instrukcijski ciklus.

Instrukcijski ciklus

Već   smo   videli   da   se   svaka   faza   instrukcijskog   ciklusa   može   dekomponovati   u   niz   elementarnih 
mikrooperacija. U našem prim eru, postoji po jedan niz mikrooperacija za ciklus donošenja, indirektni 
ciklus i ciklus prekida, a za izvršni ciklus postoji jedan niz mikrooperacija za svaki operacioni kod.

Da bismo upotpuni1i sliku, potrebno je da povežemo niz mikrooperacija, i to je učinjeno na slici 16.3. 

Uvodimo novi 2-bitni registar pod nazivom  

kOd instrukeijskog ciklusa (Instruetion Cycle Code,  ICC). 

Registar ICC označava stanje procesora u smislu u kom delu ciklusa se procesor nalazi:

00: ciklus donošenja, 01: indirektni ciklus, 10: izvršni ciklus, 

11: 

ciklus prekida.

Na kraju svakog od ova četiri ciklusa, vrednost ICC registra postavlja se na odgovarajuću vrednost. 
Posle indirektnog ciklusa uvek sledi izvršni ciklus. Posle ciklusa prekida uvek sledi ciklus donošenja 
(videti sliku 12.4). Što se tiče ciklusa donošenja i izvršnog ciklusa, sledeći ciklus zavisi od stanja 
sistema.
Prema tome, dijagram toka na slici 16.3 definiše potpuni niz mikrooperacija, koji zavisi samo od 

redosleda instrukcija i vrste i načina pojavljivanja prekida. Naravno, ovo je pojednostavljeni primer. 
Dijagram toka stvarnog procesora bio bi mnogo složeniji. U svakom slučaju, stigli smo do one tačke u 
našoj raspravi u kojoj se rad procesora definiše kao obavljanje niza mikrooperacija. Razmotrićemo kako 
upravljačka jedinica dovodi do izvršavanja tog niza.

Funkcionaini zahtevi

Rezultat   naše   analize   u   prethodnom   odeljku   je   da   smo   dekomponovali   ponašanje   ili   funkcionisanje 

110

background image

upravlja ponašanjem sistema. Njima se spolja opisuje upravljačka jedinica. Iznutra, upravljačka jedinica 
mora da ima logička kola neophodna da bi obavila svoje funkcije sekvenciranja i izvršavanja. Raspravu o 
tome kako upravljačka jedinica radi iznutra ostavljamo za odeljak 16.3 i poglavlje 17. U preostalom delu 
ovog   odeljka   govorićemo   o   međusobnom   delovanju   između   upravljačke   jedinice   i   ostalih   elemenata 
procesora.

Na slici 16.4 dat je opšti model upravljačke jedinice, na kome su prikazani svi ulazi i izlazi. Ulazi su 

sledeći:

Generator   takta:   pomoću   njega   upravljačka   jedinica   "vodi   računa   o   vremenu";   upravljačka 
jedinica izaziva izvršavanje jedne mikrooperacije (ili skup istovremenih mikrooperacija) za svaki 
impuls   generatora   takta;   ovo   se   ponekad   naziva   vreme   ciklusa   procesora   ili   vreme   ciklusa 
generatora takta;

instrukcijski   registar:   operacioni   kod   tekuće   instrukcije   koristi   se   za   određivanje   koje 
mikrooperacije se obavljaju tokom izvršnog ciklusa;

markeri: neophodni su upravljačkoj jedinici da bi odredila status procesora i izlaz prethodnih 
operacija aritmetičko-Iogičke jedinice; na primer, za instrukciju povećanja i preskoka ukoliko je 
vrednost nula (ISZ) upravljačka jedinica će povećati PC registar ako je postavljen nu1ti marker;

upravljački signali sa upravljačke magistrale: upravljački deo sistemske magistrale obezbeđuje 
signale za upravljačku jedinicu. kao što su signali prekida ili potvrda.

Izlazi su:

upravljački signali unutar procesora: postoje dva tipa - oni koji izazivaju premeštanje podataka 
iz jednog registra u drugi i oni koji aktiviraju određene funkcije aritmetičko-Iogičke jedinice;

upravljački signali ka upravljačkoj magistrali: takođe postoje dva tipa - upravljački signali ka 
memoriji i upravljački signali ka U/I modulima.

Novi element koji je uveden na ovoj slici je upravljački signal. Koriste se tri tipa upravljačkih 

signala:   oni   koji   aktiviraju   neku   funkciju   aritmetičko-Iogičke   jedinice,   oni   koji   aktiviraju   putanju 
podataka i oni koji su signali na spoljnoj sistemskoj magistrali ili drugim spoljnim interfejsima. Svi ovi 
signali se u krajnjoj liniji primenjuju neposredno kao binarni ulazi na pojedinačna logička kola.

Razmotrimo   još   jednom   ciklus   donošenja   da   bismo   videli   kako   upravljačka   jedinica   održava 

upravljanje. Upravljačka jedinica vodi računa o tome gde se nalazi u instrukcijskom ciklusu. Udatoj 
tački, ona zna da će posle toga biti izvršen ciklus donošenja. Prvi korak je prenošenje sadržaja PC 
registra u MAR registar. Upravljačka jedinica to radi aktiviranjem upravljačkog signala koji otvara 
logička kola između bitova registara PC i MAR. Sledeći korak je učitavanje reči iz memorije u MBR 
regstar i povećanje PC registra. Upravljačka jedinica to radi slanjem sledećih upravljačkih signala 
istovremeno:

upravljački signal koji otvara logička kola, omogućavajući da se sadržaj MAR registra smesti 
na magistralu adresa;

upravljački signal učitavanja memorije na upravljačkoj magistrali;

upravljački signal koji otvara logička kola, omogućavajući da se sadržaj magistrale podataka 
sačuva u 

MBR 

registru;

upravljački signal u logičko kolo koje dodaje 1 sadržaju PC registra i rezultat ponovo unosi u 
PC registar.

Posle toga, upravljačka jedinica šalje upravljački signal koji otvara logička kola između registara 

MBR i IR.

Time se okončava ciklus donošenja, osim u jednoj stvari: upravljačka jedinica mora da odluči da li da 

posle toga izvrši indirektni ciklus ili izvršni ciklus. Da bi to odlučila, ona ispituje  

IR  

registar kako bi 

112

videla da li je napravljena indirektna referenca na memoriju.

Indirektni ciklus i ciklus prekida rade na sličan način. Za izvršni ciklus, upravljačka jedinica počinje 

ispitivanjem   operacionog   koda   i,   na   osnovu   toga,   odlučuje   kojim   redosledom   će   biti   izvršene 
mikrooperacije izvršnog ciklusa.

Primer upravljačkih signala

Da bismo ilustrovali funkcionisanje upravljačke jedinice, razmotrimo jednostavan primer (slika 16.5). To 
je jednostavan procesor sa jednim akumulatorom. Naznačene su putanje podataka između elemenata. 
Upravljačke   putanje   za   signale   koji   potiču   iz   upravljačke   jedinice   nisu   prikazane,   ali   završeci 
upravljačkih signala obeleženi su kao Ci i naznačeni kružićem. Upravljačka jedinica prima ulaze iz 
generatora takta, instrukcijskog registra i markera. Sa svakim ciklusom generatora takta, upravljačka 
jedinica očitava sve svoje ulaze i emituje skup upravljačkih signala. Upravljački signali odlaze do tri 
različita odredišta:

putanje  

podataka:   upravljačka   jedinica   kontroliše   unutrašnji   tok   podataka;   na   primer, 

prilikom donošenja instrukcije, sadržaj memorijskog bafer registra prenosi se u instrukcijski 
registar; za sve putanje koje se kontrolišu postoji logičko kolo (naznačeno kružićem na slici); 
upravljački signal iz upravljačke jedinice privremeno otvara logičko kolo da dozvoli prolazak 
podataka;

aritInetičko-logička jedinica: upravljačka jedinica kontroliše rad aritmetičkologičke jedinice 
pomoću   skupa   upravljačkih   signala;   ovi   signali   aktiviraju   različite   logičke   uređaje   i   kola 
unutar aritmetičko-logičke jedinice;

sistemska  magistrala:  upravljačka  jedinica šalje upravljačke signale  na upravljačke  linije 
sistemske magistrale (npr. učitavanje memorije).

Upravljačka jedinica mora uvek da zna gde se nalazi u instrukcijskom ciklusu. Koristeći to znanje, i 

čitajući   svoje   ulaze,   upravljačka   jedinica   emituje   niz   upravljačkih   signala   koji   izazivaju   dešavanje 
mikrooperacija.  Ona koristi impulse generatora takta da bi odredila vremenski redosled  događaja, 
ostavljajući   vreme   između   događaja   da   bi   se   nivoi   signala   stabilizovali.   U   tabeli   16.1   navedeni   su 
upravljački   signali   koji   su   potrebni   za   neke   od   nizova   mikrooperacija   opisanih   ranije.   Zbog 
jednostavnosti putanje podataka i kontrole za povećanje PC registra i za učitavanje nepromenljivih 
adresa u registre PC i MAR nisu prikazane.

Vredi podrobnije proučiti osnovnu prirodu upravljačke jedinice. Upravljačka jedinica je mehanizam 

koji pokreće čitav računar. Ona to radi samo na osnovu znanja o tome koje se instrukcije izvršavaju i  
prirodi rezultata aritemtičkih i logičkih operacija (npr. pozitivno, prekoračenje itd.). Ona nikada ne vidi 
podatke koji se obrađuju ili stvarno dobijene rezultate. Uz to, ona kontroliše sve sa samo nekoliko 
upravljačkih signala ka određenim tačkama u procesom i nekoliko upravljačkih signala ka sistemskoj 
magistrali.

Unutrašnja organizacija procesora

Na slici 16.5 naznačena je upotreba različitih putanja podataka. Potrebno je razjasniti složenost ovog 
tipa organizacije. Za to će se obično koristiti neka vrsta unutrašnjeg rasporeda magistrala, kakva je 
predložena na slici 12.2.

Korišćenjem unutrašnje magistrale procesora, slika 16.5 može se preurediti onako kako je prikazano 

na slici 16.6. Jedna unutrašnja magistrala povezuje aritmetičkologičku jedinicu i sve registre procesora.

Za premeštanje podataka iz svakog registra na magistralu i sa magistrale obezbeđena su logička kola 

i upravljački signali. Dodatni upravljački signali kontrolišu prenos podataka na i sa sistemske (spoljne) 

113

background image

pristupa od datog procesora do reči u memoriji menja u zavisnosti od memorijske lokacije.

Vrsta paralelne orgapizacije sa posebnom namenom je vektorska obrada, prilagođena obradi 
vektora ili nizova podataka.

Uobičajeno je da se na računar gleda kao na sekvencijalnu mašinu. Većina računarskih programskih 
jezika od programera zahteva da algoritme određuje kao niz instrukcija. Procesori izvršavaju programe 
izvršavanjem mašinskih instrukcija sekvencijalno, jednu po jednu. Sve instrukcije izvršavaju se kao niz 
operacija (donošenje instrukcije, donošenje operanda, izvršavanje operacije, skladištenje rezultata).

Ovakav pogled na računar nije nikad bio u potpunosti tačan. Na nivou mikrooperacija, istovremeno se 

generiše   više   upravljačkih   signala.   Protočna   obrada   instrukcija,   bar   u   meri   takvoj   da   dolazi   do 
preklapanja   operacija   donošenja   i   izvršavanja,   postoji   odavno.   Oba   navedena   slučaja   su   primeri 
paralelnog izvršavanja funkcija. Ovaj pristup je dodatno proširen superskalarnom organizacijom, u kojoj 
se iskorišćava paralelizam na nivou instrukcija. U superskalarnim računarima postoji više izvršnih celina 
unutar jednog procesora koje mogu paralelno izvršavati više instrukcija iz istog programa.

Razvojem računarske tehnologije i padom cena hardvera računara, projektanti računara istraživali 

su sve veći i veći broj  mogućnosti  za paralelizam,  obično da  bi poboljšali performanse i, u  nekim 
slučajevima,   da   bi   povećali   raspoloživost.   Posle   uvoda,   u   ovom   poglavlju   razmatramo   neka   od 
najistaknutijih rešenja paralelne organizacije. Prvo istražujemo simetrične multiprocesore (SMP), jednu 
od prvih, ali još uvek najčešćih primera paralelne organizacije procesora. U SMP organizaciji više proce-
sora deli zajedničku memoriju. U ovoj organizaciji najvažniji problem je koherentnost keš memorije, 
čemu   je   posvećen   poseban   odeljak.   Potom   opisujemo   klastere,   koji   se   sastoje   od   više   nezavisnih 
računara   organizovanih   tako   da   rade   zajedno.   Iza   toga   sledi   istraživanje   procesora   sa   višenitnom 
obradom i čipa sa više procesora. Klasteri su u znatnoj meri postali uobičajen način za obavljanje 
poslova   koji   prevazi1aze   mogućnosti   SMP   obrade.   Sledeći   način   za   korišćenje   više   procesora   koji 
istražujemo su sistemi sa neuniformnim pristupom memoriji (NUMA). NUMA sistemi su relativno novi i 
nisu još dokazani na tržištu, ali se često razmatraju kao alternativa rešenjima sa SMP obradom ili 
klasterom   računara.   Konačno,   u   ovom   poglavlju   se   razmatra   hardversko   rešenje   organizacije   za 
vektorsko računarstvo. Ovim rešenjima optimizuje se aritmetičko logička jedinica za obradu vektora ili 
nizova   brojeva   u   pokretnom   zarezu.   Ona   su   uobičajena   u   klasi   računara   poznatih   pod   nazivom 

superračunari.

Vrste sistema sa procesorima

Razvrstavanje koje je prvi uveo Flynn [FLYN72] i dalje je najčešći način za kategorizaciju sistema sa 
mogućnošću paralelne obrade. Flynn je predložio sledeće kategorije računarskih sistema:

Jedna instrukcija, jedan tok podataka  

(single instruction, single data,  SISD) Jedan procesor 

izvršava   jedan   tok   instrukcija   kojima   se   utiče   na   podatke   uskladištene   u   jednoj   memoriji. 
Računari sa jednim procesorom spadaju u ovu kategoriju.

Jedna instrukcija, više tokova podataka 

(single instruction, multiple data, SIMD) Jedna mašinska 

instrukcija upravlja istovremenim izvršavanjem većeg broja elemenata obrade uporedo. Svakom 
elementu obrade pridruženi su podaci u memoriji tako da različiti procesori izvršavaju sve te 
instrukcije na različitim skupovima podataka. Procesori za rad sa vektorima i nizovima spadaju u 
ovu kategoriju.

Više instrukcija, jedan tok podataka  

(multiple instruction, single data,  MISD) Niz podataka 

prenosi se do skupa procesora od kojih svaki izvršava drugačiji niz instrukcija. Ovakva struktura 
nije komercijalno implementirana.

Više   instrukcija,   više   tokova   podataka  

(multiple   instruction,   multiple   data,  MIMD)   Skup 

115

procesora istovremeno izvršava različite sekvence instrukcija na različitim skupovima podataka. 
SMP, klasteri i NUMA sistemi spadaju u ovu kategoriju.

U MIMD organizaciji procesori su opšte namene; svaki od njih može da obradi sve instrukcije 

neophodne da bi se izvršila odgovarajuća transformacija podataka. MIMD organizacija može se dalje 
podeliti po tome na koji način procesori međusobno komuniciraju (slika 18.1). Ukoliko procesori dele 
zajedničku memoriju, tada svaki procesor pristupa programima i podacima uskladištenim u deljenoj 
memoriji i procesori komuniciraju jedan sa drugim preko te memorije. Najčešći oblik ovakvog sistema 
poznat je kao simetrični 

multiprocesor 

(SMP) koji istražujemo u odeljku 18.2. U SMP sistemima, više 

procesora   deli   jednu   memoriju   ili   združenu   memoriju   pomoću   zajedničke   magistrale   ili   drugog 
mehanizma za međusobno povezivanje; ovi sistemi odlikuju se time da je vreme pristupa memoriji za bilo 
koju oblast memorije približno isto za sve procesore. Noviji pronalazak je organizacija sa 

neuniformnim 

pristupom memoriji 

(NUMA), koja je opisana u odeljku 18.5. Kao što i samo ime kaže, vreme pristupa 

memoriji različitim oblastima u memoriji može biti različito za NUMA procesor.

Grupa nezavisnih samostalnih procesora, ili SMP procesora, može se međusobno povezati kako bi 

formirali 

klaster 

računara. Komunikacija između ovih računara ostvaruje se ili putem stalnih putanja ili 

preko neke mreže.

Paralelne organizacije

Na   slici   18.2   prikazana   je   opšta   organizacija   kategorija   sa   slike   18.1.   Na   slici   l8.2a   prikazana   je 
struktura SISD računarskih sistema. Postoji neka vrsta upravljačke jedinice (VJ) koja obezbeđuje tok 
instrukcija (TI) do procesorske jedinice (PJ). Procesorska jedinica operiše jednim tokom podataka (TP) 
iz memorijske jedinice (MJ). Kod SIMD računarskih sistema, i dalje imamo jednu upravljačku jedinicu 
koja u ovom slučaju jednim tokom instrukcija napaja više procesorskih jedinica. Procesorske jedinice 
mogu imati sopstvenu samo njima namenjenu memoriju (kao što je prikazno na slici l8.2b) ili može 
postojati   zajednička,   deljena   memorija.   Konačno,   u   MIMD   računarskim   sistemima   postoji   više 
upravljačkih jedinica, od kojih svaka zasebnim tokom instrukcija napaja sopstvenu procesorsku jedinicu. 
MIMD računarski sistem može biti sastavljen  od više procesora sa zajedničkom memorijom (slika 
18.2.c) ili od više računara sa raspodeljenom memorijom (slika 18.2.d).

Problemi   koji   se   tiču   projektovanja   SMP,   klastera   i   NUMA   organizacije   računara   su   složeni, 

uključujući   pitanja   koja   se   odnose   na   fizičku   organizaciju,   strukture   za   međusobno   povezivanje, 
komunikaciju između procesora, projektovanje operativnog sistema i tehnike aplikativnog softvera. Mi 
ćemo   se   prvenstveno   baviti   organizacijom   mada   ćemo   ukratko   pomenuti   i   pitanja   projektovanja 
operativnog sistema za paralelni rad procesora.

Poglavlje 15
PARALELIZAM NA NIVOU 

INSTRUKCUA I SUPERSKALARNI PROCESORI

SuperskaIarni procesor 

je onaj kod koga se koristi više nezavisnih protočnih obrada instrukcija. Sve 

protočne obrade imaju više etapa, što znači da svaka od njih može u istom trenutkuda se bavi većim 
brojem instrukcija. Višestrukim protočnim obradamadobijen   je   novi   nivo   paralelizma   koji   omogućava 
istovremenu obradu većeg broja nizova instrukcija. Na superskalarnim procesorima primenjuje se  

pa

ralelizam nivoa instrukcija, 

pod kojim se podrazumeva stepen u kome instrukcije  nekog   programa 

mogu da se izvršavaju paralelno.
….
Nasuprot tome, na većini superskalarnih procesora do poboljšanja efikasnosti protočne obrade stiže se 
korišćenjem tradicionalnih metoda predviđanja grananja.

Superskalarna   implementracija   arhitekture   procesora   jeste   ona   u   kojoj   česte   instrukcije   - 

116

background image

trenutku se samo jedna instrukcija nalazi u svojoj etapi izvršenja protočne obrade.

U   sledećem   delu   dijagrama   ilustrovana   je   superprotočna   implementacija   koja   u   jednom   ciklusu 

generatora   takta   može   da   izvršava   dve   etape   protočne   obrade.   Drugim   rečima,   funkcije   koje   se 
izvršavaju u svakoj etapi protočne obrade mogu da se podele na dva nepreklapajuća dela za čije je 
izvršenje potrebno po pola ciklusa generatora takta. Za superprotočnu obradu koja se ponaša na ovaj 
način   kaže   se   da   predstavlja   superprotočnost   drugog   stepena.   Konačno,   u   donjem   delu   dijagrama 
ilustrovanaje   superskalarna   implementacija   kod   koje   paralelno   mogu   da   se   izvršavaju   dve   etape. 
Naravno, moguće je postići i viši stepen efikasnosti superprotočnih i superskalarnih implementacija.

U   superprotočnom   i   superskalarnom   procesoru   sa   slike   14.2,   istovremeno   se   izvršava   isti   broj 

instrukcija   u   spremnom   stanju.   Međutim,   superprotočni   procesor   zaostaje   za   superskalarnim   na 
početku programa i na svakom cilju grananja.

Ograničenja

Superskalarni pristup zasniva se na mogućnosti paralelnog izvršenja više instrukcija. Termin paralelizam 
na nivou instrukcija odnosi se na prosečnu vrednost stepena u kome instrukcije programa mogu da se 
izvršavaju   paralelno.   Paralelizam   nivoa   instrukcija   može   se   maksimalno   iskoristiti   kombinacijom 
optimiziranja   kompajlera   i   hardverskih   tehnika.   Pre   nego   što   ispitamo   tehnike   dizajna   kojima   se 
povećava paralelizam nivoa instrukcija superskalarnih procesora, razmotrimo koja su to ograničenja 
paralelizrna sa kojima sistem mora da se izbori. U [JOHN91] navedeno je pet ograničenja:

prava zavisnost podataka, 

proceduralna zavisnost, 

konflikti resursa,

zavisnost izlaza,

antizavisnost.

Prva tri ograničenja ispitaćemo u nastavku ovog odeljka, dok će poslednja dva morati da sačekaju 

sledeći odeljak, kada ćete biti sasvim spremni za njih.

Prava zavisnost podataka 

Pažljivo pogledajte sledeći kod:

Druga instrukcija može da se donese i dekodira, ali njeno izvršenje mora da sačeka na izvršenje prve 

instrukcije. To je zato što su ovoj drugoj instrukciji potrebni
U asemblerskom jeziku za lntel 80x86 i Pentium procesore, komentar je naznačen znakom tačka-zarez. 
Asembler zanemaruje ovaj znak i sve one koji se nalaze iza njega.

Na slici 14.3 ilustrovana je ova zavisnost kod superskalarnih procesora drugog stepena. Kada nema 

zavisnosti,   dve   instrukcije   mogu   paralelno   da   se   donose   i   izvršavaju.   Ukoliko   između  prve   i   druge 
instrukcije postoji zavisnost, druga instrukcija će biti zadržana onoliko ciklusa generatora takta koliko 
je potrebno da se ta zavisnost ukloni. Uopšteno govoreći, svaka instrukcija mora da se zadrži sve dok se 
ne generišu sve njene ulazne vrednosti.

U jednostavnoj protočnoj obradi, kakvu smo imali u gornjem delu slike 14.2, prethodno pomenuti sled 

instrukcija ne bi doveo do bilo kakvog odlaganja. Međutim, obratite sada pažnju na sledeći kod u kome 
jedno od učitavanja nije iz registra nego iz memorije:

Tipičnom RISC procesoru su, zbog kašnjenja prilikom pristupa memoriji koja nije na čipu ili usled 

pristupa kešu, za izvršavanje učitavanja iz memorije potrebna dva (ili više) ciklusa. Ovo kašnjenje može 
da se kompenzuje time što će kompajler da preuredi instrukcije i u protočnu obradu ubaci jednu ili više 
naknadnih instrukcija koje nisu uslovljene učitavanjem iz memorije. Ovakva šema je manje efikasna u 

118

slučaju   superskalarne   protočne   obrade:   nezavisne   instrukcije   koje   se   izvršavaju   tokom   učitavanja 
najverovatnije će se izvršiti u prvom ciklusu učitavanja, što znači da procesor neće imati posla sve do 
završetka učitavanja.
Proceduralne zavisnosti Kao što smo rekli u poglavlju 12, postojanje grananja u nizu instrukcija u velikoj 
meri komplikuje protočnu obradu. Instrukcije koje slede nakon grananja (svejedno da li se ono dogodi ili 
ne) proceduralno zavise od njega i mogu da se izvrše tek nakon što se grananje izvrši. Na slici 14.3 
ilustrovali smo efekat grananja na superskalarnu protočnu obradu drugog stepena.

Kao što ste videli, ovaj tip proceduralne zavisnosti pogađa i skalarnu protočnu obradu. Pri tom, 

posledice su kod superskalarne protočne obrade teže zato što se sva. kim kašnjenjem mnogo više gubi.

Prilikom korišćenja instrukcija promenljive dužine, pojavljuje se novi oblik proceduralne zavisnosti. S 

obzirom na to da dužina bilo koje od ovakvih instrukcija nije poznata, one se, bar delimično, moraju 
dekodirati kako bi mogla da se preuzme sle. deća instrukcija. Ovim se sprečava istovremeno donošenje 
koje je u superskalarnoj protočnoj obradi neophodno. Upravo zato su superskalarne tehnike podesnije 
za RISe i slične arhitekture u kojima je dužina instrukcija fiksirana.
Konflikt resursa Konflikt resursa jeste situacija u kojoj se dve ili više instrukcija istovremeno nadrneću 
za isti resurs. Pod resursima se podrazumevaju memorije, keš, magistrale, portovi registarske datoteke 
i funkcionalne jedinice (na primer, ALU sabirač).

U kontekstu protočne obrade, konflikt resursa ispoljava se slično kao i zavisnost podataka (slika 

14.3). Naravno, između njih postoje i određene razlike. Najpre, konflikti resursa mogu da se prevaziđu 
dupliranjem   resursa,   dok   prava   zavisnost   podataka   nikako   ne   može   da   se   izbegne.   Isto   tako,   kod 
operacija koje dugo traju, konflikti resursa mogu da se minimizuju protočnom obradom odgovarajuće 
funkcionalne jedinice.

14.2 ASPEKTI DIZAJNA

Paralelizam nivoa instrukcija i maši nsk i paralelizam
U [JOUP89a] je napravljena razlika između dva povezana koncepta - paralelizrna nivoa instrukcija 
imašinskog paralelizrna. Paralelizam nivoa instrukcija postoji kada su instrukcije nekog niza nezavisne 
tako da se preklapanjem mogu izvršavati paralelno.

Kao primer koncepta paralelizrna nivoa instrukcija, razmotrimo sada sledeća dva fragmenta koda 

[JOUP89b]:
Laad R1 +- R2
Add R3 +- R3, "1" Add R4 +- R4, R2
Add R3 +- R3, "1" Add R4 +- R3, R2 Stare [R4] +- RO
Tri instrukcije sa leve strane su nezavisne i sve tri bi mogle da se izvršavaju paralelno. Nasuprot tome, 
tri instrukcije sa desne strane ne mogu da se izvršavaju paralelno zato što druga instrukcija koristi 
rezultat prve, a treća rezultat druge.

Stepen   paralelizrna   nivoa   instrukcija   određen   je   učestalošću   istinskih   zavisnosti   podataka   i 

proceduralnih   zavisnosti   u   kodu.   Ovi   faktori,   dalje,   zavise   od   arhitekture   skupa   instrukcija   i   od 
aplikacije. Na paralelizam nivoa instrukcija značajno utiče parametar koji je [JOUP89b] nazvao vreme 
kašnjenja operacije. U pitanju je dužina čekanja da rezultat jedne instrukcije postane dostupan za 
operande   sledeće   instrukcije.   Od   ovog   vremena   kašnjenja   zavisi   koliko   će   ukupno   kašnjenje 
prouzrokovati zavisnost podataka ili proceduralna zavisnost.

Mašinski   paralelizam  

predstavlja   merilo   sposobnosti   procesora   da   iskoristi   paralelizam   nivoa 

instrukcija. Mašinski paralelizam zavisi od broja instrukcija koje se mogu preuzeti i izvršiti istovremeno 
(broj paralelnih protočnih obrada), kao i od brzine i savršenosti mehanizama pomoću kojih procesor 

119

background image

što se instrukcije donose u parovima, sledeći par mora da čeka sve dok se par etapa za dekodiranje ne 
oslobodi. Da bi se garantovalo završavanje po redu, ukoliko dođe do konflikta oko funkcionalne jedinice 
ili ako je funkcionalnoj jedinici za generisanje rezultata potrebno više od jednog ciklusa, izdavanje 
instrukcija se privremeno obustavlja.

U ovom primeru, od dekodiranja prve instrukcije, pa do zapisivanja poslednjih rezultata protekne 

osam ciklusa.
Izdavanje   u   redosledu   sa   završavanjem   preko   reda   Završavanjem   preko   reda   kod   skalarnih   Rise 
procesora poboljšavaju se performanse instrukcija za koje je potrebno više ciklusa. Na slici 14.4b 
ilustrovano je korišćenje ove tehnike na superskalarnim procesorima. Instrukciji 12 dozvoljava se da se 
izvrši pre instrukcije Il. To, dalje, omogućava raniji završetak instrukcije 13, čime se, u krajnjem 
ishodu, uštedi jedan ciklus.

Završavanje   preko   reda   omogućava   da   se   u   svakom   trenutku   u   fazi   izvršenja   nalazi   onoliko 

instrukcija koliko maksimalno dozvoljava mašinski paralelizam svih funkcionalnih jedinica. Izdavanje 
instrukcija   obustaVlja   se   u   slučaju   konflikta   oko   resursa,   zavisnosti   podataka   ili   proceduralne 
zavisnosti.

Pored   već   pomenutih   ograničenja,   postoji   još   jedna   zavisnost   koju   smo   ranije   nazvali   izlazna 

zavisnost (ili zavisnost upisivanje-upisivanje). Ilustrovaćemo vam je pomoću sledećeg koda 

(op se odnosi 

na bilo koju operaciju):

Instrukcija 12 ne može da se izvrši pre instrukcije Il zato što joj je potreban rezultat koji Il 

generiše u registru R3. Ovo je primer prave zavisnosti podataka, onakve kakvu smo opisali u odeljku 14.1. 
Slično tome, instrukcija 14 mora da čeka instrukciju 13 zato što koristi njen rezultat. U kakvom su 
odnosu instrukcije Ili I3? Ovde ne postoji zavisnost podataka, bar ne onakva kakvu smo pominjali. 
Medutim, ukoliko se instrukcija 13 izvrši pre instrukcije  

Il,  

onda će iz registra R3 biti preuzeta 

pogrešna vrednost za izvršenje instrukcije 14. Iz ovoga sledi da instrukcija 13 mora da se izvrši nakon 
instrukcije  Il  kako  bismo dobili  valjane izlazne vrednosti. Da bi se ovo  osiguralo, izdavanje treće 
instrukcije se obustavlja ukoliko bi njen rezultat naknadno mogao da bude zamenjen nekom starijom 
instrukcijom za čije je izvršenje potrebno više vremena.

Završavanje van redosleda zahteva složeniju logiku izdavanja instrukcija nego što je to slučaj kod 

završavanja u redosledu. Pored toga, rukovanje prekidima i izuzecima ovde je komplikovanije. Kada se 
dogodi   prekid,   izvršenje   instrukcije   se   obustavlja   u   aktuelnoj   tački   kako   bi   se   nastavilo   kasnije. 
Procesoru su neophodne garancije da će se u trenutku nastavka uzeti u obzir činjenica da su se 
instrukcije koje su prouzrokovale prekid do tada možda već izvršile.

Izdavanje   van   redosleda   sa   završavanjem   van   redosleda   Kod   izdavanja   uredosledu   procesor   će 

dekodirati instrukcije samo do tačke u kojoj se pojavljuju zavisnost ili konflikt. Prekid u dekodiranju 
instrukcija traje sve dok se konflikt ne razreši. Zbog toga procesor ne može da gleda ispred tačke 
konflikta i potraži instrukcije koje su nezavisne od onih koje su već u protočnoj obradi i koje bi bilo 
poželjno uvesti u protočnu obradu.

Da bi izdavanje van redosleda bilo moguće, neophodno je razdvojiti etape dekodiranja i izvršenja 

protočne obrade. Ovo se postiže baferom koji se naziva instrukcijski okvir. Čim završi dekodiranje 
instrukcije, procesor, u ovom slučaju, može da je smesti u instrukcijski okvir. Dok god ima mesta u ovom 
baferu, procesor može da nastavi da preuzima i dekodira nove instrukcije. Kada funkcionalna jedinica 
postane dostupna u etapi izvršenja, instrukcija se iz instrukcijskog okvira može izdati etapi izvršenja. 
Na ovaj način može da se izda svaka instrukcija pod uslovom (I) da joj je potrebna neka funkcija koja je 
raspoloživa i (2) da je ne blokiraju nikakvi konflikti ili zavisnosti.

Ovakva   organizacija   pruža   procesoru   mogućnost   gledanja   unapred   i   identifikovanja   nezavisnih 

121

instrukcija koje se mogu ubaciti u etapu izvršenja. Instrukcije se izdaju iz instrukcijskog prozora bez 
mnogo   poštovanja   njihovog   prvobitnog   redosleda   u   programu.   Kao   i   ranije,   jedini   zahtev   je   da   se 
program ponaša korektno.

Na slici 14.4c ilustrovali smo ovu politiku. Tokom svakog od prva tri ciklusa, po dve instrukcije se 

donose u etapi za dekodiranje. U svakom ciklusu, a u skladu sa veličinom bafera, dve instrukcije se iz 
etape za dekodiranje premeštaju u instrukcijski okvir. U ovom primeru moguće je izdati instrukciju 16 
pre instrukcije 15 (podsećamo vas da 15 zavisi od 14, ali 16 ne zavisi). To znači da se u etapama 
izvršenja i upisivanja štedi po jedan ciklus. U odnosu na sliku 14.4b, krajnja ušteda je jedan ciklus.

Na slici 14.4c nacrtali smo i instrukcijski okvir kako bismo vam ilustrovali njegovu ulogu. Ovaj prozor, 

međutim, ne predstavlja novu etapu protočne obrade. Kada kažemo da se instrukcija nalazi u okviru, to 
u stvari znači da procesor ima dovoljno informacija o njoj kako bi mogao da odluči kada da je izda.

Na politiku izdavanja i završetka van redosleda utiču ograničenja koja smo već pomenuli. Instrukcija 

ne može da se izda ukoliko krši zavisnost ili dovodi do konflikta. Razlika je u tome što u ovoj politici 
imamo veći broj raspoloživih instrukcija za izdavanje, čime se smanjuje verovatnoća da se protočna 
obrada zaustavi. Međutim, ovde se pojavljuje i nova vrsta zavisnosti koju smo već nazvali antizavisnost 
(ili zavisnost čitanja-upisivanja). KOd kojim smo se već bavili ilustrovaće nam ovu novu zavisnost:

11: R3 +- R3 op RS 12: R4 +- R3 + 1 13: R3 +- RS + 1 14: R7 +- R3 op R4

Izvršenje instrukcije 13 ne može da se završi pre nego što instrukcija 12 počne sa izvršenjem i 

preuzme svoje operande. To je zato što instrukcija I3 ažurira registar R3 koji predstavlja izvorni 
operand instrukcije 12. Termin  

antizavisnost  koristi se zato što ovo ograničenje podseća na istinsku 

zavisnost podataka, ali je obrnuto: umesto da prva instrukcija generiše vrednost koju druga instrukcija 
treba da koristi, ovde druga instrukcija uništava vrednost koju prva instrukcija koristi.

Preimenovanje registara

Kada su izdavanje instrukcija preko reda i njihovo završavanje preko reda dozvoljeni, povećava se 
verovatnoća   javljanja   izlaznih   zavisnosti   i   antizavisnosti.   Ove   zavisnosti   se   razlikuju   od   istinskih 
zavisnosti podataka i konflikata oko resursa koji odražavaju tok podataka kroz program i sekvencu 
izvršenja. Sa druge strane, izlazne zavisnosti i antizavisnosti javljaju se zato što registri više nisu u 
skladu sa sledom vrednosti koji diktira tok programa.

Kada se instrukcije izdaju i kompletiraju u redosledu, sadržaj svakog registra može da se precizira 

u svakoj tački izvršenja. Kod tehnika van redosleda, vrednosti registara ne mogu biti sasvim poznate u 
svakoj vremenskoj tački samo na osnovu razmatranja sleda instrukcija koje diktira program. Zbog toga, 
vrednosti dolaze u konflikt oko korišćenja registara, a procesor, da bi rešio ove konflikte, povremeno 
mora da zaustavi protočnu obradu.

Antizavisnosti i izlazne zavisnosti predstavljaju primere konflikata oko skladištenja. Više instrukcija 

konkuriše za korišćenje istih registarskih lokacija, što dovodi do ograničenja protočne obrade koja se 
negativno odražavaju na performanse. Ovaj problem još više dolazi do izražaja prilikom korišćenja 
tehnika   za   optimiziranje   registara   (poglavlje   13)   zato   što   ove   tehnike   pokušavaju   da   maksimalno 
poboljšaju korišćenje registara i samim tim povećavaju i broj konflikata oko skladištenja.

Jedna od metoda za prevazi1aženje ovih konflikata oko skladištenja bazira se na tradicionalnom 

rešenju   za   konflikte   oko   resursa   -   njihovom   dupliranju.   U   ovom   kontekstu,   ova   tehnika   naziva   se 

preimenovanje   registara.  

U   osnovi,   hardver   procesora   dinamički   raspodeljuje   registre   i   oni   se 

povezuju sa vrednostima koje su instrukcijama neophodne u različitim vremenskim tačkama. Kada se 
generiše nova registarska vrednost (odnosno, kada se izvrši instrukcija koja ima registar kao odredišni 
operand), njoj se dodeljuje novi registar. Sve naknadne instrukcije koje pristupaju toj vrednosti u vidu 

122

background image

Svaki procesor visokih performansi sa protočnom obradom mora na određeni način da se izbori sa 
aspektom grananja. Primera radi, kod procesora Intel 80486, problem grananja rešava se donošenjem 
instrukcije koja sledi odmah nakon grananja i spekulativnim donošenjem ciljne instrukcije grananja. 
Međutim, zbog toga što između donošenja unapred i izvršenja postoje dva ciklusa protočne obrade, ova 
strategija prilikom grananja pravi kašnjenje od dva ciklusa.

Pronalaskom   RISC   računara   počela   je   da   se   primenjuje   strategija   odloženog   grananja.   Ona 

procesoru omogućava da izračuna rezultat instrukcija o uslovnom grananju pre nego što unapred donese 
bilo kakve upotrebljive instrukcije. Procesor tako uvek izvršava instrukciju koja sledi odmah nakon 
grananja. Protočna obrada, zahvaljujući tome, ostaje puna dok procesor donosi novi niz instrukcija.

Kod superskalarnih računara strategija odloženog grananja nije toliko atraktivna, pre svega zato što 

u slotu za kašnjenje treba da se izvrši više instrukcija, što prouzrokuje nekoliko problema povezanih sa 
zavisnostima instrukcija. Stoga su se superskalarni procesori vratili tehnikama predviđanja grananja 
koje   su   prethodile   RISC   procesorima.   Kod   nekih   procesora   kao   što   je,   na   primer,   PowerPC   601, 
primenjuje se jednostavna tehnika statičkog predviđanja grananja. Nešto savršeniji procesori, kao što 
su PowerPC 620 ili Pentium 4, koriste dinamičko predviđanje grananja koje se bazira na analizi istorije 
grananja.

Superskalarno izvršenje

Sada je pravi trenutak da vam pokažemo kako izgleda superskalarno izvršenje programa (slika 14.6). 
Program  koji  treba da se izvrši sastoji  se od  linearne sekvence instrukcija. U  pitanju  je  statički 
program koji je napisao program er ili generisao kompajler. Proces donošenja instrukcija, u koji spada i 
predviđanje   grananja,   formira   dinamički   niz   instrukcija.   Prilikom   ispitivanja   ovog   niza   u   pogledu 
zavisnosti, procesor može da ukloni sve veštačke zavisnosti. Procesor zatim upućuje instrukcije u okvir 
za izvršenje. U ovom okviru instrukcije više nisu u rednom nizu, već se grupišu u skladu sa pravim 
zavisnostima podataka koje između njih postoje. Nakon toga, procesor prelazi u fazu izvršenja svake 
instrukcije,   redosledom   koji   diktiraju   prave   zavisnosti   podataka   i   dostupnost   hardverskih   resursa. 
Konačno, instrukcije se konceptualno vraćaju u prvobitni redosled, a njihovi rezultati se zapisuju.

Poslednji   korak   na   prethodnoj   slici   nazvali   smo  

predaja   ili   povlačenje  

instrukcija.   Ovaj   korak 

neophodan je iz sledećeg razloga. Zbog korišćenja više paralelnih protočnih obrada, instrukcije se mogu 
izvršiti različitim redom u odnosu na statički program. Osim toga, primena predviđanja grananja i 
spekulativnog izvršenja znači da neke kompletno izvršene instrukcije moraju da se napuste zato što nije 
došlo do grananja na koje se one odnose. Prema tome, trajno skladištenje i registri vidljivi za program 
ne mogu da se ažuriraju odmah nakon što se kompletira izvršenje instrukcija. Rezultati moraju da se 
sačuvaju u nekoj formi privremenog skladišta koje će moći da koriste zavisne instrukcije. Tek kada se  
ustanovi da bi redni model izvršio datu instrukciju, rezultati se pretvaraju u trajne.

Superskalarna implementacija

Na osnovu svega do sada rečenog, mogli bismo da izvedemo i nekoliko komentara koji se odnose na 
hardver procesora koji je neophodan za primenu superskalarnog pristupa. [SMIT95] je naveo sledeće 
ključne elemente:

Strategije   donošenja   instrukcija   u   kojima   se,   često   predviđanjem   ishoda   instrukcija   o 
uslovnom grananju i donošenjem iza njega, istovremeno donosi više instrukcija. Ove funkcije 
zahtevaju da se u protočnoj obradi koriste višestruke etapa za donošenje i dekodiranje 
instrukcija, kao i logika za predviđanje grananja.

Logika za ustanovljavanje istinskih zavisnosti između vrednosti registara i mehanizmi za 

124

komunikaciju ovih vrednosti sa etapama u kojima su neophodne tokom izvršenja.

Mehanizmi za paralelno iniciranje ili izdavanje više instrukcija.

Resursi za paralelno izvršavanje više instrukcija, uključujući tu i višestruke funkcionalne 
jedinice   protočne   obrade   i   memorijske   hijerarhije   koje   omogućavaju   istovremeno 
servisiranje više memorijskih referenciranja.

Mehanizmi za predaju stanja procesa u pravilnom redosledu.

Poglavlje 18
18.2 SIMETRIČNI MULTIPROCESORI

Sve donedavno, praktično svi personaini računari pojedinačnih korisnika i većina radnih stanica u sebi su 
imali jedan mikroprocesor opšte namene. Porastom zahteva za bržim obavljanjem posla i stalnim padom 
cena rnikroprocesora, isporučioci su ponudili sisteme sa SMP organizacijom. Izraz  

SMP  istovremeno 

označava   hardversku   arhitekturu   računara   i   ponašanje   operativnog   sistema   koje   odražava   tu 
arhitekturu.   SMP   sistem   može   se   deftnisati   kao   samostalni   računarski   sistem   sa   sledećim 
karakteristikama:

1. postoje dva ili više sličnih procesora uporedivih mogućnosti;
2. ovi procesori dele istu glavnu memoriju i U/I uređaje i međusobno su povezani magistralom ili 

nekim   drugim   internim   vezama,   tako   da   je   vreme   pristupa   memoriji   približno   isto   za   sve 
procesore;

3. svi procesori dele pristup do U/I uređaja, ili preko istih kanala ili preko različitih kanala koji 

obezbeđuju putanje do istih uređaja;

4. svi procesori mogu da izvršavaju iste funkcije (otuda potiče izraz 

simetrično; 

5. sistemom   upravlja   integrisani   operativni   sistem   koji   obezbeđuje   međusobnu   vezu   između 

procesora i njihovih programa na nivoima posla, zadatka, datoteke i elementa podataka.

Tačke od 1 do 4 trebalo bi da su jasne same po sebi. Tačka 5 ilustruje jednu od razlika u odnosu na  

labavo spregnute sisteme sa više procesora, kao što je klaster. U ovom drugom, najmanja fizička celina 
kojom su račun ari međusobno povezani obično je poruka ili kompletna datoteka. U SMP sistemu, 
međusobne veza može se ostvariti na nivou pojedinačnih elementa podataka, pa stoga je moguć visok 
stepen međusobne saradnje između procesora.

Operativni   sistem   SMP   sistema   raspoređuje   procese   ili   niti   između   svih   pro   cesora.   SMP 

organizacija ima brojne potencijalne prednosti u odnosu na samostalni procesor, između ostalog:

performansa: 

ukoliko bi se posao koji računar treba da obavi mogao organizovati tako da se isti 

delovi posla mogu uraditi paralelno, tada će sistem sa više procesora pokazati bolju performansu 
u odnosu na jedan procesor iste vrste (slika 18.3);

raspoloživost: 

u simetričnom multiprocesoru, pošto svi procesori mogu da obave iste funkcije, 

otkaz jednog od procesora neće zakočiti računar; umesto toga, sistem može nastaviti da radi sa 
umanjenim performansama;

proširivost:

 korisnik može da poboljša performanse sistema dodavanjem procesora;

 

prilagodljivost:  

isporučioci   mogu   da   ponude   čitav   niz   proizvoda   po   različitim   cenama   i   sa 

drugačijim performansama na osnovu broja procesora ugrađenih u sistem.

Važno je napomenuti da su ovo samo potencijalne, ne uvek i sigurne prednosti. Operativni sistem mora 
da obezbedi alate i funkcije kojima će se iskoristiti paralelizam u SMP sistemima.

Privlačnost SMP sistema je u tome da korisnik ne primećuje postojanje više procesora. Operativni 

125

background image

hardverski, a ne operativnim sistemom. Ovim pitanjem bavićemo se u odeljku 18.4.

Razmatranja projektovanja višeprocesorskog operativnog

 

sistema

SMP operativni sistem upravlja procesorima i ostalim resursima računara tako da korisnik ima utisak da 
sistemskim resursima upravlja običan operativni sistem. U stvari, takva konfiguracija bi trebalo da 
izgleda kao višeprogramski jednoprocesorski sistem. I u slučaju SMP sistema i sistema sa jednim 
procesorom, više poslova ili procesa može biti istovremeno pokrenuto, a odgovornost je na operativnom 
sistemu   da   raspoređuje   njihovo   izvršavanje   i   raspodeljuje   resurse.   Korisnik   može   da   konstruiše 
aplikaciju koja koristi više procesa ili više niti unutar procesa bez obzira na to da li na raspolaganju ima 
jedan   ili   više   procesora.   Prema   tome,   višeprocesorski   operativni   sistem   mora   da   obezbedi   svu 
funkcionalnost višeprogramskog sistema, a pored toga i dodatne mogućnosti kako bi se usaglasio rad više 
procesora. Između ostalih, ključna pitanja prilikom njegovog projektovanja su sledeća:

istovremeni konkurentni procesi: potrebno je da rutine operativnog sistema budu sa višestrukim 
ulazima   (deljive)   kako   bi   se   omogućilo   da   nekoliko   procesora   istovremeno   izvršava   isti   tok 
instrukcija; kada više procesora izvršava iste ili različite del ove operativnog sistema, mora se 
prikladno upravljati tabelama i upravljačkim strukturama operativnog sistema kako bi se izbeglo 
uzajamno blokiranje ili nevažeće operacije;

rasporedivanje: bilo koji procesor može da obavlja raspoređivanje pa se moraju izbeći sukobi; 
procesor   koji   obavlja   raspoređivanje   mora   da   spremne   procese   pridruži   raspoloživim 
procesorima;

sinhronizacija:   kada   više   pokrenutih   procesa   ima   potencijalni   pristup   do   deljenih   adresnih 
prostora ili zajedničkih U/I resursa, mora se voditi računa o tome da se obezbedi efikasna 
sinhronizacija; sinhronizacija je način na koji se prinudno sprovodi uzajamno izuzimanje i ređanje 
događaja;

127

upravljanje memorijom: upravljanje memorijom na multiprocesoru mora se izboriti sa svim onim 
problemima   koji   već   postoje   na   računarima   sa   jednim   procesorom,   o   kojima   smo   govorili   u 
poglavlju 8; pored toga, operativni sistem treba da iskoristi raspoloživi hardverski paralelizam, 
kao što je memorija sa više pristupa, kako bi se postigle najbolje performanse; mehanizam 
straničenja na različitim procesorima mora se koordinirati kako bi se postigla konzistentnost 
kada nekoliko procesora dele stranicu ili segment i da bi se odlučilo o zameni stranice;

pouzdanost i otpornost na greške: operativni sistem treba da, u slučaju otkaza nekog procesora, 
obezbedi   postepeno   opadanje   performansi;   deo   operativnog   sistema   koji   upravlja 
raspoređivanjem   procesa,   kao   i   drugi   delovi,   moraju   da   prepoznaju   gubitak   procesora   i   da 
saglasno tome preurede upravljačke tabele.

SMP organizacija velikih centraInih računara

Većina   personalnih   računara   i   radnih   stanica   organizovanih   u   SMP   sisteme   koriste   strategiju 
međusobnog povezivanja putem magistrale, kao što je prikazano na slici 18.5. Korisno je proučiti nešto 
drugačiji   pristup,   koji   se   koristi   u   najnovijoj   implementaciji   IBM-ove   familije   velikih   centrainih 
računara  serije z  [SIEG04, MAK04]  pod  nazivom z990. Ova familija računara obuhvata čitav niz 
računara, od jednoprocesorskih sa jednom glavnom memorijskom karticom do sistema visoke klase sa 
48 procesora i 8 memorijskih kartica. Ključne komponente konfiguracije prikazane su na slici 18.6:

procesorski čip sa dva jezgra: na svim procesorskim čipovima nalaze se dva identična centralna 
procesora   (CP);   centralni   procesor   je   Cl   SC   superskalarni   mikroprocesor,   u   kome   je   većina 
instrukcija sa ožičenom implementacijom, a ostatak se izvršava vertikalnim mikrokodom; svi 
centralni procesori obuhvata ju 256 KB LI instrukcione keš memorije i 256 KB LI keš memorije 
za podatke;

L2 keš memorija: sve L2 keš memorije obuhvataju 32 MB; L2 keš memorija spakovana je u 
klasterima   od   po   pet,   pri   čemu   svi   klasteri   podržavaju   svih   osam   procesorskih   čipova   i 
obezbeđuju pristup do celokupnog prostora glavne memorije;

sistemski upravljački element 

(system control element, SCE): SCE upravlja komunikacijom 

unutar sistema i ima centrainu ulogu u održavanju koherentnosti kešmemorije;

glavno upravljanje skaladištenjem 

(main store control, MSC): MSC međusobno povezuje L2 keš 

memorije i glavnu memoriju;

memorijske kartice: sve kartice sadrže 32 GB memorije; maksimalna memorija koju je moguće 
konfigurisati   sastoji   se   od   8   memorijskih   kartica   sa   ukupno   256   GB;   memorijske   kartice 
povezane su sa MSC preko sinhronih memorijskih interfejsa (SMI);

adapter   memorijske   magistrale  

(memory bus adapter,  MBA): MBA obezbeđuje interfejs  za 

različite tipove U/I kanala, saobraćaj koji se odvija ovim kanalima odlazi direktno do L2 keš 
memorije.

Mikroprocesor u z990 je relativno neuobičajen u poređenju sa ostalim savremenim procesorima. 

Mada je superskalarni, on instrukcije izvršava po strogom arhitek

128

background image

A.1 Decimalni sistem

U svakodnevnom životu, za predstavljanje brojeva koristimo sistem zasnovan na decimalnim ciframa (0, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 0) i taj sistem nazivamo decimalni sistem. Uzmite na primer šta broj 83 znači. On 
znači osam desetica plus tri:

83 = (8 x 10) + 3

Broj 4728 znači četiri hiljade, sedam stotina, dve desetice, plus osam:

4728 = (4 x 1000) + (7 x 100) + (2 x 10) + 8

Za decimalni sistem se kaže da ima bazu, ili osnovu, od 10. To znači da se svaka cifra u broju množi 

sa 10 podignutim na stepen koji odgovara položaju te cifre:

83 = (8 x 10 ) + (3 x 10 )

4728 = (4 X 10 ) + (7 x 10 ) + (2 x10  ) + (8 x 10 )

Isti princip važi i za decimalne razlomke, samo što se koristi 10 podignut na negativni stepen. Prema 

tome, decimalni razlomak 0,256 znači 2 desetih plus 5 stotih plus 6 hiljaditih.

0,256 = (2 X 10 ) + (5 X 10 ) + (6 X 10 )

Broj koji ima celobrojni i razlomijeni deo ima cifre sa pozitivnim i negativnim stepenima broja 10:

472,256 = (4 X10 ) + (7 X10  ) + (2 X10  ) + (2 X 10 ) + 

(5 X 10 ) + (6 X 10 )

U opštem slučaju, za decimalno predstavljanje broja 

X = {. . . d2d1d0,d-1d-2d-3. .} ,

njegova vrednost je:

X = 

 

x 10

i

)

A.2 BINARNI SISTEM

U   decimalnom   sistemu   koristi   se   10  različitih   cifara   za   predstavljanje   brojeva   sa   osnovom   10.   U 
binarnom sistemu imamo samo dve cifre, 1 i 0. Znači, brojevi u binarnom sistemu predstavljeni su sa 
osnovom 2.

Da bismo se bolje razumeli, ponekad ćemo na broj staviti indeks kako bismo naznačili njegovu 

osnovu. Na primer, 83   i 4728

  su brojevi predstavljeni decimalnim načinom pisanja ili, kraće, 

decimalni brojevi. Cifre 1 i 0 u binarnom načinu pisanja imaju isto značenje kao i u decimalnom načinu 
pisanja:

0  = 0

1  = 1

Za predstavljanje većih brojeva, kao i sa decimalnim načinom pisanja, vrednostsvake cifre u binarnom 
broju zavisi od njenog položaja:

10  = (1 X 2 ) + (0 x 2°) = 2  
11  = (1 X 2 ) + (1 x 2°) = 3

100  = (1 X 2 ) + (0 x 2 ) + (0 x 2°) = 4

i tako dalje. I u binarnom sistemu, razlomijene vrednosti predstavljaju se stepenima osnove:

1001,101 = 2  + 2° + 2  + 2 =9,625

U opštem slučaju, za binarno predstavljanje broja 

Y = {. . . b b b b b …}

njegova vrednost je:

130

y = ∑ (b x2 )

A.3 PRETVARANJE BINARNIH U DECIMALNE BROJEVE

Jednostavno je pretvoriti broj napisan binarnom notacijom u decimalni. U stvari, već smo pokazali 
nekoliko primera u prethodnom pododeljku. Potrebno je samo pomnožiti sve binarne cifre odgovarajućim 
stepenom broja 2 i sabrati rezultate.

Za pretvaranje decimalnih brojeva u binarne brojeve, celobrojni i razlomljeni delovi posebno se 

preračunavaju.

Celobrojni delovi

Za celobrojni deo, prisećate se binarne notacije, celi brojevi predstavljeni kao

Pretpostavimo da je potrebno pretvoriti decimalni ceo broj  

N u binarni o liko  N podelimo sa 2, u 

decimalnom sistemu, dobili bismo količnik NI i osta1 možemo napisati kao:

Posle toga, delimo količnik NI sa 2. Dobićemo novi količnik 

N2 i novi o~

Prema tome:
 (osim za decimalne cele brojeve O i 

1, 

kojima odgovaraju binarni brojevi O i 

1, 

respektivno) i ostatak 

Rm-2' koji je O ili 1. Prema tome:
što je binarni oblik broja 

N. Dakle, pretvaranje sa osnove 10 na osnovu 2 vršimo ponavljajući deljenje 

brojem 2. Ostaci i poslednji količnik, 1, daju nam, po opadajućem redosledu važnosti, binarne cifre 
broja 

N. Na slici A.1 prikazana su dva primera.

Razlomci

Za razlomački deo, prisećate se binarne notacije, broj sa vrednošću između 0 i 1 prikazuje se kao:

i ima vrednost

Ovaj izraz nagoveštava tehniku za pretvaranje. Pretpostavimo da želimo da pretvorimo broj 

F (O < F 

< 1) sa decimalne na binarnu notaciju. Znamo da se broj 

F može izraziti u obliku:

Ukoliko bismo 

F pomnožili sa 2, dobili bismo:

Iz ove jednačine vidimo da je celobrojni deo (2 x  

F),  koji mora biti ili O ili 1, pošto je 0<  F  < 1, 

jednostavno b_I. Tako da možemo reći (2 x 

F) = b-I + FI' gde je 0< FI < I i gde je:

Da bismo pronašli b

 ponavljamo postupak. Prema tome, algoritam za pretvaranje obuhvata ponavljanje 

množenjem brojem 2. Pri svakom koraku, razlomljeni deo broja iz prethodnog koraka množi se brojem 2. 
Cifre levo od decimalnog zareza u proizvodu biće 0 ili 1 i daju binarni prikaz, počevši najznačajnijom 
cifrom. Razlomijeni deo proizvoda koristi se kao množilac u narednom koraku. Na slici A.2 prikazana su 
dva primera.

Postupak nije obavezno tačan; to jest, za decimalni razlomak sa konačnim brojem cifara možda će 

biti   potreban   binarni   razlomak   sa   beskonačnim   brojem   cifara.   U   takvim   slučajevima,   algoritam   za 
pretvaranje se zaustavlja posle unapred određenog broja koraka, zavisno od željene tačnosti.

A.4 HEKSADECIMALNA NOTACIJA

131

background image

BULOVA ALGEBRA

Digitalna elektronska kola u digitalnim računarima i drugim digitalnim sistemima su projektovana, a 
njihovo ponašanje se analizira, korišćenjem matematičke discipline poznate kao  

Bulova algebra.  Ovaj 

naziv dat je u čast engleskog matematičara Džordža Bula (George Boole), koji je 1854. godine u svojoj 
raspravi  

Istraživanje   zakonitosti   mišljenja   na   kojima   se   zasnivaju   matematičke   teorije   logike   i 

verovatnoće  predložio   osnovne   principe   ove   algebre.   Godine   1938.,   Klod   Šenon   (Claude   Shannon), 
istraživač u Elektrotehničkom odseku Univerziteta M.I.T., predložio je da se Bulova algebra koristi za 
rešavanje problema u električnim kolima sa relejnim prekidačima [SHAN38]. Od tada se Šenonova 
tehnika koristi za analizu i projektovanje elektronskih digitalnih kola. Pokazalo se da je Bulova algebra 
pogodan alat u dve oblasti:

analiza:

 to je ekonomičan način za opisivanje funkcionisanja digitalnih kola;

projektovanje:

  može   se   primeniti   za   razvoj   pojednostavljene   implementacije   date 

matematičke funkcije.

Kao bilo koja algebra, i Bulova algebra koristi promenljive i operacije, samo što su u ovom slučaju te 

promenljive i operacije logičke promenljive i logičke operacije. PromenIjive mogu imati vrednost  

(TAČNO)

  ili  

0   (NETAČNO).

  Osnovne   logičke   operacije   su  

I,   ILI   i   NE

,   koje   se   simbolično 

predstavljaju tačkom, znakom plus i nadvlačenjem:

A I B = A B

A ILI B = A+B

NE A = 

Operacija  

I

  proizvodi vrednost tačno (binarnu vrednost 1) ako i samo ako je vrednost oba njena 

operanda tačno. Operator ILI proizvodi vrednost tačno ako bilo koji ili oba njegova operanda imaju 
vrednost   tačno.   Unarna   operacija   NE   preinačuje   vrednost   svog   operanda.   Uzmimo,   na   primer, 
sledećujednačinu:

D = A + (B ∙ C)

D je jednako 1 ako je A jednako 1 ili ako su istovremeno B = 0 i C = 1. Inače, D je jednako O.
Neophodno je skrenuti pažnju na nekoliko stvari koje se tiču ovog načina obeležavanja. Bez zagrada, 

operacija I ima prednost u odnosu na operaciju ILI. Takođe, kada je jasno o čemu se radi, operacija I  
jednostavno se piše bez tačke. Prema tome, sve jednačine:

A + B   C = A + (B    C) = A + BC

znače: izračunaj logičko I od B i C, a zatim izračunaj logičko 

ILI 

od tog rezultata i A.

U tabeli B.1 definisane su osnovne logičke operacije u obliku poznatom kao 

tablica istinitosti, u kojoj 

su jednostavno navedene vrednosti operacija za sve moguće kombinacije vrednosti operanada. U ovoj 
tabeli takođe su navedena tri korisna operatora: XOR, NI i NILI. Ekskluzivno ILI (XOR) od dva logička 
operanda je I ako i samo ako jedan od tih operanda ima vrednost 1. Funkcija NI je komplement (NE) 
funkcije I, a NILI je komplement ILI:
A NI B = NE(A I B) = 
A NILI B = NE(A ILI B) 
Kao   što   ćemo   videti,   ove   tri   nove   operacije   mogu   biti   veoma   korisne   za   implementaciju   izvesnih 
digitalnih kola.

U tabeli B.2 navedeni su ključni identiteti Bulove algebre. Jednačine su poređane u dve kolone kako 

bi se prikazala komplementarna, ili dvostruka, priroda operacija I i ILI. Postoje dve klase identiteta: 
osnovna pravila (ili 

postulati), koji se daju bez dokazivanja, i ostali identiteti koje se mogu izvesti iz 

133

osnovnih postulata. Postulati definišu način na koji se Bulovi izrazi tumače. Skrećemo pažnju na jedan 
od dva zakona distributivnosti pošto se razlikuje od onoga što možemo pronaći u običnoj algebri:

A + (B   C) = (A + B)   (A + C)

Dva poslednja izraza nazivaju se De Morganove teoreme. Možemo ih napisati na drugačiji 

način:
A NILI B = A I B 
A NI B = A ILI B

Pozivamo čitaoce da dokažu tačnost izraza iz tabele B.2 zamenjujući promenljive A, B i C stvarnim 

vrednostima (jedinicama i nulama).

ELEKTRONSKA PREKIDAČKA KOLA

Osnovni element za gradnju svih digitalnih logičkih kola jeste  

elektronsko prekidačko kolo.

  Logičke 

funkcije se implementiraju međusobnim povezivanjem prekidačkih kola.

Elektronsko prekidačko kolo je elektronsko kolo koje proizvodi izlazni signal koji je jednostavna 

Bulova operacija njegovih ulaznih signala. Osnovna prekidačka kola koja se koriste u digitalnim logičkim 
kolima su I, ILI, NE, NI i NILI kola. Na slici B.1 prikazano je tih pet prekidačkih kola. Prekidačka kola 
definišu se na tri načina: grafičkim simbolima, algebarskim obeležavanjem i tablicom istinitosti. Simboli 
koji se koriste na ovoj slici i u celom dodatku su prema IEEE standardu, IEEE Std. 91. Obratite pažnju 
na to da se operacija inverzije (NE) naznačava kružićem.

Svako prekidačko kolo ima dva ulaza i jedan izlaz. Kada se vrednosti na ulazu promene, ispravan 

izlazni signal pojavljuje se gotovo trenutno, sa kašnjenjem samo za vreme prostiranja signala kroz 
prekidačko kolo (ovo vreme poznato je kao 

kašnjenje prekidačkog kola). Njegov značaj razmatra se u 

odeljku B.3.

Pored prekidačkih kola prikazanih na slici B.1, mogu se koristiti prekidačka kola sa tri, četiri ili više  

ulaza. Prema tome, X + Y + Z može se implementirati sa samo jednim ILI kolom sa tri ulaza.

Obično, pri implementaciji se ne koriste sve vrste prekidačkih kola. Projektovanje i proizvodnja su 

jednostavniji ukoliko se koriste samo jedna ili dve vrste prekidačkih kola. Prema tome, veoma je važno 
utvrditi 

funkcionalno kompletan skup prekidačkih kola. To znači da se bilo koja Bulova funkcija može 

implementirati korišćenjem samo prekidačkih kola iz određenog skupa. Funkcionalno kompletni skupovi 
su sledeći:

I, ILI, NE; 

I, NE;

ILI, NE; 

NI;

NILI.

Jasno   je   da   I,   ILI   i   NE   kola   sačinjavaju   funkcionalno   kompletan   skup   pošto   predstavljaju   tri 

operacije Bulove algebre. Da bi I i NE kola formirala funkcionalno kompletan skup, mora postojati način 
kojim bi se operacija ILI sintetizovala od I i NE operacija. Ovo se može učiniti primenom De Morganove 
teoreme:

A+B=

A ILI B = NE((NE A) I (NE B))

Slično, operacije 

ILI 

i NE su funkcionalno kompletne pošto se mogu iskoristiti za sintetizovanje I 

134

background image

Ovaj izraz napisan je u obliku 

proizvoda suma (product od sums, POS) i prikazan je na slici B.5. Jasnoće 

radi, nisu prikazana NE kola. Umesto toga, pretpostavlja se da postoje svi ulazni signali i njihovi 
komplementi.   Ovim   se   pojednostavljuje   šema   logičkih   kola,   a   ulazi   u   prekidačka   kola   mnogo   su 
očigledniji.

Prema tome, Bulove funkcije mogu se realizovati u obliku sume proizvoda ili proizvoda suma. Na 

osnovu do sada rečenog, izgleda kao da izbor zavisi od toga da li tablica istinitosti sadrži više jedinica ili 
više nula: u sumi proizvoda postoji jedan element izraza za svaku 1, a proizvod suma ima po jedan 
element izraza za svaku 0. Međutim, u obzir se moraju uzeti i druge činjenice:

često je iz tablice istinitosti moguće razviti jednostavniji Bulov izraz nego što su 
suma proizvoda ili proizvod suma;

ponekad je za implementaciju određene funkcije bolje iskoristiti samo jednu

vrstu prekidačkih kola (NI ili NILI).

Značaj prvog stava je u tome da je, sa jednostavnijim Bulovim izrazima, potrebno manje prekidačkih 

kola za implementaciju određene funkcije. Uprošćavanje funkcija može se postići na tri načina:

algebarskim uprošćavanjem,

Karnoovim mapama,

Kvin - Mek Klaskijevim tabelama.

Algebarsko uprošćavanje 

Algebarsko uprošćavanje vrši se primenom identiteta iz tabele B.2 kako bi se 

dobio Bulov izraz sa manje elemenata.

Na primer, razmotrimo ponovo jednačinu (B.1). Uz malo razmišljanja, čitalac se može uveriti da joj 

je ekvivalentan izraz:
F = AD + BC

(B.3)

Ili, još jednostavnije:

F = B ( + C)

Ovaj izraz može se implementirati kao što je prikazano na slici B.6. Uprošćavanje jednačine (B.1) 
obavljeno je prostim posmatranjem. Za složenije izraze neophodan je mnogo sistematičniji pristup.

Karnoove mape 

Karnoove mape su zgodan način za prikazivanje, u cilju uprošćavanja, Bulovih funkcija sa 

manjim brojem (najviše četiri) promenIjivih. Mapa je niz od 2  kvadrata, koji predstavljaju sve moguće 
kombinacije vrednosti 

n binarnih promenljivih. Na slici B. 7 a prikazana je mapa od četiri kvadrata za 

funkciju sa dve promenljive. Zato što nam je to kasnije potrebno, vrlo je važno poređati kombinacije po 
redosledu   00,   01,   11,   10.   Pošto   se   kvadrati   koji   odgovaraju   određenim   kombinacijama   koriste   za 
zapisivanje informacija, ove kombinacije se obično pišu iznad kvadrata. U slučaju tri promenljive, prikaz 
je dat u obliku od osam kvadrata (slika B. 7b), pri čemu je vrednost jedne od promenIjivih upisana levo 
od kvadrata, a vrednosti ostale dve promenIjive iznad kvadrata. Za četiri promenljive potrebno je 16 
kvadrata, poređanih onako kako je prikazano na slici B. 7 c.

Mapa   se   za   predstavljanje   Bulove   funkcije   koristi   na   sledeći   način.   Svaki   kvadrat   odgovara 

jedinstvenom   proizvodu   u   obrascu   sume   proizvoda,   pri   čemu   vrednost   1   odgovara   određenoj 
promenljivoj, a vrednost 0 odgovara logičkom NE te promenljive. Prema tome, proizvod A  odgovara 
četvrtom kvadratu sa slike B.7a. Za sve takve proizvode u funkciji, u govarajući kvadrat smešta se 1. 
Prema tome, za primer sa dve promenljive, ova mapa odgovara A + AB. Za datu tablicu istinitosti neke 
Bulove funkcije, pravljenje mape vrlo je jednostavno: za sve kombinacije vrednosti promenljivih, koje u 

136

tablici istinitosti proizvode vrednost 1, u odgovarajuće polje na mapi upisuje se 1. Na slici B. 7b prikazan 
je rezultat za tablicu istinitosti iz tabele B. 3. Da bi se Bulov izraz pretvorio u mapu, neophodno je prvo 
taj   izraz   prevesti   u   ono   što   se   naziva  

kanonički  oblik:   svaki   element   izraza   mora   da   sadrži   sve 

promenljive. Tako, na primer, ukoliko imamo jednačinu (B.3), prvo je moramo proširiti u puni oblik 
jednačine (B. 1 ), a zatim je pretvoriti u odgovarajuću mapu.

Obeležavanje koje se koristi na slici B.7d ističe međusobni odnos između promenljivih i redova i 

kolona mape. Ovde imamo dva reda obuhvaćenih oznakom A, i to onih u kojima promenljiva A ima 
vrednost 1; redovi koji nisu obuhvaćeni oznakom A su oni u kojima je A jednako 0; slično je za B, C i D.

Pošto se mapa funkcije napravi, možemo napisati jednostavan algebarski izraz za nju, vodeći računa 

o rasporedu jedinica na mapi. Princip je sledeći. Bilo koja dva susedna kvadrata razlikuju se samo po 
jednoj   promenljivoj.   Ukoliko   oba   susedna   kvadrata   imaju   ulaznu   vrednost   1,   tada   se   odgovarajući 
element proizvoda razlikuje samo po jednoj promenljivoj. U takvom slučaju, ta dva elementa mogu se 
spojiti uklanjanjem te promenljive. Na primer, na slici B.8a, za dva susedna kvadrata odgovarajuća su 
dva elementa ABCD i ABCD. Prema tome, funkcija koju izražavaju je:
ABCD + ABCD = ABD

Ovaj postupak može se proširiti na nekoliko načina. Prvo, princip susednih kvadrata može se proširiti 

tako da obuhvati kvadrate koji se nalaze na ivici mape. Prema tome, kvadrat na vrhu neke kolone 
susedan je kvadratu na dnu te kolone, a krajnje levi kvadrat u nekom redu susedan je odgovarajućem 
kvadratu krajnje desno. Ovi uslovi prikazani su na slikama B.8b i c. Drugo, možemo grupisati ne samo 2 
kvadrata, nego  

2   susednih kvadrata (to jest, 4, 8 itd.). Sledeća tri primera na slici B.8 prikazuju 

grupisanje po 4 kvadrata. Obratite pažnju na to da se u ovom slučaju mogu odstraniti dve promenljive. 
Poslednja   tri   primera   prikazuju   grupisanje   od   8   kvadrata,   koje   omogućava   da   se   odstrane   tri 
promenljive.
Ova pravila možemo ukratko svesti na sledeće:

Između označenih kvadrata (kvadrata sa 1), pronađite one koji pripadaju najvećem jedinstvenom 
bloku od 1, 2, 4 ili 8 i zaokružite te blokove.

Izaberite dodatne blokove sa označenim kvadratima tako da budu što je moguće veći, a da ih ima 
što je moguće manje, ali tako da obuhvatite svaki obeleženi kvadrat najmanje jednom. Rezultat u 
nekim slučajevima možda neće biti jedinstven. Na primer, ukoliko neki obeleženi kvadrat može 
da se pripoji sa dva druga kvadrata, a nema četvrtog obeleženog kvadrata kako bi se upotpunila 
veća grupa, tada treba napraviti izbor između dva moguća načina za grupisanje od dva obeležena 
kvadrata. Kada zaokružujete grupe, možete koristiti istu vrednost 1 više puta.

Nastavite da crtate kružiće oko pojedinačnih obeleženih kvadrata ili parova susednih obeleženih 
kvadrata ili grupa od četiri, osam i tako dalje, a tako da svi obeleženi kvadrati pripadaju bar 
jednom krugu; tada koristite što je manje moguće tih blokova kojima su obuhvaćeni svi obeleženi 
kvadrati.

Na slici B.9a, na osnovu tabele B.3, prikazan je postupak uprošćavanja. Ukoliko bilo koja izdvojena 

jedinica ostane posle grupisanja, tada se sve one zaokružuju kao grupe jedinica. Konačno, pre nego što 
mapa postane uprošćen Bulov izraz, sve grupe jedinica koje su potpuno preklopljene ostalim grupama 
mogu se ukloniti. To je prikazano na slici B.9b. U ovom slučaju, horizontalna grupa je suvišna i ne mora 
se uzeti u obzir prilikom pravljenja Bulovog izraza.

Potrebno je pomenuti još jednu osobinu Karnoovih mapa. U nekim slučajevima, izvesne kombinacije 

vrednosti promenljivih se nikada ne javljaju, pa se prema tome odgovarajući izlazi nikada ne dešavaju. 
Za njih se kaže da su to stanja o kojima "ne treba brinuti". Za takva stanja se u odgovarajući kvadrat  

137

background image

tabela. Potom se druga tabela obrađuje na isti način kao i prva. To jest, elementi koji se razlikuju po 
samo jednoj promenljivoj se obeležavaju i pravi se novi element za treću tabelu. U ovom primeru, treća 
tabela koja se dobija sadrži samo jedan element: BD.

U opštem slučaju, ovaj postupak bi se nastavio sve dok se ne dobije tabela u kojoj nema preklapanja. 

U ovom slučaju, za to su nam bile potrebne tri tabele.

Po završetku postupka koji smo upravo opisali, odstrani ćemo većinu mogućih elemenata određenog 

izraza. Elementi koji nisu odstranjeni koriste se za konstruisanje matrice, kao što je prikazano u tabeli 
B.6. Svaki red u ovoj matrici odgovara jednom od elemenata koji nisu odstranjeni (nisu imali znak 
potvrde) u svim tabelama koje smo do sada koristili. Kolone odgovaraju elementima u prvobitnom izrazu. 
Znak  X  smešten   je   u  svim  presecima   redova  i  kolona  u  kojima   je   element  iz  reda  "usaglašen"  sa 
elementom iz kolone. To jest, promenljive koje postoje u elementu iz reda imaju istu vrednost kao i 
promenljive koje postoje u elementu iz odgovarajuće kolone. Posle toga, zaokružite sve znakove X koji 
su jedini u pojedinim kolonama. A zatim naertajte kvadratić oko svakog znaka X u svim redovima u kojim 
postoji zaokruženo X. Ako u svim kolonama imamo po jedan zaokružen znak X ili znak X u kružiću, 
završili smo posao, a oni elementi u redovima čiji je znak X označen sačinjavaju sveden izraz. Prema 
tome, u našem primeru, konačni izraz je:
ABC + ACD + ABC + A CD

U slučajevima kada u nekim kolonama nema ni kružnica ni kvadratića, potrebno je uraditi još nešto. U 

suštini, dodajemo elemente u redove dok sve kolone ne budu obuhvaćene.

Ponovimo ukratko način na koji Kvin - Mek Klaskijeva metoda radi kako bismo se uverili da time 

postižemo ono što nam treba. Prva faza ovog postupka je sama po sebi jasna. Njome se uklanjaju 
nepotrebne promenljive u elementima proizvoda. Prema tome, izraz ABC + ABC- je ekvivalentan izrazu 
AB pošto:
ABC + ABC = AB(C + C) = AB

Posle uklanjanja promenijivih, ostaje nam izraz koji je očigledno ekvivalentan prvo bitnom izrazu. 

Međutim, u tom izrazu mogu postojati suvišni elementi, baš kao što smo tražili suvišne grupe u Karnoovoj 
mapi. Pakovanjem u obliku matrice obezbeđujemo da su svi elementi iz prvobitnog izraza obuhvaćeni i da 
je to urađeno na takav način da se što je više moguće smanji broj elemenata u konačnom izrazu. 

Implementacija NI i NILI kola  

Još nešto o čemu treba voditi računa prilikom implementacije 

Bulovih funkcija tiče se toga koja će se prekidačka kola koristiti. Često je poželjno implementirati 
Bulovu funkciju samo 

NI 

kolima ili samo NIU kolima. Mada to nisu implementacije sa najmanjim mogućim 

brojem prekidačkih kola, prednost im je što se koristi samo jedna vrsta prekidačkih kola, čime se 
pojednostavljuje proces proizvodnje. Razmotrimo još jednom jednačinu (B.3):

F = B (A + C)

Pošto je komplement komplementarne vrednosti ta originalna vrednost,
F = B(A + C) = (AB) + (BC)
Primenom De Morganove teoreme, dobijamo izraz
F = (AB) (BC)
koji se sastoji od tri NI kola, kao što je prikazano na slici B.ll. 

Multiplekseri

Multiplekser povezuje više ulaza sa jednim izlazom. U pojedinim trenucima bira se neki od ulaza i 
propušta na izlaz. Opšti prikaz u obliku blok dijagrama dat je na slici B.12 i predstavlja multiplekser sa 4  
ulaza i jednim izlazom. Imamo četiri ulazne linije, označene D0, D1, D2 i D3. Bira se jedna od tih linija,  

139

čime se obezbeđuje izlazni signal F. Za biranje jednog od četiri moguća izlaza, neophodan je 2-bitni kod 
za biranje koji se implementira u obliku dve linije za biranje, obeležene S 1 i S2.

Primer multipleksera sa četiri ulaza i jednim izlazom definisan je tablicom istinitosti u tabeli B. 7. 

Ovo je pojednostavljeni oblik tablice istinitosti. Umesto prikazivanja svih mogućih kombinacija ulaznih 
promenijivih, u njoj su prikazani izlazi kao podaci iz linija DO, Dl, D2 ili D3. Na slici B.13 prikazana je 
implementacija korišćenjem I, ILI i NE kola. S1 i S2 su povezani sa I kolima na takav način da će, za 
bilo koju kombinaciju S1 i S2, tri I kola imati izlaz 0. Četvrto I kolo imaće izlaz jednak vrednosti iza-
brane linije, koja može biti ili 0 ili 1. Prema tome, tri ulaza u ILI kolo su uvek 0, a izlaz iz ILI

 

kola biće 

jednak   vrednosti   ulaza   izabranog   prekidačkog   kola.   Koristeći   ovakvu   organizaciju,   jednostavno   je 
konstruisati multipleksere sa 8 ulaza i jednim izlazom, 16 ulaza i jednim izlazom i tako redom.

Multiplekseri se koriste u digitalnim kolima za upravljačke signale i usmeravanje podataka. Primer je 

učitavanje programskog brojača (PC). Vrednost koja se učitava u programski brojač može da potiče iz 
jednog od nekoliko različitih izvora:

binarni brojač ako programski brojač treba uvećati za sledeću instrukciju;

instrukcijski registar ukoliko je upravo izvršena instrukcija grananja sa direktnom adresom;

izlaz iz aritmetičko-logičke jedinice ukoliko instrukcija grananja adresu određuje koristeći 
pomeraj.

Ovi različiti ulazi mogli bi se povezati sa ulaznim linijama multipleksera, sa programskim brojačem 
povezanim sa izlaznom linijom. Linija za biranje određuje koja se vrednost učitava u programski brojač. 
Pošto programski brojač sadrži više bitova, koristi se više multipleksera, jedan po bitu. Na slici B.14 to 
je prikazano za 16-bitnu adresu.

Dekoderi

Dekoder je kombinatorno kolo sa više izlaznih linija, pri čemu u jednom trenutku postoji signal samo na 
jednoj od njih, u zavisnosti od oblika signala ulaznih linija. U opštem slučaju, dekoder ima 

n ulaza i 2  

izlaza. Na slici B.15 prikazan je dekoder sa tri ulaza i osam izlaza.

Dekoderi se mnogo koriste u digitalnim računarima. Jedan primer je dekodiranje adresa. Pretpostavimo da 

želimo da konstruišemo memoriju od 1 K-bajta koristeći četiri 256 x 8-bitnih RAM čipova. Želimo jedinstven 
adresni prostor, koji se može raspodeliti na sledeći način:

Adresa

Čip

0000-00FF

o

0100-01FF

1

0200-02FF

2

0300-03FF

3

Svaki čip zahteva 8 adresnih linija i njih obezbeđuje 8 bitova nižeg reda adrese. Dva bita višeg reda 

10-bitne adrese koristi se za biranje jednog od četiri RAM čipova. U tu svrhu koristi se dekoder sa 2 
ulaza i 4 izlaza, čiji izlazi uključuju pojedine čipove, kao što je prikazano na slici B.16. .

Sa dodatnom ulaznom linijom dekoder se može koristiti kao demultiplekser. Demultiplekser vrši 

inverznu funkciju u odnosu na multiplekser; on povezuje jedan ulaz sa jednim od nekoliko izlaza. Ovo je 
prikazano na slici B.17. Kao i ranije, 

n ulaza se dekoduju kako bi se proizveo jedan od 2  izlaza. Sve 2  

izlazne linije su preko I kola povezane sa podatko na ulaznj liniji. Na taj način, n ulayi delujukao adresa 
za biranje određene izlazne linije, a vrednost podatke na ulaznoj liniji (1 ili 0) preusmerava se na tu 
izlaznu liniju.

140

background image

ulaz u ROM memoriju (adresne linije) uvek proizvode isti izlaz (linije podataka). Pošto izlazi zavise samo 
od postojanja ulaza, ROM je u suštini kombinatorno kolo.

ROM memorija se može implementirati dekoderom i skupom 

ILI 

kola. Za primer ćemo uzeti tabelu 

B.8. Ona se može posmatrati kao tablica istinitosti sa četiri ulaza i četiri izlaza. ~a svaku od 16 mogućih 
ulaznih vrednosti, prikazan je skup odgovarajućih vrednosti na izlazu. Takođe, možemo je posmatrati 
kao definiciju sadržaja 64-bitne ROM memorije koja se sastoji od 16 reči od po 4 bita. Četiri ulaza 
određuju   adresu,   a   četiri   izlaza   određuju   sadržaj   lokacije   utvrđene   tom   adresom.   Na   slici   B.20 
prikazano

je kako bi se ova memorija mogla implementirati korišćenjem dekodera sa četiri-ulaza i 16 izlaza i četiri 

ILI 

kola. Kao i u slučaju PLA čipova, koristi se uobičajena organizacija, a pravljenjem međusobnih veza 

postiže se željeni rezultat.

Sabirači

Do sada smo videli kako se međusobnim povezivanjem prekidačkih kola implementiraju funkcije kao što 
su usmeravanje signala, dekodovanje i ROM memorija. Jedna
vrlo važna oblast koju dosad nismo spomenuli je aritmetika. Ukratko ćemo obraditi i tu oblast 
razmatrajući funkciju sabiranja.

Binarno sabiranje se razlikuje od Bulove algebre po tome što rezultat obuhvata i element prenosa. 

Dakle:

Međutim, sabiranje se može obaviti Bulovim izrazima. U tabeli B.9a prikazali smo logiku za sabiranje 

dva   ulazna   bita   kojim   se   proizvodi   I-bitna   suma   i   prenosni   bit.   Ova   tablica   istinitosti   može   se 
jednostavno implementirati digitalnom logikom. Međutim, ne zanima nas sabiranje samo jednog para 
bitova. Umesto toga želeli bismo da sabiramo dva n-bitna broja. Ovo se može obaviti postavljanjem 
skupa sabirača tako da se prenosni bit iz jednog sabirača dostavi kao ulaz sledećem. Na slici B.21 
prikazan
je 4-bitni sabirač........................................................................................»HO.

Da bi više bitni sabirač radio, svi jednobitni sabirači moraju imati tri ulaza, u koje spada i prenosni 

bit iz sabirača koji je sledeći po opadajućoj važnosti. Prilagođena tablica istinitosti data je u tabeli 
B.9b. Dva izlaza mogu se izraziti kao:

Na slici B.22 prikazana je implementacija u kojoj se koriste I, 

ILI 

i NE kola.

Sada imamo neophodnu logiku za implementaciju višebitnog sabirača, kao što je prikazano na slici 

B.23. Pošto izlaz iz svakog sabirača zavisi od prenosnog bita iz prethodnog sabirača, postoji značajno 
kašnjenje od bita najmanjeg značaja do bita najvećeg značaja i to morate imati na umu Svi jednobitni 
sabirači   pored   toga   imaju   i   izvesno   kašnjenje   svojih   prekidačkih   kola,   pa   se   sva   ta   kašnjenja 
akumuliraju. Za veće sabirače, tako akumulirano kašnjenje može postati neprihvatljivo veliko.

Ukoliko bi se vrednosti prenosa mogle odrediti bez potrebe da se prolazi kroz sva prethodna stanja, 

tada bi svi jednobitni sabirači mogli da rade nezavisno, pa se kašnjenje ne bi akumuliralo. Ovo se može 
postići pristupom poznatim kao 

predvidanje prenosa. Razmotrimo još jednom 4-bitni sabirač kako bismo 

objasnili ovaj pristup.

Želeli bismo da dobijemo izraz kojim bismo odredili prenos na izlazu sabirača na bilo kojem nivou, 

142

bez obzira na prethodne vrednosti prenosa. Imamo:

Ovaj postupak se može ponoviti za proizvoljno dug sabirač. Svaki element prenosa može se izraziti u 
obliku sume proizvoda kao funkcija samo prvobitnih ulaza, nezavisno od prenesene vrednosti. Na taj 
način se javlja samo kašnjenje dva nivoa prekidačkih kola, bez obzira na dužinu sabirača.

Za veće brojeve, ovakav pristup postaje izuzetno složen. Za izračunavanje izraza za najznačajniji 

bit n-bitnog sabirača potrebno je 

ILI 

kolo sa 

n - I ulazom i n I kola sa 2 do n + I ulazom. Zbog toga se 

potpuno predviđanje prenosa obično obavlja samo za 4 do 8 bitova istovremeno. Na slici B.23 prikazano 
je kako se 32-bitni sabirač može konstruisati od četiri 8-bitna sabirača. U ovom slučaju, prenosni bit 
mora da prođe kroz četiri 8-bitna sabirača, ali će kroz njih proći mnogo brže nego kroz trideset i dva 
I-bitna sabirača.

Sekvencijalna kola

143

background image

Primećujete da ulazi S = 1 i R = 1 nisu dozvoljeni pošto bi proizveli protivurečan izlaz (izlazi Q i 
Q jednaki O). Ova tabela može se prikazati u sažetijem obliku kao što je dato u tabeli B.lOb. 
Ilustracija ponašanja S-R elektronskog prekidača prikazana je u tabeli B.lOc.

S-R bistabilni multivibrator pobuđen generatorom takta 

Izlaz S-R elektronskog prekidača se 

menja, posle kraćeg kašnjenja, kao odgovor na promenu na ulazu. Ovo se naziva asinhroni rad. 
Češće se dešava da se događaji u digitalnom račun aru sinhronizuju impulsima generatora takta, 
tako   da   se   promene   dešavaju   samo   kada   se   pojavi   impuls   generatora   takta.   Na   slici   B.26 
prikazana   je   takva   šema.   Ovaj   uređaj   se   naziva  

S-R   bistabilni   multivibrator   pobuden 

generatorom takta. Obratite pažnju na to da se ulazi R i S prenose na 

NIU 

kola samo tokom 

impulsa generatora takta.

bistabiIni multivibrator 

Problem sa S-R bistabilnim mu1tivibratorom je u tome da se stanje R 

= 1, S = 1 mora izbegavati. Jedan od načina da se to postigne je omogućiti samo jedan ulaz. To se 
postiže D bistabilnim mu1tivibratorom. Na slici B.27 prikazana je implementacija prekidačkim 
kolima i karakteristična tabela D bistabilnog mu1tivibratora. Korišćenjem invertora, obezbeđuje 
se da ulazi koji ne potiču iz generatora takta u dva I kola budu međusobno suprotni.

D   bistabilni   multivibrator   se   ponekad   naziva   bistabilni   mu1tivibrator   podataka   pošto,   u 

suštini, čuva jedan bit podataka. Izlaz D bistabilnog multivibratora uvek je jednak poslednjoj 
vrednosti koja je bila uneta na njegov ulaz. Stoga, on pamti i proizvodi poslednji ulaz. Takođe se 
naziva bistabilni multivibrator sa kašnjenjem pošto se O ili 1, uneti na njegov ulaz, pojavljuju na 
izlazu jedan impuls generatora takta kasnije.

J-K   bistabiIni   multivibrator  

Još   jedan   koristan   bistabilni   mu1tivibrator   je   J-K   bistabilni 

mu1tivibrator. Poput S-R bistabilnog mu1tivibratora, ima dva ulaza. Međutim, u ovom slučaju 
dopuštene   su   sve   moguće   kombinacije   ulaznih   vrednosti.   Na   slici   B.28   prikazanaje 
implementacija J-K bistabilnog mulltivibratora korišćenjem prekidačkih kola, a na slici B.29 
prikazana je njegova karakteristična tabela (uporedo sa ovim tabelama za S-R i D bistabilne 
mu1tivibratore).   Primećujete   da   su   prve   tri   kombinacije   iste   kao   i   za   S-R   bistabilni 
mu1tivibrator. Bez ulaza, izlaz se ne menja. Kada je sam, ulaz J obavija funkciju postavljanja 
vrednosti, dovodeći do toga da izlaz bude 1; kada je sam, izlaz K obavlja funkciju resetovanja 
vrednosti, dovodeći do toga da izlaz bude o. Kada su J i K jednaki 1, funkcija koja se obavlja  
naziva se prebacivanje: izlaz se preokreće.

Prema tome, ako je Q jednako 1 i 1 se unese na ulaze J i K, tada Q postaje O. Čitalac bi  

trebalo da proveri da li implementacija sa slike B.28 proizvodi ovu karakterističnu funkciju.

Registri
Pre primera upotrebe bistabilnih multivibratora, istražićemo jedan od najvažnijih elemenata 
procesora: registar. Kao što znamo, registar je digitalno kolo koje se koristi unutar procesora za 
čuvanje jednog ili više bitova podataka. Dva osnovna tipa registara koji se najčešće koriste su 
paralelni registri i pomerački registri.

Paralelni   registri  

Paralelni   registar   sastoji   se   od   skupa   I-bitnih   memorija   koje   se   mogu 

istovremeno čitati ili upisivati u njih. Koriste se za skladištenje podataka. Registri o kojima smo 
govorili u ovoj knjizi su paralelni registri.

Na slici B.30 prikazan je 8-bitni registar koji ilustruje rad paralelnog registra koji koristi D 

bistabilne   multivibratore.   Upravljački   signal,   obeležen   kao  

učitavanje,  upravlja   upisivanjem 

145

signalnih linija D 11 do D 18 unutar registra. Ove linije mogu biti izlaz multipleksera, tako da se u 
registar mogu učitavati podaci iz različitih izvora.

Pomerački registar 

Pomerački registar prihvata i/ili serijski premešta informacije. Razmotrimo, 

na   primer,   sliku   B.31,   na   kojoj   je   prikazan   S-bitni   pomerački   registar   konstruisan   od   D 
bistabilnih multivibratora pobuđenih generatorom takta. Podaci se unose samo u krajnje levi 
bistabilni multivibrator. Sa svakim impulsom generatora takta podaci se pomeraju udesno za 
jedno mesto, a krajnje desni bit se izbacuje napolje.

Pomerački registri mogu se koristiti kao interfejs za serijske U/I uređaje. Pored toga, mogu 

se   koristiti   sa   aritmetičko-Iogičkom   jedinicom   za   obavljanje   logičkih   funkcija   pomeraja   i 
rotiranja.   Za   ovo   drugo,   potrebno   ih   je   opremiti   paralelnim   i   serijskim   vezama   za 
čitanje/upisivanje.

Brojači

Još   jedna   korisna   kategorija   sekvencijalnih   kola   jesu   broj   ači.   Brojač   je   registar   čija   se 
vrednost lako povećava za 1 modulo kapaciteta registra. Prema tome, registar sačinjen od  

bistabilnih mu1tivibratora može da broji do najviše  

2n  - l. Kada se vrednost brojača poveća 

iznad njegove maksimalne vrednosti, vraća se na O. Primer brojača u procesoru je programski 
brojač.

Brojači   se   mogu  projektovati   kao   asinhroni   ili   sinhroni,   zavisno   od   načina   na   koji   rade. 

Asinhroni broj ači su relativno spori pošto izlaz iz jednog bistabilnog mu1tivibratora pokreće 
prornenu   stanja   narednog   bistabilnog   multivibratora.   U   sinhronom   brojaču,   svi   bistabilni 
mu1tivibratori istovremeno menjaju stanje. Pošto je ovaj drugi tip mnogo brži, on je taj koji se 
koristi u procesorima. Međutim, koristiće nam da raspravu počnemo opisom asinhronog brojača.

Talasasti brojač  

Asinhroni brojač se takođe naziva i talasasti brojač pošto se promena koja 

dovodi do povećanja brojača započinje najednom kraju i "talasasto" se širi prema drugom kraju. 
Na slici B.32, prikazana je irnplementacija 4-bitnog brojača u kojoj se koriste 

J-K 

bistabilni 

multivibratori, zajedno sa vremenskim dijagramom koji ilustruje njegovo ponašanje. Vremenski 
dijagram   je   idealizovan   tako   da   ne   prikazuje   kašnjenje   prostiranja   koje   nastaje   prolaskom 
signala kroz niz bistabilnih multivibratora. Izlaz krajnje levog bistabilnog multivibratora (Qo) je 
bit najmanjeg značaja. Prikazano rešenje moguće je lako proširiti do proizvoljnog broja bitova 
dodatnim bistabilnirn multivibratorirna.

Na prikazanoj implementaciji, vrednost brojača povećava se svakim impulsom generatora 

takta. Ulazi J i K svih bistabilnih multivibratora drže se sa konstantnom vrednošću 1. To znači 
da će, kada se pojavi impuls generatora takta, izlaz Q biti preokrenut (1 u O; O u 1). Obratite 
pažnju na to da je pro mena prikazana tako kao da se dešava sa opadajućom ivicom impulsa 
generatora takta; ovo je poznato pod imenom bistabilni multivibrator sa ivičnim okidanjem. 
Korišćenjem   bi   stabilnog   multivibratora   koji   se   odaziva   tokom   prelaznog   perioda   impulsa 
generatora   takta,   umesto   da   ga   pobuđuje   sam   impuls,   obezbeđuje   se   bolje   vremensko 
upravljanje u složenim kolima. Razmatranjem šablona po kome se pojavljuju izlazi iz ovog brojača 
uočavamo da se ciklično ponavljaju 0000,0001, ..., I Il O, IIll, 0000 i tako redom.
Sinhroni brojači Talasasti brojač ima nedostatak zbog kašnjenja zbog menjanja vrednosti, koje 
je   srazmerno   dužini   brojača.   Da   bi   prevazišli   ovaj   nedostatak,   procesori   koriste   sinhrone 
brojače u kojima se vrednost svih bistabilnih multivibratora brojača menja istovremeno. U ovom 

146

background image

Želiš da pročitaš svih 147 strana?

Prijavi se i preuzmi ceo dokument.

Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.

Slični dokumenti