Systeem-ge ï ntegreerde Programmatuur

105
slide 1 Systeem-geïntegreerde programmatuur Yolande Berbers SGP Systeem-geïntegreerde Programmatuur Systeem-geïntegreerde Programmatuur Marc Gobin (&Yolande Berbers) Departement Computerwetenschappen (200A 03.20) ([email protected])

description

Systeem-ge ï ntegreerde Programmatuur. Marc Gobin (&Yolande Berbers) Departement Computerwetenschappen (200A 03.20) ([email protected]). practische organisatie. Marc Gobin is ziek ik geef enkele weken les zeker 2, waarschijnlijk 3, misschien meer - PowerPoint PPT Presentation

Transcript of Systeem-ge ï ntegreerde Programmatuur

slide 1Systeem-geïntegreerde programmatuur Yolande Berbers

SGP Systeem-geïntegreerde Programmatuur

Systeem-geïntegreerde Programmatuur

Marc Gobin (&Yolande Berbers)

Departement Computerwetenschappen

(200A 03.20)([email protected])

SGP

slide 2Systeem-geïntegreerde programmatuur Yolande Berbers

practische organisatie

Marc Gobin is ziek ik geef enkele weken les

zeker 2, waarschijnlijk 3, misschien meer slides kun je vinden via mijn home-page

http://www.cs.kuleuven.ac.be/~yolande/

lessen over device drivers die geef ik al altijd

practica: zie verder

SGP

slide 3Systeem-geïntegreerde programmatuur Yolande Berbers

overzicht van de cursus

karakteristieken van real-time systemen

Ada en Java voor real-time en embedded systemen

gelijktijdige processen

het invoeren van tijd

interrupts

device drivers

petri-netten

schedulability

temporele logica

SGP

slide 4Systeem-geïntegreerde programmatuur Yolande Berbers

practica

2 practica practicum 1

individueel schrijven van een programma dat gebruik maakt van

gelijktijdige taken begroot op 10 uur

practicum 2 in groepjes van 2 schrijven van pakket voor communicatie tussen 2 pc’s begroot op 20 uur

er wordt een demo van de 2 practica georganiseerd timing is afhankelijk van verloop herstel Marc Gobin

slide 5Systeem-geïntegreerde programmatuur Yolande Berbers

SGP Systeem-geïntegreerde Programmatuur

deel 3concurrent programming:

tasks

SGP

slide 6Systeem-geïntegreerde programmatuur Yolande Berbers

concurrent programming: inleiding

concurrent programming = notaties en technieken voor

uitdrukken van potentieel parallellisme

oplossen van synchronisatie en communicatie

concurrent programming biedt

abstractiemechanismen om parallellisme te beschrijven

onafhankelijk van de implementatiedetails

de implementatie van parallellisme

onderwerp van computersystemen (hardware en software)

is onafhankelijk van concurrent programming

SGP

slide 7Systeem-geïntegreerde programmatuur Yolande Berbers

proces, controledraad sequentiële programmeertalen: Pascal, C, Fortran, COBOL

programma’s hebben slechts 1 controledraad (Engels: thread) ze voeren uit, bevel per bevel, totdat het programma eindigt het pad door het programma kan variëren al naar gelang de

invoer, maar bij gelijke invoer heb je een gelijk pad ‘concurrent’ programmeertalen (programmeertalen voor

gelijklopende onderdelen) bevatten de notie van proces elke proces heeft (tenminste) 1 controledraad implementatie van processen:

uitvoering op 1 enkele processor (multiprogrammatie) uitvoering op multiprocessor (met gedeeld geheugen) uitvoering op multicomputer (met gescheiden geheugen)

concurrent slaat op potentieel parallellisme

SGP

slide 8Systeem-geïntegreerde programmatuur Yolande Berbers

levencyclus van een proces

niet bestaand

uitvoerbaar

beëindigd

gecreëerd

initialiserend

SGP

slide 9Systeem-geïntegreerde programmatuur Yolande Berbers

proces, controledraad

RTSS (run-time support system) heeft de taak van het creëren en initialiseren van een proces

eventueel ook van het schedulen van de verschillende

controledraden

wordt meestal door de compiler gegenereerd

alternatief voor concurrent programmeertalen gescheiden processen schrijven met een sequentiële taal

de mogelijkheden van het besturingssysteem gebruiken om

gelijktijdige uitvoering te bekomen

SGP

slide 10Systeem-geïntegreerde programmatuur Yolande Berbers

proces, controledraad processen

worden voorzien in alle besturingssystemen elke proces voert uit in een eigen virtuele machine, zonder

interferentie van andere processen (logisch gezien alsof ze het enige proces zijn)

controledraden (threads) soort subproces binnen een klassiek proces alle controledraden hebben toegang tot gehele virtuele machine de programmeur en de taal moeten de controledraden voor

elkaar beschermen discussie: op welk niveau moet concurrency aangeboden

worden: door de taal of door het besturingssysteem ? Ada en Java bieden concurrency in de taal C en C++ niet

SGP

slide 11Systeem-geïntegreerde programmatuur Yolande Berbers

proces, controledraad

voordelen van concurrent programmeertalen beter leesbare en onderhoudbare code draagbaarder over meerdere besturingssystemen heen soms is er geen besturingssysteem op een real-time systeem de compiler kan op een aantal zaken testen

voordelen combinatie sequentiële taal + besturingssyst gemakkelijker om programma's geschreven in verschillende

talen te combineren op sommige besturingssystemen is het moeilijk om sommige

concurrent taalmodellen te implementeren omdat er standaarden zijn voor besturingssystemen, zijn de

programma's draagbaarder

SGP

slide 12Systeem-geïntegreerde programmatuur Yolande Berbers

constructies voor concurrent programmeren

3 fundamentele faciliteiten uitdrukken van gelijktijdig uitvoeren (door de notie van proces)

synchronisatie tussen processen

communicatie tussen processen

3 verschillende soorten relaties onafhankelijk

samenwerkend

in competitie

SGP

slide 13Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdig uitvoeren

verschillen tussen procesmodellen structuur

niveau

granulariteit

initialisatie

beëindiging

relaties tussen gecreëerd proces en andere

voorstelling

SGP

slide 14Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdig uitvoeren

structuur statisch

aantal processen is vast dit aantal is gekend tijdens compilatie

dynamisch aantal processen kan variëren van uitvoering tot uitvoering

niveau vlak

processen enkel gedefinieerd op hoogste niveau genest

processen kunnen een hiërarchie vormen: processen kunnen andere processen starten (vader/kind)

SGP

slide 15Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdig uitvoeren

granulariteit fijn

het is ‘goedkoop’ om processen te creëren in een typisch programma worden er veel gecreëerd voor

telkens een hele kleine taak grof

het is ‘duur’ om een proces te creëren er worden geen grote aantallen processen gecreëerd

initialisatie parameters doorgeven expliciete communicatie na creatie

SGP

slide 16Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdig uitvoeren

beëindiging beëindigen van de code door uitvoering van een specifiek ‘zelfmoord’ bevel expliciete moord door een ander proces uitvoering van een niet-opgevangen uitzondering nooit (oneindige lus) wanneer niet meer nodig (geen communicatie meer mogelijk)

relatie tussen gecreëerd proces en andere vader/kind: vader (creërend proces) wacht tot het kind

gecreëerd en geïnitialiseerd is hoeder/afhankelijke: hoeder kan niet het blok verlaten waarin de

afhankelijke is gecreëerd, voordat de afhankelijke beëindigd is vader en hoeder kunnen maar hoeven niet zelfde proces te zijn

SGP

slide 17Systeem-geïntegreerde programmatuur Yolande Berbers

levencyclus van een proces

wacht opinit kind

niet bestaand

uitvoerbaar

beëindigd

gecreëerd

initialiserend

wacht opafhank. einde

SGP

slide 18Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdig uitvoeren

terminologie bij object-georiënteerde systemen elke proces is een object (maar niet omgekeerd) actieve objecten: nemen spontaan acties reactieve objecten

reageren enkel op invocaties (= operaties die uitgevoerd worden op een object)

bv resources (hulpmiddelen) passieve objecten

reactieve objecten waarvan de operaties altijd kunnen uitgevoerd worden

beschermde resource: resource beschermd door een passieve entiteit

server: resource waarbij de controle actief is (proces is nodig)

SGP

slide 19Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdig uitvoeren

voorstelling: 4 basis mechanismen

co-routines

fork/join

cobegin/coend

expliciete procesdeclaratie

SGP

slide 20Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: co-routines

controle wordt expliciet doorgegeven (sleutelwoord

resume): er is geen return-bevel

relatie is symmetrisch

een routine A voert ‘resume B’ uit

routine A stopt uitvoeren

routine B voert uit vanaf het punt waar het vroeger gestopt was

routine A bewaart alle statusinformatie, zodat het later op

hetzelfde punt kan verder gezet worden

SGP

slide 21Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: co-routines

Co-routine A Co-routine B Co-routine C

resume B

resume B

resume C

resume C

resume A

resume A

resume B

1 2 3 4 5 6

6

7 8 9

10

1112

1312

14

15

SGP

slide 22Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: fork en join

methode: C := fork F een nieuw proces start de uitvoering van F

oproepend proces gaat ook verder join C; oproepend proces wacht op einde F

gebruikt in POSIX bij fork kun je parameters doorgeven met wait wacht je, 1 waarde keert terug flexibel maar niet erg gestructureerd

geven gemakkelijk aanleiding tot fouten hoeder moet bijvoorbeeld expliciet wachten op al zijn

kinderen

SGP

slide 23Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: fork en join

tijdsasfork fork

join

join

P F P F

vaderproces voert join uit voordat kind beëindigd is

kindproces heeft gedaan voordat vader join uitvoert

SGP

slide 24Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: cobegin/coend

na cobegin (of parbegin) staan een aantal blokken die in

parallel uitgevoerd worden (ze worden allemaal samen

opgestart)

het vaderproces wacht, of voert 1 van de blokken uit

bij coend (of parend) wordt er gewacht tot alle blokken

beëindigd zijn

SGP

slide 25Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: cobegin/coend

tijdsas

coend

cobegin

SGP

slide 26Systeem-geïntegreerde programmatuur Yolande Berbers

procesvoorstelling: ex-/impliciete procesdeclaratie

expliciete procesdeclaratie

routines geven tekstueel aan of ze door een apart proces

uitgevoerd worden (modula 1)

het is niet meer de oproeper van de routine die aangeeft dat

een nieuw proces gecreëerd moet worden

impliciete procesdeclaratie

alle processen die gedeclareerd worden binnen een blok

beginnen in parallel uit te voeren bij begin van het blok (Ada)

SGP

slide 27Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in Ada

benaming voor sequentieel proces: task kan gedeclareerd worden wordt gecreëerd wanneer declaratie zichtbaar wordt: impliciet procedure eenvoudige_taak eindigt niet voordat task A eindigt

procedure eenvoudige_taak istask A;task body A is

-- lokale declaratiesbegin

-- bevelen van de taak Aend A;

begin... -- taak A begint met uitvoeren voor het eerste bevel in dit blok

end eenvoudige_taak;

SGP

slide 28Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in Ada

het is mogelijk een task-type te definiëren maakt het mogelijk om een rij van taken te declareren

task type T;

type Long is array (1..100) of T;

L: Long;

task body T is

-- lokale declaraties

begin

-- bevelen van de taak T

end T;

SGP

slide 29Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in Ada

parameters kunnen doorgegeven worden bij initialisatieprocedure Main is

type Dimension is (Xplane, Yplane); task type Control (Dim: Dimension);C1: Control(Xplane);C2: Control(Yplane);task body Control is

-- lokale declaratiesbegin

-- bevelen van de taak Control (zie in boek)end Control;

begin null;

end Main;

SGP

slide 30Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in Ada

uitzonderingen bij initialisatie: de creërende taak krijgt de uitzondering

‘Tasking_error’

tijdens uitvoering:

de nieuwe taak mag de uitzonderingen opvangen

niet opgevangen uitzondering: nieuwe taak wordt beëindigd

beëindiging van een taak de taak beëindigt zijn uitvoering (normaal of door uitzondering)

de taak voert het bevel ‘terminate’ uit (zie later)

de taak is gestopt door een andere taak (via abort)

SGP

slide 31Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

twee mechanismen voor processen

fork() creëert een exacte copie van het oproepende proces met wait() kan het oproepende proces wachten op het

gecreëerde voor threads

allerhande routines voor creatie en beheer van threads vaak met veel parameters nogal complex

beide mechanismen situeren zich op het niveau van het besturingssysteem (zijn dus niet in een taal geïntegreerd)

SGP

slide 32Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

threads in POSIX alle threads hebben attributen (vb stack size)

attribute object om deze attributen te manipuleren

typedef … pthread_t;

typedef … pthread_attr_t;

int pthread_attr_init (pthread_attr_t *attr);

/* initializes a thread attribute pointed at by attr to default values */

int pthread_setstacksize (pthread_attr_t *attr, size_t stacksize);

/* set the stack size of a thread attributed */

int pthread_attr_setstrackaddr (pthread_attr_t *attr, void *stackaddr);

/* set the stack address of a thread attribute */

SGP

slide 33Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

threads in POSIX alle threads hebben een identifier, uniek in het proces

thread kan deze identifier bekomen via pthread_self

typedef … pthread_t;

pthread pthread_self (void);

/* return the thread_id of the calling thread */

int pthread_equal (pthread_t t1, pthread_t t2);

/* compare two thread ids */

SGP

slide 34Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

threads in POSIX thread is klaar om uit te voeren na creatie

pthread_create, 4 argumenten: thread identifier, attributes, functie met de code, parameters die doorgegeven moeten worden

int pthread_create (pthread_t *thread,

const pthread_attr_t *attr,

void * (*start_routine) (void*),

void *arg);

/* create a new thread with the given attributes and call the

given start_routine with the given argument */

SGP

slide 35Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

threads in POSIX thread kan eindigen

door oproep van pthread_exit bij ontvangst van een signal (zie hoofdstuk 10) gestopt door pthread_cancel

int pthread_exit (void *value_ptr);

/* terminate the calling thread and make the pointer value_ptr

available to any joining thread */

SGP

slide 36Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

threads in POSIX wachten op het einde van een andere thread: pthread_join

int pthread_join (pthread_t thread, void **value_ptr);

/* suspends the calling thread until the named thread has

terminated, and returned values are pointed at by

value_ptr */

SGP

slide 37Systeem-geïntegreerde programmatuur Yolande Berbers

gelijktijdige uitvoering in POSIX

threads in POSIX opkuisen na uitvoering en vrijgave van geheugen:

bij join met detach attribute: geen join nodig

int pthread_attr_setdetachstate (pthread_attr_t *attr,

int *detachstate);

/* set the detach state of the attribute */

int pthread_detach (pthread_t thread);

/* the storage space associated with the given thread may be

reclaimed when the thread terminates */

SGP

slide 38Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem

aflezen van temperatuur en aanpassen van verwarming aflezen van druk en aanpassen van pomp telkens de waarden ook op het scherm printen

P

T

S

thermokoppel

verwarming

drukmeter

pomp

scherm

SGP

slide 39Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem

3 implementatiemethoden 1 sequentieel programma

houdt geen rekening met het feit dat T, P en S logisch gezien gelijktijdig en onafhankelijk van elkaar zijn

vraagt geen ondersteuning van het run-time- of besturingssysteem

3 sequentiële programma's T, P en S zijn geschreven in een sequentiële taal met primitieven van het besturingssysteem worden 3

processen hiervoor gecreëerd 1 concurrent programma

T, P en S zijn 3 threads run-time ondersteuning is nodig

SGP

slide 40Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem 1 sequentieel programma, houdt geen rekening met feit dat T, P

en S logisch gezien gelijktijdig en onafhankelijk van elkaar zijn

procedure Controller is

TR : Temp_Reading;

PR : Pressure_Reading;

HS : Heater_Setting;

PS : Pressure_Setting;

begin

loop

Read(TR); Temp_Convert(TR, HS); Write(HS); Write(TR);

Read(PR); Pressure_Convert(PR, PS); Write(PS); Write(PR);

end loop;

end Controller;

SGP

slide 41Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem

1 sequentieel programma: bespreking temperatuurmetingen en drukmetingen gebeuren met gelijke

intervallen (misschien hoeft dat niet in de praktijk) mogelijke oplossing: een aantal if-then-else bevelen toevoegen

wanneer het programma bezig is met temperatuur kan er geen aandacht gegeven worden aan de druk en vice-versa

als probleem met lezen van 1 van de 2 metingen blokkeert het geheel (dus ook het deel dat daar niets mee te maken heeft)

mogelijke oplossing: testen of er kan gelezen worden (p. 195) nadeel is hier wel dat men test via ‘polling’ (busy waiting) dit vraagt veel processortijd

belangrijkste opmerking: geen weerspiegeling van werkelijkheid, waar temperatuur en druk volledig onafhankelijke subsystemen zijn

SGP

slide 42Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem 3 sequentiële programma's (met primitieven van het

besturingssysteem worden 3 processen hiervoor gecreëerd)

package Operating_System_Interface is

type Thread_Id is private;

type Thread is access procedure;

function Create_Thread (Code: Thread) return Thread_Id;

...

end Operating_System_Interface;

package processes is

procedure Temp_Controller;

procedure Pressure_Controller;

end processes;

package body processes is ...

SGP

slide 43Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem 3 sequentiële programma's (met primitieven van het

besturingssysteem worden 3 processen hiervoor gecreëerd)

procedure Controller is

TC, PS: Thread_Id;

begin

TC := Create_Thread (Temp_Controller’Access);

PC := Create_Thread (Pressure_Controller’Access);

end Controller; bespreking

doordat de taal geen ondersteuning biedt is dit moeilijk te schrijven en te onderhouden (zeker voor grotere systemen)

bv niet erg duidelijk uit de code welke procedures nu gewone zijn en welke bedoeld zijn om als proces uit te voeren

SGP

slide 44Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem 1 concurrent programma waarbij T, P en S 3 threads zijn

procedure Controller is

task Pressure_Controller;

task Temp_Controller;

task body Temp_Controller is

begin loop

Read(TR); Temp_Convert(TR, HS); Write(HS); Write(TR);

end loop;

end Temp_Controller ;

task body Pressure_Controller is ...

begin

null;

end Controller ;

SGP

slide 45Systeem-geïntegreerde programmatuur Yolande Berbers

een eenvoudig real-time systeem

1 concurrent programma: bespreking de logica van de toepassing is mooi zichtbaar in de code dit maakt het geheel leesbaar en onderhoudbaar

probleem dat telkens genegeerd werd: synchronisatie van de data die naar het scherm gestuurd worden (zie hoofdstuk 8)

slide 46Systeem-geïntegreerde programmatuur Yolande Berbers

SGP Systeem-geïntegreerde Programmatuur

deel 3concurrent programming:

synchronisatie en communicatie met gedeelde variabelen

SGP

slide 47Systeem-geïntegreerde programmatuur Yolande Berbers

overzicht probleemstelling: kritische sectie en conditionele

synchronisatie vb kritische sectie: verhogen van een gedeelde variabele met 1 vb conditionele synchronisatie: producent/consument met buffer verondersteld gekend

oplossing 1: busy waiting, suspend/resume: kort oplossing 2: semaforen oplossing 3: conditionele kritische secties oplossing 4: monitors protected objects: oplossing van Ada

SGP

slide 48Systeem-geïntegreerde programmatuur Yolande Berbers

ondersteuning voor semaforen

Ada geen directe ondersteuning in de taal

gemakkelijk om een package te maken die het aanbiedt voor

gebruik tussen taken

8.4.5: klassiek voorbeeld van producer/consumer in Ada

C geen ondersteuning

POSIX tellende semaforen tussen aparte processen en voor

verschillende threads in een proces

SGP

slide 49Systeem-geïntegreerde programmatuur Yolande Berbers

standard operations for counting semaphores initialize, wait, signal

typedef … sem_t;

int sem_init (sem_t *sem_location, int pshared, unsigned int value);

/* initializes the semaphore at location sem_location to value

pshared determines if used between processes or threads or

only between threads of the same process */

int sem_wait (sem_t *sem_location);

/* a standard wait operation on a semaphore */

int sem_post (sem_t *sem_location);

/* a standard signal operation on a semaphore */

POSIX semaphores

SGP

slide 50Systeem-geïntegreerde programmatuur Yolande Berbers

int sem_trywait (sem_t *sem_location);

/* attempts to decrement the semaphore

returns -1 if the call might block the calling process */

int sem_getvalue (sem_t *sem_location, int *value);

/* gets the current value of the semaphore to a location

pointed at by value */

POSIX semaphores

non-standard operations for counting sem. non-blocking wait, determining value of sem.

SGP

slide 51Systeem-geïntegreerde programmatuur Yolande Berbers

nadelen van semaforen

semaforen leiden gemakkelijk tot fouten

(en zijn dus ongeschikt in real-time programmatuur)

vergeet er 1 en het programma loopt fout

heel moeilijk om te vinden waar precies wait of signal vergeten

deadlock kan gemakkelijk optreden

(misschien maar in heel weinig voorkomende gevallen, maar

dat is juist moeilijk te testen)

SGP

slide 52Systeem-geïntegreerde programmatuur Yolande Berbers

monitors

wat gestructureerde manier om code-segmenten te schrijven met

garantie voor uitvoering onder wederzijdse uitsluiting, en met mogelijkheid tot conditionele synchronisatie

hoe module met een verzameling van kritische secties die elk als

procedure of functie geschreven zijn module heet monitor alle variabelen die beschermd moeten worden zijn verborgen

(information hiding) conditie variabelen voor conditionele synchronisatie

wait: blokkeert altijd het uitvoerende proces signal: deblokkeert een wachtend proces indien er zo één is

SGP

slide 53Systeem-geïntegreerde programmatuur Yolande Berbers

monitor: voorbeeldmonitor buffer;

export append, take;const size = 32;var buf: array[0...suze-1] of integer;

top, base : 0 .. size-1;SpaceAvailable, ItemAvailable : condition;NumberInBuffer : integer;

procedure append (I : integer) .....procedure take (var I : integer) .....

begin (* initialisatie *)NumberInBuffer := 0;top := 0;base := 0

end;

SGP

slide 54Systeem-geïntegreerde programmatuur Yolande Berbers

monitor: voorbeeld

procedure append (I : integer);begin

if (NumberInBuffer = size) then wait (SpaceAvailable);buf[top] := I;NumberInBuffer := NumberInBuffer + 1;top := (top + 1) mod size;signal (ItemAvailable);

end append;procedure take (var I : integer);begin

if (NumberInBuffer = 0) then wait (ItemAvailable);I := buf[base];base := (base + 1) mod size;NumberInBuffer := NumberInBuffer - 1;signal (SpaceAvailable);

end take;

SGP

slide 55Systeem-geïntegreerde programmatuur Yolande Berbers

monitors (commentaar bij voorbeeld)

minstens 2 processen zijn betrokken één producent (maar het kunnen er meerdere zijn) één consument (maar het kunnen er meerdere zijn)

processen kunnen geblokkeerd zijn omdat ze de monitor proberen binnen te gaan

ze proberen append of take uit te voeren omdat ze wachten op een conditie

er is bv geen plaats in de buffer of er zijn geen elementen in de buffer

er is dus een mogelijke wachtrij voor de monitor zelf en voor elke conditievariabele

SGP

slide 56Systeem-geïntegreerde programmatuur Yolande Berbers

monitors

welk proces mag (exclusief) uitvoeren na een signal ? proces dat signal uitvoert (proces dat een wait deed wacht nog even) proces dat een wait deed (proces dat de signal doet moet nu wachten)

mogelijke semantiek voor signal signal mag alleen als laatse instructie voor verlaten van monitor

zoals in het producer/consumer voorbeeld niet erg flexibel

signal heeft als neven-effect een return (dus het uitvoerend proces wordt verplicht de monitor te verlaten)

proces dat signal uitvoert blijft uitvoeren; proces dat gedeblokkeerd is moet daarna weer vechten om de monitor te mogen betreden

proces dat de signal uitvoert blokkeert, en proces dat gedeblokkeerd werd mag direct uitvoeren

SGP

slide 57Systeem-geïntegreerde programmatuur Yolande Berbers

monitors

voordeel van monitors

gestructureerde manier voor het programmeren van

wederzijdse uitsluiting

nadeel van monitors

laag-niveau manier voor het programmeren van conditionele

synchronisatie

SGP

slide 58Systeem-geïntegreerde programmatuur Yolande Berbers

mutexes and condition variables in POSIX

each monitor has an associated (initialized) mutex variable

all operations on the monitor are surrounded by calls to lock

and unlock of the mutes

condition synchronization is provided by associating condition

variables with the mutex

when a thread waits on a condition variable, its lock on the

associated mutex is released

when a thread successfully returns from the conditional wait, it

again holds the lock

SGP

slide 59Systeem-geïntegreerde programmatuur Yolande Berbers

int pthread_mutex_init (pthread_mutex_t *mutex,

const pthread_mutexattr_t *attr);

/* initializes a mutex with certain attributes */

int pthread_mutex_lock (pthread_mutex_t *mutex);

/* lock the mutex; if already locked suspend calling thread

the owner of the mutex is the thread which locked it */

int pthread_mutex_unlock (pthread_mutex_t *mutex);

/* unlock the mutex if called by the owning thread

undefined behavior if the calling thread is not the owner

undefined behavior if the mutex is not locked

when successful, results in release of a blocked thread */

mutexes and condition variables in POSIX

SGP

slide 60Systeem-geïntegreerde programmatuur Yolande Berbers

int pthread_cond_init (pthread_cond_t *cond,

const pthread_condattr_t *attr);

/* initializes a condition variable with certain attributes */

int pthread_cond_wait (pthread_cond_t *cond,

pthread_mutex_t *mutex);

/* called by thread which owns a locked mutex

(undefined behavior if the mutex is not locked)

atomically blocks the calling thread on the cond variable

and releases the lock on mutex

a successful return indicates that the mutex has been locked */

int pthread_cond_signal (pthread_cond_t *cond);

/* unblocks at least 1 blocked thread; no effect if no threads are

blocked; unblocked threads automatically contend for the

associated mutex /*

mutexes and condition variables in POSIX

SGP

slide 61Systeem-geïntegreerde programmatuur Yolande Berbers

int pthread_mutex_trylock (pthread_mutex_t *mutex);

/* the same as lock but gives error return if mutex already locked */

int pthread_cond_timedwait (pthread_cond_t *cond,

pthread_mutex_t *mutex, const st’ruct timespec *abstime);

/* the same as pthread_cond_wait, except that an error is returned

if the timeout expires */

mutexes and condition variables in POSIX

SGP

slide 62Systeem-geïntegreerde programmatuur Yolande Berbers

example: bounded buffer consisting of mutex two condition vairables (buffer_not_full and buffer_not_empty) a count of number of elements the buffer itself the positions of first and last items in buffer routine ‘append’ routine ‘take’

mutexes and condition variables in POSIX

SGP

slide 63Systeem-geïntegreerde programmatuur Yolande Berbers

#define SYS_CALL (A) if (sys_call(A) != 0) error()

/* where error is function which undertakes some error processing */

note: lighter notation for calls in POSIX error conditions from POSIX: return -1 for reliability: every call to system function should test the return

value in book: macro

mutexes and condition variables in POSIX

SGP

slide 64Systeem-geïntegreerde programmatuur Yolande Berbers

# include “pthreads.h”

# define BUFF_SIZE 10

typedef struct {

pthread_mutex_t mutex;

pthread_cond_t buffer_not_full;

pthread_cond_t buffer_not_empty;

int count, first, last;

int buf [BUFF_SIZE];

} buffer;

/* an initialize routine is required */

mutexes and condition variables in POSIX

SGP

slide 65Systeem-geïntegreerde programmatuur Yolande Berbers

int append (int item, buffer *B) {

PTHREAD_MUTEX_LOCK (&B->mutex);

while (B->count == BUFF_SIZE)

PTHREAD_COND_WAIT (&B->buffer_not_full, &B->mutex);

/* put data in buffer and update count and last */

PTHREAD_MUTEX_UNLOCK (&B->mutex);

PTHREAD_COND_SIGNAL (&B->buffer_not_empty);

return 0;

}

mutexes and condition variables in POSIX

SGP

slide 66Systeem-geïntegreerde programmatuur Yolande Berbers

int take (int *item, buffer *B) {

PTHREAD_MUTEX_LOCK (&B->mutex);

while (B->count == 0)

PTHREAD_COND_WAIT (&B->buffer_not_empty, &B->mutex);

/* get data from buffer and update count and first */

PTHREAD_MUTEX_UNLOCK (&B->mutex);

PTHREAD_COND_SIGNAL (&B->buffer_not_full);

return 0;

}

mutexes and condition variables in POSIX

SGP

slide 67Systeem-geïntegreerde programmatuur Yolande Berbers

protected objects (enkel in Ada)

wat: gestructureerde manier voor het programmeren van code-segmenten met garantie voor uitvoering onder

wederzijdse uitsluiting conditionele synchronisatie

hoe analoog aan monitors (genoemd protected type) voor

wederzijdse uitsluiting maar meerdere lezers enkelvoudige schrijvers mogelijk

analoog aan conditionele kritische secties (gebruik van barriers (guard) bij entries) voor conditionele synchronisatie

entry is analoog aan procedure, maar kan slechts uitgevoerd worden indien aan de barrier voldaan is

oproepen van entry zoals van een procedure

SGP

slide 68Systeem-geïntegreerde programmatuur Yolande Berbers

protected objects

een protected body heeft een specificatie een body

kunnen voorzien worden in de specificatie entries: dit zijn procedures die voorzien zijn van een conditie

voorwaarde voor uitvoeren: niemand voert het protected object uit en de conditie is waar

procedures: zijn niet voorzien van een conditie voorwaarde voor uitvoeren: niemand voert het protected object uit

functies: zijn niet voorzien van een conditie voorwaarde voor uitvoeren: niemand of alleen andere functies

voeren protected object uit (dit implementeert meerdere lezers)

SGP

slide 69Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 1

protected type Shared_Integer (Initial_Value: Integer) is

function read return Integer;

procedure Write (New_Value: Integer);

procedure Increment (By: Integer);

private

The_Data : Integer := Initial_Value;

end Shared_Integer;

My_Data: Shared_Integer(42);

SGP

slide 70Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 1protected body Shared_Integer is

function Read return Integer isbegin

return The_Data; end Read;procedure Write (New_Value: Integer) isbegin

The_Data := New_Value; end Write;procedure Increment (By: Integer) isbegin

The_Data := The_Data + By; end Increment;

end Shared_Integer;

SGP

slide 71Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 2

Buffer_Size : constant Integer := 10;type Index is mod Buffer_Size;subtype Count is Natural range 0 .. Buffer_Size;type Buffer is array (Index) of Data_Item;

protected type Bounded_Buffer isentry Get (Item: out Data_Item);entry Put (Item: in Data_Item);

privateFirst : Index := Index’First;Last : Index := Index’Last;Number_In_Buffer : Count := 0;Buf : Buffer;

end Bounded_Buffer;

My_Buffer: Bounded_Buffer;

SGP

slide 72Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 2

protected body Bounded_Buffer isentry Get (Item: out Data_Item)

when Number_In_Buffer > 0 isbegin

Item := Buf(First);First := First + 1;Number_In_Buffer := Number_In_Buffer - 1;

end Get;entry Put (Item: in Data_Item)

when Number_In_Buffer < Buffer_Size isbegin

Last := Last + 1;Buf(Last) := Item;Number_In_Buffer := Number_In_Buffer + 1;

end Put;end Bounded_Buffer;

SGP

slide 73Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 3protected Resource_Control is

entry Allocate;procedure Deallocate;

privateFree : Boolean := True;end Resource_Control;

protected body Resource_Control isentry Allocate when Free isbegin

Free := False;end Allocate;procedure Deallocate isbegin

Free := True;end Deallocate;

end Resource_Control ;

SGP

slide 74Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 4

een taak wil een boodschap sturen naar andere taken die hierop wachten

indien er geen wachtende taken zijn wordt er geen boodschap achtergelaten

protected type Broadcast is

entry Receive (M: out Message);

procedure Send (M: Message);

private

New_Message : Message;

Message_Arrived : Boolean := False;

end Broadcast ;

SGP

slide 75Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 4protected body Broadcast is

entry Receive (M: out Message) when Message_Arrived isbegin

M := New_Message;if Receive’Count = 0 then Message_Arrived := False;end if;

end Receive;procedure Send (M: Message) isbegin

if Receive’Count > 0 then Message_Arrived := True;New_Message := M;

end if;end Send;

end Broadcast ;

SGP

slide 76Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 5

pakket dat semaforen aanbiedt, geïmplementeerd met behulp van een protected object

package Semaphore_Package istype Semaphore (Initial : Natural := 1) is limited private;procedure Wait (S: in out Semaphore);procedure Signal (S: in out Semaphore);

privateprotected type Semaphore (Initial : Natural := 1) is

entry Wait_Imp;procedure Signal_Imp;

privateValue: Natural := Initial;

end Semaphore ;end Semaphore_Package ;

SGP

slide 77Systeem-geïntegreerde programmatuur Yolande Berbers

protected object: voorbeeld 5package body Semaphore_Package is

protected body Semaphore is

entry Wait_Imp when Value > 0 is

begin Value := Value - 1;

end Wait_Imp;

procedure Signal_Imp is

begin Value := Value + 1;

end Signal_Imp;

end Semaphore;

end Semaphore_Package ;

procedure Wait (S: in out Semaphore);

begin S.Wait_Imp

end Wait;

procedure Signal (S: in out Semaphore);

begin S.Signal_Imp

end Signal;

end Semaphore_Package ;

slide 78Systeem-geïntegreerde programmatuur Yolande Berbers

SGP Systeem-geïntegreerde Programmatuur

deel 3concurrent programming:

synchronisatie en communicatie met behulp van boodschappen

SGP

slide 79Systeem-geïntegreerde programmatuur Yolande Berbers

overzicht

boodschappen-systemen variëren volgens synchronisatiemodel procesbenoeming structuur van boodschappen

het boodschappenmodel in Ada rendez-vous selectief wachten

boodschappen in POSIX

SGP

slide 80Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel

impliciete synchronisatie

ontvanger kan niets ontvangen voordat zender iets stuurt

bij communicatie via gedeeld geheugen is dat niet zo

lezer weet niet wanneer schrijver iets geschreven heeft

hier is expliciete synchronisatie nodig

verschillende semantieken mogelijk voor ontvangen

blokkerend als geen boodschap klaar staat (meest voorkomend)

niet blokkerend als er geen boodschap klaar staat

(of wordt niet aangeboden, of enkel als speciaal geval)

SGP

slide 81Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel

verschillende semantieken mogelijk voor zenden asynchroon

zend keert terug direct nadat opdracht geregistreerd is zend keert terug nadat opdracht geregistreerd is en de inhoud van

de boodschap gekopieerd is naar een interne buffer in het systeem (komt meest voor bij asynchroon)

zend keert terug na boodschap ontvangen is op andere machine synchroon (rendez-vous)

zend keert terug nadat de boodschap ontvangen is door het ontvangend proces

zend keert terug nadat de boodschap verwerkt is door het ontvangend proces

niet-locale invocatie (wordt door sommigen ook synchroon genoemd) zend keer terug met het antwoord van de ontvanger

SGP

slide 82Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel zowel een synchrone als een asynchrone boodschap kan een

antwoord verwachten: bij niet-locale invocatie is het antwoord beschikbaar bij het

terugkeren van het verzendingsprimitief bij asynchrone communicatie kan men extra primitieven

voorzien waarbij men kan testen (en eventueel blokkeren) op de aankomst van een antwoord

synchrone communicatie is gemakkelijker te programmeren dan asynchrone

asynchrone is soms noodzakelijk (denk aan dienstverleners) asynchrone werking wordt soms bekomen door voor een (serie

van) boodschap-versturen/antwoord-ontvangen combinatie een aparte controledraad op te starten dat onafhankelijk van andere controledraden kan uitvoeren

SGP

slide 83Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel

vergelijking

asynchrone communicatie: versturen van een brief met de post

(of met email)

synchrone communicatie: telefoneren

SGP

slide 84Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel

gebruik van asynchrone communicatie om synchrone communicatie na te bootsend

P1 P2

asyn_send (message) wait (message)

wait (acknowledgement) asyn_send (acknowledgement)

gebruik van asynchrone communicatie om niet-locale invocatie na te bootsend

P1 P2

asyn_send (message) wait (message)

wait (reply) .....

construct reply

.....

asyn_send (reply)

SGP

slide 85Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel

asynchrone communicatie voordelen

flexibeler (men kan er synchrone communicatie mee nabootsen, dus lijkt synchrone communicatie niet echt nodig)

nadelen veel systeembuffers zijn nodig om nog niet gelezen

boodschappen bij te houden (ideaal oneindig veel) meestal wordt een asynchrone boodschap toch

gecombineerd met een ontvangst van een ack bij synchrone communicatie nagebootst met asynchrone

primitieven zijn in totaal meer primitieven nodig: programma wordt complexer

moeilijk om correctheid van een volledig systeem te bewijzen

SGP

slide 86Systeem-geïntegreerde programmatuur Yolande Berbers

synchronisatiemodel

gebruik van synchrone communicatie om asynchrone

communicatie na te bootsend dit is ook mogelijk

vraagt het creëren van bufferprocessen

kan kostelijk zijn

SGP

slide 87Systeem-geïntegreerde programmatuur Yolande Berbers

procesbenoeming

directe benoeming proces dat zendt bepaalt naar welk proces gezonden wordt gebruikt hiervoor een of andere procesidentificatie

indirecte benoeming proces dat zendt bepaalt een tussenliggende entiteit

(poort, kanaal, mailbox) is algemener dan procesidentificatie

een proces kan ontvangen van meerdere mailboxen (zonder dat de zender daarvan bewust is)

een mailbox kan verhuizen van proces zonder dat zender dat hoeft te merken

een mailbox is een soort interface naar een deel van een programma

send <message> to <proces-name>

send <message> to <mailbox>

SGP

slide 88Systeem-geïntegreerde programmatuur Yolande Berbers

procesbenoeming symmetrische benoeming

ontvangend proces aangeeft van wie/wat ze een boodschap wenst te ontvangen

asymmetrische benoeming ontvangend proces wenst te ontvangen van om het even

wie/wat

send <message> to <proces-name>

wait <message> from <proces-name>

wait <message>

SGP

slide 89Systeem-geïntegreerde programmatuur Yolande Berbers

procesbenoeming

verdere mogelijkheden bij indirecte benoeming meerdere-naar-één verzendingsmodel

past goed bij cliënt/server model

kan eigenlijk ook bij directe benoeming

één-naar-meerdere verzendingsmodel

multicast en broadcast

interessant wanneer meerdere servers gelijke diensten

aanbieden

meerdere-naar-meerdere verzendingsmodel

meerdere cliënten en meerdere servers

SGP

slide 90Systeem-geïntegreerde programmatuur Yolande Berbers

structuur van boodschappen

veel variatie soms mogen pointers niet doorgegeven worden (die

hebben uiteindelijk maar zin binnen een adresruimte) maar dit wordt momenteel meer en meer opgelost door een

tussenliggende laag (zie Remote Procedure Call)

altijd nodig: conversie van gegevens naar de voorstelling van het

ontvangend proces (en dus de ontvangende machine) getallen (integers, reals enz. worden niet op dezelfde manier

voorgesteld) little-endian (2143) en big-endian (1234) architecturen

1 2 3 4

SGP

slide 91Systeem-geïntegreerde programmatuur Yolande Berbers

het boodschappenmodel in Ada

belangrijkste characteristieken synchronisatiemodel: niet-locale invocatie procesbenoeming: direct, asymmetrisch structuur van boodschappen: vrij, zoals parameters

terminologie boodschap ontvangen

declaratie via entry ontvangen via accept

boodschap versturen geen nieuwe term of constructie analoog aan het oproepen van een procedure of een

protected entry

SGP

slide 92Systeem-geïntegreerde programmatuur Yolande Berbers

het boodschappenmodel in Ada

Task Time_Server is

entry Read_Time (Now: out Time);

entry Set_Time (New_Time: Time);

end Time_Server ;

declaratie van ontvangst van boodschap: entry parameters = inhoud van boodschappen (aanvraag en antwoord)

Time_Server.Read_Time(T)

-- met T van type Time

zenden van een boodschap = oproepen van een taak = vragen om een rendez-vous (dit is blokkerend)

opgeroepen taak wordt benoemd: directe benoeming oproepende taak zal wachten op resultaat: niet-locale invocatie

SGP

slide 93Systeem-geïntegreerde programmatuur Yolande Berbers

het boodschappenmodel in Ada

accept Read_Time (Now: out Time) do

Now := Clock;

end Read_Time;

ontvangen van een boodschap = aanvaarden van een rendez-vous (dit is blokkerend)

accept-bevel moet in body van taak voorkomen (niet in opgeroepen procedure) mag om het even waar in body van taak staan (bv midden in lus)

accept geeft niet aan met wie men een rendez-vous aanvaardt: benoeming is dus asymmetrisch

antwoord vertrekt bij het einde van accept-blok (invocatie)

procedure Test;

N: constant Integer := 1000;

Task T1 is

entry Exchange (I: Integer; J: out Integer)

end T1;

Task body T1 is

A, B: Integer;

begin

for K in 1 .. N loop

-- produce A

accept Exchange (I: Integer; J: out Integer) do

J := A; B := I;

end Exchange;

-- consume B

end loop;

end T1;

rendez-vous: voorbeeld

Task body T2 is

C, D: Integer;

begin

for K in 1 .. N loop

-- produce C

T1.Exchange (C, D);

-- consume D

end loop;

end T2;

begin

null;

end Test;

SGP

slide 95Systeem-geïntegreerde programmatuur Yolande Berbers

uitzonderingen tijdens rendez-vous

opvangen van uitzondering in blok van de accept-code uitzondering wordt opgevangen: geen probleem

uitzondering wordt niet opgevangen:

accept eindigt onmiddellijk

de uitzondering propageert

in de omsluitende blok van de accept-code

in het blok van de zender

-- bij ontvanger (server)

task File_Handler is

entry Open (F: File_Type);

.....

end File_Handler ;

Task body File_Handler is

.....

begin

-- zie rechts

end File_Handler ;

-- bij zender (client)

begin

File_Handler.Open(File);

exception when File_Not_Exist

=> File_Handler.Create(File); File_Handler.Open(File);

end;

loop

begin

.....

accept Open(F: File_Type) do

loop

begin

Device_Open(F); return;

exception when Off_Line

=> Boot_Device;

end;

end loop;

end Open;

....

exception when File_Not_Exist

=> null; end;end loop;

rendez-vous en exceptions: vb

SGP

slide 97Systeem-geïntegreerde programmatuur Yolande Berbers

selectief wachten

situatie: ontvanger wenst te wachten op een boodschap uit een groep van mogelijkheden elke mogelijkheid kan voorafgegaan worden door wachter-test wanneer meerdere mogelijkheden open zijn (hetzij omdat de

wachter-test true is, hetzij omdat er geen wachter test is) run-time systeem kiest één uit op niet-deterministisch manier vgl: if x <= y then m := x elseif x >= y then m := y

(dit is wel deterministisch)

SGP

slide 98Systeem-geïntegreerde programmatuur Yolande Berbers

selectief wachten constructie in Ada:

sleutelwoord select (te vergelijken met een case) 4 mogelijkheden:

accept else-alternatief

wordt gekozen alleen indien geen enkel ander alternatief onmiddellijk uitvoerbaar is

delay-alternatief hierbij wordt een tijdje gewacht (zie hoofdstuk 12)

terminatewordt gekozen alleen indien geen enkele andere taak nog

een rendez-vous kan doen in dat geval wordt de taak van de select geëindigd

selectief wachten: voorbeeldtask Telephone_Operator is

entry Directory_Enq (P : in Name; Num: out Number);entry Report_Fault (Num: Number);

privateentry Allocate_Repair_Worker (Num: out Number);

end Telephone_Operator ;Task body Telephone_Operator is

Workers : constant Integer := 10;Failed : Number;task type Repair_Worker;Work_Force : array (1 .. Workers) of Repair_Workers;task body Repair_Worker is .....;.....

begin-- zie volgende slide

end Telephone_Operator ;

loop -- prepare to accept next requestselect

accept Directory_Enq (P : in Name; Num: out Number) do ..... end Directory_Enquiry;

oraccept Report_Fault (Num: Number) do .....end Report_Fault;-- change Unallocated_Faults

orwhen Unallocated_Faults => accept Allocate_Repair_Worker (Num: out Number) do ..... end Allocate_Repair_Worker ;

orterminate;

end select;end loop;

selectief wachten: voorbeeld

SGP

slide 101Systeem-geïntegreerde programmatuur Yolande Berbers

boodschappenmodel bij POSIX

belangrijkste characteristieken synchronisatiemodel: asynchroon procesbenoeming: indirect, symmetrisch structuur van boodschappen: vrij

terminologie boodschap wordt verstuurd en ontvangen van message queue

kan vele lezers en vele schrijvers hebben bij de creatie kan men o.a. ook opgeven: lengte queue,

maximale grootte van een individuele boodschap, protectie in het normaal geval zal een proces wachten als de

message queue vol is (bij zenden) of leeg is (bij ontvangen) proces kan ook verwittigd worden van boodschap via signal

SGP

slide 102Systeem-geïntegreerde programmatuur Yolande Berbers

boodschappenmodel bij POSIX

een queue krijgt een naam bij creatie (analoog aan bestandsnaam)

een queue heeft vele attributen (zoals lengte queue, maximale grootte van individuele boodschap, protectie

mqd_t mq_open (const char *mq_name, int oflags, mode_t mode,

struct mq_attr *mq_attr);

/* open/create the named message queue */

int mq_setattr (mqd_t mq, const struct mq_attr *new_attrs,

struct mq_attr *old_attrs);

/* set the current attributes associated with mq */

int mq_close (mqd_t mq);

int mq_unlink (const char *mq_name);

SGP

slide 103Systeem-geïntegreerde programmatuur Yolande Berbers

boodschappenmodel bij POSIX

zenden en ontvangen van boodschappen

ssize_t mq_receive (mad_t mq, char *msq_buffer,

size_t buflen, unsigned int *msgprio);

/* get the next message in the queue and store it in the

area pointed at by msq_buffer;

the actual size of the message is returned */

int mq_send (mqd_t mq, const char *msq,

size_t msglen, unsigned int msgprio);

/* send the message pointed at by msq */

SGP

slide 104Systeem-geïntegreerde programmatuur Yolande Berbers

resultaat bevraging  te uitgebreid    

  want niet interessant

want overlapt

OK mag meer

inleiding algemeen stuk, voorbeelden 1 2 26  

inleiding alg. stuk, karakteristieken 2   27  

inleiding alg. stuk, vb van ariane 5 1 1 21 6

achtergrond Ada met voor en nadelen 2   26  

Java voor embedded systems 1 2 11 15

Ada crash course: prog. in the small     18 11

Ada crash course: prog. in the large     15 14

con. prog.: multi-tasking problematiek   13 17 1

concurrent prog.: multi-tasking: POSIX 8 1 20 1

concurrent prog.: multi-tasking: Ada     26 4

SGP

slide 105Systeem-geïntegreerde programmatuur Yolande Berbers

resultaat bevraging

  te uitgebreid    

  want niet interessant

want overlapt

OK mag meer

conc. prog.: shared mem: problematiek

  8 22 1

conc. prog.: shared mem: POSIX 7 1 21  

conc. prog.: shared mem: Ada     26 4

conc prog.: boodsch: problematiek   7 20 4

conc. prog.: boodsch: POSIX 7 2 21  

conc. prog.: boodsch: Ada     26 4