You are on page 1of 13

IPC & sincronizare

Agenda Comunicarea inter-procese (IPC- inter-process communication) Grupuri IPC Shared memory Transferul de date cozi de mesaje Transferul de date pipes Sincronizarea task-urilor si a proceselor Semafoare Blocare preventiva (preemption lock) Semnale Evenimente Interfete socket

Comunicarea inter-procese Comunicarea inter-procese: abilitatea a doua procese (sau task-uri) de a comunica intre ele Performanta este determinata partial de cat de mult comunica si interactioneaza procesele Comunicatia este inter-proces si inter-task

Grupuri IPC Shared memory regiune de memorie partajata de doua sau mai multe procese Transfer de date mecanism pentru a trimite/receptiona date Coada de mesaje (message queue) Pipes Sincronizare procese mecanism pentru gestionarea accesului la

resurse si informarea altor procese Semafoare Preemption Semnale Evenimente Mutex Shared memory Parti din Ram care pot fi accesate de diferite procese, task-uri sau CPU Foarte simplu si rapid de implementat Nu are facilitati de sincronizare si trebuie sa fie utilizata impreuna cu un mecanism de sincronizare Exemplu pseudo-cod: Creaza zona de memorie partajata Procesul A acceseaza zona Procesul B acceseaza zona Procesul A sccrie date Procesul B citeste date Shared memory

Syste m Memory Sincronizarea accesului memoriei partajate Accesul la memoria partajata trebuie sa fie sincronizat, altfel procesul B poate citi datele inainte ca procesul A sa termine de scris 1. procesul A incepe sa scrie hello in memoria partajata 2. Procesul B incepe sa citeasca inainte ca procesul A sa termine de scris 3. Procesul B termina de citit, valoarea citita este hell 4. Procesul A termina de scris

Sincronizarea accesului memoriei partajate Exemplu de acces sincronizat la memoria partajata 1. procesul A incepe sa scrie hello si blocheaza accesul la memoria partajata 2. procesul B este gata sa citeasca memoria, dar nu poate pana cand procesul A nu elimina blocarea memoriei 3. procesul A termina de scris si elibereaza accesul la memoria partajata 4. procesul B incepe citirea si valoarea obtinuta este hello

Transferul de date cozi de mesaje Cozile de mesaje permit transferul de date intre procese care nu sunt in legatura directa Coada de mesaje este un protocol de comunicatie asincron, adica emitatorul si recipientul nu trebuie sa se conecteze la coada de mesaje in acelasi timp Mesajele puse in coada sunt stocate pana cand recipientul le acceseaza

Transferul de date cozi de mesaje Task-uri multiple pot trimite si receptiona din aceeasi coada de mesaje Emitatorul si recipientul trebuie sa cunoasca ID-ul cozii de mesaje Coada de mesaje este implementata ca FIFO, in unele cazuri (ex. vxWorks) mesajele pot utiliza prioritati in coada Cozile de mesaje sunt limitate de: - dimensiunea maxima a fiecarui mesaj - dimensiunea maxima a tuturor mesajelor din coada Sunt frecvent utilizate in structuri de tip client - server

Transferul de date pipes Pipes sunt device-uri I/O virtuale (de ex. fisiere) Un pipe este un protocol de comunicatie asincron, emitatorul si recipientul nu trebuie sa fie conectati la pipe in acelasi moment Pipes sunt utilizate pentru comunicatia inter-aplicatii, aplicatiile trebuie doar sa cunoasca numele pipe-ului pentru a comunica Mesajele puse in pipe sunt stocate pana cand recipientul le acceseaza Un task poate astepta un mesaj de la orice device I/O folosind select()

procesul A: se creaza si ataseaza la pipe-ul /root/myPipe Procesul B: se ataseaza la /root/myPipe Procesul A: trimite un mesaj Procesul B: receptioneaza mesajul Sincronizarea task-urilor si proceselor Race condition: o eroare in sistem, datorita careia iesirea unui proces este dependenta in mod critic de o secventa sau o suita de evenimente Sincronizare: coordonarea unor task-uri sau procese simultane pentru a executia unui task astfel incat sa se pastreze ordinea de executie corecta si sa se evite un race c ondition Sectiune critica: o bucata de cod care acceseaza o resursa partajata (structura de date sau device) care nu trebuie accesata concurent de mai mult de un task sau proces Deadlock: o situatie in care doua sau mai multe procese/task-uri asteapta finalizarea celuilalt, acest lucru nemai fiind posibil Starvation: un task tine resursele de care alte task-uri au nevoie si nu le mai elibereaza Mutual exclusion (mutex): este uttilizat pentru a preintampina utilizarea simultana a resurselor partajate de catre task-uri multiple Exemplu simplu de nesincronizare: Doua task-uri scriu pe un output device Task-urile A si B printeaza hello Task-ul A incepe sa scrie Task-ul B incepe sa scrie in timp ce A nu a terminat Datele de iesire sunt corupte

Exemplu simplu de sincronizare: Doua task-uri trebuie sa scrie pe acelasi device Task-urile A si B tiparesc hello Task-ul A incepe sa scrie si blocheaza accesul la device Task-ul B asteapta pana cand I se permite accesul la device Task-ul A termina si permite accesul la device, unde task-ul B tipareste hello

Semafoare Semaforul este o variabila protejata pe care unul sau mai multe task-uri o pot accesa si elibera in scopul realizarii sincronizarii sau mutual exclusion (mutex) Semaforul este alcatuit din: Semaphore control block (contine datele interne ale semaforului) Un ID unic Valoarea Lista de task-uri in asteptare Variabila valoare determina cate task-uri pot accesa simultan sectiunea critica

Semafoare Operatii atomice: set de operatii care pot fi combinate astfel incat sa para o singura operatie, care poate avea doar doua valori, succes sau esec Cand un task are nevoie de acces la o sectiune critica acceseaza un semafor; acesta isi reduce variabila valoare cu operatia atomica, acest lucru asigurand faptul ca permisiunea este acordata unui singur task Valoarea semaforului (token-count) este scazuta de fiecare data cand un semafor este accesat si incrementata cand semaforul este cedat Semafoare: operatii 1. Semaforul pentru sectiunea critica este creat, cu valoarea initiala (token) 1 2. Task-ul A preia semaforul intr-o operatie atomica si previne ca alte taskuri sa preia semaforul 3. Task-ul B incearca sa acceseze sectiunea critica si cere permisiunea de la semafor, care este deja luat, astfel incat task-ul B poate sa: 1. Astepte eliberarea semaforului intrand in lista de asteptare a acestuia 2. Continue, fara sa acceseze sectiunea critica 4. Task-ul A elibereaza semaforul, valoarea acestuia este decrementata 5. Task-ul B preia semaforul si poate accesa sectiunea critca

Semafoare binare Un semafor binar poate avea doar valoarea 0 sau 1. cand valoarea acestuia este 0 semaforul este considerat indisponibil (gol); cand valoarea lui este 1, semaforul binar este considerat disponibil Cand este creat, semaforul este initializat cu 0 sau 1

Semafoare: counting semaphores Counting semaphore utilizeaza un numarator pentru a permite sa fie luat/eliberat de mai multe ori Cand este creat valloarea unui astfel de semafor este initializata astfel incat sa evidentieze tokenul initial Semaforul este indisponibil cand nu mai sunt toke-uri (count = 0)

Semafoare: mutual exclusion (mutex) Un semafor mutual exclusion (mutex) este un semafor binar care suporta acces recursiv, stergeri de task-uri si unul sau mai multe protocoale care sa evite problemele inerente exluderii mutuale Unele resurse pot fi afectate daca sunt accesate de mai multe taskuri simultan Structuri de date partajate Fisiere partajate Shared hardware devices Accesul exclusiv la acestea este necesar inaintea utilizarii lor

Semafoare: mutual exclusion (mutex) Starea unui mutex este locked sau unlocked Mutex suporta si operatii care nu sunt permise in cazul semafoarelor binare

Semafoare mutex

Preemption lock Este folosit in preemptive kernel pentru a sincroniza task-uri Cand un task intra intr-o sectiune critica, preemption lock dezactiveaza kernel preemption Trebuie folosit cu atentie, deoarece un singur task poate fi executat

pana cand intra in suspend sau blocking mode Cons: task-uri de proiritate mai mare nu pot fi executate, chiar daca nu influenteaza sectiunea critica; se poate introduce indeterminism Pros: mecanism simplu, permite acumularea de evenimente Exceptii si semnale O exceptie este orice eveniment care intrerupe executia normala a procesorului si forteaza procesorul sa execute instructiuni speciale in mod privilegiat Semnale: facilitati ale sistemului de operare care sunt proiectate pentru manipularea conditiilor exceptionale si modificarea lantului de comanda in mod asincron Semnalele generate de sistemul de operare include cele produse ca raspuns la erori de bus si exceptii floating point Evenimente Evenimentele sunt utilizate pentru sincronizarea task-urilor Informeaza un rask despre evenimentele interne sau externe Poate schimba starea unui task Exemplu: un task poate sa se inregistreze la un message queue; cand un mesaj nou este receptionat, coada de mesaje va trimite un eveniment taskului

1. task-ul se inregistreaza la cada de mesaje si isi schimba starea in pending 2. Se primeste un mesaj nou 3. Coada de mesaje trimite un eveniment task-uluisi starea acestuia se modifica Socket interface Permite comunicatiile intre host sau intre procese pe un computer, folosind conceptul de internet socket (INET) sau UNIX based socket

A fost dezvoltat la University of California, Berkley, pentru utilizarea pe sisteme UNIX. Toate OS-urile moderne au acum implementat acest model, care a devenit standardul de conectare pe internet Folositi pe scara larga la comunicarea inter-procese Socketii sunt accesibili prin operatii pe file descriptors Conceptele: Socket: punctul final al comunicatiilor, reprezentat ca file descriptor Domeniu: specifica familia de protocoale ale socketului Sunt doua domenii importante: Domeniul UNIX pentru comunicatii locale, formatul de adresa a socketului este calea de acces Domeniul INET, cu protocoale internet de tip TCP sau UDP adresa este IP-ul Cateva tipuri de socket: Stream socket: asigura duplex data stream Datagram socket: data stream unidirectional Raw socket: asigura aplicatiei acces direct la protocoalele de nivel jos Socket interface Operatii fundamentale: Build si setup Crearea unui socket cu comanda socket Legarea (bind) socket-ului la o adresa in sistemul local (numarul portului) Conectarea socket-ului la un alt socket (nu in cazul datagram socket) Utilizarea socketi-lor Comenzile read sau listen sunt utilizate pentru a citi date din socket Send sau receive sunt folosite pentru a trimite/primi date Close estre folosita pentru a inchide un socket Rezumat IPC sunt folosite pentru (a) schimb de date intre task-uri (b) operatii de sistem sincronizate Comunicatia se poate realiza intre task-uri si procese ale aceluiasi nod sau ale unor noduri diferite Sunt trei grupuri majore de IPC: memorie distribuita, data passing, sincronizarea proceselor Memoria partajata este o regiune in memoria sistemului care este accesibila maim ultor task-uri, este rapid si usor de folosit dar

necesita un mecanism de sincronizare Coada de mesaje este un model de comunicare asincron care necesita un emitator si un receptor. Utilizat in arhitecturi client server Pipes sunt similare cozii de mesaje dar utilizeaza sistemul de fisiere. Sunt folosite pentru comunicatii inter-aplicatii. Aplicatiile trebuie sa stie numele pipe-ului. Task-urile pot astepta mai multe pipe-uri Sectiunile critice care trebuie sa fie accesate concurent trebuie protejate cu un semafor Un semafor este o variabila protejata care pazeste o resursa numarand cate task-uri utilizeaza resursa si permite accesarea acesteia Un semafor binar poate fi gol sau plin, permitand accesul la un singur task Counting semaphores utilizeaza o variabila pentru a garanta acces multiplu la sectiuni critice Preemption lock dezactiveaza kernel scheduler astfel incat niciun alt task nu poate fi executat, OS-ul executa un singur task pana cand acesta permite rularea kernel scheduler Semnalele sunt evenimente ale sistemului care sunt proiectate pentru gestionarea conditiilor exceptionale Evenimentele sunt notificari rapide care pot fi utilizate de OS pentru a semnala modificari, notificari sau evenimente specifice Interfata cu socketii este un mecanism de comunicare standard care utilizeaza INET sau file system pentru a identifica receptorii si emitatorii

You might also like