Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1
RUKOVANJE ULAZOM-IZLAZOM
U-I jedinice, prekidi i U-I procesi
Nezavisnost programa od UIJ
Primer rukovaoca
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
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.
4
Funkcionalna veza između komponenti računarskog sistema
SIGNAL PREKIDA
CP OM UIP
UJ
UJ
UJ
UIJ
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)
6
U-I Operacije
U principu u U/I programu postoje tri različite operacije:
- ČITANJE,
- UPIS i
- KONTROLNA OPERACIJA
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
8
a) UIKB; b) Tipičan format naredbe
IDENTIFIKACIJA UIJ KOP IDENTIFIKATOR BROJ
LOKACIJA U/I PROGRAMA ADRESA
STATUS
a) b)
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
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
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)
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
13
Rutina reakcije na prekid START
ZABRANA PREKIDA
SLANJE PORUKA
DA SE RADI O PREKIDU
AKTIVIRANJE U/I RUKOVAOCA
DOZVOLA PREKIDA
POVRATAK
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
29
Čitanje i upis
Čitanje i upis se aktiviraju pozivanjem odgovarajuće procedure:
ČITAJ (UL_NAZIV, N, A)
UPIŠI (IZL_NAZIV, N, A)
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).
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
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).
33
TRAŽI, POVEŽI, ...
TRAŽI (TIP_ UIJ, REALNI_ NAZIV)
POVEŽI (VIRTUELNI_NAZIV, STVARNI_NAZIV)
...
34
STUIJ - Sistematska Tabela Ulazno-Izlaznih Jedinica
STUIJ
TIP PROC_ID DIM_ID UIJ_ID
35
TPP - Tabela Povezivanja Procesa
TPP
STUIJ_UKAZIVAČ NAZIV SMER
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
37
Blok dijagrami algoritama
Videti u knjizi.
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.
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).
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.