Arhitektura i organizacija digitalnih računala Radni materijal Sadržaj: 1. Uvod .....................................................................................................................................3 1.1. 1.2. 1.3. Generacije i razvoj računalnih sustava................................................................................. 6 Von Neumannova arhitektura............................................................................................. 7 Organizacija računalnih sustava .......................................................................................... 8 1.3.1. 1.3.2. 1.3.3. 1.3.4. 1.3.5. 1.3.6. 1.3.7. 1.3.8. 1.3.9. 2. Procesori ....................................................................................................................................... 8 Izvršavanje instrukcija................................................................................................................... 9 RISC i CISC ................................................................................................................................... 10 Trendovi razvoja procesora ........................................................................................................ 11 Paralelna obrada podataka......................................................................................................... 11 Superskalarna arhitektura .......................................................................................................... 12 Primarna memorija..................................................................................................................... 13 Cache memorija.......................................................................................................................... 13 Ulazni i izlazni skolopovi ............................................................................................................. 14 Razina digitalne logike........................................................................................................16 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. 2.10. Sklopovi za pomak ............................................................................................................ 16 Zbrajalo ............................................................................................................................ 16 Aritmetičko logičke jedinice .............................................................................................. 17 Memorija.......................................................................................................................... 18 RAM i ROM memorije ....................................................................................................... 20 Procesori i sabirnice .......................................................................................................... 21 Širina sabirnice.................................................................................................................. 22 Arbitriranje sabirnice ........................................................................................................ 23 Procesor 8051.........................................................................Error! Bookmark not defined. PCI sabirnica ..................................................................................................................... 25 2.10.1. 2.10.2. 2.11. U/I sklopovi....................................................................................................................... 27 2.11.1. 3. Dekodiranje adresa..................................................................................................................... 28 Razina mikroarhitekture.....................................................................................................31 3.1. 3.2. 3.3. 3.4. 3.5. 3.5.1. 3.5.2. 3.5.3. 3.5.4. 3.5.5. 3.6. 3.6.1. 3.6.2. 4. Signali PCI sabirnice .................................................................................................................... 26 Arbitriranje PCI sabirnice ............................................................................................................ 27 Primjer mikroarhitekture .................................................................................................. 31 Rad memorije ................................................................................................................... 33 Mikroinstrukcije................................................................................................................ 34 Upravljanje mikroinstrukcijama......................................................................................... 35 ISA instrukcije i primjer realizacije mikroarhitekture.......................................................... 37 Realizacija stoga.......................................................................................................................... 37 Memorijski model....................................................................................................................... 37 Primjeri IVM ISA instrukcija ........................................................................................................ 38 Mikroinstrukcije i notacija .......................................................................................................... 40 Primjeri realizacije IVM instrukcija mikroinstrukcijama ............................................................. 41 Priručna memorija ............................................................................................................ 42 Direktno preslikana priručna memorija...................................................................................... 44 Set-asocijativna priručna memorija............................................................................................ 44 Razina arhitekture skupa instrukcija ..................................................................................46 4.1. 4.2. 4.3. 4.3.1. Registri ............................................................................................................................. 47 Instrukcije...............................................................................Error! Bookmark not defined. Tipovi podataka ................................................................................................................ 47 Realni brojevi u formatu pomičnog zareza ................................................................................. 48 1. Uvod Digitalna računalo je uređaj koji izršava zadani niz operacija – program. Sva računala razumiju i mogu izvršiti samo jednostavan skup instrukcija koji se svode na jednostavne aritmetičke i memorijske operacije, pa svaki program mora biti kreiran korištenjem samo tih instrukcija. Skup instrukcija koje računalo podržava tvore strojni jezik, koji je zbog svoje jednostavnosti neprikladan za opisivanje realnih problema koje bi računalo trebalo riješiti. Postoji velika razlika između načina razmišljanja čovjeka, njegovog predstavljanja problema i rješenja i načina rada računala, koji je ograničen svojom elektroničkom realizacijom. Rješenje koje smanjuje jaz između ljudskog razmišljanja i računalne realizacije je uvođenje novog skupa instrukcija koji je bliži ljudskom načinu razmišljanja no što su to strojne instrukcije. Novi skup instrukcija formira novi jezik, pa sada razlikujemo novouvedeni jezik L1 i postojeći jezik stroja L0. Programi pisani na L1 jeziku bliži su ljudskom načinu razmišljanja, ali računalo je i dalje isto, pa je potrebno instrukcije jezika L1 zamijeniti odgovarajućim instrukcijama jezika L0. Zamjena L1 s L0 instrukcijama moguća je na dva načina: • Prevođenje (translation) je metoda kojom se iz svake L1 instrukcije program generiraju odgovarajuće L0 instrukcije. Dobiveni L0 program učita se u memoriju računala i tijekom izvođenja upravlja resursima računala. • Interpretiranje (interpretation) je metoda kojom se L1 program učitava instrukciju po instrukciju u interpreter, te se nakon učitavanja svake instrukcije izvršava odgovarajući slijed ekvivalentnih L0 instrukcija, čime se izbjegava prevođenje kompletnog L1 programa na L0 jezik, a tijekom izvođenja interpreter upravlja resursima računala. Obje navedene metode su slične, u oba slučaja računalo izvodi L0 instrukcije, obje metode imaju svoje mane i prednosti, pa su obje u upotrebi. Obje metode mogu se prikazati konceptom virtualnog stroja M1 koji razumije jezik L1. Efikasan rad virtualnog stroja moguć je ukoliko se jezici L1 i L0 ne razlikuju previše, je protivno glavnom cilju uvođenja L1 jezika – udaljavanju od elektroničke realizacije i približavanje ljudskom načinu razmišljanja. Rješenje je uvođenje još jedne ili više razina virtualnih strojeva koji zajedno nude dovoljnu razinu apstrakcije za ljudsku upotrebu. 3 Slika 1.1.: Računalo kao stroj s više razina Računalo s n razina može se predstaviti kao niz različitih virtualnih strojeva od kojih svaki koristi vlastiti strojni jezik. Svakoj razini odgovara stroj odgovarajući stroj. Najniža razina uvijek je virtualni stroj koji odgovara elektroničkoj realizacija sklopova računala, te nema potrebe za prevođenjeme ili interpretiranjem. Programi napisani na višoj razini L1 – Ln moraju se interpretirati interpreterom koji se izvršava na nižem nivou, ili se moraju prevesti na jezik nižeg nivoa. Pisanje programa za virtualni stroj oslobađa programera razmišljanja o detaljima podređenih virtualnih strojeva. 4 Slika 1.2.: Računalo s 6 razina Najniža razina, razina digitalne logike sagrađena je od elemenata koji realiziraju klasične digitalne sklopove: logička vrata, registre, itd koji realiziraju procesor računala i ostale elektroničke elemente računala. Razina mikroarhitekture sadrži skupine registara koji čine lokalnu memoriju procesora i njegovu aritmetičko-logičku jedinicu (ALU), sposobnu za obavljanje elementarnih aritmetičkih i logičkih operacija. Registri i ALU čine putanju podataka (data path). Putanjom podataka upravlja mikroprogram ili izravno hardver. Kod mikroprogramiranja, mikroprogram je interpreter razine 2: prihvaća instrukcije s razine 2, ispituje ih i izvršava. Primjerica instrukcija ADD koristi se za opis operacije zbrajanja dvaju registara na razini arhitekture skupa instrukcija. Na razini mikroarhitekture ADD instrukcija nakon prihvaćanja, razbija se na niz mikroinstrukcija koje dekodiraju instrukciju kako bi se utvrdilo da se radi o ADD instrukciji, dohvaćanje i spremanje operanada u registre, izračun i konačno spremanje sume. Izravno sklopovsko realiziranje ADD instrukcije sadrži iste korake, ali ne postoje koraci u vidu mikroinstrukcija, već se kompletan posao ADD instrukcije obavlja elektroničkim sklopovanjem. Ovaj način izvođenja je brži, ali zahtijeva poseban sklop za realizaciju. • Razina 2 je razina arhitekture skupa instrukcija (ISA – Instruction Set Architecture). Ova razina detaljno je opisana u dokumentaciji koja proizvođač isporučuje s računalom. • Razina 3 je obično hibridna, odnosno većina instrukcija ove razine istodobno pripada i ISA razini, ali postoji i skup novih instrukcija, novi način organizacije memorije, mogućnost paralelnog izvršavanja više programa, itd. Razina 3 od sustava do sustava uvijek se jako razlikuje mnogi više nego što je to slučaj s nižim razinama. Nove instrukcije izvršavaju se na razini 3, dok 5 se postojeće instrukcije ISA razine izvršavaju na nižim razinama (mikro ili sklopovske instrukcije). • Razine 4 i više imaju bitnu razliku od razina 0-3. Naime, razine do uključivo razine 3 nisu namijenjene većini programera. Na njima se koriste programi čija je uloga interpretiranje, prevođenje i ostale funkcionalnosti kao podrška višim nivoima, stoga se razine 0-3 nazivaju i sistemskim razinama. Razine počevši od razine 4 namijenjenu su programima koji rješavaju različite probleme iz svakodnevnog života koji su rješivi korištenjem računala. Ioako nije parvilo, razine 0-3 koriste interpretiranje, a razine 4-5 koriste prevođenje kao način rada virtualnih strojeva. Strojni jezici na razinama 0-3 najčešće su numerički, prilagođeni izvršavanju na stroju. Razina 4 i više koriste zapis programa u tekstualnoj formi koje su razumljivije za ljudsku primjenu i opis problema koji se rješavaju na tim razinama. Razina 4 (assembler) prva je takva razina, ona omogućuje pisanje programa za niže razine koji je značajno čitkiji, stoga i jednostavniji od jezika koji se koriste na nižim razinama. Programi napisani u assembler najprije se prevođenjem prevode na jezik niže razine, a zatim se interpretiranjem izvode na pripadajućem virtualnom stroju. Program koji obavlja prevođenje također se naziva assembler. • Razina 5 sadrže jezike razine apstrakcije prilagođene realnim problemima i aplikacijama koje ih rješavaju, npr. C/C++, Perl, Java, .NET i sl. Programi pisani na ovim razinama prevode se na jezike razine 3 ili 4 korištenjem programa koji se nazivaju prevodioci (compilers), ili se koristi interpretiranje, ali rjeđe (npr. Java, .NET). Skup tipova podataka, operacija i mogućnosti naziva se arhitekturom razine. Arhitektura opisuje aspekte bitne programeru (npr. podržani tipovi podataka), ali sakriva aspekte koji nisu važni (npr. elektronička realizacija). 1.1. Generacije i razvoj računalnih sustava Povijesno gledano, uređaji koji su bili ključni za razvoj računalne tehnologije današnjice: Godina Uređaj 1834. 1936. 1943. 1944. 1946. 1949. 1951. 1952. 1960. 1961. 1962. 1963. 1964. 1964. 1965. 1970. 1974. 1974. 1978. 1981. 1981. 1983. Analytic Engine Z1 Colossus Mark I ENIAC I EDSAC Whirlwind IAS PDP-1 1401 7094 B5000 360 6600 PDP-8 PDP-11 8080 CRAY-1 VAX IBM PC Osborne-1 Lisa Autor Opis Babbage Zuse Britanska vlada Aiken Echert / Muchley Wilkes MIT Von Neumann DEC IBM IBM Burroughts IBM CDC DEC DEC Intel Cray DEC IBM Osborne Apple Pri pokušaj izrade računala Funkcionalno elektromehaničko (relejno) računalo Prvo elektroničko računalo Prvo računalo opće namjene Prvo programabilno računalo Prvo računalo s mogućnošću spremanja programa Prvo računalo za rad u realnom vremenu (realtime) Računalo s koncepcijom koja se zadržala do danas Prvo mini računalo Prvo malo poslovno računalo Prvo računalo za znanstvanu primjenu Prvo računalo s jezikom visoke razine Prvo masovno računalo Prvo znanstveno računalo Prvo masovno mini računalo Masovno računalo 70-tih godina Prvo 8-bitno računalo s procesorom Prvo vektorsko super-računalo Prvo 32-bitno računalo Prvo osobno računalo Prvo prijenosno računalo Prvo računalo s grafičkim operativnim sustavom 6 1985. 1987. 1990. 1992. 1994. i386 SPARC RS6000 Alpha Newton Intel Sun IBM DEC Apple Prvi 32-bitni procesor osobnih računala Prva RISC radna stanica Prvo superskalarno računalo Prvo 64-bitno računalo Prvo džepno računalo Tablica 1.1 Ključni uređaji računalne povijesti 1.2. Von Neumannova arhitektura Koncept IAS računala bitan je jer je njegov autor John von Neumann primjenio arhitekturu koja se i danas koristi u skoro svim računalima: Slika 1.3 Von Neumannova arhitektura Von Neumannova arhitektura ima pet osnovnih dijelova: memoriju, aritmetičko-logičku jedinicu (ALU), upravljačku jedinicu, ulaznu i izlaznu jedinicu. Memorija je organizirana kao 4096 40-bitnih riječi. Svaka riječ sadrži dvije 20-bitne instrukcije ili 40-bitni broj. 8 bita svake instrukcije označava instrukciju, a preostalih 12 bita adresira jednu od memorijskih lokacija. Aritmetičko-logička i upravljačka jedinica danas su integrirane u istom kućištu – centralnom procesoru (central processing unit, CPU). ALU sadrži poseban registar koji sudjeluje u izvršavanju skoro svih instrukcija. Prva računala iz četrdesetih godina dvadesetog stoljeća imaju samo dvije razine: sklopovlje i ISA razinu. Dodavanjem treće razine s ciljem drastičnog pojednostavljenja sklopovlja (Wilkes) računalu je dodan nepromjenjivi interpreter koji je interpretirao ISA instrukcije. Sklopovlje izrađeno od elektronskih cijevi izvršavalo je mnogo manji skup mikroinstrukcija, te je bilo jednostavnije, jeftinije i pouzdanije. Pedesetih godina izrađeno je Whirlwind računalo, koje je radilo sa 16-bitnim riječima, te je počelo razvoj magnetskih memorija. PDP-1 je prvo računalo izrađeno tranzistorima: memorija se sastojala od 4096 18-bitnih riječi, obavljao je 200000 instrukcija u sekundi, imao je ekran rezolucije 512 x 512 točaka, cijena mu je bila 120 000 dolara. PDP-8 uvodi koncept sabirnice (bus) za povezivanje elemenata računala: Slika 1.4: PDP-8 Omnibus sabirnica 7 Šezdesetih godina uveden je operativni sustav, u samom početku radilo se o programu koji je cijelo vrijeme bio pokrenut na računalu, a automatizirao je i ubrzavao posao pokretanja korisničkih programa na računalu. Dodavanjem novih instrukcija ISA razini izgrađena je nova razina operativnog sustava računala. Funkcije operativnog sustava danas se najčešće zovu sistemskim pozivima (system calls). Sedamdesetih godina koncept mikroprogramiranje dosegao je zrelu fazu, te su se nove ISA instrukcije mogle graditi od već postojećih mikroinstrukcija. 1.3. Organizacija računalnih sustava Digitalno računalo je sustav međusobno povezanih glavnih elemenata: (mikro)procesora, memorije i ulazno/izlaznih (U/I) uređaja. Dijelovi računala međusobno su povezani jednom ili više sabirnica. Sabrinica je skup vodova koji postoji u paralelnoj, serijskoj ili kombiniranoj izvedbi. Slika 1.5.: Organizacija jednostavnog računalnog sustava Iz pozicije procesora, postoje dvije sabirnice: unutarnja sabirnica povezuje elemente procesora, a vanjska sabirnica povezuje procesor i ostale dijelove računala. Ovisno o složenosti procesora i računala, dvije sabirnice mogu biti realizirane jedinstveno (kod jednostavnih računala) ili jako složeno u više različitih dijelova ovisno o zahtijevima za maksimalnim performansama pojedinih dijelova računala, najčešće memorije. Memorija dovoljne veličine nije izvediva uz dovoljnu brzinu i razumnu cijenu, odnosno postoji velika razlika između brzine procesora i brzine memorije, i to je raskorak koji je jedan od najvećih problema računalne tehnologije uopće od von Neumannovog modela do danas, pa se toga i naziva von Neumannovim uskim grlom. 1.3.1. Procesori Organizacija procesora većine današnjih računala opće namjene bazira se na von Neumannovom modelu. Procesor (Central Processing Unit, CPU). središnji je dio računala. Njegova uloga je izvršavanje programa koji se nalaze u glavnom memoriji. Programi se sastoje od niza instrukcija koje procesor preuzima, ispituje i izvršava. Sastoji se od tri glavna dijela: upravljačke jedinice, aritmetičko logičke jedinice i skupa registara. 8 Slika 1.6.: Putanja podataka jednostavnog procesora po von Neumanovom modelu Skup registara za privremenu pohranu podataka tijekom obrade čine putanju podataka (datapath). Podaci i instrukcije dohvaćaju se u registre iz memorije preko vanjske sabirnice. Upravljačka jedinica dohvaća instrukcija iz glavne memorije, dekodira ih i izvodi. Instrukcije procesora obuhvaćaju elementarne aritmetičke ili logičke operacije, memorijske ili U/I operacije, a izvode se u sklopovlju aritmetičko logičke jedinice. Nakon dohvata iz memorije, instrukcija se sprema u instrukcijski registar (Instruction register, IR). Programsko brojilo (program counter, PC), koji sadrži memorijsku adresu instrukcije koja će se sljedeća izvesti. Većina procesora osim ova dva najvažnija registra, raspolaže i nizom registara opće ili specifične namjene. Unutarnje sabirnice povezuju elemente procesora. Podaci iz registara prije izvršavanja instrukcije kopiraju se u privremene ulazne registre (A i B na slici), izravno povezane s sklopovima ALU. Nakon izračuna rezultat se nalazi u privremenom izlaznom registru te se iz njega kopira u određeni odredišni registar. Većina instrukcija se može svrstati u dvije kategorije: • registar-memorija instrukcije kopiraju riječi (jedinični podaci procesora) iz memorije u registre gdje se one koriste za instrukcije koje slijede, te kopiraju sadržaj registara u memoriju kao pohranu rezultata instrukcije u memoriju. • registar-registar instrukcije obavljaju ciklus toka podataka (data path cycle): preuzimaju sadržaj jednog ili dva registra, obavljaju određenu aritmetičku ili logičku operaciju i rezultat pohranjuju u određeni odredišni registar. 1.3.2. Izvršavanje instrukcija Izvođenje instrukcije može se podijeliti u maskimalno 7 koraka: 1. Preuzimanje iz memorije sljedeće instrukcije i smještanje u instrukcijski registar 2. Uvećanje programskog brojila, kako bi pokazivalo na sljedeću instrukciju 3. Određivanje tipa učitane instrukcije 9 4. Ukoliko instrukcija uključuje dohvat podataka iz memorije, određivanje adrese podatka u memoriji 5. Ukoliko instrukcija uključuje dohvat podataka iz memorije, dohvaćanje podataka 6. Izvršavanje instrukcije i upis rezultata 7. Skok na korak 1 sljedeće instrukcije Ovih sedam koraka čine proceduru koja je osnova rada svi procesora, a poznata je pod nazivom preuzmi-dekodiraj-izvrši (fetch-decode-execute). Kod registar-registar instrukcija nema nema dohvata iz memorije, pa se koraci 4 i 5 ne izvode. Prva računala imala su mali i jednostavni skup instrukcija. S vremenom je s ciljem povećanja brzine skup instrukcija proširen složenim instrukcijama (npr. instrukcije za rad s realnim brojevima u formatu pomičnog zareza), ili su dvije instrukcije koje se često izvršavaju u slijedu dopunjene uvođenjem jedne jedinstvene instrukcije. Kako je pisanje programa za procesore različitih skupova instrukcija često neizvedivo, a uvijek skupo, potrebno je osigurati kompatibilnost, kako bi nove generacije procesora mogle izvršavati programe pisane za stare programe. Stupanj kompatibilnosti određuje pojam arhitekture računala, uveden od IBM-a krajem pedesetih godina 20-og stoljeća. Skupina računala određene arhitekture može se razlikovati po izvedbi i cijeni, ali sva mogu izvršavati program napravljen za danu arhitekturu. Tehnikom interpretiranja omogućena je proizvodnja jednostavnih i jeftinih procesora koji su izvršavali isti skup instrukcija kao i skupi i mnogo brži procesori koji sve instrukcije realiziraju sklopovski. Jednostavna računala s interpreterima imaju i druge prednosti: • pronalaženje neispravno implementiranih instrukcija; • jednostano dodavanje novih instrukcija; • strukturiran dizajn koji omogućuje efikasno unapređivanje, testiranje i dokumentiranje. 1.3.3. RISC i CISC Koncept dodavanja složenih instrukcija koje se ovisno o cijeni implementiraju hardverski ili interpretiraju ima suprotnost u konceptu započetom 80-tih godina 20-og stoljeća, procesorima RISC i MIPS serije. Novi procesori imali su jako mali broj instrukcija (~50), koje su bile hardverski implementirane i stoga brze. Složenije instrukcije nisu postojale, već su se zamjenjivale nizom postojećih instrukcija. Po prvom primjerku, ovi su procesori prozvani RISC (Reduced Instruction Set Computer), a klasični procesori nazvani su CISC (Complex Instruction Set Computer). Iako je RISC koncept imao bolje performanse, nije eliminirao CISC zbog nemogućnosti prilagodbe postojećeg softvera pisanog za rad na CISC platformi. Osim toga svi CISC procesori današnjice izvedeni su na način da se najjednostavnije (ujedno i najčešće) instrukcije realiziraju sklopovski, a složenije instrukcije se realiziraju na klasičan način, interpretiranjem. Ovakav hibridni pristup kombinacijom RICS i CISC arhitekture omogućujue smanjenje brzinskog jaza između dvije tehnologije uz zadržavanje potpune komaptibilnosti na ISA razini, čime se u potpunosti eliminiraju problemi s kompatibilnosti. 10 1.3.4. Trendovi razvoja procesora Procesori koji su trenutno u razvoju redovito su RISC procesori, s evenutalno specifičnim dijelovima dodanim zbog kompatibilnosti s zadanom arhitekturom. Sve uobičajene instrukcije obavlja hardver. Složenije CISC instrukcije mogu se rastaviti na nekoliko jednostavnih RISC instrukcija koje se izvršavaju u slijedu. RISC koncept ima važnu dobru osobinu: instrukcije su kratke i brzo se dekodiraju, stoga svi današnji procesori nastoje kroz standradizaciju i optimizaciju formata učiniti vrijeme dekodiranja što kraćim. Program koji procesor izvodi zadan je slijedom instrukcija, koje bi se trebale izvoditi zadanim redoslijedom, ali, ukoliko se neka instrukcija može izvesti nezavisno od ostalih, moguće je izvođenje izvan reda, uz paralelno izvršavanje druga važna tehnologija za povećanje performansi procesora. Razdvajanje izdvođenja instrukcije na 7 ili više faza najefikasnije se izvodi ukoliko su operandi prisutni u registrima procesora, dakle pristup memoriji obavljaju izdvojene instrukcije LOAD i STORE, a izbjegavaju se instrukcije koje sadržavaju dohvaćanje sadržaja memorije, koje je sporo i točno nepredvidivog trajanja. Stoga je korisno da procesor raspolaže dovoljnim brojem registara. Paralelno izvršavanje koristi se na svim novim procesorima, jer povećanje radnog takta kao način ubrzavanja ima svoja realna ograničenja. Paralelizam se obavlja na dva opća načina: Paralelizam na razini instrukcija nastoji u jedinici vremena pokrenuti što više instrukcija; Performanse određuje broj instrukcija koje je moguće započeti u jedinici vremena, bez obzira koliko je vremena potrebno za izvršavanje započetih instrukcija. Paralelizam na razini procesa je situacija kada više procesora/jezgri izvršava jedan zadatak. 1.3.5. Paralelna obrada podataka Vremenski najproblematičniji dio izvođenja instrukcije je dohvat iz memorije. Elementi za umanjenje ovog problema postoje u skoro svim generacijama procesora. Starije generacije procesora sadržavale su predohvatni spremnik (prefetch buffer), u koji su se instrukcija dohvaćale prije izvođenja, ali zbog grananja, predviđanje instrukcija koje će procesor zatrebati u neposrednoj budućnosti, jako je složeno te je kod najnovijh generacija procesora premašilo 90% preciznost. Nakon dohvata instrukcije slijedi njeno izvođenje, koje se u procesorima s cjevovodom (pipeline) dijeli u nekoliko do nekoliko desetaka faza, s ciljem da se svaka faza izvodi u zasebnom sklopovskom bloku. Slika 1.7. Procesor s cjevovodom duljine 5 faza 11 Ukoliko ciklus radnog takta traje 2 ns, za potpunu obradu instrukcije u pet faza potrebno je 10 ns. Međutim, koncept cjevovoda omogućuje izvršavanje jedne instrukcije svake 2 ns. Općenito, procesor od n faza, s vremenom ciklusa T, obrađuje jednu instrukciji u vremenu nT. 1.3.6. Superskalarna arhitektura Dodavanje višetsrukih sklopva za obradu instrukcija logičan je korak u povećanju performansi računala. Procesor ima jednu jedinicu za dohvat instrukcija, dok su ostali sklopovi udvostručeni. Dvije instrukcije mogu se paralelno izvršavati samo ukoliko međusobno ne dijele registre ili rezultat jedne nije parametar druge (npr. Intel Pentium procesor) Slika 1.8. Superskalarni procesor s dva cjevovoda duljine pet faza Ovakva organizacija omogućuje do dvostruko bolje performanse, ali se koncept ne razvija u smjeru x4 ili x8 sklopva, jer je sklopovski jako složen za realizaciju, već postoji samo jedna linija obrade, a udvostručuju se samo najvažniji sklopovi (aritmetičko-logičke jedinice, jedinice za pristup memoriji i jedinice za rad s realnim brojevima. Ovakva organizacija temelj je modernih procesora (npr. Pentium2, Pentium 4...) i naziva se superskalarnom arhitekturom procesora. 12 Slika 1.9. Superskalarna arhitektura procesora 1.3.7. Primarna memorija Memorija računala sadrži program koji se trenutno izvodi i njegove podatke. Podaci u memoriji spremaju se u binarnom formatu, u adresabilnim blokovima (memorijskim riječima) određene veličine (jedan ili više okteta, k bita). Svakoj riječi pridružena je jedinstvena adresa duljine m bita, dakle moguće je adresirati 2m memorijskih riječi. Primjerice, hipotetsko računalo koje sadrži memoriju od 12 okteta, omoguće je organizirati i na jedan od na tri načina: Slika 1.10.: Primjeri organizacije 96 bita memorije Memorijska riječ je najmanja adresabilna jedinica memorije, današnji procesori redovito imaju memorijske riječi veličine 32 ili 64 bita, dok kod jednostavnijih arhitektura riječ može imati 8 ili 16 bita. Okteti se u riječi mogu pakirati na dva različita načina: big endian i little endian: Slika 1.11.: Little i Big endian organizacija memorije 1.3.8. Cache memorija Memorija velike brzine i količine nije izvediva: brza memorija morala bi biti postavljena na sam procesorski čip, pa bi postojalo ograničenje količine memorije, a ukoliko memorija ne bi bila postavljena na čip, moguće bi bilo povećanje količine, ali veza procesor-memorija ne može biti izvedena na velikoj brzini. Procesori su uvijek brži od memorije, stoga, će se program na takvom procesoru izvoditi na jedan od dva načina: 13 • Procesor kod nailaska na instrukciju čitanja iz memorije, započinje čitanje, i nastavlja s izvođenjem sljedećih instrukcija. Ukoliko neka od tih instrukcija (što je vrlo vjerojatno) koristi podatak koji se učitava iz memorije, procesor ee zaustavlja do završetka čitanja iz memorije. • Procesor izvodi program koji je svjestan sporosti pristupa memoriji, a sastoji se od niza nop (No OPeration) instrukcija koje nemaju korisnog efekta, osim što troše vrijeme procesora do kraja čitanja iz memorije. Oba navedena koncepta, iako različita imaju isti efekt: čekanje na sporu memoriju hardverskim ili softverskim zaustavljanjem procesora. Rješenje problema je korištenje male količine brze memorije na procesorskom čipu. Ova priručna (cache) memorija sadrži kopije memorijskih riječi za koje se pretpostavlja da će ih procesor tražiti. Ukoliko se traženi podaci uvijek nađu u priručnoj memoriji, spori pristup glavnoj memoriji uopće više neće biti bitan. Punjenje priručne memorije podacima koje će procesor tražiti osniva se na principu vremenske i prostorne lokalnosti (velika je vjerojatnost da će procesor pristupiti memorijskim lokacijama kojima je nedavno pristupao kao i onima koje su blizu tih lokacija). Priručna memorija je najčešće podijeljena na dio za kod i dio za podatke. Razlozi su bolji rezultati kod korištenja više procesorskih jezgri, ali i bitno drugačija logika pristupa memorija kod dohvata podataka i koda. 1.3.9. Ulazni i izlazni skolopovi U/I sklopovi su temeljni dio osnovnog koncepta računala, od von Neumannovog modela do svih računala današnjice koja su bazirana na tom modelu. Osnovni elementi računala integrirani su na matičnoj ploči – tiskanoj ploči koja povezuje sve osnovne i dio dodatnih elemenata računala. Elementi računala povezani su sabirnicama. Svaki U/I uređaj povezan je na određenu sabirnicu računala, ovisno o tipu uređaja i njegovim karakteristikama. Svaki U/I uređaj posjeduje sučelje prema sabirnici (kontroler U/I uređaja) koji upravlja uređajem i komunikacijom sa drugim sklopovi na matičnoj ploči preko sabirnice. Veza uređaja na sabirnicu može biti odvojiva preko utičnica na matičnoj ploči ili trajna veza tiskanim vodovima na matičnoj ploči. Pozornost procesora, vanjski uređaji dobivaju korištenjem mehanizma prekida (interrupt). Svaki uređaj povezan na matičnu ploču, može poslati signal prekida procesoru, nakon čega on prekida trenutni slijed instrukcija i izvršava prekidni potprogram koji obavlja potrebnu operaciju (npr. prihvat podataka od vanjskog uređaja) i vraća sa na izvođenje prekinutog slijeda instrukcija. Uređaji koji zahtijevaju veliku brzinu prijenosa podataka u memoriju (npr. čvrsti disk) redovito posjeduju mogućnost izravnog pristupa memoriji s minimalnim posredovanjem procesora (DMA – Direct Memory Access), čime se procesor oslobađa jednostavnog kopiranja podataka između U/I uređaja i memorije i angažira na složenijim poslovima. Kako je sabirnica resurs dijeljen između procesora i priključenih uređaja, sklop za rukovanje sabirnicom (bus abiter) dodjeljuje sabirnicu jednom od korisnika. U situaciji kada neki od uređaja koristi sabirnicu, procesor ne može korsititi sve cikluse sabirnice, već samo dio ciklusa koje će mu rukovatelj sabirnice dozvoliti nauštrb uređaja koji koriste sabirnicu. Ovaj postupak usporava rad tog uređaja, a naziva se krađom ciklusa (cycle steeling). 14 Prva sabirnica koja je masovno korištena je ISA (Industry Standard Architecture), s vremenom zamijenjena poboljšanjima i konačno PCI (Peripheral Component Interconnect) sabirnicom i njenim poboljšanjima. 15 2. Razina digitalne logike Razina digitalne logike osnovno je sklopovlje računala. Sva digitalna računala sagrađena su od digitalnih elemenata čiji se rad opisuje Booleovom algebrom, koji su dio integriranih krugova LSI, VLSI i složenijim sklopovima. S elektroničkog gledišta, tranzistori kao osnovni elementi svakog dijela računala izabiru se ovisno o zahtjevima na brzinu , potrošnju, zauzeće prostora i dr. Dvije tehnologije koje su u upotrebi su: • bipolarni tranzistori – TTL i ECL skupine omogućuju jako brzi rad ali imaju i veliku potrošnju • MOS tranzistori – PMOS, NMOS I CMOS skupine sporijih tranzistora iznimno male potrošnje 2.1. Sklopovi za pomak Ovi sklopovi obavljaju jednu od najjednostavnijih operacija procesora: binarni pomak Slika 2.1.: Sklop za pomak jedno mjesto u lijevo ili desno Ulazna vrijednost pomiče se za jedan bit u desno ili lijevo, ovisno o vrijednosti C bita (0 ~ pomak ulijevi, 1 ~ pomak udesno). Kod pomaka, virtualni -1. i 9. bit su u nuli. 2.2. Zbrajalo Sklop zbrajala je osnovni aritmetički sklop aritmetičko-logičke jedinice procesora. Sklop zbrajala temelji se na sklopu poluzbrajala koji ne uzima u obzir pretek kod zbrajanja i pretk na sljedeću lijevu poziciju. Sklop potpunog zbrajala (full adder) za zbrajanje jednog bita sastoji se od dva poluzbrajala (half adder) i generira rezultat u obliku dvije binarne vrijednosti: rezultat i pretek. A B Suma Pretek 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 16 A B Unos Suma Pretek 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 0 0 1 Slika 2.2.: Tablice i sheme sklopova poluzbrajala i zbrajala Jednostavni prikazani sklop omogućuje zbrajanje jednog bita, te je u realnom sklopu procesora s riječi npr. 32 bita potrebno koristiti ukupno 32 istovjetna bloka. Kako se zbrajanje obavlja bit po bit, kompletna operacija je dugotrajna (zbrajalo s potpunim prijenosom, ripple carry adder), pa se ubrzanje može postići dijeljenjm u dva bloka koji zbrajanje obavljaju paralelno, a konačni rezultat je ispravan kada se zbrajanje dovrši u donjem bloku i eventualni pretek pribroji gornjem bloku. ... 2.3. Aritmetičko logičke jedinice Primjer izvedbe jednobitnog bloka jednostavne ALU koja može obavljati operacije A AND B, A OR B, NOT B i A+B. 17 Figure 2.1.: Realizacija jednog bita jednostavne aritmetičko logičke jedinice Ulazi F0 i F1 određuju jednu od četiri navedene funkcije koje ALU može obaviti. Ovisno o ulazima samo jedan od izlaznih signala dekodera je u logičkoj jedinici, dok su svi ostali u logičkoj nuli. A i B su ulazne varijable. ENA i ENB signali omogućuju da se signali A ili B postave u stanje O, INVA omogućuje invertiranje ulaza ulaza A. Sklop logičke jedinice generira rezultat za sve podržane operacije, a dekoder određuje rezulat koje operacije će se proslijediti na izlaz logičke jedinice. Sklop potpunog zbrajala generira rezultat uključujući bit preteka sa niže pozicije i generirajući bit preteka za višu poziciju. Sklop 8-bitne ALU realizira se povezivanjem 8 istovjetnih jedinica: Slika 2.3.: Realizacija 8-bitne ALU Sklopu je dodan INC signal za dodavanje jedinice varijablama A ili B. 2.4. Memorija Pohrana jednog bita podataka moguća je korištenjem sklopa bistabila. Bistabili se kombiniraju u veće sklopve koji pohranjuju jedan ili više okteta podataka: 18 Slika 2.4.: Integrirani krug za pohranu jednog okteta Sklop prikazana na slici koristi 8 D bistabila za pohranu jednog okteta podataka. Taktni signal spojen je na nožicu 11 integriranog kruga. Korišteni bistabili mijenjaju stanje na negativni impuls, ali kako su spojeni na zajednički invertor (koji ima elektronički smisao pojačala, ali obavlja i logičku inverziju), promjena stanja biti će moguća pri prijelazu taktnog signala iz nule u jedinicu. CLR signal spojen na nožicu 1, omogućuje postavljanje postavljanje svih bistabila u stanje nula. Organizacija veće količine memorije mora omogućiti efikasno adresiranje memorijskih riječi određene veličine. Organizacijski model memorije koji prikazuje pohranu četiri 3-bitne riječi prikazan je na sljedećoj slici: Slika 2.5.: Organizacija memorije 4 x 3 bita 19 Operacija čitanja ili pisanja obavlja se odjednom na kompletnoj riječi. Memorija ima 8 ulaza: tri podatkovna, (I0-I2), dva adresna (A0, A1) i tri upravljačka: CS (Chip Select) aktivira čip, RD (Read) za odabir operacije čitanja/pisanja, OE (Output Enable) za prosljeđivanje pročitane vrijednosti na sabirnicu. Tri izlaza su podatkovna (O0-O2). Uz dodatne linije napajanja, dovoljno je 14 nožica za realizaciju integriranog kruga, u usporedbi s 20 nožica za realizaciju integriranog kruga s 8 D bistabila. Četvora AND vrata odabiru jednu od četiri riječi (crvene linije). Kod upisivanja RD signal će biti u nuli, te će CSxRD’ signal uzlaznim bridom preko taktnog ulaza upisati podatke dovedene na podatkovne ulaze u bistabile izabranog retka. Kod čitanja, CSxRD’ je u nuli, pa upis nije moguć, ali je CSxRDxOE je u jedinici i omogućuje prosljeđivanje izlaza iz bistabila na izlaz memorije. Radi jednostavnosti, ulaz i izlaz iz memorije su prikazani odvojeno, ali u realnom sklopu spojeni su zajedno i čine podatkovnu sabirnicu, a neinvertirajući bufferi omogućuju galvansko razdvajanje kod čitanja pisanja, korištenjem signala OE. 2.5. RAM i ROM memorije Memorije koje omogućavaju čitanje i pisanje nazivaju se RAM (Random Access Memory), memorije s slobodnim pristupom. Memorije ovog tipa izvode se kao jedna od dvije strukture: Statička RAM memorija (SRAM) sastoji se od najčešće D bistabila i prikazana je u prethodnom poglavlju. Ovaj tip memorije jako je brz (vrijeme pristupa je u rangu ns). Dinamička RAM memorija (DRAM) organizirana je kao niz ćelija koje se sastoje od kondenzatora i tranzistora. Stanje kondenzatora izražava pohranjeni bit: 0 ili 1. Kako naboj u kondenzator s vremenom slabi, mora se osvježavati, potrebni su dodatni sklopovi za osvježavanje memorije, ali je sveukupno memorija dosta jednostavnija i omogućuje znatno veći kapacitet i nižu cijenu. Pristup DRAM memoriji dosta je sporiji (u rangu desetina ns). Postoje više različitih izvedbi DRAM memorije: • FPM (Fast Page Mode) je najstarija izvedba memorije... • EDO (Extended Data Output) omogućuje započinjanje novog ciklusa čitanja/pisanja u memoriju prije završetka prethodnog ciklusa. • SDRAM (Synchronous) kombinira elemente statičkih memorija i radi sinhrono s radnim taktom računala. Sinhronost eliminira upravljačke signale i potrebu čekanja procesora na memoriju, već procesor unaprijed zna nakon koliko taktova će podaci biti dohvaćeni iz memorije. • DDR (Double Data Rate) je poboljšanje SDRAM memorijskog sučelja radom na oba brida taktnog signala, čime se udvostručuje brzina komunikacije s memorijom. Memorije čiji sadržaj je trajno upisan i nepromjenjiv, a koje zadržavaju ga i nakon prestanka napajanja su ROM (Read Only Memory). Ova memorija postoji u različitim izvedbama, ovisno o načinu upisa sadržaja: • PROM krugovi omogućavaju jedno upisivanje električnim putem umjesto mehaničkog upisivanja tijekom proizvodnje • EPROM (Erasable Programable) krugovi omogućavaju brisanje UV svjetlom • EEPROM (Electrical Erasable) krugovi omogućavaju brisanje električnim putem po bitovima 20 • FLASH krugovi omogućavaju brisanje električnim putem po blokovima 2.6. Procesori i sabirnice Svi suvremeni procesori integrirani su na jednom integriranom krugu, čime se njihova komunikacija s ostatkom računala može standardizirati. Dio nožica procesora služi za prijenos izlaznih signala, dio za ulazne signale, a dio za ulazne ili ulazne signale, ovisno o konfiguraciji. Podatkovni signali mogu se podijeliti u tri skupine: adresni, podatkovni i upravljački signali. Svi izvodi spajaju se s odgovarajućim izvodima memorijskih sklopova pomoću skupa paralelnih linija – sabirnicama (bus). Pristup memoriji obavlja se u tri koraka: • procesor postavlja adresu memorijske lokacije na adresne izvode; • upravljačkim signalima procesor određuje da li zahtijeva operaciju čitanja ili pisanja • ukoliko se radi i operaciji čitanja, nakon njenog završetka, pročitani podaci će se naći na podatkovnim izvodima procesora • ukoliko se radi o operaciji pisanja, procesor će podatak za upis postaviti na podatkovne izvode i nakon završetka operacije upisa podaci će biti upisani na memoriju Broj linija za podatke i adrese ima velik utjecaj na performanse i cijenu procesora i računala: • procesor s m adresnih linija može adresirati 2m memorijskih lokacija. Uobičajene vrijednosti su 16, 32 ili 64. • procesor s n podatkovnih linija može u jednoj operaciji pročitati ili upisati n bita. Uobičajene vrijednosti su 8, 16, 32, 36 ili 64 bita. Upravljačke linije sinhroniziraju protok podataka između procesora i memorije. Osim navedenih linija procesor sadrži i linije za napajanje naponom 5V, 3,3V ili nižim, te taktnim signalom. Upravljačke signale moguće je podijeliti u četiri važne skupine: • Upravljanje sabirnicom • Sistemski prekidi • Arbitiriranje magistrale • Status Izvodi za upravljanje sabirnicom prenose upravljačke signale od procesora ka sabirnici, odnosno spojenim memorijama I U/I sklopovima Izvodi za sistemske prekide su ulazi za signale koje procesoru šalju U/I sklopovi kada ga žele obavijestiti o promjenama u svojem stanju Izvodi za arbitriranje sabirnice omogućuju reguliranje prometa na sabirnici između priključenih uređaja. Statusni izvodi omohućuju slanje i primanje informacija o statusu procesora ili U/I uređaja (npr. RESET). 21 Sabirnica je električna veza više uređaja. S obzirom na funkciju, sabrinice mogu biti unutarnje (unutar procesora) ili vanjske (veza procesora i/ili uređaja računala). Prva računala imala su 50-100 bakrenih vodova koja su služila za povezivanje procesora, memorije i U/I uređaja. S vremenom se komunikacija s memorijom izdvojila na zasebnu bzu sabirnicu. Protokol sabirnice (bus protocol) standardizira rad sabirnice i uz specifikaciju ožičenja omogućuje spajanje raznorodnih uređaja na sabirnicu. Uređaji povezani na sabirnicu mogu biti aktivni (master, iniciraju prijenos podataka) ili pasivni (slave, aktiviraju se na zahtjev aktivnog uređaja). Svi uređaji, osim memorije, mogu raditi u oba moda rada, npr. upravljač čvrstog diska se ponaša kao pasivni uređaj kada od procesora primi nalog za čitanje s diska, a zatim postaje aktivan kada od memorije traži zapisivanje pročitanih podataka. Kako je sabirnica u računalnim pojmovima dug i opterećen sustav s mnogo priključenih uređaja, veza aktivnih uređaja na sabirnicu obavlja se preko predajnika sabirnice (bus driver) čija je uloga pojačavanje signala. Veza pasivnih uređaja je preko prijemnika sabirnice (bus receiver), a kombiniranih uređaja preko integriranog sklopa primopčredajnika sabirnice (bus transciever). Svi navedeni sklopovi su sklopovi s tri stanja. Sabirnica, slično procesoru, ima uz linije napajanja, linije za podatke, adrese i upravljanje. 2.7. Širina sabirnice Širina sabinrnice, kao i kod procesora ima veliki utjecaj na preformanse računala, ali ograničavajući faktor je i ovdje cijena i mogućnCost izvedbe zbog velikog broja linija. Propusni opsega sabirnice može se povećati prijenosom većeg broja bitova po taktnom signalu, dok je povećanje radnog takta limitirano dužinom sabirnice. Nemoguće je postići jednaku duljinu svih linija sabirnice, te se kod većih duljina linija i visokih radnih taktova pojavljuje problem nesimetričnosti signala sabirnice (bus skew). Sinhrone sabirnice (synchronous bus) povezane su s generatorm takta računala, te svaka aktivnost na sabirniocu traje cijeli broj taktova sabirnice (bus cycle). Asinkrone sabirnice nemaju stabilan radni takt, aktivnost traje proizvoljan vremenski interval. Primjer vremenskog vođenja najvažnijih signala sabirnice prikazan je na slici: Slika 2.6.: Vremensko vođenje signala sabirnice 22 Sabirnica radi na taktu 100 MHz/10 ns, uz 1ns trajanje uspona/pada signala, dok čitanje iz memorije traje 15 ns. Čitanje riječi iz memorije obavlja se u tri ciklusa. Prvi ciklus započinje nailaskom uzlazne ivice signala T1, a treći završava uzlaznom ivicom signala T4. Na početku T1 procesor postavlja adresu tražene riječi na adresne linije. Adresa na sabirnici prikazana je s dvije linije, križanje linija označava izmjenu adrese, a osjenčana područja označava invalidnost podataka (npr. stanje podatkovne sabirnice prije dohvata iz memorije). Signali RD (Read) signal označava operaciju čitanja, nasuprot negiranoj vrijednosti koja označava operaciju pisanja. Od trenutka kada se vrijednost adrese stabilizira na sabirnici, potrebno je 15ns do isporučivanja podataka na podatkovnoj sabirnici. Adresa se stabilizira unutar prvog ciklusa radog takta, dakle podaci se sigurno ne mogu pročitati tijekom drugog ciklusa (potrebno je minimalno 15ns), pa tijekom tog perioda memorija drži aktivnim signal WAIT’, a procesor ubacuje stanje čekanja (wait states). Nakon isteka perioda 15ns, WAIT signal se deaktivira i počinje čitanje podataka. Tijekom prve polovine takta T3 memorija postavlja podatke na podatkovnu sabirnicu. U trenutku silazne ivice T3 procesor čita podatke iz memorije i deaktivira signala MREQ’ i RD’. Vremena na dijagramu imaju značenje: • TAD je interval između uzlazne ivice T1 i stabilizacije adrese (4ns) • TDS je interval od dohvata podataka iz memorije do silazne ivice T3 (2ns) Dakle, od trenutka pojavljivanja adrese potrebno je maksimalno 19 ns za isporuku podataka, a realno potrebno je do 10ns. 2.8. Arbitriranje sabirnice Mehanizam arbitriranja sabirinicom omogućuje uređeni pristup više uređaja sabirnici. Kod jednostavnog centraliziranog pristupa prikazanog na slici jedan uređaj (arbitar sabirnice) određuje uređaj koji će sljedeći dobiti pristup sabirnici. Figure 2.2.: Arbitriranje sabirnice Sabirnica ima jednu liniju za zahtijevanje pristupa na koji su povezani svi uređaji u OR načinu. Kada arbitar dobije signal za zahtjev pristupa, on daje dozvolu slanjem signala na vod na koji su vezani svi uređaji. Najbliži uređaj nakon prijema signala prvojerava da li je on poslao zahtjev. Ukoliko jest, pristupa sabirnici, ukoliko ne, dozvolu prosljeđuje susjednom uređaju. Kod decentraliziranog pristupa postoji veći broj priotiriziranih vodova za zahtijevanje pristupa, koje prate svi uređaji. Na kraju svakog ciklusa svaki uređaj zna da li je njegov zahtjev trenutno najvećeg prioriteta, pa može pristupiti sabirnici. 23 Nakon dobivanja pristupa, uređaji sabirnicom prenose riječ po riječ, ili efikasnije, blokove riječi određene veličine. Kada započne čitanje bloka podataka, glavni uređaj na sabirnici najprije pasivnom uređaju šalje veličinu bloka podataka, a nakon toga šalje po jednu riječ po ciklusu do isporuke cijelog bloka. Primjer ovakvog prijenosa četiri riječi prema memoriji prikazan je na sljedećoj slici: Figure 2.3.: Prijenos bloka Block signal naznačuje da se radi prijenosu bloka podataka. Prva riječ u bloku nije podatak već broj riječi u bloku. MREQ signal označava komunikaciju s memorijom za razliku od memorijski preslikanih U/I uređaja kada nije aktiviran. Signali sistemskih prekida, preko kojih U/I uređaji zahtijevaju pozornost procesora, također se prenose sabirnicom. Kako je U/I uređaja također veći broj, arbitriranje je i ovdje važno. Rješenje u ovom slučaju je prioritiziranju uređaja i korištenju centraliziranog arbitriranja. Uređaji ovog tipa postoje kao standardni integrirani sklopovi, npr. Intel 8259A za PC: Slika 2.7.: Organizacija prekidnog sustava računala Do osam U/I uređaja može se povezati na osam ulaznih linija prekidnog kontrolera. U/I uređaji izazivaju prekid slanjem signala (impulsa) prekidnom linijom. Ukoliko dva uređaja zatraže prekid 24 istovremeno, prednost dobiva uređaj višeg prioriteta (što je obično uređaj nižeg IRQ broja). Kada procesor prekine tekući posao, može započeti obradu prekida, te šalje signal INTA (Interrupt Acknowledge). Sada interrupt kontroler šalje redni broj uređaja koji je izazvao prekid, koji se koristi u nastavku obrade prekida U/I uređaja. 2.9. PCI sabirnica PCI (Peripheral Computer Interconnect) sabirnica je masovno korištena sabirnica skoro 20 godina. Širine je 32 bita, takt 33MHz, s dvostrukom širinom i brzinom u novijim izvdebama. Slika 2.8.: Računalo temeljeno na PCI sabirnici Jedna od izvedbi računala prikazana je na slici. PCI sabirnica koristi se za sabrinicu srednje brzine. Komunikacija prema memoriji je preko specifične brze sabirnice, slično je i s grafičkim sustavom, a PCI se koristi za ATA, USB i SCSI sučelja. Krug mosta je najvažniji dio računala uz procesor. Vanjski uređaji male brzine (spojeni su najčešće preko USB sabirnice) i čine sabirnicu male brzine. PCI je sinhrona magistrala, sve transakcije odvijaju se između glavnog i sporednog uređaja. Prije korištenja, uređaj ”preuzima” sabirnicu. Arbitriranje na PCI sabirnici je centralizirano: 25 Slika 2.9.: Arbitriranje na PCI sabirnice Svaki PCI uređaj koristi dvije linije: • REQ# (request), za zahtjev pristupa, i • GNT# (grant), dozvolu arbitra za korištenje sabirnice. PCI uređaj, pri čemu se i procesor smatra jednim od njih, šalje signal REQ. Nakon dozvole od arbitra uređaj počinje koristiti sabirnicu već od sljedećeg ciklusa taktnog signala. Algoritam po kojem radi arbitar nije određen PCI specifikacijom, ali mora osigurati efikasno korištenje sabirnice i minimalno čekanje uređaja. Arbitar može deaktivirati GNT signal i prije no uređaj završti započeti prijenos, stoga uređaj mora nadgleadati GNT signal i osloboditi sabirnicu kada se on deaktivira. Ovakva organizacija omogućuje duge neprekinute prijenose kada samo jedan uređaj zahtijeva sabirnicu, ali istovremeno omogućuje brzu reakciju na zahtjev drugih uređaja (najčešće je procesor taj koji prekine prijenose drugih uređaja). 2.9.1. Signali PCI sabirnice Signal CLK je taktni signal. Transakcija započinje na silaznom bridu taktng signala. 32 AD signala prenose multipleksirano adrese i podatke, adresa u prvom, a podaci u trećem ciklusu. Signal C/BE# tijekom prvog ciklusa sadrži informaciju da li se radi o prijenosu riječi ili bloka, a tijekom drugog ciklusa prenosi 4-bitnu bitmapu koja određuje validne oktete iz riječi ukoliko se prenosi samo dio riječi. • FRAME# signalom glavni uređaj započinje transakciju obaviještavajući sporedni uređaj da su adrese i naredbe sabirnici spremni. • IDSEL (ID select) signal je zahtjev za čitanjem konfiguracijskog prostora uređaja. Svaki PCI uređaj ima 256 okteta memorije koja sadrži njegove konfiguracijske parametre koje mogu čitati drugi uređaji. Na taj način moguće je ispravno konfiguriranje uređaja nakon spajanja na sabirnicu. • DEVSEL je signal koji šalje sporedni uređaj obavještavajući da je postavio na sabirnicu ispravnu adresu. • TRDY (transmission ready) signal podređeni uređaj stavlja kada je postavio podatke na sabirnicu, ili da je spreman na prijem podataka od glavnog uređaja. • STOP signal šalje sporedni uređaj kada zbog nepredviđenih okolnosti želi prekinuti transakciju. • SERR (system error) signalom dojavljuju se sistemske ili greške pri adresiranju. • RST signal je oznaka sistemskog reseta i vraća sve uređaju u početno stanje. Signal Vodova Glavni/sporedni uređaj CLK AD PAR C/BE FRAME# 1 32 1 4 1 Glavni/Sporedni Glavni Glavni Glavni Glavni IRDY# 1 Glavni Opis Radni takt (33/66 MHz) Multipleksirane adrese i podaci Paritetni bit Naredba sabirnici / validni okteti Ispravnost signala AD i C/BE Prihvat od glavnog uređaja (čitanje) / Ispravnost podataka (pisanje) 26 IDSEL DEVSEL TRDY# STOP# PERR# SERR# REQ# GNT# RST# 1 1 1 1 1 1 1 1 1 Glavni Sporedni Sporedni Sporedni Odabir konfiguracijskog prostora / memorije Sporedni uređaj je dekodirao vlastitu adresu Ispravnost podataka (čitanje) / prihvaćanje podataka (pisanje) Sporedni uređaj prekida transkaciju Primatelj je detektirao pogrešku u prijenosu Greška u prijenosu adrese i sistemska greška Arbitriranje: zahtjev Arbitriranje: dozvola Ponovno pokretanje sustava Tablica 2.1.: Glavni signali PCI sabirnice 2.9.2. Arbitriranje PCI sabirnice Slika 2.10. Transakcije na PCI sabirnici Tokom silaznog brida ciklusa T1 vlasnik sabirnice postavlja adresu na AD linije, a naredbu na C/BE liniju. FRAME signalom započinje transakcija. Tijekom ciklusa T2 glavni uređaj slobađa sabirnicu, a tijekom T3 preuzima je sporedni uređaj. CB/E ? nejasno. Tijekom ciklusa T3 sporedni uređaj šalje DEVSEL signal kao potvrdu glavnom ureađaju da je odabran. TRDY signal sporedni uređaj postavlja kada ima spremne podatke za slanje, a do tada umeće stanja čekanja. Počevši od T5, glavni uređaj započinje novu operaciju upisivanja, postavljanjem adrese i komande na sabirnicu. U ovom ciklusu glavni uređaj šalje i podatke, bez potrebe za paznim ciklusom jer nema izmjene vlasnika sabirnice. U T7, memorije prihvaća podatke. 2.10. U/I sklopovi Kako je prikazano u primjeru računala temeljenog na PCI sabirnici, ono se sastoji od procesora, memorijskog sklopa i različitih U/I uređaja (upravljači diskova, grafički podsustav, USB sučelje, itd). 27 Primjeri jednostavnih U/I uređaja su UART (Universal Asynchronous Receiver Transmitter), sučelje za serijsku komunikaciju sa sporim uređajima koji podatke preko sabirnice prenosi u oktetima ili PIO (programmed input-output) sklop koji ima 24 TTL ulaza/izlaza koje procesor računala može čitati ili postavljati. Slika 2.11.: PIO sklop 8255A 24 bitni priključci podijeljeni su u tri okteta, koji su povezani s oktetnim registrima koji sadržavaju proočitanu ili vrijednost koja se upisuje na priključak. 8 vodova povezuje sklop na sabirnicu: vodovi za odabir (CS) vodovi za čitanje i pisanje (WR, RD), RESET, adresni i podatkovni vodovi. Adresni vodovi odabiru jedan od četiri registra kojima se pristupa: tri su vezana na priključke, a jedan je statusni, te određuje mod rada uređaja. 2.10.1. Dekodiranje adresa Kako je do sada prikazano, U/I uređajima pristupa se slično kao i memoriji. Razmotrimo primjer 16bitnog računala s PIO integriranim krugom i memorijama: • EPROM za pohranu programa veličine 2 kB, • RAM za pohranu podataka veličine 2 kB. PIO sklop se može integrirati u računalo na dva načina: • Kao klasični U/I uređaj, uz postojanje posebnih vodova sabirnice za odabiranje uređaja. • Kako memorijski-preslikani U/I uređaj, uz postojanje 4 okteta rezervirana u memoriji za tri priključka U/I uređaja i upravljački registar. Kako je računalo 16-bitno, ukupan mogući adresni prostor iznosi 216=64 kB. Memorijski prostor moguće je organizirati na način: • EPROM zauzima memorijski prostor 0-2 kB; • RAM zauzima memorijski prostor 32-34 kB; • PIO sklop zauzima zadnja 4 okteta adresnog prostora (65532 – 65535): 28 Slika 2.12.: Primjer organizacija adresnog prostora računala U ovakvom rasporedu, EPROM adrese se nalaze u rasponu 0x00 - 0x7FF (0b 0000 0111 1111 1111), tj. EPROM adrese nalaze se u adresno prostoru s binarnim nulama u pet najviših bitova. Na taj način, izvod za biranje EPROM memorijskog kruga moguće je realizirati OR vratima s 5 ulaza, koji će generirati CS’ signal. RAM adrese nalaze se u rasponu 0b 1000 xxxx xxxx xxxx, pa se aktiviranje može obaviti na sličan način. Dekodiranje PIO sklopa nešto je složenije, jer je adresni raspon 0b 1111 1111 1111 11xx. Drugi, jedostavniji pristup je korištenje činjenice da samo EPROM adrese imaju MSB bit u nuli, pa se on izravno može koristiti kao CS’ signal, RAM memorije nalaze se na adresama koje započinju s 0b10, a PIO adrese započinju s 0b11. 29 Slika 2.13.: Potpuno i parcijalno dekodriranje adresa Pojednostavljeni pristup naziva se parcijalnim dekodiranjem adresa. Prednost jednostavnosti, onemogućuje proširivanje računala drugim tipovima memorije, a problem može nastati i što je vrlo lako pristupiti nekorištenom adresnom prostoru. 30 3. Razina mikroarhitekture Iznad razine mikroarhitekture nalazi se razina mikroarhitekture. Zadatak ove razine ja implementacija razine arhitekture skupa instrukcija ISA (Instruction Set Architecture). Dizajn razine mikroarhitekture ovisi o arhitekturi skupa intrukcija koju treba implementirati, traženoj cijeni i performansama računala. Većina današnjih ISA arhitektura, posebno RISC tipa, sadrže jednostavne instrukcije koje je moguće izvršiti unutar jednog ciklusa radnog takta. Složenije ISA arhitekture (npr. Intel Pentium) zahtijevaju više ciklusa za izvršavanje više ciklusa za izvršavanje samo jedne instrukcije. Izvršavanje instrukcije uključuje nekoliko operacija: dohvat operanada iz memorije i čitanje, dekodiranje i izvođenje zadane aritmetičke ili logičke operacije te konačno zapisivanje rezultata natrag u memoriju. Određivanje redoslijeda operacija unutar instrukcije značajno je drugačije od rukovanja instrukcijama na ISA razini. 3.1. Primjer mikroarhitekture Za primjer razmatranja mikroarhitekture uzeti ćemo jednostavni skup instrukcija za rad s cijelim brojevima IVM (Integer Virtual Machine), kao primjer ISA razine. Osnova svake mikroarhitekture je mikroprogram, sadržan u ROM memoriji, čiji je zadatak preuzimanje, dekodiranje i izvršavanje IVM instrukcija. Mikorprogram sadrži niz varijabli stanja koje su dostupne svim instrukcijama koje se izvode. Primjer ove varijable stanja je programsko brojilo (PC, program counter), koje pokazuje ne adresu sljedeće instruckcije koju treba izvršiti. IVM instrukcije su kratke, svaka ima nekoliko polja, svaka sa specifičnom svrhom. Obvezno polje je operacijski kod (operation code, opcode), koji identificira instrukciju, npr. ADD, BRANCH, itd. Većina instrukcija imaju i polje za operand, npr. memorijsku adresu. Model izvršavanja ISA instrukcija naziva se ciklusom preuzmi-izvrši (fetch-execute). Putanja podataka (datapath) je dio procesora koji sadrži aritmetičko-logičku jedinicu te njezine ulaze i izlaze. Primjer putanje podataka korišten u ovom poglavlju prikazan je na sljedećoj slici: 31 Slika 3.1.: Primjer mikroarhitekture Putanja podataka prikazana na slici sadrži niz 32-bitnih registara simboličnih imena, npr. PC, SP, itd. Većina registara može svoj sadržaj postaviti na sabirnicu B. Izlaz iz ALU ulaz je u sklop pomaka ili sabirnicu C. Sadržaj sabirnice C moguće je upisati istovremeni u jedan ili više registara povezanih na nju. ALU jedinica ima dva ulaza: A povezan na registar H i B koji je vezana na sabirnicu preko koje može preuzeti sadržaj bilo kojeg od devet registara. Registar H može se popunitit ukoliko se odabere ALU funkcija koja će samo propuštati signal s sabirnice B do izlaza iz ALU, npr. sumiranje ulaza ALU, pri 32 čemu je ENA ulaz negiran, pa je ulaz A uvijek u nuli. Dodavanjem nule na sabirnicu B dobija se vrijednost s sabirnice B, koja se može propustiti kroz sklop pomaka i smjestiti u registar H. Osim navedenih funkcija, izlazom iz ALU može se nezavinso upravljati i pomoću dva upravljačka signala: SLL8 i SRA1: • SLLB (Shift Left Logical) pomiče sadržaj ulijevo za 8 mjesta, a ispražnjenih 8 LSB bitova postavlja u nulu. • SRA1(Shift Right Arithmetic) pomiče sadržaj udesno za jedno mjesto, bez izmjene MSB bita. Moguće je istovremeno čitanje i pisanje u registar, npr. moguće je poslati sadržaj SP na sabirnicu B, oenemogućiti ulaz A ALU, aktivirati signal INC i smjestiti rezultat u SP, čime se SP uvećava za 1. Naravno, čitanje i pisanje obavljaju se u različitim vremesnkim trenucima, jer drugačije nije ni moguće. Kada se registar odabere kao desni ulaz u ALU, njgiova vrijednost stavlja se na sabirnicu B i tu ostaje tijekom cijelog ciklusa. ALU jednica, nakon obavljanja operacije, generira rezultat koji preko sklopa pomaka dolazi do sabirnice C i jednog ili više registara, uključujući i registar koji je generirao ulazne podatke za ALU. Pri svakom otkucaju radnog takta generira se kratki impuls, nakon čega se aktiviraju skopovi koji čine putanju podataka (dw). Nakon toga se bira registar čiji će se sadržaj propustiti na sabirnicu B i sadržaj mu se postavlja na sabirnicu (dx). ALU i sklop pomaka trebaju vrijeme dy za generiranje rezultata. Vrijem dz potrebno je prijenos rezultata do odredišnog registra. Prijenos iz registra u memoriju moguć je tijekom slijedeće uzlazne ivice taktnog signala, tijekom koje se izvorišni registar odvaja od sabirnice B. Svaki element putanje podataka zahtijeva određeno vrijeme rada, te je potrebno strogo vremensko usklađivanje u skladu s kašnjenjem koje svaki element unosi kako bi putanja podataka ispravno funkcionirala. 3.2. Rad memorije Predstavljeni model računala komunicira s memorijom 32-bitnom sabirnicom za adresiranje memorijskih riječi podataka i 8-bitnom sabirnicom za adresiranje memorijskih okteta instrukcija. Adresiranje riječi podataka obavlja se pomoću dva 32-bitna registra MAR (Memory Adrress Register) i MDR (Memory Data Register). Adresiranje okteta instrukcija obavlja se pomoću PC (Program Counter) registra, koji učitava oktet podataka u 8 najnižih bita registra MBR. Podatke u memoriji je moguće mijenjati, dok se instrukcije mogu samo pročitati iz memorije. Svakim od navedenih registara upravlja jedan ili dva upravljačka signala. Neispunjena strelica označava signal koji šalje sadržaj registra na sabirnicu B. Puna strelica označava signal koji prima sadržaj sa sabirnice C u registar. Operacija čitanja ili pisanja u memoriju obavlja se upisivanjem sadržaja u odgovarajuće memorijske registre, nakon čega se memoriji šalje signal za čitanje ili pisanje. Fizička implementacija memorije je 8-bitna, ali se dohvaćanje 32 bitni riječi omogućuje jednostavnom metodom. Ukupno je moguće adresirati 232 okteta podataka ili 230 32-bitnih riječi. 32bitna adresa se pomiče za dvije pozicije ulijevo, a MSB i MSB+1 bitovi se postavljaju u nulu, primjerice adresa 1 prevodi se u adresu 4, adresa 2 u adresu 8, itd. Instrukcije se iz memorije dohvaćaju u oktetima i spremaju u registar MBR. 33 3.3. Mikroinstrukcije Upravljanje putanjom podataka zahtijeva ukupno 29 signala iz ukupno pet skupina: • Devet signala za upravljanje upisivanjem podataka s sabirnice C u reguistre • Devet signala za upravljanje pražnjenjem registara na sabirinicu B, koja je ulaz u ALU. • Osam signala za upravljanje radom ALU i sklopa pomaka. • Dva signala za razlikovanje operacije čitanja/pisanja u memoriju preko MAR/MDR registara. • Jedan signal za označavanje operacije čitanja iz memorije preko PC/MBR registara. 29 navedenih signala određuju operacije tijekom jednog ciklusa putanje podataka. Ciklus se sastoji od propuštanja vrijednosti iz odabranog registra na sabinricu B, prolaska signala kroz ALU i sklop pomaka, prosljeđivanja na sabinricu C i konačnog zapisivanja u odredišni registar. Osim toga, pšostoji signal za čitanje podataka iz memorije, operacija s memorijom započinje na kraju ciklusa putanje podataka, pošto je registar MAR učitao vrijednost. Podaci iz memorije raspoloživi su na samom kraju naredog ciklusa u registru MBR ili registru MDR i mogu se upotrijebiti u narednom ciklusu, odnosno operacija čitanja podataka iz memorije preko bilo kojeg priključka koja je započeta na kraju ciklusa k, daje podatke koji se ne mogu iskoristiti u ciklusu k+1, već samo u ciklusu k+2 ili kasnijima. Signali za upravljanje memorijom ne generiraju se u prvom sistemskom ciklusu sve dok registri MAR i PC ne učitaju vrijednist na uzlaznoj ivici signala, pred kraj prvog ciklusa. Memorija svoje podatke postavlja na memorijsku sabirnicu u toku jednog ciklusa tako da regiustri MBR i/ili MDR mogu učitati vrijednosti pri nailasku sljedeće uzlazne ivice signala radnog takta, paralelno s drugim regustrima. Drugim riječima, podatci se učitavaju u registar MAR pri kraju ciklusa putanje podataka, nakon čega odmah započinje memorijska operacija. Zbog sporosti memorije, nije realno očekivati da će podaci pročitani iz memorije biti upisani u MDR na početku idućeg ciklusa. Jedan ciklus putanje podataka mora se nalaziti između operacije čitanja podataka iz memorije i korištenja pročitanih podataka. Registri MDR i MBR učitavaju vrijednosti pri uzlaznom bridu taktnog signala, a sadržaj zadržavaju sve do sljedeće operacije čitanja. Sadržaj sabirnice C može se upisati u više registara istovremeno, ali naravno, sadržaj više registara ne može se upisati na jedni sabirnicu C. 24 opisana signala koriste se za upravljanje putanjom podataka tijekom jednog ciklusa. Važan dio upravljanja odnosi se i na sljedeći ciklus toka podataka. Konačni izgled formata mikroinstrukcije prikazan je na slici: Ukupno 36 signala podijeljeno je u šest grupa: • Addr – Adrese sljedeće potancijalne mikroinstrukcije • JAM – Način biranja sljedeće mikroinstrukcije • ALU – funkcija aritmetičko-logičke jedinice • C – Biranje registara za upisivanje podataka s sabirnice C • Mem – Funkcije za rad s memorijom • B – Biranje izvora podataka za sabirnicu B 34 3.4. Upravljanje mikroinstrukcijama Signali koji upravljaju radom putanje podataka generira sklop sekvencera (sequencer). On mora tijekom jednog ciklusa putanje podataka osigurati dva skupa informacija: Stanje svakog upravljačkog signala u sustavu Adresu mikroinstrukcije koja je sljedeća u redu za izvršavanje Razrađena slika mikroarhitekture za prikazani model procesora sastoji se od putanje podataka i upravljačkog dijela: Slika 3.2. Potpuni blok dijagram mikroarhitekture Najvažniji element upravljačkog dijela procesora je upravljačka memorija (control store), koja pohranjuje mikroinstrukcije. U našem primjeru veličine je 512 36-bitnih riječi, svaka riječ odgovara 35 jednoj mikroinstrukciji čiji je format već prikazan. Iako je i upravljačka memorija memorija u klasičnom smislu, glavna razlika je u načinju izvršavanja instrukcija i mikroinstrukcija: instrukcije u radnoj memoriji računala izvode se adresnim redoslijedom, osim kod grananja, dok se mikroinstrukcije izvršavaju znatno drugačijim redoslijedom. Uvećanje vrijednosti programskog brojila za jedan označava pomak na sljedeću instrukciju u radnoj memoriji, dok je u mikroprogramu zahtijevana veća fleksibilnost jer su nizovi mikroinstrukcija u pravilu kratki pa se nakon svake mikroinstrukcije izvodi točno poznata mikroinstrukcija, a ne ona koja slijedi u mikroprogramskoj memoriji. Mikroprogramska memorija je također memorija za čitanje, pa joj se pristupa preko adresnog registra MPC – brojila mikroinstrukcija (microinstruction counter), pri čemu, kako je kazano brojač u imenu je samo radi ekvivalencije s programskim brojilom, jer se instrukcije dohvaćaju eksplicito, a ne slijedno. Mikroinstrukcije se tijekom izvođenja pohranjuju u registru mikroinstrukcija MIR (Microinstruction register). Bitovi mikroinstrukcije imaju značenje upravljačkih signala, kako je već prikazano. Podijeljeni su u šest grupa: • Addr i J (JAM) upravljaju izborom sljedeće mikroinstrukcije • ALU sadrži 8 bitova za izbor funkcije ALU i pokretanje sklopa pomaka • C bitovi određuju registre koji će učitati rezultat iz ALU i sklopa pomaka preko sabirnice C • M bitovi upravljaju memorijskim operacijama Zadnja 4 bita upravljaju dekoderom koji određuje sadržaj na sabirnici B. Od ukupno 16 mogućih signala koristi se samo 9. Na početku silaznog brida svakog ciklusa takta registar MR iz upravljačke memorije učitava riječ koja je adresirana MPC registtrom, za vrijeme dw (prvi potciklus). Nankon toga u drugom potciklusu trajanja dx, na sabirnicu B se postavlja sadržaj određenog registra, a ALU saznaje koju operaciju treba obaviti. Nakon vremena dy ALU generira rezultat i upisuje ga u sklop za pomak., te vrijednosti N i Z. Oni se, kao i svi regsitri koji učitavaju podatke sa sasbinrice C i memorije spremaju pri uzlaznom bridu taktnog signala, pri kraju ciklusa putanje podataka. Aktivnost ALU odvija se tijekom potckilusa 3. NAkon intervala dz, izlaz iz sklopa pomaka stigao je preko sabirnice C do odredišnog registra u koji se upisuje pred kraj ciklusa, pri uzlaznom bridu taktnog signala. U potciklusu 4 učitava se sadržaj registara i N, Z signala. Nakon toga, svi rezultati obrade su smješteni u odredišne registre, rezultat pšrethodne memorijske operacije je dohvaćen, a MPC je učitao sljedeću mikroinstrukciju. Opisani postupak sada se ponavlja za sljedeće mikroinstrukcije. Paralelno s upravljanjem putanjom podataka, mikroprogram mora odrediti i sljedeću mikroinstrukciju. Izračunavanje adrese sljedeće mikroinstrukcije počinje nakon što registar MIR učita podatke. U prvom koraku se u MPC kopira sadržaj NEXT_ADDRESS polja. Dok se obavlja kopiranje, ispituje se sadržaj JAM registra. Ako je vrijednost 0, adresa sljedeće instrukcije nalazi se u MPC. Ukoliko je saržaj različit od 0, potreni su dodatni koraci, koji se nalaze sklopu najznačajniji bit: F = (JAMZ & Z) ∨ (JAMN & N) ∨ NEXT _ ADDRESS[8] Primjerice, kada su oba JAM polja u nuli, adresa sljedeće instrukcije je u polju NEXT_ADDRESS. Ako je jedno od JAM polja u jedinici, ovisno o N i Z vrijednostima, adresa sljedeće mikroinstrukcije je ili NEXT_ADDRESS ili NEXT_ADDRESS s MSB bitom na koji je primjenjena OR operacija s jedinicom. (slika i opis) 36 Treći bit u polju JAM je JMPC. AKo je postavljen, na 8 bita MBR registra primjenjuje se OR operacija s 8 LSB NEXT_ADDRESS polja tekuće mikroinstrukcije, a rezultat se šalje u MPC. Blok s oznakom 0 na slici obavlja navedenu operaciju. Mogućnost promjene MBR i NEXT_ADDRESS registara koji se zatim upisuju u MBR registar omogućuje izvođenje skokova u progranmskoj memmoriji. Registar MBR u pravilu sadrži operacijski kod, tako da će rezultat upotrebe bita JMPC biti izbor jedinstvene sljedeće mikroinstrukcije za svaki mogući operacijski kod. 3.5. ISA instrukcije i primjer realizacije mikroarhitekture .... 3.5.1. Realizacija stoga Svi moderni programski jezici baziraju se na proceduralnom modelu, gdje glavni program poziva različite procedure, koje imaju lokalne varijable vidljive samo njima. Ove varijable nalaze se u posebnom memorijskom području zvanom stog (stack), ali njihova adresa nije unaprijed poznata, kako kod globalnih varijabli, već postoji registar koji samo pokazuje na početak memorijskog područja u kojem su u slijedu pohranjene lokalne varijable trenutne procedure. U našem primjeru to je registar LV (local variables). Drugi registar, SP (stack pointer), ukazuje na posljednju riječ iz niza lokalnih varijabli, a pojedina lokalna varijabla referencira se preko udaljenosti (offset) od vrijednosti registra LV. Struktura podataka koja se nalazi između vrijednosti registara SP i LV naziva se okvir lokalnih varijabli (local variable frame). Pozivi procedura prikazani su na sljedećoj slici: Slika 3.3.: Primjer korištenja stoga kod poziva funkcija A, B i X Procedura A ima tri 32-bitne varijable: a1, a2 i a3. LV ima sadržaj 100, pa će SP imati sadržaj 108 (svaka varijabla zauzima 4 okteta). Kada procedura A pozove proceduru B, varijable procedure B b1-b4 alociraju se na stogu iznad lokalnih varijabli procedure A, pa se LV registar pri pozivu procedure B pomiče na odgovarajuće mjesto. Kada se izvođenje procedure B završi, procedura A ponovno postaje aktivna, pa se stog ponovno podešava na odgovarajuće vrijednosti LV i SP, a prostor koji je na stogu koristila procedura B više nije dostupan i smatra se slobodnim, te će biti prebrisan novim skupom lokalnih varijabli kod nekog budućeg poziva neke procedure X iz procedure A. 3.5.2. Memorijski model Memorija IVM arhitekture može se promatrati kao niz od 232 (4G) okteta ili 230 (1G) riječi duljine 32 bita. Ukupna raspoloživa memorija podijeljena je u četiri područja: 37 Područje konstanti: pohranjuje konstante, nepromjenjive znakovne nizove i pokazivače na druga memorijska područja. Nakon pokretanja programa, on dobija od operativnog sustava računala ovu adresu i pohranjuje je u CPP registar. Okvir lokalnih varijabli: kako je već kazano, koristi se pohranu lokalnih varijabli unutar procedura. Ukoliko procedura ima argumente, tada se formalno naziva funkcijom, a argumenti se pohranjuju na početku okvira, prije lokalnih varijabli. Područje metoda: ovo je područje u kojem se nalazi program i sve procedure, ponekad se naziva i text područjem. Za razliku od ostalih područja, ovdje se dohvaćanje (instrukcija) obavlja na razini okteta, a ne riječi, a adresa s koje se obavlja dohvaćanje nalazi se u PC registru. 3.5.3. Primjeri IVM ISA instrukcija Lista instrukcija koje IVM ISA arhitektura podržava prikazana je u sljedećoj tablici: Operacijski kod Mnemonik Opis 0x10 0xa7 0x60 0x7e 0x99 0x9b 0x84 0x15 0xb6 0x80 0xac 0x36 0x64 0x00 BIPUSH oktet GOTO offset IADD IAND IFEQ pomak IFLT pomak IINC var ILOAD var INVOKE proc IOR IRETURN ISTORE ISUB NOP Stavlja oktet podataka na stog Bezuvjetni skok Uzima dvije riječi sa stoga, sumira ih i rezultat upisuje na stog Uzima dvije riječi sa stoga, rezultat AND operacije upisuje na stog Grananje ukoliko je vrijednost varijable na stogu nula Grananje ukoliko je vrijednost varijable na stogu manja od nule Uvećava lokalnu varijablu za jedan Stavlja lokalnu varijablu na stog Poziva proceduru ili funkciju Uzima dvije riječi sa stoga, rezultat OR operacije upisuje na stog Vraćanje cjelobrojnog rezultata iz funkcije Skida lokalnu varijablu sa stoga Uzima dvije riječi sa stoga, oduzima ih i rezultat upisuje na stog Prazna instrukcija Tablica 3.1.: Instrukcije IVM arhitekture Prikazane instrukcije mogu se podijeliti u tri grupe: • Aritmetičke instrukcije (IADD, ISUB, IINC) • Logičke instrukcije (IAND, IOR) • Instrukcije grananja (IFEQ, IFLT, GOTO) • Instrukcije stoga (ILOAD, ISTORE) • Instrukcije poziva procedure (INVOKE, IRETURN) • Prazna instrukcija NOP nema efekta, a koristi se za ubacivanje ciklusa čekanja Primjer programa napisanog u višem programskom jeziku i njegovo prevođenje u IVM instrukcije prikazan je na sljedećem primjeru: i = j + k; if (i == 0) k = 4; ILOAD j ILOAD k IADD IFEQ L1 GOTO L2 učitava j na stog učitava k na stog j+k stavlja na stog ako je rezultat nula skače na L1 inače bezuvjetno skače na L2! 38 L1: BIPUSH 4 ISTORE k L2: labela L1 stavlja 4 na stog sprema 4 u varijablu k L2 - kraj Mehanizam pozivanja procedura zahtijeva detaljnije objašnjenje. Procedura pozivatelj dužna je postaviti na stog parametre koje prosljeđuje funkciji. Nakon povratka iz pozvane procedure procedura pozivatelj mora nastaviti izvršavanje na liniji koja slijedi neposredno iza linije u kojoj se poziva procedura. To je logično i ispunjeno u svim višim programskim jezicima današnjice, uključujući i strojni jezik procesora. Nakon povratka u pozivatelj, stanje stoga mora biti neizmjenjeno, kako bi se ona mogla normalno nastaviti izvršavati. Pozvana procedura koristi stog za prijem argumenata, lokalne varijable i povratnu vrijednost koju će vratiti proceduru pozivatelju. Adresa procedure unutar područja metoda zadaje se kao argument INVOKE instrukcije. Prva četiri oketa na početku procedure su specijalni podaci: prva dva oketat su broj parametara funkcije, a sljedeća dva okteta određuje veličinu podučja lokalnih varijabli pozvane funkcije. Peti oktet je prva instrukcija pozvane procedure. INVOKE instrukcija izračunava početnu adresu novog okvira oduzimanjem broja parametara od vrijednosti SP. Na početku okvira upisuje se adresa lokacije na koju treba staviti staru vrijednost PC registra, a koja je prva lokacija iznad prostora lokalnih varijabli pozvane procedure. Na lokaciju iza nje sprema se stara vrijednost registra LV. Nakon nje započinje prostor lokalnih varijabli pozvane procedure. Slika 3.4.: Memorija prije i poslije INVOKE instrukcije Posljednja operacija INVOKE instrukcije je postavljanje PC registra na adresu petog okteta pozvane procedure, što je prva instrukcija pozvane procedure. Instrukcija IRETURN ima završava izvođenje pozvane procedure, stoga mora osloboditi zauzeti prostor na stogu, vraća stare vrijednosti pokazivača LV i SP i postavlja na njega rezultat procedure. 39 Staro stanje SP i LV registara dohvaća se preko veznog pokazivača, koji nakon toga više nije potreban pa se na njegovo mjesto upisuje povratna vrijednost procedure na koju pokazuje SP. Time je stanje stoga vraćeno u prvobitno stanje, osim što se na njemu sada nalazi povratna vrijednost funkcije, koju funkcija pozivatelj sada može dohvatiti i upotreijebiti kao lokalnu varijablu u svom radu. Slika 3.5.: Memorija prije i poslije IRETURN instrukcije 3.5.4. Mikroinstrukcije i notacija Slično ISA instrukcijama, i mikroinstrukcije se pišu korištenjem mnemonika koji opisju operaciju koja obavlja svaka mikorinstrukcija u toku jednog ciklusa radnog takta. Jezik mikroarhitekture odražava njene karakteristike. U toku svakog taktnog ciklusa može se pisati u svaki registar, ali se po pravilu piše u samo jedan. Samo jedan registar može svoju vrijednost proslijediti B strani ALU, dok na strani A možemo upisati konstante 0, -1, +1 ili sadržaj registra H. Primjerice, ako želimo upisati sadržaj registra SP u MDR, pišemo: MDR = SP Zbrajanje sadržaja H i SP i upis u MDR postižemo s: MDR = SP + H Potrebno je imati u vidu strukturu procesora i detalje svake instrukcije, npr. MDR = MDR + SP nije moguće izvesti u jednom radnom taktu jer zbrajanje u ALU zahtijeva da jedan od operanada bude u H registru. Podatkovnoj memoriji preko 32-bitnog priljučka pristupa se mikroinstrukcijama rd i wr, a preko 8bitnog priključka mikroinstrukcijom fetch. Skokovi se bezuvjetno obavljaju goto mikroinstrukcijom s naznačenim mjestom skoka, ili uvjetno, na osnovi stanja N i Z zastavica, primjerice: Z=TOS if (Z) 40 goto L1; else goto L2; Prva mikroinstrukcija će upisati TOS u ALU, koja će postaviti sadržaj Z bita. Operacijom OR između Z i MSB bita MPC mijenja se vrijednost MPC registra, pa će sljedeća mikroinstrukcija biti ili sa adrese L1 ili L2, koje se u mikroprogramskoj memoriji moraju nalaziti udaljene za 28(256) riječi. JMPC bit se koristi mikroinstrukcijom goto: goto (MBR OR value) čime ćemo postići da se value vrijednost iskoristi za polje NEXT_ADDRESS, a JMPC bit se dobije OR operacijom MBR i NEXT_ADDRESS i rezultat smjesti u MPC. 3.5.5. Primjeri realizacije IVM instrukcija mikroinstrukcijama Zadatak mikroprograma je prihvaćanje ISA IVM instrukcija i njihovo izvođenje, dakle sadrži beskonačnu petlju koja dohvaća instrukcije i izvodi mikroinstrukcije koje im odgovaraju. Mikroprogram s beskonačnom petljom i primjerom nekoliko nizova mikroinstrukcija koje odgovaraju IVM instrukcijama: Oznaka Main 1 nop1 iadd1 iadd2 iadd3 pop1 pop2 pop3 bipush1 bipush2 bipush3 iload1 iload2 iload3 iload4 iload5 ifeq1 ifeq2 ifeq3 ifeq4 Operacije goto Main1 MAR = SP = SP-1, rd H = TOS MDR = TOS = MDR + H; wr; goto Main1 MAR = SP = SP-1, rd TOS = MDR; goto Main1 MAR = SP = SP+1 PC = PC+1; fetch; MDR = TOS = MBR; wr; goto Main1 H = LV MAR = MBRU+H; rd MAR = SP = SP+1 PC = PC+1; fetch; wr; TOS = MDR; goto Main1 MAR = SP = SP-1; rd OPC = TOS TOS = MDR N = OPC; if(N) goto T; else goto F; Komentar Pročitaj predzanju riječ sa stoga H = vrh stoga Zbroji i upiši rezultat na vrh stoga Pročitaj predzanju riječ sa stoga Pričekaj dok se učita novi sadržaj TOS iz memorije Kopiraj novu riječ u TOS MBR = oktet za stavljanje na stog Uvećaj PC, preuzmi sljedeći operacijski kod Stavi konstantu na stog MBR sadrži indeks, kopiraj LV u H MAR = adresa lokalne varijable za stavljanje na stog SP pokazuje na vrh stoga Uvećaj PC; preuzmi sljedeći operacijski kod i upiši na vrh stoga Ažuriraj TOS Pročitaj predzanju riječ sa stoga Snimi privremeno TOS u OPC Stavi novi vrh stoga u TOS Skoči ako je Z postavljen CPP ? Na početku i kraju svake instrukcije, TOS registar sadrži vrijednost memorijske lokacije na koju pokazuje SP – vrh stoga, jer se time štedi jedan spori pristup memoriji. 41 OPC registar je privremeni registar, npr. za čuvanje adrese operacijskog koda instrukcije za grananje dok se PC ne uveća da bi se pristuplio operandima. Glavna petlja program počinje u retku Main1. Vrijednost PC mora pokazivati na adresu sljedeće instrukcije koja se treba izvesti, a sadržaj instrukcije nalazi se u MBR. Ove mikroinstrukcije obavljaju se za svaku IVM isntrukciju, pa je bitno da su izvode brzo i efikasno. Uzmimo za primjer da MBR registar sadrži vrijednost 0x60, što odgovara mukroinstrukciji IADD. U jednom ciklusu obavljaju se tri operacije: 1. Uvećava se PC (adresa prvog okteta nakon operacijskog koda) 2. Započinje preuzimanje sljedećeg okteta u MBR (operand ili operacijski kod sljedeće instrukcije, ovisno o trenutnoj instrukciji). 3. Obavlja se višestruko grananje na adresu iz registra MBR na početku petlje Main1. Ova adresa je jednaka numeričkoj adresi operacijskog koda koji se trenutno izvršava! U MBR ju je smjestila prethodna mikroinstrukcija. Sada započinje preuzimanje sljedećeg okteta, kako bi on bio raspoloživ na početku treće mikroinstrukcije. Ukoliko MBR sadrži nulu, što odgovara nop instrukciji, sljedeća mikroinstrukcija ima oznaku no1 i preuzima se s lokacije 0. Ta instrukcija nema efekta, pa se programski tok vraća u Main1, gdje se niz ponavlja, ali s novom vrijednošću MBR. Main1 se na nalazi na adresu 0, koja je rezervirana za nop instrukciju. Mikroinstrukcije se povezuju kratkim nizovima korištenjem polja NEXT_ADDRESS. Svaki niz započinje na adresi koja odgovara brojčanoj vrijednosti IVM operacijskog koda, npr. POP započinje na adresi 0x57, ali ostatak ne mora biti na adresama koje slijede. 1. IADD instrukcija izvodi se u sljedećim koracima: 2. TOS već postoji, ali se predzadnja riječ mora dohvatiti iz memorije, te se zbraja s TOS vrijednošću. 3. Dobiveni rezultat stavlja se na stog, odnosno TOS registar. Preuzimanje operanda iz memorije započinje umanjenenjm SP pokazivača za jedinicu i njegovim upisivanjem u MAR. MPC dobiva vrijednost iz polja NEXT_ADDRESS mikroinstrukcije iadd1, što je adresa mikroinstrukcija iadd2. Tokom drugog ciklusa, dok se čeka na učitavanje operanda iz memorije, kopira se gornja riječ stoga iz registra TOS u H, gdje će biti ulaz za operaciju zbrajanja. Na početku trežeg ciklusa (iadd3) MDR sadrži vrijednost dohvaćenu iz memorije. Ona se u ovom ciklusu zbraja s sadržajem registra H, a rezultat upisuje u MDR i TOS. Nakon toga, započinje operacija zapisivanja u memoriju. U ovom ciklusu naredba goto dodjeljuje adresu Main1 registru MPC, čime se proces započinje od početka za sljedeću instrukciju. 3.6. Priručna memorija Rast takta procesora zbog realnih fizičkih ograničenja nije mogao pratiti odgovarajući rast brzine memorije kao elementa koji jako utječe na ukupne performanse računala. Procesor pri pristupu memoriji doživljava dva faktora usporenja: latencija (vrijeme potrebno za dohvat iz memorije) i ograničenje brzine. Većina tehnologija povećavaju brzinu istovremenim povećanjem latencije. Rješenje ovog problema je korištenje priručne memorije. 42 Priručna memorija je brza i mala memorija koja se postavlja između procesora i glavne memorije. Ukoliko se veliki postotak traženih podataka pronađe u priručnoj, umjesto u glavnoj memoriji, utjecaj latencije enormno se umanjuje. Priručna memorija najčešće se razdvaja na dio za podatke i dio za instrukcije (split cache). Time se memorijske operacije za instrukcije i podatke razdvajaju i odvojeno ubrzavaju mnogo više nego kod zajedničke priručne memorije. Druga tehnika poboljšavanja efekta priručne memorije je korištenje više razina priručne memorije: L1 je priručna memorija integrirana u procesoru, a L2 je druga razina priručne memorije koja je veća od L1, ali nije nužno iste brzine i ne mora se nalaziti integrirana u procesor, a podaci i instrukcije ne moraju biti razdvojeni. Organizacija po razinama je inkluzivna, tj. L2 će sadržavati kopiju L1 podataka. Dijelovi glavne memorije koji će se kopirati u priručnu memoriju određuju se na dva jednostavna principa; Velika je vjerojatnost pristupa memorijskim lokacijama: • u blizini lokacija kojima je nedavno pristupano (prostorna lokaliziranost, spatial locality): • memorijskim lokacijama kojima je nedavno pristupano (vremenska lokaliziranost, temporal locality) Lokacije koje zadovoljavaju jedan ili oba uvjeta kandidati su za kopiranje u priručnu memoriju, a brisanje iz priručne memorije bazira se najčešće ukoliko duže vremena nije ispunjen uvjet vremenske lokaliziranosti. Sve priručne memorije organizirane su na sličan način: glavna memorija promatra se kao skup blokova fiksne veličine, a priručna memorija organizirana je po linijama čija je duljina jednaka veličini bloka radne memorije, što je 4 – 64 okteta. Linije se numeriraju počevši od 0. Kada procesor pristupa memoriji, najprije se provjeri da li se traženi podatak nalazi u priručnoj memoriji. Ukoliko se nalazi dohvat se obavlja iz nje, što je mnogo brže od dohvata iz glavne memorije (pogodak, cache hit). Ukoliko nije (promašaj, cache miss), jedna od linija će se brisati, a u nju će se kopirati blok iz glavne (ili L2 priručne) memorije koji uključuje traženi podatak. Idealan cilj kojem se teži je da svaki traženi podatak procesor pronađe u priručnoj memoriji, odnosno da je broj promašaja nula. Tada bi procesor memoriji pristupao na brzini L1 cache memorije, a ne na brzini stvarne memorije. Direktno preslikana priručna memorija Ovo je najjednostavniji model priručne memorije: Slika 3.6: Primjer organizacije direktno preslikane priručne memorije i razdvajanje memorijske lokacije 43 Primjer priručne memorije sadrži 2048 linija, svaka veličine 32 okteta, dakle ukupno 64 kB. Svaka linija sadrži osim podataka i dva parametra: • Valid bit označuje da li je linija prazna ili sadrži podatke; • Tag polje sadrži 16-bitnu oznaku memorijske lokacija koja je kopirana u priručnu memoriju. Mapiranje memorijskih blokova u linije priručne memorije obavlja se algoritmom direktnog preslikavanja ili set-asocijativnim preslikavanjem. 3.6.1. Direktno preslikana priručna memorija Direktno preslikavanje radi na jednostavnom principu: memorijska lokacija može se kopirati samo u točno određenu liniju priručne memorije, pa je pretraživanje brzo i jedostavno, što je glavna prednost ovog pristupa. Kod kopiranja iz memorije, adresa lokacije dijeli se u četiri dijela: • Tag dio upisuje se u tag parametar priručne memorije. • Line dio određuje liniju gdje će se podaci kopirati. • Word dio riječ unutar linije. • Byte dio označava oktet unutar riječi ukoliko se sprema samo jedan oktet. Kada CPU pristupa memoriji, podatak se najprije pokušava pronaći u priručnoj memoriji: izdvoji se 11 bita iz tražene adrese, i pretraži odgovarajuća linija priručne memorije. Ukoliko ta linije nije prazna, uspoređuju se tag vrijednosti. Ukoliko se podudaraju, imamo pogodak, inače se radi o promašaju. Dohvaća se samo dio podataka koji procesor traži. U slučaju promašaja, linija kojoj se pristupalo se zamjenjuje traženim sadržajem iz memorije. Kod izmjena sadržaja linije, njen sadržaj se kopira u glavnu memoriju. Mana ovog pristupa je ograničenost memorijskih lokacija koje je moguće kopirati u priručnu memoriju: dvije memorijske lokacije koje imaju isti LINE dio adrese ne mogu se kopirati u priručnu memoriju. U našem slučaju te se lokacije razlikuju za n*64k. Ukoliko procesor pristupa dvjema takvim lokacijama, njih će se dvije izmjenjivati u istoj liniji nakon svakog pristupa memoriji i rezultat će biti mnogo sporiji nego bez korištenja priručne memorije. 3.6.2. Set-asocijativna priručna memorija Rješenje problema učestalog izmjenjivanja istih dijelova memorije u jednog liniji priručne memorije je u dozvoljavanju da se određeni blok memorije kopira u jednu od n linija priručne memorije. Najčešće varijante su n=2 ili n=4 (2-way, 4-way set-associative cache): 44 Slika 3.7.: Set-asocijativna memorija n=4 S obzirom da se linija ne može odrediti izravno iz adrese, već je potrebno pretraživanje 2 ili 4 linije performanse su nešto lošije nego kod direktno preslikane varijante, ali se izbjegavaju njena druga ograničenja. Kod promašaja, briše se jedan zapis linije iz seta, i to onaj kojem najdulje nije pristupano, stoga je potrebno voditi računa o svakom pristupu memoriji. 45 4. Razina arhitekture skupa instrukcija Razina arhitekture skupa instrukcija nalazi se između razine mikroinstrukcija i razine operativnog sustava računala, i do uvođenja razine operativnog sustava bila je jedina razina. ISA razina određuje vezu hardvera i softvera i predstavlja najnižu razina računala kojoj je moguće programski pristupiti. Programi pisani na različitim jezicima visoke razine svi se prevode na razinu ISA instrukcija. S druge strane, procesor mora izvršavati samo ISA instrukcije. Ispravno prevođenje na ISA jezik zahtijeva definiranje parametara ISA razine: svih instrukcija, svih memorijskih modela, svih registara i svih tipova podataka. 4.1. Tipovi instrukcija ISA instrukcije mogu se podijeliti u logičke grupe koje postoje na svakom procesoru. 4.1.1. Instrukcije za premještanje podataka Ove instrukcije su osnovne instrukcije svakog procesora. S obzirom da postoje dva područja koja pohranjuju podatke tijekom izvođenja programa (registri i glavna memorija), moguće se ukupno četiri grupe ovakvih instrukcije: LOAD – učitava iz memorije u registar STORE – sprema sadržaj registra u memoriju MOVE – kopira podataka s jedne na drugu memorijsku lokaciju Pojedine grupe sadrže više različitih instrukcije, ovisno o podržanom modelu adresiranja. 4.1.2. Binarne operacije Binarne operacije uzimaju dva argumenta, pa ovdje spada većina aritmetičkih operacija, većina logičkih i instrukcija binarnih pomaka. 4.1.3. Unarne operacije Unarne operacije uzimaju jedan argument (inkrement, dekrement, inverzija, itd). 4.1.4. Instrukcije usporedbe i uvjetnog grananja Instrukcije usporedbe realizirane su redovito kao oduzimanje, a rezultatom se smatra 0, pozitivna ili negativna vrijednost, koja se upisuje u statusni registar procesora. Instrukcije skoka mogu biti bezuvjetne, kada se skok unutar programske memorije promjenom vrijednosti PC registra izvodi bezuvjetno, ili uvjetne, kada se prije instrukcije uvjetnog skoka izvodi instrukcije usporedbe ili druga aritmetička operacija, koja postavlja vrijednost statusnog registra. Bitno je imati u vidu da svaka aritmetička ili instrukcija usporedbe postavlja vrijednost statusnog registra, te instrukcija uvjetnog skoka morati slijediti neposredno nakon instrukcije koja određuje uvjet. 4.1.5. Instrukcije za pozivanje procedura Procedura je skupina instrukcija koja čini smislenu logičku cjelinu. Završetak procedure mora omogućiti nastavak procedure pozivatelja na liniji koja slijedi neposredno nakon poziva procedure. 46 Kako bi se omogućilo ulančeno pozivanje funkcija, povratna adresa sprema se na stog, koja se u zadnjoj instrukciji procedure skida sa stoga i upisuje u PC registar. 4.2. Registri Sva računala imaju definiran skup registara koji su dostupni na ISA razini, upravljaju izvršavanjem programa, i čuvaju privremene rezultate. Skup registara opisan na razini mikroarhitekture čini podskup registara vidljiv na ISA razini, jer mikroarhitektura implementira ISA skup i vidi sve ISA registra, dok na razini mikroarhitekture postoje i registri specifični samo za nju (npr. TOS i MAR) koji nisu vidljivi ISA razini. Registri ISA razine dijele se u dvije skupine: Registri opće namjene pohranjuju lokalne varijable i međurezultate proračuna, kako bi se elminirao česti spori pristup glavnoj memoriji. RISC računala po pravilu imaju minimalno 32 registra, a trend stalnog povećanja broja registara je prisutan. Registri opće namjene su najčešće potpuno simetrični i međusobno zamjenjivi, tj. pri pisanju korisničkih programa, programer (prevodioc) ima potpunu slobodu odabrati proizvoljno registre koji će se korsititi. Registri specijalne namjene imaju predefiniranu ulogu (npr. SP, PC) i njih se ne može korsititi kao lokalne varijable. Neki od ovih registara pokrivaju strogo specifičnu namjenu procesora (npr. rukovanje cache memorijom), pa programeri (prevodioci) korisničkih programa ih uopće nisu svjesni, jer ih koristi procesor sam ili u operativni sustav računala. Registar specifične namjene je statusni registar (status register) koji ima niz bitova, svaki specifičnog značenja. Neki od bitova izražavaju stanje prethodno izvršene ALU instrukcije: • N – postavlja se ukoliko je ALU generirao negativan (negative) rezultat • Z – postavlja se ukoliko je ALU generirao rezultat nula (zero) • V – postavlja se ukoliko je ALU generirao pretek (oVerflow) sa MSB bita • C – postavlja se ukoliko je ALU generirao pretek (Carry) na MSB bit Ovi bitovi su pristutni u svim procesorima, jer su osnova za realizaciju ispitivanja uvjeta i skokova u programu. Osim toga, statusni registar može sadržavati i niz drugih statusnih bitova za specifične parametere pojedinog procesora. 4.3. Adresiranje Adresiranje omogućuje pristup instrukcija operandima. 4.3.1. Neposredno adresiranje Kod neposrednog adresiranja operand se zadaje unutar instrukcije (immediate adressing) zajedno s instrukcijom, npr. ldi R1, 4 učitava konstantu u registar koji je zadana unutar instrukcije. Prednost neposrednog adresiranja je izbjegavanje dodatnog pristupa memoriji, a mana je mogućnost zadavanja samo konstranti. 47 4.3.2. Direktno adresiranje Direktno adresiranje (direct addressing) koristi adresu memorijske lokacije unutar instrukcije. Mana ovakog pristupa je mogućnost pristupa isključivo zadanoj memorijskoj lokaciji (globalna varijabla) 4.3.3. Registarsko adresiranje Registarsko adresiranje identično je direktnom adresiranju, osim što se ne zadaje memorijska lokacija, već registar unutar procesora. Većina prevodioca nastoji što više varijabli prekopirati u registre, jer se njima najbrže pristupa. Većina arhitektura stoga nastoji sve instrukcije organičiti na pristup registrima, a komuniciju s memorijom rade isključivo load i store instrukcije. 4.3.4. Indirektno registarsko adresiranje Ovaj mod adresiranja koristi se kod pristupa memoriji, ali adresa memorijske lokacije nije zadana unutar instrukcije, nego se nalazi unutar jednog od registara, pa se naziva pokazivač (pointer). Ovaj način adresiranja omogućuje slobodan pristup memoriji, posebno nizovima podataka unutar memorije. 4.3.5. Indeksno adresiranje Indeksno adresiranje koristi se isključivo kod pristupa varijablama na stogu. Adresa memorijske lokacije zadaje se kao indeks koji se pridodaje vrijednost LV registra. Kako se LV registar postavlja kod svakog poziva funkcije, korištenjem indeksnoga adresiranja moguće je pristupiti svakoj (lokalnoj) varijabli na stogu. 4.3.6. Bazno-indeksno adresiranje Bazno-indeksno adresiranje izračunava adresu iz dva parametra: bazne adrese i pomaka. Vrijednost pomaka može se mijenjati, a konačna adrese je suma dva parametra. 4.4. Tipovi podataka 4.4.1. Realni brojevi u formatu pomičnog zareza Eksponencijalni zapis brojeva, koji se koristi u svim inženjerskim tehnikama, u računalima se koristi kroz tehnologiju realnih brojeva u formatu pomičnog zareza. Općeniti zapis eksponencijalnog zapisa je u formatu: n = f × 10e gdje f označava razlomak (mantisu), a e je pozitivnai ili negativni eksponent. U format pomičnog zareza ovaj prikaz bi bio: 3,14 = 0,000001 = 0,314 0,1 × 101 × 10 −5 = = 3,14 1,0 × 10 0 × 10 −6 1941 = 0,1941 × 10 4 = 1,941 × 103 Opseg je efektivno određen brojem znamenki eksponenta, a točnost brojem znamenki mantise. Kako se isti broj može prikazati na nekoliko različitih načina. 48 Primjerice, uzmimo broj R, s mantisom od tri znamenke u rasponu [-1, +1], uključujući nulu, i eksponentom u rasponu [-99, +99]., što čini skoro 199 redova veličine, zapisivih s pet znamenki i dva znaka. Slika 4.1.: Raspon vrijednosti broja R U primjeru možemo razlikovati ukupno 7 raspona vrijednosti, uključujući nulu kao raspon 5: • Rasponi 1 i 7 su preveliki pozitivni ili negativni brojevi (overflow error) • Rasponi 2 i 6 su regularne vrijednosti • Rasponi 3 i 5 su premali pozitivni ili negativni brojevi (underflow errror) Rasponi 3 i 5 predstavljaju manji problem od raspona 1 i 7, jer se jako male vrijednosti mogu često aproksimirati nulom. Brojevi u formatu pomičnog zareza ne mogu formirati kontinuitet, pa su samo aproksimacija realnog skupa brojeva, pa je nužno zaokruživanje, koje raste s apsolutnom vrijednošću broja, što je prikazano točkama u područjima 2 i 6. Efikasnost formata pomičnog zareza povećava se normalizacijom: Ukoliko je krajnja lijeva znamenka nula, ona se eliminira, sve znamenke se pomiču u lijevo za jedno mjesto, a eksponent smanjuje za 1. Danas standardizirani zapis je IEEE 754 iz 1985 godine. Definirani su tri fomata: obična točnost (32 bita), dvostruka točnost (64 bita) i proširena točnost (80 bita). Slika 4.2.: Formati obične i dvostruke točnosti brojeva u sustavu pomičnog zareza Oba formata započinju bitom predznaka po sustavu drugog komplementa. Eksponent se zapisuje dodavanjem fiksne vrijednosti 127 ili 1023 iznosu predznaka, kako bi iznos eksponenta uvijek bio pozitivan, pa je zapisivanje eksponenta jednostavnije i efikasnije. Normalizirana mantisa započinje s binarnom točkom, iza koje slijedi bit 1 mantise. Normalizacijom se svaki broj dovodi u oblik u kojem je MSB bit jedinica, pa se ona podrazumijeva i ne zapisuje. Primjerice, ako su svi bitovi mantise i eksponenta 0, to odgovara vrijednosti 1. Svi bitovi mantise u jedinici odgovaraju njenoj vrijednosti nešto manjoj od 2. KOmbinacija podrazumijevanog bita 1, podrazumijevane binarne točke i 23 ili 52 zadana bita naziva se stoga ispravno signifikantom, jer je značajno izmjenjen u odnosu na originalni pojam mantise. Primjerice, broj 0,15625 u formatu obične točnosti, bio bi prikazan kao: 49 v = (−1)predznak ∗ 1.[signifikan t]∗ 2eksponent −127 1 v = 0.15625 = 1.2510 ∗ = 1{.012 ∗ 2−3 8 x + 0 31 0 1 Eksponent (124 ~ -3) 1 1 1 1 0 0 0 23 22 1 0 0 0 0 0 0 Signifikant (0,25 = 0∙2-1+1∙2-2) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Figure 4.1.: Primjer kodiranja po IEEE 754 standardu 50
© Copyright 2024 Paperzz