quality control at nit · identifikacija uij kop identifikator broj lokacija u/i programa adresa...

50
1 RUKOVANJE ULAZOM-IZLAZOM U-I jedinice, prekidi i U-I procesi Ne zavisnost programa od UIJ Primer rukovaoca

Upload: others

Post on 19-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

1

RUKOVANJE ULAZOM-IZLAZOM

U-I jedinice, prekidi i U-I procesi

Nezavisnost programa od UIJ

Primer rukovaoca

Page 2: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

2

Odnosa planera poslova i sistema za rukovanje U/I

KORISNIKOV

PROGRAM

a)

KOMANDNA

DATOTEKA b)

PLANER POSLA

UNAPRED

DEFINISAN

ULAZ

1 TRAKA

2 DISKA

1 STAM.

3 DISKA

2 TRAKA

1 DISK

POSAO POSAO POSAO

1 3 12

RED

ČEKANJA

POSLOVA

d)

INTERAKTIVNE

KOMANDE

c)

NAREDNI POSAO

KOJI DOBIJA

PROCESOR

Page 3: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

3

ULAZNO-IZLAZNE JEDINICE RAČUNARSKOG SISTEMA

Moderni računarski sistemi poseduju velik broj ulazno-izlaznih jedinica (UIJ), koje rade konkurentno sa centralnim procesorom, a preko namenskih procesora, čija je funkcija da upravljaju U/I uređajima.

Ulazno-izlazne jedinice se klasifikuju kao jedinice sa sekvencijalnim i jedinice sa direktnim (slučajnim) pristupom.

Page 4: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

4

Funkcionalna veza između komponenti računarskog sistema

SIGNAL PREKIDA

CP OM UIP

UJ

UJ

UJ

UIJ

Page 5: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

5

Raspodela memorijskog prostora za potrebe U/I aktivnosti

KORISNIČKI PROGRAM

KORIŠTENI BAFER

SLOGA

KBD

KORISNIČKI

PROGRAM

NE MORA BITI

STALNO U

MEMORIJI

UIBKT 1

U/I

BAFER 1

UIBKT n

U/I

BAFER n

...

KONTROLNE TABELE

U/I BAFERI

UIKB1 UIKBn UIRC1 UIRCn ... ...

RUKOVAOCI ULAZNO-IZLAZNIM JEDINICAMA

KRITIČNE TABELE

SISTEMA RUKOVANJA

INFORMACIJAMA

I OS-a (STALNO

PRISUTNE U

MEMORIJI)

Page 6: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

6

U-I Operacije

U principu u U/I programu postoje tri različite operacije:

- ČITANJE,

- UPIS i

- KONTROLNA OPERACIJA

Page 7: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

7

Primer kanalnog programa

OPERACIJA

UKAZIVAČ

KRAJA

PROGRAMA

UKAZIVAČ

KRAJA

SLOGA

BROJ ADRESA

UPIS 0 0 20 813

UPIS 0 0 40 1034

UPIS 0 1 10 5830

UPIS 0 1 300 2000

UPIS 0 0 250 1850

UPIS 1 1 250 720

Page 8: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

8

a) UIKB; b) Tipičan format naredbe

IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ

LOKACIJA U/I PROGRAMA ADRESA

STATUS

a) b)

Page 9: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

9

Ilustracija instrukcija za započinjanje U/I kanalnog programa

U/I RUTINA ZA ZAPOČINJANJE U/I PROGRAMA

U/I KANALNI PROGRAM

U/I

BAFER

BLOKA

pronađi....

pretraži....

čitaj....

START U/I

U/I

KANAL

SISTEM ZA

RUKOVANJE

INFORMACIJAMA

ULAZNO-IZLAZNA

JEDINICA

KONTROLER

JEDINICA DISKA

Page 10: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

10

Program za čitanje pet kartica ZAUZ STARTUI CKART ZAPOČINJE RAD UIP NA U/I ZADATKU

BC 1, ZAUZ. AKO JE CC = 1 (100)

BC 3,PROBL AKO JE CC = 2 ili CC = 3 (011)

JOSNE TESTUI CKART SMEŠTANJE STANJA CC = 1 ili CC = 2 (110)

BC 6,JOSNE PONOVO POKUŠATI

BC 1,PROBL UKOLIKO JE CC = 1 (001)

CITK READ 0,1,240,X ČITANJE TRI KARTICE

READ 0,0,40,A ČITANJE JEDNE POL. KARTICE

READ 0,1,40,B ČITANJE DRUGE POL. KARTICE

READ 1,1,80,W ČITANJE PETE KARTICE

CKART DC F’42’ IDENTIFIKACIJA UIJ ČITAČA KARTICA

DC A’CITK’ ADRESA U/I PROGRAMA

DS 2 REZERVISANJE DVE PUNE REČI

Page 11: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

11

Kooperacija CP i UIP pri izvršavanju U/I zadataka

CP

UIP UIP Neaktiv.

Start UI

stanje signala

UIP

Izvršava se

BC 1, ZAZ

Izvršava se

BC 3, PROBL

Završetak

Start UI

Ispituje

kanal UIKB

Izvršava se

U/I zadatak Postavljanje uslovnog

koda na 0 ka CP

a)

CP

UIP

1 2 1 2 1 2

Izvršavanje

U/I zadatka

Smeštanje stanja

i slanje uslovnog

koda = 1 ka CP

Završetak

U/I zadatka

Neaktivan

Smeštanje i slanje

vrednosti uslovnog

koda ka CP

b)

Page 12: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

12

PREKIDI I U/I PROCESI

U-I radnje se realizuju kroz saradnju tri asinhrona procesa:

a) Korisnički proces koji traži U-I uslugu

b) Rukovalac prekidima

c) Rukovalac U-I uređajem

Page 13: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

13

Rutina reakcije na prekid START

ZABRANA PREKIDA

SLANJE PORUKA

DA SE RADI O PREKIDU

AKTIVIRANJE U/I RUKOVAOCA

DOZVOLA PREKIDA

POVRATAK

Page 14: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

14

Korisnički proces START

SLANJE PORUKE

(U/I PROCES; PORUKA KOJA

OPISUJE U/I PROCES)

AKTIVIRAJ U/I PROCES

PRELAZAK U STANJE BLOKIRANJA

(ČEKANJA NA U/I)

POVRATAK

Page 15: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

15

Proces rukovaoca U/I (U/I proces)

U/I PROCES

INICIJALIZACIJA

U/I PROCESA

SAKUPI

(PORUKA, STANJE)

NEMA

PORUKA PREKID

IDENTIFIKACIJA

UZROKA PREKIDA

NORMALAN

ZAVRŠE.

GREŠKA

FORMIRANJE U/I

PROGRAMA

FORMIRANJE UIKB

START UI

USPEŠAN

START UI

PREDUZMI

AKCIJU

UZIMANJE IDENT.

PROCESA IZ PORUKE

AKTIVIRAJ PROCES

SA GORNJIM ID

DOZVOLA PREKIDA

BLOKIRANJE

ZABRANA PREKIDA

DA

DA

NE

NE

DA

DA NE

NE

Page 16: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

16

RUKOVANJE IZUZECIMA

Ako se korisnički ulazno-izlazni zahtevi završe neuspešno, sistem mora da odredi razloge greške.

Isto tako, mora da pokuša da oporavi sistem od kvara.

Page 17: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

17

Podaci o grešci identifikaciju U/I jedinice,identifikaciju volumena koji je bio instalisan na perifernoj jedinici u vreme greške, ceo kanalni program ili ulazno-izlaznu operaciju koja je otkazala,stanje greške koje je vraćeno od strane periferne jedinice i kontrolera preko rutine za završetak ulazno-izlaznog prekida,broj i tip pokušaja koji su učinjeni radi oporavka, uključujući informaciju o tome, da li su ili nisu bili uspešni ti pokušaji.

Page 18: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

18

NEOTKLONJIVE GREŠKE

Kad se stanje ulazno-izlaznog prekida pošalje u sistem koje ukazuje da se radi o neotklonjivoj grešci, u tom slučaju postoji malo mogućnosti da se nešto učini.

Page 19: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

19

Obrada otklonjive greške

1. Repozicioniranje medijuma

2. Ponavljanje pokušaja ulazno-izlaznog zahteva

3. Program koji je uputio U/I zahtev, mora biti obavešten o greškama.

Page 20: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

20

OBRADA PREKIDA TIPA PAŽNJE

periferna jedinica tek uključena i na raspolaganju, odnosno da može da se dodeli korisničkim procesima,

periferna jedinica je dobila novi volumen koji je montiran i sad je raspoloživa za dodelu korisničkim procesima,

periferna jedinica je upravo isključena i neće biti na raspolaganju za dalje korišćenje,

korisnik je upravo pritisnuo dirku prekida i sl.

Page 21: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

21

NEZAVISNOST PROGRAMA OD ULAZNO-IZLAZNIH JEDINICA

Da bi korisnički programi postigli veći stepen adaptivnosti i prenosivosti, moraju, biti pisani tako da ne zavise od neke specifične U/I jedinice.

Radi toga je neophodno uvesti pojam SIMBOLIČKOG NAZIVA ULAZNO-IZLAZNE JEDINICE I STANDARDNE SPREGE ULAZNO-IZLAZNE JEDINICE.

To je dovelo do pojma VIRTUELNE U/I JEDINICE.

Page 22: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

22

Virtuelna UIJ

Da bi se neki proces izvršio on koristi stvarnu U/I jedinicu, međutim, slično kao kod memorije, on se obraća virtuelnoj U/I jedinici, umesto stvarnoj.

Svaka virtuelna UIJ ima simbolički naziv, koji koriste procedure u procesu da bi ih nazvale.

Pri tome, mora postojati i mehanizam prevođenja, kojim se pozivanje virtuelne UIJ prevodi u pozivanje stvarne UIJ.

Page 23: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

23

Standardna sprega

Karakteristike virtuelne UIJ su apstrakcija onih karakteristika stvarnih UIJ, koje su bitne za proces koji ih poziva, pa u tom smislu, virtuelna UIJ radi kao standardna sprega UIJ i procesa.

To omogućava da se proces izvršava korišćenjem bilo koje od klasa stvarnih UIJ, umesto jedne određene UIJ.

Page 24: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

24

Dinamička dodela UIJ

Proces nema potrebe za detaljnim poznavanjem radnih karakteristika raznovrsnih stvarnih UIJ.

Dinamička dodela UIJ je bitna radi povećanja efikasnog iskorišćenja resursa, kao i za mogućnost adaptacije i proširivosti korisničkog programa.

Page 25: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

25

TABELA UVEZIVANJA PROCESA

Transformiše naziv virtuelne UIJ u identifikaciju stvarne UIJ.

Sadrži vrste u kojima se nalazi naziv virtuelne UIJ i adresa koja odgovara stvarnoj UIJ.

Page 26: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

26

Standardna sprežna pravila

Standardna sprežna pravila za UIJ podrazumevaju zadate formate slogova i skup operacija virtuelne UIJ.

Formatom se definiše veličina slogova, lokacija podataka unutar sloga i kontrolna informacija unutar sloga.

Page 27: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

27

Standardna spregaProcedura, koja se obraća virtuelnoj UIJ, koristi skup operacija.Operacije procedurama definišu način na koji će se podaci čitati ili pisati kao i zajedničke kontrolne funkcije.Standardna sprega omogućuje programu da koristi više različitih stvarnih UIJ bez modifikacija programa, jer se program obraća opštim iskazima tipa ČITAJ, UPIŠI, na isti način na koji to rade odgovarajuće U/I naredbe viših programskih jezika.

Page 28: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

28

Virtuelna UIJ kao beskonačan ireverzibilan tok okteta

Virtuelna ulazna jedinica se može shvatiti kao beskonačni izvor znakova i naziva se ulaznim nizom. Slično je sa izlaznom UIJ.

To je jedina strukturna definicija koja je potrebna.

Dužina sloga je promenljiva i u suštini neograničena.

Page 29: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

29

Čitanje i upis

Čitanje i upis se aktiviraju pozivanjem odgovarajuće procedure:

ČITAJ (UL_NAZIV, N, A)

UPIŠI (IZL_NAZIV, N, A)

Page 30: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

30

SPREŽNI MODULI

Funkcija UI kontrolnog dela je da prevedestvarnu u virtuelnu UIJ i obrnuto.

Primera radi, ukoliko su znaci kodirani u ASCII kodu, treba ih prevesti na kod stvarneUIJ i transformisati format sloga povorkeznakova u prirodnu strukturu stvarne UIJ.

Te procedure nose naziv SPREŽNIH MODULA UIJ (DIM - DEVICE INTERFACE MODULES).

Page 31: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

31

Zadaci sprežnih modula

Pretvaranje niza znakova u prirodniformat na stvarnim UIJBaferisanjeKonstruisanje U/I programa koji suneophodni za čitanje i upis slogovaKontrolne funkcije koje su potrebne da bi realne UIJ ličile na virtuelne

Page 32: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

32

Procedure standardne sprege

Postoji šest procedura unutar sistemarukovanja U/I.

To su TRAŽI (REQUEST), OSLOBODI(RELEASE), POVEŽI (ATTACH), ODVEŽI(DETACH), ČITAJ (READ), PIŠI (WRITE).

Page 33: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

33

TRAŽI, POVEŽI, ...

TRAŽI (TIP_ UIJ, REALNI_ NAZIV)

POVEŽI (VIRTUELNI_NAZIV, STVARNI_NAZIV)

...

Page 34: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

34

STUIJ - Sistematska Tabela Ulazno-Izlaznih Jedinica

STUIJ

TIP PROC_ID DIM_ID UIJ_ID

Page 35: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

35

TPP - Tabela Povezivanja Procesa

TPP

STUIJ_UKAZIVAČ NAZIV SMER

Page 36: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

36

Značenje kolona

TIP Tip UIJ

PROC_ID Identifikacija procesa kom je dodeljena UIJ

= 0 ako UIJ nije dodeljen

= -1 ako UIJ nije u radnom stanju

DIM_ID Identifikacija sprežnog modula UIJ

UIJ_ID Identifikacija UIJ koja se koristi u UIKB

STUIJ_UKAZIVAČ Indeks vrste u STUIJ za odgovarajuću realnu UIJ

NAZIV Naziv virtuelne UIJ na koju je povezana realna UIJ

(praznina ako UIJ nije zakačena)

SMER = 0 ako je UIJ zakačena na ulaz procesa

= -1 ako je UIJ zakačena na izlaz procesa

Page 37: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

37

Blok dijagrami algoritama

Videti u knjizi.

Page 38: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

38

PRIMER RUKOVAOCA UIJ ZA OS LINUX

U cilu ilustrovanja načina pisanja rukovaoca UIJ, u ovom odeljku se navodi primer rukovaoca UIJ za OS Linux.

Razmatra jednostavan primer rukovaoca zadate memorijske zone, koja je njenim korisnicima predstavljena kao uređaj.

OS Linux podržava dve vrste rukovalaca UIJ:

Rukovaoci UIJ posebno prevedeni i povezani sa jezgrom OS.

Rukovaoci UIJ koji se prevode i povezuju nezvisno od OS, i koji se mogu učitati u jezgro u prozvoljnom trenutku.

Page 39: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

39

Osnovne operacije nad datotekama i rukovaocima u Linux-u

Osnovna pretpostavka razvoja rukovalaca UIJ na OS Linux je da je svaki uređaj na OS Linux predstavljen kao datoteka.Osnovne operacije su:otvaranje datoteke (open),zatvaranje datoteke (close),čitanje,upis,funkcija za nadzor i upravljanje UIJ (ioctl),pozicioniranje na željeni oktet u datoteci (seek),preslikavanje datoteka u memorijski adresni prostor (mmap), ipražnjenje internih bafera pridruženih datoteci (flush).

Page 40: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

40

Funkcije za inicijalizaciju modula

Pored toga, moduli moraju da imaju funkcije za inicijalizaciju i deinicijalizaciju modula, koje se prozivaju pri pokretanju, odnosno zaustavljanju modula. To su:

Funkcija za inicijalizaciju modula: int init_module(void).

Funkcija za deinicijalizaciju modula: void cleanup_module(void).

Page 41: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

41

Rukovaoci i datoteke uređaja

Sa stanovišta korisnika nema razlike između obične datoteke na masovnoj memoriji i bilo kog stvarnog uređaja. Koriste se iste funkcije (open, close, read, write, ioctl) kao i za običnu datoteku.

Svaka datoteka je vezana za jedan rukovalac UIJ.

Na osnovu glavnog broja uređaja OS određuje rukovalac UIJ koji treba da obradi zahtev, a na osnovu sporednog broja, rukovalac UIJ određuje nad kojim primerkom (instancom) uređaja treba da obavi operaciju.

Page 42: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

42

Definicije simbola i podataka rukovaoca uređajem “char_dev”

Definicija Objašnjenje

#define SUCCESS 0 Kod uspešnog završetka funkcije.

#define DEVICE_NAME "char_dev" Ime uređaja.

#define MAJOR_NUM 100 Glavni (major) broj uređaja.

#define IOCTL_SET_MSG _IOR(MAJOR_NUM,0,char *)Definicija IOCTL komande

IO_CTL_SET_MSG1

#define IOCTL_GET_MSG _IOR(MAJOR_NUM,1,char *)Definicija IOCTL komande

IO_CTL_GET_MSG1

#define IOCTL_GET_NTH_BYTE _IOWR (MAJOR_NUM,2, int)Definicija IOCTL komande

IO_CTL_GET_NTH_BYTE1

#define BUF_LEN 80 Maksimalna dužina bafera za poruku.

static int Device_Open = 0; Promenljiva za zuzimanje uređaja.

static char Message[BUF_LEN];Memorijska zona kojom rukovalac

rukuje.

static char *Message_Ptr;Pokazivač na tekući oktet za čitanje

ili upis.

struct file_operations Fops = {

read: device_read,

write: device_write,

ioctl: device_ioctl,

open: device_open,

release: device_release

};

Struktura koja sadrži pokazivače na

funkcije rukovaoca uređajem.

Page 43: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

43

Rutina init_module

Kod Objašnjenje Algoritma

int init_module(void){

int ret_val;

// registruj drajver uređaja

ret_val = register_chrdev(MAJOR_NUM,

DEVICE_NAME,

&Fops);

// negativna vrednost znaci gresku

return ret_val;

}

Funkcija nema parametara.

Promenljiva za kod greške registracije.

Registracija rukovaoca UIJ. Parametri:

-glavni broj uređaja,

-ime uređaja i

-adrese rutina rukovaoca.

Pozivaču se vraća kod greške registracije.

Page 44: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

44

Rutina cleanup_module

Kod Objašnjenje Algoritma

void cleanup_module(void){

int ret;

// ođavi uređaj

ret = unregister_chrdev(MAJOR_NUM,

DEVICE_NAME);

// ako je doslo do greske, prijavi

if (ret < 0)

printk("Error: %d\n", ret);

}

Funkcija nema parametara.

Promenljiva za kod greške odjavljivanja.

Odjava uređaja. Parametri:

-glavni broj uređaja i

-ime uređaja.

U slučaju greške prilikom odjavljivanja, kod

greške se ispisuje na ekranu.

Page 45: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

45

Rutina device_open

Kod Objašnjenje Algoritma

static int device_open(struct inode *inode,

struct file *file){

if (Device_Open)

return -EBUSY;

Device_Open++;

Message_Ptr = Message;

MOD_INC_USE_COUNT;

return SUCCESS;

}

Parametri rutine su kontrolne tabele:

kataloga i datoteke (“inode” i “file”).

Ako neko već koristi uređaj,

vrati kod greške (uređaj zauzet).

U suprotnom slučaju, zauzmi uređaj.

Inicijalizuj pokazivač za čitanje ili upis.

Makro OS-a za brojanje korisnika uređaja.

Vrati kod uspešnog završetka.

Page 46: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

46

Rutina device_release

Kod Objašnjenje Algoritma

static int device_release(struct inode *inode,

struct file *file){

Device_Open --;

MOD_DEC_USE_COUNT;

return SUCCESS;

}

Parametri rutine su kontrolne tabele:

kataloga i datoteke (“inode” i “file”).

Oslobodi uređaj.

Smanji broj korisnika ovog uređaja.

Vrati kod uspešnog završetka.

Page 47: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

47

Rutina device_read

Kod Objašnjenje Algoritma

static ssize_t device_read(struct file *file, char

*buffer, size_t length, loff_t *offset){

int bytes_read = 0;

if (*Message_Ptr == 0)

return 0;

while (length && *Message_Ptr){

put_user(*(Message_Ptr++), buffer++);

length --;

bytes_read ++;

}

return bytes_read;

}

Parametri su: tabela datoteka, adresa bafera,

dužina bafera i odstojanje od početka bafera.

Postavi broj pročitanih okteta na 0.

Ako pokazivač za čitanje pokazuje na kraj

poruke, signaliziraj da nema okteta za

čitanje.

Kopiraj oktete iz memorijske zone kojom se

rukuje u korisnički bafer podataka.

Smanji broj okteta koje treba pročitati za 1.

Povećaj broj pročitanih okteta za 1.

Vrati broj uspešno pročitanih okteta.

Page 48: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

48

Rutina device_write

Kod Objašnjenje Algoritma

static ssize_t device_write(struct file *file, const

char *buffer, size_t length, loff_t *offset){

int i;

for(i=0; i<length && i<BUF_LEN; i++)

get_user(Message[i], buffer+i);

Message_Ptr = Message;

return i;

}

Paramerti su: tabela datoteka, adresa

bafera, dužina bafera i odstojanje od

početka bafera.

Kontrolna promenljiva za for petlju.

Kopiraj oktete iz korisničkog bafera u

memorijsku zonu kojom se rukuje.

Postavi pokazivač na početak mem. zone.

Vrati broj okteta koji je uspešno upisan.

Page 49: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

49

Rutina device_ioctl

Kod Objašnjenje Algoritma

static int device_ioctl(struct inode *inode, struct file

*file, unsigned int ioctl_num, unsigned long

ioctl_param){

int i;

char *temp;

char ch;

switch (ioctl_num) {

case IOCTL_SET_MSG:

temp = (char *) ioctl_param;

get_user(ch, temp);

for (i=0;ch&&i<BUF_LEN;i++,temp++)

get_user(ch, temp);

device_write(file, (char *)

ioctl_param, i, 0);

break;

case IOCTL_GET_MSG:

i = device_read(file, (char *)

ioctl_param, 79, 0);

put_user('\0', (char *)

ioctl_param+i);

break;

case IOCTL_GET_NTH_BYTE:

return Message[ioctl_param];

break;

}

return SUCCESS;

}

Parametri su: tabela kataloga, tabela datoteke, kod

ioctl komande i parametar komande.

Kontrolna promenljiva petlje.

Pomoćni pokazivač na niz znakova.

Pomoćna promenljiva za skladištenje znaka.

Izbor obrade prema kodu komande.

Obrada komande za postavljanje poruke.

Preuzmi pokazivač na poruku.

Inicijalizuj promenljivu ch pre ulaska u for petlju.

Ograniči zadatu dužinu na dužinu do prvog nul znaka

ili na dužinu zone kojom se rukuje.

Upiši poruku u zonu kojom se rukuje.

Kraj obrade komande postavljanja poruke.

Obrada komande za preuzimanje poruke.

Pročitaj poruku iz memorijske zone kojom se rukuje,

odnosno iskopiraj je u korisnički bafer podataka.

Upiši nul znaka iza poruke.

Kraj obrade komande za preuzimanje poruke.

Obrada komande za preuzimanje n-tog okteta.

Vrati zadati oktet poruke.

Kraj obrade komande za čitanje zadatog okteta.

Vrati kod uspešnog završetka.

Page 50: Quality Control at NIT · IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ LOKACIJA U/I PROGRAMA ADRESA STATUS a) b) 9 Ilustracija instrukcija za započinjanje U/I kanalnog programa 8 ,587,1$=$=$32ý,1-$1-(8

50

Rutina main aplikacije koja koristi rukovalac UIJ

Kod Objašnjenje Algoritma

int main(void){

int file_desc;

int ret_val;

char *msg = "Ovo je probna poruka!\n";

char tmp[100];

file_desc = open("//dev//char_dev",

O_RDWR);

if (file_desc < 0) {

printf ("Greska otvaranja uredjaja");

exit(-1);

}

printf ("Uredjaj je uspesno otvoren\n");

ret_val = write(file_desc, msg,

strlen(msg)+1);

printf("Upisano: %s, ret_val: %d,

errno: %d\n", msg, ret_val, errno);

memset(tmp, 0, 100);

read(file_desc, tmp, 100);

printf("Procitano: %s\n", tmp);

close(file_desc);

return 0;

}

Funkcija main nema parametara.

Promenljiva za deskriptor datoteke.

Promenljiva povratne vrednosti.

Poruka za upis u uređaj “char_dev”.

Bafer za čitanje poruke iz uređaja.

Otvori uređaj “char_dev” u režimu koji

dozvoljava i čitanje i upis u uređaj.

U slučaju greške pri otvaranju uređaja,

prijavi grešku i prekini program.

U suprotnom slučaju,

prijavi uspešno otvaranje uređaja.

Upiši probnu poruku u uređaj “char_dev”.

Upisuje se i nul znak iza teksta poruke.

Ispiši obaveštenje o upisu poruke u uređaj.

Obriši bafer za čitanje uređaja ”char_dev”.

Pročitaj do 100 okteta iz uređaja.

Ispiši učitani niz okteta.

Zatvori uređaj.

Vrati upravljanje OS radi završetka programa.