komunikacija i sinhornizacija -...
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