1.17k likes | 1.3k Views
Organizacija ulaza i izlaza. Vladimir Filipov i ć vladaf@matf.bg.ac.yu. Organizacija ulaza i izlaza.
E N D
Organizacijaulaza i izlaza VladimirFilipović vladaf@matf.bg.ac.yu
Mikroračunari Organizacija ulaza i izlaza Jedna od osnovnih karakteristika računara je njegova sposobnost da razmenjuje podatke sa drugim uređajima. Ta sposobnost omogućuje čoveku-operatoru da koristi tastaturu i ekran radi procesiranja teksta i grafike. Ljudi intenzivno koriste računare radi komunikacije sa drugim računarima preko Interneta i radi dobijanja informacija odasvud sa Zemljine kugle. U drugim aplikacijama, računari su manje vidljivi, ali takođe jako značajni: predstavljaju integralni deo kućnih primena, opreme za proizvodnju, transportne sisteme, bankarskih i POS terminala. U takvim aplikacijama, ulaz u računar može doći od senzorskog prekidača, digitalne kamere, mikrofona itd. Izlaz može biti zvučni signal koji se šalje zvučniku, ili digitalno enkodirana komanda da se promeni brzina motora, da se pomeri robot itd. Ovde će se detaljno razmotriti različiti načini na koje se izvršavaju U/I operacije.
Mikroračunari Pristup U/I uređajima Sledeći dijagram prikazuje povezivanje U/I uređaja na računar korišćenjem jedinstvene magistrale. Obično se magistrala sastoji od tri skupa linija, koje se koriste za prenos adresa, podataka i kontrolnih signala. Svakom U/I uređaju se dodeljuje jednoznačan skup adresa. Kada procesor postavi konkretnu adresu na adresne linije, uređaj koji prepozna tu adresu odgovori na komandu koja je prosleđena kroz kontrolne linije. Procesor zahteva bilo operaciju čitanja, bilo upisa, pa se zahtevani podaci prenose kroz linje za podatke.
Mikroračunari Pristup U/I uređajima Kada U/I uređaji i memorija dele isti adresni prostor, takva organizacija se naziva memorijski mapiran U/I. Kod memorijski mapiranog U/I, ma koja mašinska instrukcija koja može pristupiti memoriji može biti korišćena za prenos podataka do/od U/I uređaja. Na primer, ako je DATAIN adresa ulaznog bafera koji je pridružen tastaturi, tada instrukcija Move DATAIN, R0 čita podatke iz DATAIN i smešta ih u registar R0. Na sličan način, instrukcija Move R0, DATAOUT prosleđuje sadržaj registra R0 ka lokaciji DATAOUT, koja može biti izlazni bafer podataka za ekran ili štampač. Najveći broj računara koristi memorijski mapiran U/I. Neki procesori imaju i specijalne In i Out instrukcije za izvršenje U/I transfera. Jedna od prednosti odvojenog U/I adresnog prostora je ta što tada U/I uređaji rade sa manjim brojem adresnih linija. Odvojeni U/I adresni prostor ne znači da U/I adresne linije moraju biti fizički različite od memorijskih adresnih linija. Naime, specijalan signal na magistrali ukazuje da se zahtev za transfer čitanja ili upisa odnosi na U/I operaciju i tada memorija ignoriše postavljeni zahtev.
Mikroračunari Pristup U/I uređajima Sledeći dijagram ilustruje koji je hardver neophodan da bi se U/I uređaj povezao na magistralu.
Mikroračunari Pristup U/I uređajima • Uočavaju se sledeći elementi: • Adresni dekoder obezbeđuje da uređaj prepozna svoju adresu kada se ta adresa pojavi na adresnim linijama. • Registar podataka čuva podatke koji se prenose prema procesoru ili od njega. • Statusni registar sadrži informacije koje su relevantne za operaciju U/I uređaja. • Registar podataka i status registar su povezani na magistralu podataka i njima su dodeljene jednoznačne adrese. Adresni dekoder, registar podataka i statusni registar, kao i kontrolna kola za koordinaciju U/I prenosa zajedno obrazuju interfejs U/I uređaja. • U/I uređaji rade na brzinama mnogo nižim od brzine procesora. Za vreme dok čovek-operator kuca znake na tastaturi, procesor može izvršiti na milione instrukcija između različitih otkucaja. • Instrukcija koja čita znak sa tastature treba da se izvrši samo kada je znak dostupan u ulaznom baferu interfejsa tastature. Takođe, mora se voditi računa o tome da se ulazni znak tačno jednom čita.
Mikroračunari Pristup U/I uređajima Osnovna ideja je opisana ranije: za ulazni uređaj kao što je tastatura, statusni fleg SIN se pojavljuje kao deo statusnog registra interfejsa U/I uređaja. Ovaj fleg se postavlja na 1 kad god se unese znak sa tastature, a briše na 0 kad procesor pročita taj znak. Stoga, proverom SIN flega, softver može obezbediti da uvek čita validne podatke. Sledeći dijagram prikazuje registre koji se koriste kod operacija prenosa podataka.
Mikroračunari Pristup U/I uređajima Program koji čita liniju sa tastature, smešta je u memorijski bafer i prikazuje je na ekranu.
Mikroračunari Pristup U/I uređajima Prethodni program je ilustracija tzv. programski kontrolisanog U/I, u kome procesor ponavlja proveru statusnog indikatora kako bi postigao zahtevanu sinhronizaciju između procesora i U/I uređaja. Ovakav vid komunikacije se još naziva i prozivanje. Pored ovog, postoje još dva uobičajena mehanizma za implementiranje U/I operacija: prekidi i direktan pristup memoriji. U slučaju prekida, sinhronizacija se postiže tako što U/I uređaj šalje specijalni signal preko magistrale kad god je taj uređaj spreman za prenos podataka. Direktan pristup memoriji je tehnika koja se koristi za veoma brze U/I uređaje. Ona uključuje da interfejs uređaja direktno prenosi podatke prema memoriji ili iz memorije, bez potrebe da procesor bude neprekidno uključen u taj proces.
Mikroračunari Prekidi Prilikom prozivanja procesor provodi vreme u petlji kojom proverava dostupnost U/I uređaja. U načinu komunikacije pomoću prekida, može se podesiti U/I uređaj da upozori procesor da je on slobodan. To se postiže tako što se procesoru šalje hardverski signal, nazvanog prekid. Obično je bar jedna linija u kontrolnoj magistrali, nazvana linija za zahtev za prekidom, posvećena realizaciji ovog zadatka. Na taj način, više se ne zahteva od procesora da neprekidno proverava status spoljašnjih uređaja, on može u periodu čekanja da uređaj postane dostupan (umesto da u petlji proverava raspoloživost uređaja) realizovati neke korisne operacije.
Mikroračunari Prekidi Primer. Razmotrimo zadatak koji zahteva izvršenje nekih izračunavanja i štampu rezultata na štampaču. Potom slede dalja izračunavanja i štampa, itd. Neka se program sastoji od dve rutine, COMPUTE i PRINT. Pretpostavimo da COMPUTE proizvodi n linija izlaza, koje treba prikazati korišćenjem rutine PRINT. Prenos kontrole korišćenjem prekida
Mikroračunari Prekidi Trebamo uočiti da, kao deo rukovanja prekidima, procesor mora informisati uređaj da je zahtev od tog uređaja prepoznat, pa da taj uređaj može da ukloni svoj signal za zahtev za prekidom. To se može postići pomoću specijalnog kontrolnog signala magistrale, obično nazvanog signal za potvrdu prekida. Alternativa tom pristupu, koja se često pojavljuje je da sam prenos podataka između procesora i interfejsa U/I uređaja služi za tu svrhu – da izvršavanje instrukcija rutine za opsluživanje prekida, koje pristupa statusnom registru i registru podataka interfejsa, implicitno informiše uređaj da je njegov prekid prepoznat. Na prvi pogled, tretiranje prekida se ne razlikuje mnogo od tretiranja potprograma. Međutim, postoji važna razlika: dok potprogram izvršava funkciju koju je zahtevao program koji ju je pozvao, rutina za opsluživanje prekida ne mora da ima ništa zajednički sa programom koji se izvršava u trenutku prihvatanja zahteva za prekid. Stoga, pre početka izvršavanja rutine za opsluživanje prekida, mora da se sačuva ma koja informacija koja može biti promenjena tokom izvršavanja te rutine i te sačuvane informacije moraju biti restaurisane pre nego što se nastavi sa izvršavanjem prekinutog programa.
Mikroračunari Prekidi Informacije koje se trebaju sačuvati i restaurisati obično uključuju sadržaje uslovnih flegova i sadržaje svih registara koji su korišćeni od obe strane – i od prekinutog programa i od rutine za opsluživanje prekida. Zadatak čuvanja i restaurisanja informacija se ili izvrši automatski od strane procesora, ili se realizuje izvršavanjem instrukcija programa. Najveći broj modernih procesora čuva samo minimalni broj neophodnih informacija koji je potreban radi očuvanja integriteta izvršavanja programa. Razlog za takav dizajn je to što čuvanje i restaurisanje registara uključuje prenos podataka sa memorijom, koji uvećava ukupno vreme izvršavanja programa. Nadalje, čuvanje registara uvećava interval vremena od trenutka kada je primljen zahtev za prekid do početka izvršavanja rutine za opsluživanje prekida. Ovo kašnjenje se zove prekidno usporenje. U nekim primenama je apsolutno neprihvatljivo da prekidno usporenje bude dugo. Dakle, moderni procesori obično čuvaju samo statusnu reč procesora i brojač instrukcija. Ako ima potrebe da se još nešto čuva, to će se uraditi na početku rutine za opsluživanje prekida, a sačuvane informacije će se restaurisati na njenom kraju.
Mikroračunari Prekidi U nekim ranijim procesorima, naročito onim procesorima koji su imali mali broj registara, svi registri su bili automatski čuvani od strane hardvera procesora kad god je bio prihvatan zahtev za prekid. Sačuvani podaci su bivali restaurisani u odgovarajuće registre prilikom izvršenja instrukcije za povratak iz prekida. Neki računari sadrže dve vrste prekida – prva vrsta prekida čuva sve registre, a druga vrsta ne. U takvoj situaciji, konkretni U/I uređaj može koristiti bilo koju od ove dve vrste prekida, zavisno od zahteva za vreme odgovora. Još jedan interesantan pristup je obezbeđivanje dupliranog skupa registara. U tom slučaju, različiti skupovi registara može biti korišćen od strane rutine za opsluživanje prekida, čime se eliminiše potreba za čuvanjem i restauracijom registara. Prekid nije samo jednostavni mehanizam za koordinisanje U/I prenosa. U opštem slučaju, prekidi obezbeđuju prenos kontrole sa jednog programa na drugi, koji je iniciran događajem koji je spoljašnji za računar. Izvršavanje prekinutog programa se nastavlja po završetku rada rutine za opsluživanje prekida. Pojam prekida se koristi u operativnim sistemima i u mnogim kontrolnim aplikacijama gde izvršavanje određenih rutina mora biti precizno vremenski usaglašeno sa spoljašnjim događajima (aplikacije u realnom vremenu).
Mikroračunari Hardver za prekide Već je istaknuto da U/I uređaju zahtevaju prekid aktiviranjem linije magistrale nazvane zahtev za prekid. Najveći broj računara obično ima više U/I uređaja koji mogu zahtevati prekid. Jedinstvena linija za zahtev za prekid (kao na slici) može biti iskorišćena za opsluživanje n uređaja. Svi uređaji su povezani na tu liniju pomoću prekidača povezanih na uzemljenje. Ekvivalentno kolo za “otvorenu” magistralu koja se koristi za implementaciju zajedničke linije za zahteve za prekid
Mikroračunari Hardver za prekide Da bi neki od uređaja zahtevao prekid, on samo zatvori prekidač koji mu odgovara. Ako su svi zahtevi za prekid INTR1 do INTRn neaktivni, tj. svi prekidači su otvoreni, tada će napon u liniji za zahtev za prekid biti Vdd. Ovo predstavlja neaktivno stanje linije. Kada uređaj zahteva prekid tako što zatvori svoj prekidač, nivo napona pada na 0, što dovodi do toga da signal za zahtev za prekid koji prima procesor, označen sa INTR postane 1. Lako se uočava da je INTR = INTR1 + INTR2 + ... + INTRn Uobičajeno je da se za signalizaciju zahteva za prekid koristi komplementni oblik INTR, zato što je signal zahteva aktivan onda kada je na liniji stanje niskog napona. ____
Mikroračunari Omogućavanje i onemogućavanje prekida Mogućnosti koje obezbeđuje računar moraju dati programeru kompletnu kontrolu nad događajima koji se dešavaju tokom izvršenja programa. Dolazak zahteva za prekid sa spoljašnjeg uređaja dovodi do toga da procesor suspenduje izvršavanje jednog programa i počne sa izvršavanjem nekog drugog. S obzirom da se prekidi mogu pojaviti u ma kom trenutku, oni mogu promeniti sekvencu događaja koju je predvidio programer. Stoga se prekid izvršavanja programa mora pažljivo kontrolisati i poželjno je da računari raspolažu sa fundamentalnom osobinom omogućavanja i onemogućavanja prekida. Postoji mnogo situacija u kojima procesor treba da ignoriše zahteve za prekid. Na primer, u prethodnom primeru sa štampanjem, zahtev za prekid koji potiče od štampača treba da bude prihvaćen samo ako postoje linije teksta koje treba odštampati. Po završetku štampanja poslednje linije u skupu od n linija, prekidi treba da budu onemogućeni sve dok novi skup linija ne postane na raspolaganju za štampanje. Dakle, neki način omogućavanja i onemogućavanja prekida mora biti na raspolaganju programeru. Jednostavan način da se to postigne je obezbeđivanje mašinskih instrukcija za omogućavanje i onemogućavanje prekida.
Mikroračunari Omogućavanje i onemogućavanje prekida • Razmotrimo detaljnije šta se događa prispeća zahteva za prekid od jednog uređaja. Kada uređaj aktivira signal za zahtev za prekid, on “drži” taj signal aktivnim sve dok na sazna da je procesor prihvatio njegov zahtev. Ovo znači da će signal za zahtevanje prekida biti aktivan tokom izvršavanja rutine za opsluživanje prekida, možda sve dok se ne dohvati instrukcija koja pristupa tom uređaju. • Od esencijalnog značaja je da taj aktivni signal za zahtev ne dovede do uzastopnih prekida, koji bi doveli do toga da sistem uđe u beskonačnu petlju iz koje se ne može oporaviti. Postoji nekoliko mehanizama koji rešavaju ovaj problem. • Prva mogućnost je da hardver procesora ignoriše liniju za zahtev za prekidom sve dok se ne završi izvršenje prve instrukcije u rutini za opsluživanje prekida. U tom slučaju, programer može postaviti instrukciju za onemogućavanje prekida na početak rutine za opsluživanje prekida i tako sprečiti dalje prekide sve dok se ne izvrši instrukcija koja omogućuje prekide. Obično je instrukcija koja omogućuje prekide poslednja instrukcija rutine za opsluživanje prekida, koja neposredno prethodi instrukcija za povratak iz rutine za opsluživanje prekida. Procesor mora garantovati da će izvršavanje instrukcije za povratak biti okončano pre dešavanja daljih prekida.
Mikroračunari Omogućavanje i onemogućavanje prekida • Druga mogućnost, koja je pogodna za jednostavnije procesore sa samo jednom linijom za zahtevanje prekida, je da procesor automatski onemogući prekide pre početka izvršavanja rutine za opsluživanje prekida. Pošto se sadržaji registara brojača naredbi i statusnog registra procesora sačuvaju na stek, procesor izvršava operacije koje su ekvivalentne instrukciji za onemogućavanje prekida. Često je slučaj da jedan bit u statusnom registru procesora, nazvan IE (interrupt enable) ukazuje da li je prekid omogućen ili ne. Stoga se operacije ekvivalentne sa onemogućavanjem prekida svode na postavljanje IE bita u statusnom registru procesora na nulu. Kada se izvrši instrukcija povratka iz rutine za opsluživanje prekida, sadržaj statusnog registra procesora se restaurira sa steka, čime IE bit ponovo biva postavljen na 1 i prekidi bivaju omogućeni. • Treća mogućnost je da procesor ima specijalnu liniju za zahtev za prekidom, kroz koju elektronska kola za rukovanje prekidom odgovaraju samo na vodeću ivicu signala. Za takvu liniju se kaže da ima ivicu-okidač. U tom slučaju, procesor će primiti samo jedan zahtev, bez obzira na to koliko je linija aktivirano. Dakle, nema opasnosti od višestrukih prekida niti potrebe da se eksplicitno onemoguće prekidi po toj liniji.
Mikroračunari Omogućavanje i onemogućavanje prekida • Pre razmatranja složenijih aspekata prekida, sumirajmo sekvencu događaja koji su uključeni u rukovanje zahtevom za prekid koji je stigao od datog uređaja. • Ako pretpostavimo da su prekidi omogućeni, scenario rada je sledeći: • Uređaj podiže zahtev za prekidom. • Procesor prekida program koji trenutno izvršava. • Prekidi bivaju onemogućeni promenom kontrolnog bita u PS (osim u slučaju prekida sa ivicom-okidačem). • Uređaj se informiše da je zahtev prepoznat i on, kao odgovor, deaktivira signal zahteva za prekid. • Akcija koju zahteva prekid se izvršava izvršenjem rutine za opsluživanje prekida. • Prekidi bivaju omogućeni i nastavlja se izvršavanje prekinutog programa.
Mikroračunari Rukovanje sa više uređaja • Razmotrimo situaciju u kojoj je veći broj uređaja koji su sposobni da iniciraju prekide povezan na procesor. • Kako su ti uređaji operativno nezavisni, nema jasnog redosleda po kome će oni generisati prekide. Stoga se javljaju sledeća pitanja: • Kako će procesor prepoznati koji je uređaj zahtevati prekid? • S obzirom da će različiti uređaji verovatno zahtevati različite rutine za opsluživanje prekida, kako će procesor da dobije početnu adresu odgovarajuće rutine u svakom od slučajeva? • Da li treba dopustiti da uređaj prekine procesor u trenutku dok se opslužuje neki drugi prekid? • Kako će se rukovati sa dva ili više simultanih zahteva za prekid? • Kada prispe zahtev kroz zajedničku liniju za zahteve za prekid, potrebne su dodatne informacije kako bi se identifikovalo koji je konkretan uređaj aktivirao liniju. Nadalje, ako dva uređaja istovremeno aktiviraju liniju, mora biti omogućeno da se razdvoji veza i da se izabere jedan od ta dva uređaja čiji će zahtev biti opslužen. • Statusni registar uređaja sadrži informaciju koje je potrebna za određivanje da li je taj uređaj zahtevao prekid. Naime, kada uređaj podigne zahtev za prekid, on postavlja 1 u jednom bitu (tzv IRQ bitu) svog statusnog registra.
Mikroračunari Rukovanje sa više uređaja Najprostiji način za identifikaciju prekidajućeg uređaja je da rutina za opsluživanje prekida “proziva” sve U/I uređaje koji su povezani na magistralu. Prvi uređaj koji sa nađe prilikom prozivanja sa postavljenim IRQ bitom će biti onaj uređaj čiji se zahtev za prekidom opslužuje. Sada se odgovarajući potprogram poziva kako bi se obezbedila zahtevana usluga. Šema prozivanja se lako implementira. Njen glavni nedostatak je vreme koje se troši pri ispitivanju IRQ bitova svih uređaja koji možda nisu zahtevali opsluživanje. Da bi se smanjilo vreme potrošeno u procesu prozivanja, može se ustanoviti shema u kojoj se uređaj koji zahteva prekid direktno predstavlja procesoru. U tom slučaju, procesor odmah može da počne sa izvršavanjem odgovarajuće rutine za opsluživanje prekida. Sheme rukovanja prekidima koje su zasnovane na ovom principu obično se označavaju kao vektorski prekidi. Uređaj koji zahteva prekid može da se identifikuje slanjem specijalnog koda procesoru, preko magistrale. Ovim je omogućeno procesoru da identifikuje pojedinačne uređaje čak i u slučaju kada oni dele jedinstvenu liniju za zahteva za prekid. Kod (obično dužine 4-8 bitova) koji uređaj prosleđuje procesoru može predstavljati informaciju o početnoj adresi rutine za opsluživanje prekida za taj uređaj. Ostatak informacije o adresi rutine daje procesor.
Mikroračunari Rukovanje sa više uređaja Ovakva shema implicira da rutina za opsluživanje prekida za dati uređaj mora uvek počinjati od iste lokacije. Programer može dobiti određenu fleksibilnost ako u tu lokaciju smesti naredbu koja dovodi do skoka na odgovarajuću rutinu. Kod velikog broja računara se to radi automatski pomoću mehanizma za rukovanje prekidima. Lokacija na koju ukazuje uređaj koji je zahtevao prekid se koristi za smeštaj početne adrese rutine za opsluživanje prekida. Procesor pročita tu adresu, nazvanu vektor prekida, pa je učita u brojač naredbi. Vektor prekida još može sadržati i novu vrednost za statusni registar procesora. Kod najvećeg broja računara, U/I uređaji šalju kod vektora prekida kroz magistralu podataka, koristeći kontrolne signale magistrale kako bi obezbedili da se uređaji međusobno ne preklapaju pri komunikaciji. Kada uređaj pošalje zahtev za prekid, procesor možda neće biti spreman da odmah primi kod vektora prekida. Uređaj koji prekida mora da čeka kako bi smestio podatke u magistralu tek onda kada je procesor spreman da ih primi. Kada je procesor spreman da primi kod vektora prekida, on aktivira liniju za potvrdu prekida INTA (interrupt acknowledge). Tada U/I uređaj odgovara slanjem svog koda vektora prekida i isključivanjem signala INTR.
Mikroračunari Rukovanje sa više uređaja Već je sugerisano da tokom izvršavanja rutine za opsluživanje prekida treba onemogućiti prekide, kako bi se obezbedilo da zahtev od jednog uređaja ne dovede do više od jednog prekida. Ista logika se koristi i kada je više uređaja u pitanju, pa i tu izvršavanje konkretne rutine za opsluživanje prekida, kada jednom otpočne, uvek biva nastavljeno do završetka pre nego što procesor prihvati zahtev za prekid od nekog drugog uređaja. Rutine za opsluživanje prekida su obično kratke i kašnjenje koje one prouzrokuju je prihvatljivo za najveći broj jednostavnih uređaja. Međutim, za neke uređaje, veliko kašnjenje koje se javlja kao odgovor na zahtev za prekid može dovesti do grešaka. Razmotrimo, na primer, računar koji prati vreme korišćenjem časovnika. Tada je časovnik uređaj koji procesoru šalje zahteve za prekid u regularnim vremenskim intervalima. Za svaki od ovih zahteva, procesor izvršava kratku rutinu za opsluživanje prekida koja ažurira skup brojača u memoriji. Da bi sistem korektno radio, potrebno je da kašnjenje usled odgovora na zahtev za prekidom koji dolazi od časovnika bude malo u odnosu na interval između dva uzastopna zahteva. Da bi se obezbedilo da ovaj zahtev bude zadovoljen u prisustvu drugih uređaja koji zahtevaju prekid, može biti neophodno da se prihvati zahtev za prekid od časovnika čak i tokom izvršenja rutine za opsluživanje prekida koja je potekla od drugog uređaja.
Mikroračunari Rukovanje sa više uređaja Prethodni primer sugeriše da U/I uređaji treba da budu organizovani u strukturu sa prioritetima. Zahtev za prekid od uređaja visokog prioriteta treba da bude prihvaćen i dok procesor opslužuje neki drugi zahtev od uređaja nižeg prioriteta. Da bi se implementirala organizacija sa više nivoa prioriteta, možemo dodeliti nivo prioriteta procesoru i taj nivo prioriteta može biti programski menjan. Nivo prioriteta procesora je, u stvari, nivo prioriteta programa koji se trenutno izvršava. Procesor prihvata prekide samo od onih uređaja sa prioritetima koji su veći od njegovog trenutnog. Prioritet procesora je obično kodiran sa nekoliko bitova statusne reči procesora. Taj prioritet može biti promenjen korišćenjem instrukcija programa koje upisuju u statusni registar. Te instrukcije se nazivaju privilegovane instrukcije i one se mogu izvršavati samo dok je procesor u nadzorničkom modu. Procesor je u nadzorničkom modu samo kada izvršava rutine operativnog sistema. Na ovaj način, korisnikov program ne može ni slučajno ni namerno promeniti prioritet procesora i prekinuti sistemske operacije. Pokušaj da se izvrši privilegovana instrukcija dok se u korisničkom modu dovodi do specijalnog tipa prekida koji se naziva izuzetak privilegije.
Mikroračunari Rukovanje sa više uređaja Shema sa višestrukim prioritetima može da bude lako implementirana korišćenjem odvojenih linija za zahtev za prekid i linija za potvrdu prekida za svaki od uređaja, kao što je i prikazano na dijagramu. Svakoj od linija za zahtev za prekid je dodeljen drugi nivo prioriteta. Zahtevi za prekid koji se primaju preko ovih linija se šalju elektronskim kolima za arbitražu prioriteta kod procesora. Zahtev biva prihvaćen samo ako ima viši nivo prioriteta od zadatka koji je trenutno dodeljen procesoru. Implementacija prioriteta prekida korišćenjem individualnih linija za zahtev za prekid i linije za potvrđivanje
Mikroračunari Rukovanje sa više uređaja Razmotrimo sada problem simultanog prispeća zahteva za prekid od dva ili više uređaja. Procesor mora da ima neki mehanizam za odlučivanje ko će biti prvi opslužen. Kod sheme prozivanja i kod sheme sa prioritetima, odgovor na ovo pitanje je jednostavan. Kada se koriste vektorski prekidi mora se obezbediti da samo jedan uređaj bude izabran za slanje svog koda vektora prekida. Često se koristi shema povezivanja uređaja ulančavanjem, kao što je prikazano na slici. Šeme za prioritet prekida
Mikroračunari Rukovanje sa više uređaja ____ Linija za zahtev za prekid, označena sa INTR, je zajednička za sve uređaje. Linija za potvrđivanje prekida INTA je povezana na ulančani način, tako da INTA signal serijski propagira kroz uređaje. Kada uvezani uređaju podignu zahtev za prekid i aktivira se linija INTR, procesor odgovori postavljanjem INTA linije na 1. Taj signal biva primljen od uređaja 1. Uređaj 1 prosleđuje signal uređaju 2 samo ako on nije zahtevao nikakav prekid. Ako je uređaj 1 zahtevao prekid, tada on blokira INTA signal i nastavi sa postavljanjem koda vektora prekida u magistralu podataka. Kao što vidimo, u ovakvom podešavanju uređaj koji je elektronski najbliži procesoru ima najveći prioritet, itd. Ovakva shema zahteva mnogo manje veza nego što je to slučaj sa njenim prethodnikom. Prednost prethodnika tj. prioritetne sheme sa individualnim linijama je ta što ona dopušta procesoru da prihvati zahteve od pojedinih uređaja, a da ignoriše druge – zavisno od prioriteta. Prethodne dve sheme mogu da se kombinuju i da tako oforme opštiju strukturu, koja je prikazana na sledećem slajdu. Tu su uređaju organizovani u grupe i svaka grupa je povezana na drugom nivou prioriteta. Unutar grupe, uređaji su povezani na ulančani način. Takva organizacija se koristi u velikom broju računarskih sistema. ____
Mikroračunari Rukovanje sa više uređaja Šeme za prioritet prekida
Mikroračunari Kontrola zahteva uređaja Veoma je važno da se obezbedi da zahtevi za prekid generišu samo oni uređaji koji se koriste od strane datog programa. Stoga nam je potreban mehanizam kod elektronskih kola interfejsa koji kontroliše da li uređaju dopušteno da generiše zahtev za prekid. To se obično postiže pomoću bita za omogućavanje prekida u elektronskim kolima interfejsa uređaja. Tako na primer, flegovi KEN i DEN u registrima CONTROL prvog dijagrama izvršavaju baš tu funkciju. Dakle, postoje dva nezavisna mehanizma za kontrolu zahteva za prekid. Na kraju uređaja bit omogućavanja prekida u kontrolnom registru. Na kraju procesora, bilo bit za obezbeđivanje prekida u statusnom registru procesora, bilo struktura prioriteta određuju da li će dati zahtev za prekid biti prihvaćen.
Mikroračunari Kontrola zahteva uređaja Korišćenje prekida za čitanje linije znakova sa tastature kroz registre
Mikroračunari Izuzeci • Mehanizam prekida se, pored realizacije U/I operacija, koristi i u većem broju drugih situacija. • Termin izuzetak se često koristi za oznaku ma kog događaja koji je doveo do prekida. Stoga, U/I operacije predstavljaju samo jedan primer izuzetaka. • Pored njih, postoje i druge vrste izuzetaka: • Oporavak od greške – kada procesor sam prekine progak ukoliko detektuje grešku ili neobičan uslov. • Debagiranje – kada procesor radi u modu traga, izuzetak se dešava po izvršenju svake instrukcije, a program za debagiranje predstavlja rutinu za opsluživanje prekida. Tačke loma predstavljaju sličnu osobinu i tu se program prekida samo na specifičnim tačkama koje je izabrao korisnik • Izuzetak privilegije – do njega dolazi kada procesor pokušava da izvrši privilegovanu instrukciju dok radi u korisničkom modu.
Mikroračunari Korišćenje prekida kod operativnih sistema Operativni sistem(OS) je odgovoran za koordinaciju svih aktivnostiu računaru. OS veoma intenzivno koristi prekide radi izvršavanja U/I operacija i za komunikaciju sa korisničkim programima i kontrolu njihovog izvršenja. Mehanizam prekida omogućuje OS da dodeli prioritete, da se prebaci za izvršavanja jednog korisničkog programa na drugi, da implementira karakteristike sigurnosti i zaštite i da koordinira U/I aktivnosti. OS sadrži rutine za opsluživanje prekida za sve uređaje koji su povezani na računar. Kada aplikativni program treba da izvrši ulaznu ili izlaznu operaciju, on ukaže na podatke koje treba preneti i zamoli oS da izvrši tu operaciju. OS privremeno suspenduje izvršavanje tog programa i izvrši zahtevanu U/I operaciju. Po završetku operacije, OS vraće kontrolu aplikativnom programu. Prebacivanje kontrole između OS i aplikativnog programa se realizuje preko prekida. Kod računara koji imaju i korisnički i nadzornički režim rada, procesor se prebacuje u nadzornički režim u trenutku prihvatanja zahteva za prekid. Da bi ilustrovali interakciju između aplikativnih programa i OS, razmotrićemo primer koji uključuje multitasking – mod rada procesora u kome procesor u isto vreme izvršava nekoliko korisničkih programa. Uobičajena OS tehnika koja ovo omogućuje je tzv. “seckanje vremena” (engl. “time slicing”).
Mikroračunari Korišćenje prekida kod operativnih sistema Nekoliko rutina operativnog sistema
Mikroračunari Korišćenje prekida kod operativnih sistema Nekoliko rutina operativnog sistema
Mikroračunari Korišćenje prekida kod operativnih sistema Nekoliko rutina operativnog sistema
Mikroračunari Korišćenje prekida kod operativnih sistema • Kada se startuje operativni sistem, izvršava se inicijalizaciona rutina, nazvana OSINIT. Pored ostalih stvari, ova rutina učita i odgovarajuće vrednosti u lokacije vektora prekida u memoriji. Na primer, OSINIT učita početnu adresu rutine nazvane SCHEDULER u vektor prekida koji odgovara vremenskom prekidu. Stoga, na kraju svakog vremenskog odsečka časovnik generiše zahtev za prekid koji dovodi do izvršavanja ove rutine. • Program, zajedno sa informacijama koje opisuju tekuće stanje njegovog izvršavanja se od strane OS posmatra kao proces. Proces može biti u jednom od tri stanja: • izvršava se – ovo stanje znači da se upravo sada izvršava • spreman je za izvršavanje – čeka da bude izabran za izvršavanje od strane raspoređivača • blokiran – iz nekog razloga nije spreman da nastavi sa izvršavanjem. • SCHEDULER je rutina OS-a koja određuje koji će se korisnički program izvršavati u sledećem vremenskom odsečku. Pri radu, on prvo sačuva sve informacije potrebne radi nastavka izvršavanja programa A koji se do tada izvršavao. Sačuvana informacija, nazvana stanje programa, obuhvata sadržaje registara, brojač naredbi i statusnu reč procesora. Potom rutina bira neki drugi program B koji je spreman za izvršavanje – restauriše (ranije sačuvane) informacije koje se odnose na program B, pa izvršava instrukciju povratka iz prekida.
Mikroračunari Korišćenje prekida kod operativnih sistema Na ovaj način je postignuto da u sledećem vremenskom odsečku program B nastavi sa izvršavanjem, tj. realizovano je prebacivanje konteksta (engl. “context switch”) u drugi proces sposoban za izvršavanje. Pretpostavimo da program A treba da pročita liniju sa ulaza. Umesto da samostalno izvrši operaciju, on će zahtevati opsluživanje od OS. U tu svrhu, iskoristiće stek ili registre procesora da OS-u prosledi informaciju koja sadrži zahtevanu operaciju, U/I uređaj i adresu bafera u podacima programa u koji se pročitane linije trebaju smestiti. Potom izvršava softversku instrukciju prekida. Vektor prekida će u tom slučaju pokazivati na rutinu OSSERVICES. Kao što se može videti, rutina OSSERVICES će ispitati informacije na steku i inicirati odgovarajuću operaciju pozivom odgovarajuće rutine OS. U našem primeru, biće pozvana rutina IOINIT – ona je odgovorna za počinjanje U/I operacija. Rutina IOINIT postavlja stanje procesa koji odgovara programu A na blokirano , kako bi raspoređivaču stavila do znanja da u ovom trenutku program ne sme da nastavi sa radom. Potom ova rutina izvršava sve pripreme neophodne za izvršenje U/I operacije, a potom poziva rutinu koja izvršava U/I prenose. Uobičajena praksa kod dizajna operativnih sistema je da se sav softver potreban za rad nekog uređaja enkapsulira u samostalan modul, nazvan drajver uređaja (engl. device driver). Takav modul se lako dodaje ili uklanja iz OS.
Mikroračunari Korišćenje prekida kod operativnih sistema Pretpostavićemo da se u našem primeru drajver uređaja za tastaturu sastoji od dve rutine KBDINIT i KBDDATA. Sada konkretno IOINIT poziva rutinu KBDINIT, koja izvršava sve inicijalizacione operacije koje su zahtevane od uređaja i njegovih elsktronskih kola. Rutina KBDINIT takođe omogućuje prekide kod uređaja, tako što postavlja odgovarajuće bitove u njihovim kontrolnim registrima, a potom se vraća u IOINIT, koja se sama potom vraća u OSSERVICES. Sada je tastatura spremna da učestvuje u operacijama prenosa podataka i ona će generisati prekid svaki put kada je taster pritisnut. Po povratku iz OSSERVICES, rutina SCHEDULER bira drugi korisnički program za izvršavanje (jasno je da to ne može biti program A, jer je proces koji mu odgovara trenutno blokiran). Instrukcija povratka iz prekida, kao što je ranije istaknuto, takođe omogući prekide, pa se sada mogu “hvatati” zahtevi za prekid koje šalje tastatura. Vektor prekida za ovaj prekid ukazuje na adresu rutine OS koja se naziva IODATA. Budući da može biti više uređaja povezanih na istu liniju za zahtevanje prekida, IODATA počinje rad prozivanjem tih uređaja, kako bi odredilo koji je među njima zahtevao uslugu. Potom rutina poziva odgovarajući drajver uređaja da opsluži zahtev.
Mikroračunari Korišćenje prekida kod operativnih sistema U našem slučaju, drajver će biti KBDDATA, koji prenosi jedan znak. Ako je taj znak CR, drajver će takođe i postaviti 1 u fleg END, kako bi informisao IODATA da je odgovarajuće instrukcija kompletirana. U tom trenutku, rutina IODATA će promeniti stanje procesa pridruženog programu A iz blokirano u sposobno za izvršavanje, tako da taj proces može da bude izabran za izvršavanje od strane raspoređivača u nekom vremenskom isečku u budućnosti.
Bajt najmanje težine kod statusnog registra procesora ARM Mikroračunari Struktura prekida kod ARM • Procesor ARM ima jednostavan, ali istovremeno moćan mehanizam za rukovanje prekidima. Dva izvora za izuzetke su spoljašnje linije za zahtevanje prekida IRQ i FIQ (“fast interrupt request”), jedan je softverska instrukcija za prekid SWI, a postoje i dva izvora prouzrokovana sa nekorektnim uslovima tokom izvršavanja – greška magistrale i pokušaj izvršenja nedefinisane instrukcije. • Prioritet je sledeći: • Reset (najveći prioritet) • Greška podataka • FIQ • IRQ • Greška u dohvatanju instrukcije • Greška nedefinisane instrukcije
Mikroračunari Struktura prekida kod ARM • Bitovi M4-M0 sa prethodnog dijagrama ukazuju u kom modu operacija se procesor nalazi. Ukupno postoji šest modova. To su korisnički mod i pet privilegovanih modova, po jedan za svaku vrstu izuzetka. • Kada se procesor prebaci u neki od tih različitih modova, on takođe prebaci i neke od registara kojima program pristupa. Registri koji su pristupačni u svakom modu su R0-R7, R15 (brojač naredbi) i CSPR (statusni registar). U svim privilegovanim modovima, osim, FIQ, i registri R8-R12 su takođe pristupačni. • Oni registri koji zamenjuju registre procesora u korisničkom modu nazivaju se bankirani registri. • Kada procesor prihvati prekid, on preduzima sledeće akcije: • Sačuva adresu povratka prekinutog programa u registru 14 odgovarajućeg moda. Tačna sačuvana vrednost zavisi od tipa izuzetka (zbog protočnosti). • Sačuva sadržaj statusnog registra procesora CSPR u odgovarajući SPSR. • Promeni bitove moda u CSPR u skladu sa tipom prekida, a za FIQ i IRQ još postavi i odgovarajuće bitove u CPSR i na taj način onemogući dalje prekide po toj liniji. • Skoči na početak rutine za opsluživanje prekida koja počinje od odgovarajuće adrese u vektoru.
Mikroračunari Struktura prekida kod ARM Registri kojima se pristupa u različitim modovima rada ARM procesora
Registri kojima se pristupa u različitim modovima rada ARM procesora Mikroračunari Struktura prekida kod ARM Adrese vektora prekida kod ARM procesora
Mikroračunari Struktura prekida kod ARM Korekcija adresa tokom povratka iz prekida kod ARM
Mikroračunari Struktura prekida kod ARM ARM rutina za opsluživanje prekida koja čita ulaznu liniju sa tastature – glavni program
Mikroračunari Struktura prekida kod ARM ARM rutina za opsluživanje prekida koja čita ulaznu liniju sa tastature
Mikroračunari Struktura prekida kod 68000 Procesor 68000 ima osam nivoa prioriteta za prekide. Prioritet u kom u datom trenutku radi procesor se enkodira sa tri bita u statusnoj reči procesora, gde 0 predstavlja najniži prioritet. Zahtev za prekid se prihvata ako je prioritet uređaja viši od prioriteta u kom procesor radi u datom trenutku, osim prioriteta 7 – zahtevi za prekid tog prioriteta se uvek prihvataju. Tu se radi o nemaskirajućem prekidu sa ivicom-okidačem. Po prihvatanju prekida, na stek se guraju PC i PS, pri čemu se registar A7 koristi kao pokazivač steka. Za povratak iz rutine se koristi instrukcija RTE. Procesor koristi vektorske prekide, ima ih 256, uz autovektor sposobnost (0-7). Statusni registar procesora 68000
Mikroračunari Struktura prekida kod 68000 Rutina za opsluživanje prekida procesora Motorola 68000 koja čita ulaznu liniju sa tastature
Mikroračunari Struktura prekida kod Pentium-a Kod IA-32 familije procesora, gde je Pentium primer, se koriste dve linije za zahtevanje prekida INTR i NMI. Zahtevi koji stignu preko linije NMI su uvek prihvaćeni od strane procesora. Pored spoljašnjih prekida, postoji i veliki broj događaja koji mogu izazvati izuzetak tokom izvršavanja programa. Oni uključuju nekorektne operacione kodove, greške pri deljenju, prekoračenja itd. Pojava ma kog od ovih događaja dovodi do toga da procesor skoči na izvršavanje rutine za opsluživanje prekida. Svakom od prekida ili izuzetaka se dodeljuje broj prekida. U slučaju signala sa INTR, U/I uređaj šalje broj vektora preko magistrale kada se potvrdi zahtev za prekidom. Za sve ostale vrste izuzetaka, broj vektora je prethodno fiksno dodeljen. Procesor određuje početnu adresu rutine za opsluživanje prekida na osnovu broja vektora i tabele nazvane tabela za opis prekida (IDT - Interrupt Description Table). Prateći čip za Pentium procesor se naziva Napredni programabilni kontroler prekida (APIC – Advanced Programmable Interrupt Controler). Raznovrsni U/I uređaji se preko ovog čipa povezuju sa procesorom. Kontroler prekida implementira strukturu prioriteta između tim različitim uređajima i šalje procesoru odgovarajući broj uređaja za svaki uređaj.