Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » referate » informatica
Comunicare si sincronizare prin mesaje

Comunicare si sincronizare prin mesaje




Comunicare si sincronizare prin mesaje

Deoarece procesele care coopereaza au nevoie atat de comunicare cat si de sincronizare, este de dorit integrarea lor intr-un singur mecanism. Mesajele reprezinta un mecanism simplu pentru realizarea acestui deziderat. In esenta, un mesaj este o colectie de informatii ce pot fi schimbate intre procesul transmitator si cel receptor. Pentru utilizarea lor sunt disponibile cele doua functii : SEND si RECEIVE. Mesajele sunt puse intr-o coada de mesaje.

Creare coada de mesaje :

int msgget(key_t key, int msgflg);

key=cheia resursei (ce coada de mesaje sa utilizeze);

msgflg=IPC_CREAT, IPC_EXCL

Daca se specifica IPC_CREAT && IPC_EXCL, functia va returna eroare daca coada de mesaje exsita deja in sistem.

Trimitere si receptionare mesaj :

typedef struct msqid_ds msqid_ds;

typedef struct msgbuf msgbuf;

int msgsnd(int msqid,struct msgbuf *msgp, int msgsz, int msgflg);

int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, int msgtyp, int msgflg);

msqid=identificatorul cozii de mesaje returnat de msgget

msgsz=dimensiunea lui msgp

msgflg=IPC_NOWAIT, MSG_EXCEPT, MSG_NOERROR

IPC_NOWAIT folosit la msgsnd - daca mesajul depaseste msg_qbytes, se returneaza eroare, mesajul nefiind transmis. Altfel, procesul este suspendat pana cand conditia de suspendare nu mai exista (caz in care mesajul va fi transmis) sau coada de mesaje este distrusa (caz in care se returneaza eroare) sau procesul primeste un semnal care trebuie tratat (caz in care se returneaza eroare).



IPC_NOWAIT folosit la msgrcv - procesul nu se blocheaza asteptand aparitia mesajului.

MSG_NOERROR folosit la msgrcv - daca lungimea textului mesajului este mai mare decat msgsz, el va fi truchiat; altfel, se returneaza eroare.

Daca msgtyp=0, va fi extras primul mesaj din coada;

>0, va fi extras primul mesaj din coada de tipul msgtyp daca msgflg!=MSG_EXCEPT; altfel, se va extrage primul mesaj cu tipul!=msgtyp;

<0, va fi extras primul mesaj cu cel mai mic tip valoarea absoluta a lui msgtyp.

int msgctl(int msqid, int cmd, struct msqid_ds *buf);

- se executa operatia de control specificata de cmd

cmd=IPC_STAT, copiaza structura de date a mesajului in buf (procesul trebuie sa aiba dreptul de citire a mesajului);

IPC_SET, copiaza informatia din buf in structura mesajului (procesul trebuie sa aiba uid-ul proprietarului, creatorului sau al superuser-ului);

IPC_RMID, sterge toate mesajele, inclusiv coada de mesaje.







Politica de confidentialitate







creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.