SHPORA.net :: PDA

Login:
ðåãèñòðàöèÿ

Main
FAQ

ãóìàíèòàðíûå íàóêè
åñòåñòâåííûå íàóêè
ìàòåìàòè÷åñêèå íàóêè
òåõíè÷åñêèå íàóêè
Search:
Title: | Body:

c.Comunic.intr

--algoritmul msgsnd /* trimiterea unui mesaj */
^intrãri (1)descriptorul cozii de mesaje
(2)adresa structurii de date pentru mesaje
(3)lungimea mesajului
(4)indicatori /* flags */
ie?iri numãrul de octeti efectiv trimisi
{
verifica valabilitatea descriptorului si a drepturilor de acces;
while(nu exista spatiu de memorie suficient pt. stocarea mesajului)
{
if(flag-ul specifica faptul ca procesul nu asteapta)
return;
sleep(eveniment: exista spatiu suficient pt. stocarea mesajului)
}
aloca antet de mesaj;
copiaza mesajul propriu-zis din spatiul user in spatiul nucleu;
actualizeaza structura de date:
-insereaza in lista noul antet de mesaj;
-initializeaza pointerul din antetul de mesaj catre zona de date;
-inscrie valoarea:-contorului de octeti;
-momentelor de timp;
-identificatorului procesului transmitator;
^trezeste toate procesele care asteapta sa citeasca mesaje din coada;
}
Structurile de date pentru comunicarea prin mesaje:
^Procesele primesc mesaje cu ajutorul apelului sistem msgrcv, care are urmãtoarea sintaxã count = msgrcv(id, msg, maxcount, type, flag)
unde:
-id este descriptorul de mesaj;
-msg este adresa unei structuri de date a utilizatorului în care se va scrie mesajul primit;
-maxcount este dimensiunea ?irului de caractere din structura de date msg;
-type specificã tipul de mesaj pe care utilizatorul dore?te sã-l citeascã;
-flag precizeazã ce trebuie sã facã nucleul dacã nu existã mesaje în coada de mesaje.
Valoarea întoarsã de apel, count, reprezintã numãrul de octeþi de date efectiv primiþi de cãtre utilizator.