ProvaTeorica 2010.07.12

From Sistemi Operativi
Jump to navigation Jump to search

Esercizio 2

Fatto dal professore

# Esercizio 2: Message passing con priorita'. Sia dato un servizio di message passing asincrono. Si implementi un servizio
# di message passing con priorita' senza fare uso di processi server. Il nuovo servizio ha due chiamate psend(dest, prio,
# msg) e precv(sender). La precv consente la ricezione da chiunque (sender==*). Quando un processo P chiama la precv
# questa deve restituire il messaggio di massima priorita' fra quelli spediti dal sender specificato a P o sospendere il
# processo se non ce ne sono in attesa. (suggerimento: se serve si puo' usare la funzione getpid() che restituisce
# l'identificativo del processo chiamante).


psend(dest, pio, msg)
  asend(dest,(MSG,getpid(),prio,msg))

precv(sender)
  asend(getpid,(NULLTAG,getpid(),NULL,NULL))
  do:
    (tag,senderx,prio,msg)=arev(*)
    if(tag==MSG):
      msgdb.add(senderx,prio,msg)
    while tag!=NULLTAG.
    while (m=msgdb.getmaxprio(sender))=None:
      (tag,senderx,prio,msg)=arev(*)
      msgdb.add(senderx,prio,msg)
    return m