Operačné Systémy 11.správa Periférnych Zariadení

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 15

Operan systmy

11. Sprva perifrnych zariaden

11. Sprva perifrnych zariaden

ota komunikuje s okolitm prostredm pomocou perifrnych zariaden. tandardn perifrne zariadenia s disk, klvesnica, obrazovka, tlaiare, my. Modern potaov systmy maj bene aj CD-ROM, fax, modem, scanner. Perifrne zariadenia mu by alej rozren poda toho, na ok omu sa potaov systm pouva, napr. kamery, teplomery, merae vlhkost a mnoho inch. Sprva perifrnych zariaden je jednoua z hlavnch funkci operanho systmu. Medzi perifrnymi zariadeniami s vek rozdiely, ktor operan systm mus skry pred uvateom. Uvate pracuje so zariadeniami na logickej rovni a asto pre vykonanie jednej opercie na tejto rovni je potrebn vyda zariadeniu niekoko prkazov, obsli niekoko preruen, zaisti obsluhu mimoriadnych situci at. Operan systm poskytuje interface medzi perifrnymi zariadeniami a zvykom systmu. Tento interface m snahu by nezvisl odna zariaden a o najjednoduch.

11.1 Klasifikcia vstupno/vstupnch zariaden


Perifrne zariadenia meme klasifikova poda niekokch kritri. Najdleitejia klasifikcia V/V zariaden je z hadiska monosti ich zdieania medzi procesmi. Delme ich na:. Zdieaten zariadenia - me ich pouva viac procesov naraz. Stav takhoto zariadenia sa d ahko odpamta a potom znova obnovi. Pouitie zdieatenho zariadenia jednm procesom sa me prerui, jeho stav sa zaodpamt a zariadenie me by pridelen inmu procesu. To je prpad procesora. V prpade operanej pamti a disku je kapacita zariadenia je rozdelen na asti a kad as sli inmu uvateovi. Nezdieaten zariadenia - tieto zariadenia nemu sli viacerm procesom naraz. Stav takhoto zariadenia sa ned ahko obnovi. Nezdeaten zariadenie je napr. tlaiare. Pouitie tlaiarne jednm procesom neme by preruen, aby bola pridelen inmu procesu. Operan systmy rieia problm prideovania nezdieatench zariaden obyajne dvomi technikami. Prv je vlun pridelenie zariadenia. Pred pouitm proces mus o pridelenie zaradenia poiada. Po skonen prce s nm ho uvon. Tto technika je jednoduch, ale me vies k uviaznutiu, preto sprva tchto zariaden mus implementova niektor z metd prevencie alebo vyhnutia sa uviaznutiua. Druha technika je virtualizcia nezdieatench zariaden. V tomto prpade sa uvateovi sa zd, e je k dispozci viac zariaden, ako je v skutonosti. Konkrtna technika virtualizcie zvis odna konkrtnehokonkrtnom zariadenia. Vemi asto pouvan technika pri sprve tlaiarn je spooling (simultaneous peripheral operation on-line). Podstata je v tom, e ke proces poiada o tlaiare, jeho poiadavke sa vyhovuje aj v prpade, e tlaiare nie je von. Sbory, ktor sa maj

177

Operan systmy perifrnych zariaden

11. Sprva

vytlai sa ukladaj do frontu na disk a sluobn program zaisuje ich postupn tla. alia klasifikciea V/V zariaden je mon poda toho, i zariadenie sli k vstupu alebo vstupu dt, a hovorme o vstupnch alebo vstupnch zariadeniach. Poda spsobu prenosu a prstupu k dtam, meme V/V zariaden meme rozdeli na tieto skupiny: blokov zariadenia - k tejto skupine patria zariadenia, ktor ukladaj informciu po blokoch. Bloky s adresovaten a opercie sa vykonvaj po blokoch. Typickmi predstavitemi tohoto typu zariaden s disk, CD-ROM, floppy disk. znakov zariadenia - tieto zariadenia pracuj s postupnosou znakov. Jednotliv znaky nie s adresovaten. K tejto skupine patria napr. terminly, tlaiarne a in. in zariadenia - do tejto skupiny patria zariadenia, ktor nememe charakterizova ako blokov alebo znakov. Je to napr. asova a mnoho inch, ktor nememe zaradi do predchdzajcich dvoch skupn.

11.2 truktra V/V zariaden


V/V zariadenia obyajne pozostvaj z elektronickch a mechanickch komponentov. Elektronick komponent sa nazva radi alebo adaptr zariadenia. Radi je vinou je doska v potai. Mechanick as zariadenia je samotn zariadenie. Operan systm skoro vdy komunikuje s radiom. Slov potae pouvaj in spsob komunikcie s perifriami. Pouvaj tzv. kanly, ktor s v podstate pecializovan procesory, ktor preberaj riadenie perifrnych zariaden. Radi m niekoko registrov, ktor pouva pri komunikcii s procesorom, napr. stavov register, prkazov register, dtov register, adresn register a in. Niektor systmy rezervuj pre registre V/V zariaden as pamte (PDP-11, VAX/VMS). In systmy pouvaj pre V/V pecilny adresn priestor. Operan systm vykonva V/V tak, e odovzdva prkazy do ovldaa zariadenia a ten nastavuje registre radia. Po prebrat prkazu radiom sa procesor sa me venova inej prcie. Ke perifrna opercia skon, radi upozorn operan systm na to pomocou preruenia. Procesor zist vsledky vykonanej opercie z registrov radia. Na obr.11.1 je ukzan tylizovan radi tlaiarne. Mnoho radiov vyuva priamy prstup k pamti (DMA). Obvod DMA je vo svojej podstate pecializovan procesor, ktor riadi prenos dt medzi operanou pamou a radiom bez asti procesora. Priamy prstup k pamti zrchuje prenos dt, pretoe dva monos prenies vie mnostvo dt naraz. Bez priameho prstupu prenos prebieha tak, e radi najskr zaist pretanie bloku do svojej vyrovnvacej pamte, skontroluje prenos pomocou kontrolnej sumy a potom preru. Operan systm odtartuje prenos dt a v sluke sa byte po byte prena z vyrovnvacej pamte radia do operanej pamte. Tto opercia 178

Operan systmy

11. Sprva perifernch zariaden

zaber vea asu procesora. Pri priamom prstupe procesor zad obvodu DMA adresu v pamti, kde sa maj zapsa dta, a poet byte-ov, ktor sa maj prenies. DMA prenesie zadan poet byte-ov a po ukonen prenosu upozorn systm na to preruenm. Prenos neriadi procesor, ale obvod DMA, take procesor sa me venova inej prci. Dtov zbernica Perifrny obvod
CNT R
RQO MODEO MODEI RQI

OB
READY O ERROR

STATUS

IB

Tlaiare

Obr.11.1 tylizovan perifrny obvod pre ovldanie tlaiarne

11.3 Organizcia programovho vybavenia pre sprvu perifrnych zariaden


truktra programovho vybavenia perifrnych zariaden je rozdelen do niekokch vrstiev. Niie vrstvy poskytuj sluby vym. Najvyia vrstva s uvatesk programy, ktor vyuvaj sluby nich vrstiev. Vrstva, ktor sa nachdza pod uvateskym programom zaisuje interface s operanm systmom, nezvisl odna zariadenia. alia vrstva ovlda konkrtne zariadenie na rovni jeho prkazov. Najniia vrstva je obsluha preruen. Celkov truktra programovho vybavenia je ukzan na obr. 11.2.

179

Operan systmy perifrnych zariaden

11. Sprva

Poiadavka na V/V

Uvate sk rove V/V ope rci

FUNKCIA Vsledok formtovanie, spooling V/V opercie


Syst m ov volanie V/V, Pome novanie , ochrana, bufrovanie , pride ovanie Nastave nie re gistrov zariade nia, kontrola stavu Zachyte nie pre rue nia Vykonanie V/V ope rcie

Program ov vybavenie , nezvisl od zaria denia Ovl dae za riaden Obsluha prerue n Ha rdwa re

Obr.11.2 Vrstvy program ovho vybavenia pre obsluhu V/V zariaden a ich funkcie

11.3.1 V/V opercie na uvateskej rovni V/V opercie v uvateskch programoch sa vykonvaj ako systmov volania, ktor s realizovan ako kninin procedry. Tieto procedry s spojen s uvateskm programom a neprebiehaj v privilegovanom reime. Systmov volania u boli popsan v kapitole 3, preto tu uvedieme len krtky prehad volan pre V/V opercie. Medzi typickmi opercieami patria: 1. Opercie pre manipulcie so zariadeniami: iados o pridelenie zariadenia a uvonenie zariadenia. tanie, zpis, nastavenie pozcie. Zistenie a nastavenie atribtov zariadenia. Logick pripojenie a odpojenie zariadenia.

2. Opercie pre prcu so sbormi: Tvorba a zruenie sboru. Otvorenie a uzatvorenie sboru. tanie a zpis do sboru. Zistenie a nastavenie atribtov sboru. alia innos, ktor svis s V/V operciami, je formtovanie. Formtovanie vykonvaj systmov volania, ktor s uskutonen op ako kninin procedry, t.j. prebiehaj v uvateskom reime. Tieto procedry zaisuj napr. prevod reazcov na binrne hodnoty a naopak. 11.3.2 Programov vybavenie, nezvisl odna zariadenia Zkladnou lohaou tejto vrstvy je vykonva funkcie, ktor s spolon pre vetky perifrne zariadenia a poskytova jednotn rozhranie pre uvatesk software. Na zklade tohoto rozhrania, uvate me pracova napr. so sborom, ktor je na disku, na floppy disku, na tlaiarni alebo na inom zariaden bez potreby modifikova program poda

180

Operan systmy

11. Sprva perifernch zariaden

pouitho perifrneho zariadenia. Medzi hlavnmi funkcieami tejto vrstvi patr: Jednotn pomenovanie zariaden. To znamen, e meno zariadenia by malo by slo alebo reazec znakov, ktor sa vytvra jednotnm spsobom pre vetky zariadenia. Napr. v operanom systme Unix sa disky, flopppy disky alebo in blokov zariadenia sa mu montova do sborovho systmu na ubovolnom mieste, ale vdy sa na nenich odkazuje jednotnm spsobom - pomocoupoda cesty. Ochrana zariadenia. Ochrana zariadenia nie je sasou kadho systmu. Vina mikropotaovch systmov neposkytuje iadnu ochranu zariadeniam a uvate me s nimi robi vetko. U slovch potaov je situcia odlin - tam je vinou pre uvatesk programy je priamy prstup k perifrnym zariadeniam zakzan. Viacuvatesk systmy poskytuj rznu ochranu. Unix napr. ponma zariadenia ako pecilne sbory a uplatuje na ne ochranu ako na sboroch. Vekos bloku, nezvisl odna zariadenia. Rzne typy diskov maj rzne vek sektory. lohou nezvislej vrstvy je skry tieto rozdiely pred uvateom a poskytn mu monos pracova s logickm blokom, nezvislm odna fyzickhoom sektorae. Obdobn problm existuje aj u znakovch zariaden. Niektor pracuj s jednotlivmi byte-mi ako napr. klvesnica, in spracovvaj vie celky. Operan systm zakrva tieto rozdiely. Obsluha vyuitia vyrovnvacch pamti . Uvatesk programy mu ta a zapisova na perifrne zariadenia daje ubovolnej vekosti. Na rovni zariadenia sa ale sa opercie vykonvaj po blokoch. Napr. ak uvate chce preta len as bloku, operan systm preta cel blok a nepouit daje s pripraven pre aliu poiadavku. Sprava vonho priestoru blokovch zariaden . Udriava dtov truktry - bitov mapu alebo zreazen zoznam s adresami vonch blokov, ktor sa prideuj novm sborom. Obsluha chb. Chyby vznikajce pri prci zariaden sa obyajne obsluhuj na najniej monej rovni. Napr. chybu pri tan bloku dt z disku sa najskr poksi napravi radi. Ak radi neuspeje, ovlda disku vyd prkaz na nov pokus pretania bloku. Ak po uritom pote opakovan opercie tania sa chyba nenaprav, sprva sa pole nezvislej vrstve programovho vybavenia. alej sa chyba bu len ohlsi programu, alebo ak je zvanejia, program sa ukon. 11.3.3 Ovldae perifrnych zariaden Ovlda (driver) je program, ktor preber od programovej vrstvy nezvislej odna zariadeniazariaden poiadavky na vykonanie uritch operci a odovzdva ich zariadeniu vo forme jemu zrozumitench prkazov. Ovlda obyajne obsluhuje jeden typ zariaden, alebo nanajv triedu prbuznch zariaden. Jedine v ovldai s zabudovan konkrtne daje o zariaden, napr. koko a akch registrov m radi zariadenia, ak

181

Operan systmy perifrnych zariaden

11. Sprva

prkazy repektuje a ete cel rad dajov, ktor s in pre kad typ zariadenia. Operan systm definuje spolon skupinu sluieb, ktor poaduje od perifrnych zariaden. Najastejie s tieto sluby s orientovan na: inicializciua zariadenia, prpravua a spustenie prenosu - pripravuje V/V poiadavku, formtuje dta, prideuje systmov bufre, nastavuje registre zariadenia, spa operciu a ukonuje prenos, vytvorenie a zruenie kanlu (open, close), najastejie u komunikanch zariaden, nastavenie pozcie pre tanie dt (seek), riadiace sluby - s zvisl odna zariadenia, napr. odstrnkovanie, previnutie magnetickej psky a in, obsluhua preruen zo zariadenia, obsluhua chybovch stavov, ukonenie prenosu. Sluby, ktor ovlda poskytuje s implementovan v jeho vyej vrstvye. Niia vrstva obsluhuje preruenia, ktor pochdzaj zo zariadenia. Operan systm poiada ovlda o slubu a odovzdva povel na tart innosti, parametre poadovanej innosti a dta, s ktormi sa m pracova. Perifrna opercia me prebieha synchrnne (obr11.3) alebo asynchrnne (obr.11.4) .
perif rna opercia aplikan programA aplikan programB as

Obr.11.3 Synchrnny priebeh perifrnej opercie

182

Operan systmy

11. Sprva perifernch zariaden

pe rif ria ovlda program

preruenie

akanie na dokone nie opercie

Obr.11.4 Asynchrnny priebeh perifrnej opercie Poda toho, ovlda vyuva synchrnny alebo asynchrnny priebeh perifrnych operci, me by navrhnut ako synchrnny alebo asynchrnny. Charakteristickm rysom synchrnneho ovldaa je, e prenos dt prebieha synchrnne z hadiska procesu, ktor prenos vyvolal. Inmi slovami proces poiada o prenos dt a km sa tento ukon, ak. V podstate ovlda pracuje ako volanie podprogramu - nvrat z ovldaa sa vykon a potom, ke sa prslun perifrna opercia ukon. Tto koncepcia ovldaov sa hodne pouva, pretoe smantika funkci, ktor uvatesk program pouva pre perifrne opercie, je vemi jednoduch. asto v tele ovldaa sa vyuvaj asynchrnne opercie, aj ke ovlda je synchrnny, pretoe asynchrnne opercie dvaj monos paralelnej prce procesora a perifri. Synchrnne ovldae s napr. v operanch systmoch MS-DOS a Unix. Asynchrnne ovldae umouj programom poiada o prenos v predstihu a km perifrna opercia prebieha, vykonva in prcu. Samozrejme program mus ma monos aka na dokonenie opercie. akanie sa d realizova: pomocou procedry ovldaa , urenm dokonovacieho procesu, ktor preberie riadenie po ukonen opercie. Dokonovac proces sa deklaruje pred zahjenm opercie. Me to by len obsluha preruenia. Koniec opercie oznmi nastavenie prznaku v stavovom registri radia alebo preruenie. V prvom prpade sa vlastne jedn o aktvne akanie, kedy procesor mus v sluke testova nastavenie prznaku. V druhom prpade zle na tom, i v jadre s implementovan synchronizan prostriedky. Ak nemme monos poui napr. semafory, ovlda mus aka aktvne - testova v sluke, i nastalo preruenie. Prklad princpu takho ovldaa je uveden na obr.11.5.

183

Operan systmy perifrnych zariaden { Ovlda, ktor vyuva preruenie a akaciu procedru. } unit OVLADAC_TLACIARNE; interface var STATUS: STAVOVY_REGISTER; CNTR: RIADIACI_REGISTER; OB: DATOVY_REGISTER; KONIEC_OPERACIE: boolean;

11. Sprva

procedure START_PRENOSU(znak:byte); begin OB:=znak; KONIEC_OPERACIE:= FALSE; CNTR.REQ0:=1; {Automaticky sa vykon aj READYO := 0} end; procedure CAKAJ_NA_DOKONCENIE; begin repeat {aktvne akanie na preruenie} until KONIEC_OPERACIE; end; procedure DOKONCENIE; begin STATUS_READYO:=1; STATUS.ERROR:= ...; KONIEC_OPERACIE:=true; end; procedure TLAC(znak:byte; CHYBA: integer); begin START_PRENOSU(znak); CAKAJ_NA_DOKONCENIE; CHYBA:=STATUS.ERROR; end; begin {inicializcia modulu} CNTR.MODEO:=1; CNTR.MODEI:=0; end.
Obr.11.5 Ovlda tlaiarne , ktor vyuva proce dru na akanie na preruenie

Ak jadro ponuka synchronizan prostriedky, meme ich poui pre implementciu pasvneho akania na preruenie. V prklade na obr.11.6, ktor op uvdza principilne rieenie ovldaa tlaiarne, je pouit semafor.

184

Operan systmy

11. Sprva perifernch zariaden

afor } { Ovlda, ktor vyuva sem

unit OVLADAC_TLACIARNE; int e rface v ar TLAC_SEM: SEMAPHORE; STATUS: STAVOVY _REGISTER; CNTR: RIADIACI_REGISTER; OB: DATOVY _REGISTER; p roce d ureSTART_PRENOSU(znak:b y t e ); b e g in OB:= znak; CNTR.REQ0:= 1; {Autom aticky sa vykon aj READY O :=0} e nd ; p roce d ureCAKAJ_NA_DOKONCENIE; b e g in WAIT(TLAC_SEM); e nd ; p roce d ureDOKONCENIE; { vyvol sa preruenm } b e g in STATUS_READY O:= 1; STATUS.ERROR:=...; SEND(TLAC_SEM); e nd ; p roce d ureTLAC(znak:b y te e g e r); ; CHY BA: int b e g in START_PRENOSU(znak); CAKAJ_NA_DOKONCENIE; CHY BA:= STATUS.ERROR; e nd ; b e g in {inicializcia m odulu} INIT_SEM(TLAC_SEM, 0); CNTR.MODEO:= 1; CNTR.MODEI:= 0; e nd . Pri nvrhu ovldaov je snaha uskutoni perifrne opercie o najefektvnejie. Vemi asto sa k tomu pouvaj asynchrnne opercie, priom uvateovi sa vykonvan opercia me javi aj ako synchrnna. Asynchrnny prenos dva monos vyui paraleln prcu perifrnych zariaden a procesora, a tak zvi vkonnos celho systmu. Asynchrnne opercie sa daj urchli vhodnm vyuitm vyrovnvacch pamt. Ide v podstate o aplikciu klasickej

185

Operan systmy perifrnych zariaden

11. Sprva

synchronizanej lohy producent - konzument, kedy vyrovnvacia pam je v tele ovldaa (obr.11.7). Napr. pri sekvennom tan dt z disku sa dta mu nata dopredu do vyrovnvacej pamte, aby boli pripraven, ke ich program bude potrebova. Pri zpise dt na disku tie meme poui princp producenta a konzumenta. Proces, ktor poaduje vstup je v lohe producenta a zapisuje poloky, uren pre vstup, napr. bloky po 512 byte-ov do vyrovnvacej pamte. Proces konzument po zaplnen vyrovnvacej pamte zapisuje dta na disk. Konzum ent (ovlda)

Producent (program )

Obr. 11.7 Aplikcia lohy producent-konzum ent Vyuitie vyrovnvacch pamt me by efektvnejie pri ich vhodnom usporiadan. Pri pouit jednej vyrovnvacej pamte meme uskutoni len sekvenn spracovanie jednotlivch innost: najskr do pamte zapeme, potom z nej tame. Paraleln vykonanie zpisu a tania sa d uskutoni pri pouit minimlne dvoch vyrovnvacch pamt - obr.11.8. Vyrovnvacia
pam 1

Perifrne zariadenie Vyrovnvacia


pam 2

Program

Obr.11.8 Paraleln spracovanie pri vyuit dvoch vyrovnvacch pam t Vyrovnvacie pamte sa mu usporiada aj ako cyklick front. V tomto prpade je potrebn poui synchronizan prostriedky pre zaistenie prstupu k pamtiam (obr.11.9).

186

Operan systmy

11. Sprva perifernch zariaden

11.3.4 Obsluha preruen Obsluha preruen je skryt v najniej vrstve programovho vybavenia pre obsluhu perifrnych zariaden. Obyajne sa preruenia obsluhuj v ovldaoch zariaden. Ke sa preruenie vyskytne, obslun rutina vykon vetky potrebn innosti. V niektorch systmoch sa zvyuje hodnota semafora, v inch sa vykon opercia SIGNAL nad premennouej typu conditional v monitore. Vsledn efekt je, e proces ktor bol zablokovan a akal na urit udalos, me pokraova vo svojej innosti. Perifrne zariadenie
Smer prenosu

Spracovanie

Smer spracovania

Obr. 11.9 Cyklick front vyrovnvacch pamt 11.3.5 Ovldae jednotlivch zariaden 11.3.5.1 Systmov hodiny Systmov asova generuje preruenia v pravidelnch intervaloch. Operan systm vyuva tieto preruenia obyajne pre splnenie dvoch loh: pre zdieanie asu v preemptvnom multitaskingu a pre zobudenie procesov, ktor volali systmov slubu na uspanie procesu na urit dobu. Pre obsluhu preempcie obslun rutina preruenia sleduje, koko asu ete zostva prave beiacemu procesu, a ke jeho as vypr, zaist spustenie plnovaa. Aby sa spiace procesy prebudiliPre prebudenie spiacich procesov, obslun rutina preruen mus spracova zoznam asov, pre ktor jednotliv procesy potrebuj by v neaktvnom stave. A sa asov interval niektormu z procesov zni na nulu, presunie sa do frontu pripravench procesov. 11.3.5.2 Obrazovka Vina mikropotaov nem pecializovan grafick procesor. Vaka tomu je ovlda obrazovky netypick v tom, e nepotrebuje doln polovicnu, pretoe nem zariadenie, od ktorho by mohol aka preruenie. Horn polovicna ovldaa jednoducho zape potrebn dta do videopamte, bu priamo alebo do bufra. Modern operan systmy asto tto lohu rieia odlinm spsobom, aby dosiahli viu efektvnos. Prstup do videopamte zdruje 187

Operan systmy perifrnych zariaden

11. Sprva

procesor, pretoe pre prstup k nej sper s obvodmi, ktor generuj videosignl. Pritom genertor videosignlu m vyiu prioritu ako procesor, aby nebol naruen obraz. Ovlda preto len preberie od procesu poiadavky na vstup a vo vhodnej chvli ich zobrazuje, bez toho e by proces na to akal. Horn polovicna ovldaa m vemi podstatn lohu - mus zaisti virtualizciu obrazovky, aby k nej mali prstup vetky procesy, ktor potrebuj vypisova svoje daje. Existuj dva spsoby virtualizcie obrazovky: bu kad proces me ma svoju vlastn obrazovku a uvate vol ktor z nich chce vidie, alebo ovlda me zaisti rozdelenie obrazovky do jednotlivch okien a kad proces pouva svoje vlastne okno. Druh spsob virtualizcie obrazovky zaviedla firma Apple na potaoch Macintosh a dnes je tento spsob je povaovan za najvhodnej. Niektor operan systmy kombinuj tieto dve techniky: ponkaj viacej virtulnych obrazoviek a kad z nich me obsahova viacej okien. 11.3.5.3 Klvesnica Ovlda klvesnice m za lohu zbiera kdy stlaench klvesov, transformova ich na prslun kdy a odovzdva ich programu. Pri tom sa ovlda me podiea na konenej prave odovzdvanch kdov, ako napr. odstrni zmazan znaky, prida konce riadkov, ak je to potrebn at. Obslun program klvesnice mus vyriei aj al dleit problm a toako je spsob generovania echa. Me to by bu okamitepriamo na terminli alebo ako odozvu na spracovanie v potai. Ovlda klvesnice je tandardn ovlda zariadenia, ale v mnohch prpadoch je potrebn ho vrazne rozri, aby umonil vkladanie nrodnch znakov. Ovlda prirauje kdy jednotlivm klvesom a tie zaisuje funkciu kontrolnch klvesov. 11.3.5.4 Tlaiare Tlaiare patr medzi najpouvanejie zariadenia potaovho systmu, zrejme preto, e sme si ete stle ete nezvykli dostatone dverova inm mdim ako je papier. Ako u bolo povedan predtm, pre virtualizciu tlaiarne sa vyuva metda spooling. 11.3.5.5 Disk Ovlda disku je vemi dleit, pretoe disk je kov zariadenie pre vkon celho systmu. Zkladn princp ovldaa disku sa neli od obecnho ovldaa, ale existuj urit rozdiely. Sprve disku je venovan alia kapitola. Tu uvedieme ako prklad dve zkladne sluby disku, ktor patria do tzv. hornej polovicney ovldaa a slubu pre obsluhu preruen, ktor patr do dolnej poloviceny ovldaa. Prklady s prebran zo zdrojovch textov operanho systmu XINU - jednoduch kolsk multitaskingov operan systm. Deklarcie: /*disk.h */ enum { 188 /*diskov opercie*/

Operan systmy

11. Sprva perifernch zariaden /*tanie z disku*/ /*zpis na disk*/

}; struct dreg { /* poiadavka */ int drpid; /* pid procesu, ktor vzniesol poiadavku */ unsigned long drdba; /* diskov adresa */ char *drbuff; /* bufer */ char drop; /* opercie */ int drerror; /* chybov stavy, 0 - spech */ struct dreg *drnext; /* ukazovate na aliu poiadavku */ }; struct dsblk { struct dreg *dreglst; /* front poiadaviek */ void (*_dwrite)(); /* zpis na disk */ void(*_dread)(); /* tanie z disku */ void(*_derror)(void); /* chyba prenosu */ }; extern struct dsblk dstab[]; /*end of file */

DREAD, DWRITE

Tabuka zariaden: /* conf.h */ /* mena jednotlivch sluieb */ enum { Init, Open, Close, Read, Write, Seek, Getc, Putc, CNTL }; #define NDVPROCS 9 /* poet sluieb */ struct devsw { int (*dvproc[NDVPROCS])(struct devsw,...); /* sluby */ int dvminor; /* slo konkretnho zariadenia */ int dvivec,dvovec; /* vektor preruenia */ void interrupt (*dviint(),(*dvoint); /*obslun rutina preruenia */ }; extern struct devsw devtab[]; /* end of file */ Implementcia sluby na tanie: /* dsk_read - poiadavka na tanie z disku */ #include <disk.h> #include <conf.h> 189

Operan systmy perifrnych zariaden

11. Sprva

int dsk_read (struct devsw *dev, char *buff, unsigned snum) { struct dreg *rq; int ret=0; /* bez chyby */ char x; sdisable(x); new(rq); /* vyhradenie pamte */ rq->drdba=disk_address(snum); rq->drpid=currpid; rq_drbuff->-buff; rq->drop=DREAD; if (dskenq(&dstab[dev->dvminor], rq)) { /* zaradenie poiadavky do frontu */ suspend(surrpid); /* proces je pozastaven, km sa jeho poiadavka spln */ ret=rq->drerror; /* nvratov kd */ } dispose{rq}; restore(x); return(ret);

} /* end of file */

Sluba na tanie: /* dsk_write - poiadavka na zpis na disk */ #include <disk.h> #include <conf.h> int dsk_write(struct devsw *dev, char *buff, unsigned snum) { struct dreg *rq; char x; sdisable(x); new(rq); /* vyhradenie pamte */ rq->drdba=disk_address(snum); rq->drpid=currpid; rq_drbuff->-buff; rq->drop=DWRITE; if (dskenq(&dstab[dev->dvminor], rq)); restore(x); return(0); } /* end of file */

190

Operan systmy

11. Sprva perifernch zariaden

Rutina na obsluhu preruenia: /* dsk_iohandler.c */ #include <disk.h> #include <conf.h> void interrupt dsk_iohandler() { struct dsblk *dsk=&dstab[devtab[DISKDEV].dvminor); struct dreq *rq=dsk->dreqlst; /* nastavenie na prv poiadavku frontu poiadaviek */ rq->drerror=dsk->derror(); /*nastav poda vsledku prenosu */ if ((dsk->dreqlst=rq->next)!=NULL) /*ak front nie je przdny, spust aliu operciu */ run_disk(dsk); switch (rq->drop) { case DREAD: /* ak tal, presunie aliu poiadavku do frontu */ ready(rq->drpid, RESCHYES); return; case DWRITE: /*ak zapisoval, uvoln pouvan pam */ dispose(rq_buff); dispose(rq); } } /* end of file */

191

You might also like