komunikacija i sinhornizacija -...

Post on 20-Jan-2020

22 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Komunikacija i sinhornizacija

• Procesi i zadaci• Komunikacija između procesa• Komunikacija između zadataka• Sinhronizacija• Sinhronizacija

Komunikacija izmedju programa Fajl - File

�Na najvišem nivou – nivou procesa, odnosno aplikacio ja koje se izvršavaju

Fajl kao izlaz iz jednog programa predstavlja ulaz za dr ugi program.

�Implementacija u svim operativnim sistemima.

�Batch fajlovi

“Windows” primer

REM Batch - File asembliranje programa sa više modulaREM Batch - File asembliranje programa sa više modulaa51 modul1.a51 debuga51 modul2.a51 debuga51 modul3.a51 debugbl51 modul1.obj, modul2.obj, modul3.obj to programoh51 program

---- u komandnom prozoru ----------

dirdir > lista.txt

Proces�Program

• Izvršni fajl

�Proces (Linux)• Instanca programa koja se izvršava od strane OS• Svaki proces ima jedinstveni “ID” ( PID)• Svaki proces predstavljen strukturom podataka• Polje pointera ( array of pointers ) koji ukazuju na svaku

strukturustrukturu• Stanja procesa (Running, Waiting, Stopped, Zombie)

�Thread• Najmanji programski blok koji šeduler može raspore đivati• Proces može imati više thread-ova• Zajedni čki adresni prostor • Preklapanje konteksta brže• Komunikacija izme đu thread-ova jer dele memorijski prostor

Kontrola procesa

�Kreiranje novog procesa:• Funkcija operativnog sistema fork• Kreirani proces se naziva child process

Komunikacija izmedju procesaInterprocess Communications - IPC

�Razmena podataka izme đu procesa.

�Pet osnovnih na čina komunikacije (Linux OS):

• Preko deljive memorije ( shared memory ) – jednostavno čitanje i upis u specificiranu memorijsku lokaciju.

• Preko mapirane memorije ( mapped memory ) – memorija pridružena fajl sistemu.pridružena fajl sistemu.

• “Pipes” koje omogu ćavaju sekvencijalnu komunikaciju izme đu dva povezana procesa

• FIFO koji sli čno pipe elementu omogu ćava komunikaciju izme đu nepovezanih procesa jer mu je dodeljeno ime kroz fa jl sistem.

• “Socket” omogu ćava komunikaciju izme đu nepovezanih procesa čak i na razli čitim ra čunarima.

Komunikacija izmedju procesaInterprocess Communications - IPC

�Kriterijumi za podelu komunikacije.

• Da li se komunikacija ograni čava na povezane procese (procesi sa istim pretkom), na nepovezane procese koji dele isti fajl sistem, ili na bilo koji ra čunar u mreži.

• Da li su procesi koji komuniciraju ograni čeni samo na čitanji ili upis podataka.

• Po broju procesa koji komuniciraju.

• Da li su procesi koji komuniciraju sinhronizirani p omoću IPC –na primer ako je proces koji čita podatke u blokiranom stanju dok podaci ne budu dostupni.

Deljiva memorija – Shared Memory

�Najjednostavnija metoda za komunikaciju izme đu procesa.

�Deljiva memorija omogu ćava da dva i više procesa pristupaju istoj memoriji

• API funkcija malloc koja vra ća pointer na memoriju

�Kada jedan proces promeni sadržaj memorije, svi pro cesi vide ovu promenu.

�Velika brzina pristupa deljivoj memoriji kao i pris tup lokalnoj �Velika brzina pristupa deljivoj memoriji kao i pris tup lokalnoj memoriji procesa. Ne zahteva sistemske pozive ili u laz u kernel.

�Potreba za ugradnjom neke vrste protokola koja će obezbediti konzistentnost podataka.

• Semafor procesa ( Processes Semaphores )

Semafor

Semafor S je memorijska lokacija koja deluje kao blokator u c ilju zaštite kriti čnih regiona.

Wait P(S) i signal V(S) operacije.

void P(int S){

while (S == TRUE);S=TRUE;S=TRUE;

}

void V(int S){

S=FALSE;}

P and V are the first letters of the Dutch “to test ” – proberen – and “to increment” – verhogen.They were first suggested by Dijkstra [Dijkstra65]. P and wait, and V and signal will be usedsynonymously throughout the text.

Semafor

Mapirana memorija – Mapped Memory

�Mapirana memorija omogu ćava razli čitim procesima da komuniciraju preko deljivog fajla.

�Formira asocijaciju izme đu fajla i memorije procesa.

�Može se koristiti za IPC ili za jednostavan pristup sadržaju fajla.�Može se koristiti za IPC ili za jednostavan pristup sadržaju fajla.

�Može se posmatrati i kao memorijski bafer u koji je smešten celokupni sadržaj fajla. Pristup fajlu se svodi na čitanje i upis u memorijske lokacije

“Pipes”

�Komunikacioni ure đaj (device ) koji omogu ćava jednosmernu komunikaciju.

�Podaci se upisuju na “write priklju čak” a čitaju sa “read priklju čka”.

�Uređaj serijskog tipa – podaci se čitaju istim redosledom kako su i upisani.

�Koriste se za komunikaciju izme đu dve niti ( thread ) istog procesa �Koriste se za komunikaciju izme đu dve niti ( thread ) istog procesa ili izme đu parent i child procesa.

“FIFO”

�“ First-in, first-out “ fajl je “pipe” sa imenom u fajl sistemu.

• Named pipes

�Svaki proces može otvoriti i zatvoriti FIFO.

�Pristup kao obi čnom fajlu.

• Jedan proces otvara FIFO za upis

• Drugi proces otvara FIFO za čitanje

• Za upis i čitanje koriste se funkcije niskog nivoa ( write, read )

“Sockets”

� Dvosmerni komunikacioni ure đaj (device ) koji se može koristiti za komunikacionu izme đu procesa na razli čitim mašinama.

�Internet programi koji koriste sokete:

• Telnet, rlogin, FTP, talk, World Wide Web

�Kreiranje soketa – specificiranje tri parametra:

• communication style (slanje podataka u obliku paketa)

•Connectiion (slično usostavljanju veze pri telefoniranju) ,

•Datagram (nema garancije o redosledu isporuke i prijema poruka)

•namespace,

•protocol

Intertask komunikacija - Baferovanje podataka

Metode razmene podataka:

Globalne promenljive – u brzim sistemimaKorupcija podataka.

Sprečavanje korupcije – primena bafera.

Izbor veli čine bafera.

Dvostruko baferovanje - Time-Relative Buffering

Razmena podataka izme đu vremenski korelisanih zadataka

Telemetrijski sistemeDisk kontroleriGrafi čki interfejsiNavigaciona opremaKontrole robota

Primer

Očitavanje impulsa sa akcelerometra (x,y,z) vrši se sv akih 10 ms.Procesiranje se vrši na 40 ms.

Koristi baferovane promenljive xb, yb, zb

introf(); /* disable interrupts */xb=x; /* buffer data */yb=y;zb=z;intron(); /* enable interrupts */intron(); /* enable interrupts */process(xb,yb,zb); /* use buffered data */

Pravilo: Prva procedura u ciklusu treba da bude rut ina koja baferuje sve podatkeiz zadatka sa višim prioritetom u teku ći zadatak ( buffer-in ).Zadnja procedure – baferovanje svih podataka zadacima nižeg nivoa

Specijalna struktura podataka. Lakše manipulisanje.- Primer: Kružni bafer (16 elemenata, bafer prazan)

head

…… …

Intertask komunikacija – Kružni baferi

………

…… …

tail Bafer prazanKada je:tail = head

…… …

2 elementa smeštenau bafer

- Primer: Kružni bafer (nakon dva upisa)

Intertask komunikacija – Kružni baferi

[0]

head[1]

………

…… …

tail

Nakon svakog upisa inkrementira se head pointer (ako je mogu će)“ postincrement ”

…… …

Elementi koji se o čitaju ostaju u baferu ali se preko njih može

- Primer: Kružni bafer (nakon dva čitanja)

Intertask komunikacija – Kružni baferi

[0]

head[1]

………

…… …

tail

preko njih može prepisati novi podatak

(buffer empty)

head

[12][13] [14]

- Primer: Kružni bafer (nakon 16 upisa)

Intertask komunikacija – Kružni baferi

[15]

[0]

[1]

[2]

[3]

[4][5][6]

[7]

[8]

[9]

[10]

[11]

[12][13] [14]

Bafer je punkada je:head = tail – 1

tail

Specijalna struktura podataka. Lakše manipulisanje .

typedef struct ring_buffer{

int contents[N];int head;int tail;

Intertask komunikacija – Kružni baferi

int tail;}

void read (int data, ring_buffer *s){

if (s->head==s->tail)data=NULL; /* underflow */

else{data=s->contents +head; /* retrieve data from buffer */s->head=(s->head+1) % N; /* decrement head index */}

}void write (int data, ring_buffer *s){{

if ((s->tail+1) %N==head)error(); /* overflow, invoke error handler */

else{s->contents+tail=data;tail=(tail+1) % N; /*take care of wrap-around */}

}

Overflow i Underflow

Mailbox

Memorijska lokacija koju jedan ili više zadataka ko riste za prenos podataka ili sinhronizuju

void pend (int data, s);void post (int data, s);

Razlika izme đu pend i jednostavnog pulinga.Podatak koji se prenosi – flag, podatak ili pointer na strukturu.

Implementacija

Lista zadataka sa potrebnim resursimaLista resursa sa njihovim stanjima

Tabela 1 Tabela 2Task Resource Status Resource Status Owner100 Printer Has it Printer Busy 100102 Mailbox 1 Has it Mailbox 1 Busy 102104 Mailbox 1 Pending Mailbox 2 Empty None

Binarni semafor (Inicijalno mutex = 1 i proc_sem = 0)

bool mutex, proc_sem, full_slots, empty_slots;void post(int mailbox, int message){

wait(mutex);If (empty_slots)

{insert(mailbox,message);update();signal(mutex);Signal(proc_sem);

}}else

{...signal(mutex);wait(proc_sem);wait(mutex);insert(mailbox,message);update();signal(mutex);signal(proc_sem);

}};

void pend(int *mailbox,int *message){

wait(mutex);if((full_slots))

{extract(mailbox,message);update();signal(mutex);

}else

{{...signal(mutex);wait(proc_sem);wait(mutex);extract(mailbox,message);update();signal(mutex);

}};

Broja čki semaforZaštita grupe resursa, evidencija o broju slobodnih resursa.Inicijalizuju se na broj slobodnih resursa.

Wait:void MP(int S){

while (S < 0);S=S-1;

}

Signalvoid MV(int S){

S=S+1}

Realizacija broja čkog semafora ako kernel ima binarne semafore:Neka su S i T binarni semafori a P(S) i V(S) wait i signal operacije resp.Nek je R globalni intedžer.

void MP (int R) /* multiple wait */{

P(S); /* lock counter */R=R-1; /* request a resource */if(R < 0) /* none available? */{{

V(S); /* release counter */P(T); /* wait for free resource */

};V(S); /* release counter */

}

void MV(int R) /* multiple signal */{

P(S); /* lock counter */R=R+1; /* free resource */if (R <= 0) /* give that task the go ahead */

V(T);elseelse

V(S); /* release counter}}

Neki problem i sa semaforima

Atomi čnost sekvence testiranja i postavljanja semafora.

void P (int S){

while (S == TRUE);S = TRUE;

}

Na asembleruNa asembleru@1 LOAD R1,&S

TEST R1,1JEQ @1 ; S = TRUE? !!prekid!!STORE &S,1 ; S := TRUE

Test i set instrukcije

top related