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

RUKOVANJE ULAZOM-IZLAZOM - rt-rk.uns.ac.rs Poglavlje 5...ULAZNO-IZLAZNE JEDINICE RAČUNARSKOG SISTEMA Moderni računarski sistemi poseduju velik broj ulazno-izlaznih jedinica (UIJ),

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

1

RUKOVANJE ULAZOM-IZLAZOM

U-I jedinice, prekidi i U-I procesiNezavisnost programa od UIJPrimer rukovaoca

2

Odnosa planera poslova i sistema za rukovanje U/I

KORISNIKOVPROGRAM

a)

KOMANDNADATOTEKA

b)

PLANER POSLA

UNAPREDDEFINISAN

ULAZ

1 TRAKA2 DISKA

1 STAM.3 DISKA

2 TRAKA1 DISK

POSAO POSAO POSAO1 3 12

RED ČEKANJAPOSLOVA

d)

INTERAKTIVNEKOMANDE

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 BAFERSLOGA

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 OperacijeU principu u U/I programu postoje tri različite operacije:

- ČITANJE,- UPIS i- KONTROLNA OPERACIJA

7

Primer kanalnog programa

OPERACIJAUKAZIVAČ

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 BROJLOKACIJA U/I PROGRAMA ADRESA

STATUSa) b)

9

Ilustracija instrukcija za započinjanje U/I kanalnog programa

U/I RUTINA ZA ZAPOČ INJANJE U/I PROG RAM A

U/I K ANALNI PROG RAM

U/I BAFERBLOK A

pronađ i....

pretraži....

čitaj....

START U/I

U/I

K ANA L

SISTEM ZA RUK OVANJE

INFORM ACIJAM A

ULAZNO -IZLAZNA JEDINICA

K O NTRO LER

JEDINICA DISK A

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 signalaUIP

Izvršava se BC 1, ZAZ

Izvršava se BC 3, PROBL

ZavršetakStart 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 stanjai slanje uslovnogkoda = 1 ka CP

ZavršetakU/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 uslugub) Rukovalac prekidimac) 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

INICIJALIZACIJAU/I PROCESA

SAKUPI (PORUKA, STANJE)

NEMA PORUKA

PREKID

IDENTIFIKACIJAUZROKA PREKIDA

NORMALANZAVRŠE.

GREŠKA

FORMIRANJE U/IPROGRAMA

FORMIRANJE UIKB

START UI

USPEŠANSTART UI

PREDUZMIAKCIJU

UZIMANJE IDENT. PROCESA IZ PORUKE

AKTIVIRAJ PROCES SA GORNJIM ID

DOZVOLA PREKIDA

BLOKIRANJE

ZABRANA PREKIDADA

DA

NE

NE

DA

DANE

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 on ukazuje da se radi o neotklonjivoj grešci, i 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 UIJDa 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 spregaKarakteristike 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 UIJProces 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 MODULIFunkcija UI kontrolnog dela je da prevede stvarnu u virtuelnu UIJ i obrnuto.Primera radi, ukoliko su znaci kodirani u ASCII kodu, treba ih prevesti na kod stvarne UIJ i transformisati format sloga povorke znakova u prirodnu strukturu stvarne UIJ.Te procedure nose naziv SPREŽNIH MODULA UIJ (DIM - DEVICE INTERFACE MODULES).

31

Zadaci sprežnih modulaOvi moduli su odgovorni za transformacije između povorki znakova i stvarnih uređaja ili klase sličnih UIJ,za baferisanje,odnosno, za sve ono što zahteva pretvaranje niza znakova u prirodni format na stvarnim UIJ.Isto tako, ovi moduli su odgovorni za konstrukciju U/I programa koji su neophodni za čitanje i upis slogova, kao i za kontrolne funkcije koje su potrebne da bi realne UIJ ličile na virtuelne.

32

Procedure standardne spregePostoji šest procedura unutar sistema

rukovanja 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 UIJPROC_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 UIJUIJ_ID Identifikacija UIJ koja se koristi u UIKBSTUIJ_UKAZIVAČ Indeks vrste u STUIJ za odgovarajuću realnu UIJNAZIV 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 algoritamaVideti 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 modulaPored 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đajaret_val = register_chrdev(MAJOR_NUM,

DEVICE_NAME,&Fops);

// negativna vrednost znaci greskureturn 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đajret = unregister_chrdev(MAJOR_NUM,

DEVICE_NAME);// ako je doslo do greske, prijaviif (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, kodgreš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 krajporuke, signaliziraj da nema okteta začitanje.Kopiraj oktete iz memorijske zone kojom serukuje 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, constchar *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, adresabafera, dužina bafera i odstojanje odpočetka bafera.Kontrolna promenljiva za for petlju.Kopiraj oktete iz korisničkog bafera umemorijsku 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 longioctl_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, kodioctl 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 znakaili 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 kojidozvoljava 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.