next up previous contents
Next: D.5 Semaforji Up: D Komunikacija med procesi Previous: D.3 Cevi Vsebina: contents

D.4 Sporocila

Sporocila IPC se posiljajo v vrsti, za kar poskrbi jedro operacijskega sistema, ki tudi hrani sporocila in skrbi za previlen pretok sporocil med procesi. S funkcijo msgget se kreira nova vrsta (message queue) ali pa se odpre obstojeca vrsta. Posiljanje sporocil in s tem dodajanje novih sporocil v vrsto se izvede z msgsend. Pri prevzemanju sporocil ni nujno, da sprejmemo sporocila tako, kot so prihajala (prvi noter -- prvi ven), ampak lahko tudi izbiramo vrsto sporocil ter tako filtriramo glede na naso prioriteto. Prevzemanje je izvedeno s funkcijo msgrcv. Sporocila, ki se posiljajo po kanalu v vrsti so seveda uporabnisko nastavljiva in poljubne oblike. Tako ima funkcija msgsnd sledece argumente:

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

int msgsnd(int msgid, const void *ptr, size_t nbytes, int flag);
Razvidno je, da se med procesi lahko izmenjujejo zelo kompleksni podatki, kot so strukture ali seznami. Procesi morajo imeti le enake definicije za tipe podatkov in dogovor o stevilkah sporocil iz katerih je razvidno, kaksen tip podatkov je v sporocilu. Ker se celoten proces izmenjave podatkov odvija na istem operacijskem sistemu, tu ni potrebno dodatno kodirati in dekodirati, kot je to potrebno pri distribuiranih sistemih z razlicnimi operacijskimi sistemi. Obstaja pa omejitev pri posiljanju sporocil. Omejitev obstaja zaradi tega, ker jedro sistema skrbi za shranjevanje in posiljanje sporocil. Tako je velikost enega sporocila najveckrat omejena na 4048 bytov. Omejeno je tudi celotno stevilo sporocil, ki je naenkrat v bazenu sporocil. Z dejstvom, da je tako posiljanje paketno in omejeno, ter v primerjavi z neprekinjenimi tokovi (streams) nic hitrejse, se ga za nove aplikacije ne priporoca.



Copyright © 1995 Leon Kos, Univerza v Ljubljani