RTP slide 1Programmatuur voor real-time controleYolande Berbers oefenzittingen n enkel voor de studenten die dit vak als keuzevak kiezen n nu donderdag, 14 maart, 14-16u30, 200S n donderdag 21 maart, 14-16u30, 200S n donderdag 18 april, 14-16u30, 200S.01.05
slide 2Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 9: synchronisatie en communicatie met behulp van boodschappen
RTP slide 3Programmatuur voor real-time controleYolande Berbers overzicht n boodschappen-systemen variëren volgens u synchronisatiemodel u procesbenoeming u structuur van boodschappen n het boodschappenmodel in Ada u rendez-vous u selectief wachten n boodschappen in POSIX n Remote Procedure Call u uitgebreider dan in het boek u Java: RMI (Remote Method Invocation)
RTP slide 4Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n impliciete synchronisatie u ontvanger kan niets ontvangen voordat zender iets stuurt u bij communicatie via gedeeld geheugen is dat niet zo l lezer weet niet wanneer schrijver iets geschreven heeft l hier is expliciete synchronisatie nodig n verschillende semantieken mogelijk voor ontvangen u blokkerend als geen boodschap klaar staat (meest voorkomend) u niet blokkerend als er geen boodschap klaar staat (óf wordt niet aangeboden, óf enkel als speciaal geval)
RTP slide 5Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n verschillende semantieken mogelijk voor zenden u asynchroon l zend keert terug direct nadat opdracht geregistreerd is l 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) l zend keert terug na boodschap ontvangen is op andere machine u synchroon (rendez-vous) l zend keert terug nadat de boodschap ontvangen is door het ontvangend proces l zend keert terug nadat de boodschap verwerkt is door het ontvangend proces u niet-locale invocatie (wordt door sommigen ook synchroon genoemd) l zend keer terug met het antwoord van de ontvanger
RTP slide 6Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n zowel een synchrone als een asynchrone boodschap kan een antwoord verwachten: u bij niet-locale invocatie is het antwoord beschikbaar bij het terugkeren van het verzendingsprimitief u bij asynchrone communicatie kan men extra primitieven voorzien waarbij men kan testen (en eventueel blokkeren) op de aankomst van een antwoord n synchrone comm: gemakkelijker te programmeren dan asynchrone n asynchrone is soms noodzakelijk (denk aan dienstverleners) n 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
RTP slide 7Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n vergelijking u asynchrone communicatie: versturen van een brief met de post (of met ) u synchrone communicatie: telefoneren
RTP slide 8Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n gebruik van asynchrone communicatie om synchrone communicatie na te bootsend P1P2 asyn_send (message)wait (message) wait (acknowledgement)asyn_send (acknowledgement) n gebruik van asynchrone communicatie om niet-locale invocatie na te bootsend P1P2 asyn_send (message)wait (message) wait (reply)..... construct reply..... asyn_send (reply)
RTP slide 9Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n asynchrone communicatie u voordelen l flexibeler (men kan er synchrone communicatie mee nabootsen, dus lijkt synchrone communicatie niet echt nodig) u nadelen l veel systeembuffers zijn nodig om nog niet gelezen boodschappen bij te houden (ideaal oneindig veel) l meestal wordt een asynchrone boodschap toch gecombineerd met een ontvangst van een ack l bij synchrone communicatie nagebootst met asynchrone primitieven zijn in totaal meer primitieven nodig: programma wordt complexer l moeilijk om correctheid van een volledig systeem te bewijzen
RTP slide 10Programmatuur voor real-time controleYolande Berbers synchronisatiemodel n gebruik van synchrone communicatie om asynchrone communicatie na te bootsend u dit is ook mogelijk u vraagt het creëren van bufferprocessen u kan kostelijk zijn
RTP slide 11Programmatuur voor real-time controleYolande Berbers procesbenoeming n directe benoeming u proces dat zendt bepaalt naar welk proces gezonden wordt u gebruikt hiervoor een of andere procesidentificatie n indirecte benoeming u proces dat zendt bepaalt een tussenliggende entiteit (poort, kanaal, mailbox) u is algemener dan procesidentificatie l een proces kan ontvangen van meerdere mailboxen (zonder dat de zender daarvan bewust is) l een mailbox kan verhuizen van proces zonder dat zender dat hoeft te merken l een mailbox is een soort interface naar een deel van een programma send to
RTP slide 12Programmatuur voor real-time controleYolande Berbers procesbenoeming n symmetrische benoeming u ontvangend proces aangeeft van wie/wat ze een boodschap wenst te ontvangen n asymmetrische benoeming u ontvangend proces wenst te ontvangen van om het even wie/wat send to wait from wait
RTP slide 13Programmatuur voor real-time controleYolande Berbers procesbenoeming n verdere mogelijkheden bij indirecte benoeming u meerdere-naar-één verzendingsmodel l past goed bij cliënt/server model l kan eigenlijk ook bij directe benoeming u één-naar-meerdere verzendingsmodel l multicast en broadcast l interessant als meerdere servers gelijke diensten aanbieden u meerdere-naar-meerdere verzendingsmodel l meerdere cliënten en meerdere servers
RTP slide 14Programmatuur voor real-time controleYolande Berbers structuur van boodschappen n veel variatie n soms mogen pointers niet doorgegeven worden (die hebben uiteindelijk maar zin binnen een adresruimte) u maar dit wordt momenteel meer en meer opgelost door een tussenliggende laag (zie Remote Procedure Call) n altijd nodig: u conversie van gegevens naar de voorstelling van het ontvangend proces (en dus de ontvangende machine) u getallen (integer, real, …: niet op dezelfde manier voorgesteld) u little-endian (2143) en big-endian (1234) architecturen 1 234
RTP slide 15Programmatuur voor real-time controleYolande Berbers het boodschappenmodel in Ada n belangrijkste characteristieken u synchronisatiemodel:niet-locale invocatie u procesbenoeming:direct, asymmetrisch u structuur van boodschappen:vrij, zoals parameters n terminologie u boodschap ontvangen l declaratie via entry l ontvangen via accept u boodschap versturen l geen nieuwe term of constructie l analoog aan oproepen van procedure of protected entry
RTP slide 16Programmatuur voor real-time controleYolande Berbers het boodschappenmodel in Ada Task Time_Server is entry Read_Time (Now: out Time); entry Set_Time (New_Time: Time); end Time_Server ; n declaratie van ontvangst van boodschap: entry n parameters = inhoud boodschappen (aanvraag & antwoord) Time_Server.Read_Time(T) -- met T van type Time n zenden van een boodschap = oproepen van een taak = vragen om een rendez-vous (dit is blokkerend) l opgeroepen taak wordt benoemd: directe benoeming l oproepende taak zal wachten op resultaat: niet-locale invocatie
RTP slide 17Programmatuur voor real-time controleYolande Berbers het boodschappenmodel in Ada accept Read_Time (Now: out Time) do Now := Clock; end Read_Time; n ontvangen van boodschap = aanvaarden van rendez-vous (dit is blokkerend) n accept-bevel l moet in body van taak voorkomen (niet in opgeroepen proc.) l mag om het even waar in body van taak staan (bv midden in lus) n accept geeft niet aan met wie men een rendez-vous aanvaardt: benoeming is dus asymmetrisch n 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;
RTP slide 19Programmatuur voor real-time controleYolande Berbers uitzonderingen tijdens rendez-vous n opvangen van uitzondering in blok van de accept-code u uitzondering wordt opgevangen: geen probleem u uitzondering wordt niet opgevangen: l accept eindigt onmiddellijk l de uitzondering propageert s in de omsluitende blok van de accept-code s 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
RTP slide 21Programmatuur voor real-time controleYolande Berbers selectief wachten n situatie: ontvanger wenst te wachten op een boodschap uit een groep van mogelijkheden u elke mogelijkheid kan voorafgegaan worden door wachter-test l sleutelwoord when u wanneer meerdere mogelijkheden open zijn (hetzij omdat de wachter-test true is, hetzij omdat er geen wachter test is) l run-time systeem kiest één uit op niet-deterministisch manier l vgl: if x = y then m := y (dit is wel deterministisch)
RTP slide 22Programmatuur voor real-time controleYolande Berbers selectief wachten n constructie in Ada: u sleutelwoord select (te vergelijken met een case) u 4 mogelijkheden: l accept l else-alternatief s wordt gekozen alleen indien geen enkel ander alternatief onmiddellijk uitvoerbaar is l delay-alternatief s hierbij wordt een tijdje gewacht (zie hoofdstuk 12) l terminate s wordt gekozen alleen indien geen enkele andere taak nog een rendez-vous kan doen s in dat geval wordt de taak van de select geëindigd
selectief wachten: voorbeeld task Telephone_Operator is entry Directory_Enq (P : in Name; Num: out Number); entry Report_Fault (Num: Number); private entry 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 request select accept Directory_Enq (P : in Name; Num: out Number) do..... end Directory_Enquiry; or accept Report_Fault (Num: Number) do..... end Report_Fault; -- change Unallocated_Faults or when Unallocated_Faults => accept Allocate_Repair_Worker (Num: out Number) do..... end Allocate_Repair_Worker ; or terminate; end select; end loop; selectief wachten: voorbeeld
RTP slide 25Programmatuur voor real-time controleYolande Berbers boodschappenmodel bij POSIX n belangrijkste characteristieken u synchronisatiemodel:asynchroon u procesbenoeming:indirect, symmetrisch u structuur van boodschappen:vrij n terminologie u boodschap wordt verstuurd en ontvangen van message queue l kan vele lezers en vele schrijvers hebben l bij de creatie kan men o.a. ook opgeven: lengte queue, maximale grootte van een individuele boodschap, protectie l in het normaal geval zal een proces wachten als de message queue vol is (bij zenden) of leeg is (bij ontvangen) l proces kan ook verwittigd worden van boodschap via signal
RTP slide 26Programmatuur voor real-time controleYolande Berbers boodschappenmodel bij POSIX n een queue krijgt een naam bij creatie (analoog aan bestandsnaam) n 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);
RTP slide 27Programmatuur voor real-time controleYolande Berbers boodschappenmodel bij POSIX n 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 */
RTP slide 28Programmatuur voor real-time controleYolande Berbers Remote procedure call (RPC) n mechanisme aangeboden door bibliotheken u meestal niet door een taal ondersteund u wordt gebruikt in Java RMI (Remote Method Invocation) n biedt de semantiek van niet-locale invocatie n boodschappen zijn niet echt zichtbaar (zoals in Ada) n er bestaan meerdere RPC pakketten in combinatie met een taal, o.a. u DCE: distributed computing environment (met taal C) u DCOM van Microsoft (gebaseerd op DCE, met meerdere talen)
RTP slide 29Programmatuur voor real-time controleYolande Berbers Remote procedure call (RPC) n explicit messages through send and receive primitives u low level communication u far from centralized programming paradigm u involves many details, difficult to program correctly n alternative: remote procedure call u idea is simple u allows a process on machine A to call a procedure on machine B u information is transported in parameters u no message transport is visible
RTP slide 30Programmatuur voor real-time controleYolande Berbers Remote procedure call (RPC) n problems to be solved u calling and called procedure execute in different address spaces u machines may not be identical: implications for the passing of parameters and results u both machines can crash u....
RTP slide 31Programmatuur voor real-time controleYolande Berbers Conventional procedure calling n scenario of conventional procedure calling u caller pushes parameters onto the stack u return address is put onto stack u called procedure gets control u called procedure performs work u return value is put in register or on stack u control is transferred to caller (return address is popped from stack) u caller removes the parameters from the stack
RTP slide 32Programmatuur voor real-time controleYolande Berbers Conventional procedure calling local variables for main parameter 1 parameter 2 return addr local var. for procedure local variables for main sp
RTP slide 33Programmatuur voor real-time controleYolande Berbers Conventional procedure calling n types of parameters u by value l a simple copy of the variable is put on the stack l the called procedure may modify is, but changes do not affect original value u by reference l reference (address) to variable is put on the stack l if the called procedure changes the parameter, the original value changes n code of called procedure u at compile time: linker inserts all necessary procedure (possibly from libraries) in object module
RTP slide 34Programmatuur voor real-time controleYolande Berbers RPC: scenario n client does not call server procedure, but client stub u client stub uses the conventional calling sequence u packs the parameters into a message u sends the message to the server u waits for the result client call return pack param. unpack result stub system server call return unpack param. pack result stub system
RTP slide 35Programmatuur voor real-time controleYolande Berbers RPC: scenario n on server side a server stub receives the message u server stub is part of the server u is usually blocked, waiting for incoming messages u unpacks the parameters from the message u calls the server procedure in the conventional way client call return pack param. unpack result stub system server call return unpack param. pack result stub system
RTP slide 36Programmatuur voor real-time controleYolande Berbers RPC: scenario n server procedure gets control u feels like being called directly by the client u performs its work u returns the result to the caller (the server stub) in the conventional way client call return pack param. unpack result stub system server call return unpack param. pack result stub system
RTP slide 37Programmatuur voor real-time controleYolande Berbers RPC: scenario n server stub gets control back u packs the results in a message u sends the message to the client stub u calls receive, waiting for next messages from a client stub client call return pack param. unpack result stub system server call return unpack param. pack result stub system
RTP slide 38Programmatuur voor real-time controleYolande Berbers RPC: scenario n client stub receives the message u unpacks the message u makes necessary copies to the caller u returns in the usual way client call return pack param. unpack result stub system server call return unpack param. pack result stub system
RTP slide 39Programmatuur voor real-time controleYolande Berbers RPC: scenario n caller gets control u feels like a return from a conventional procedure call client call return pack param. unpack result stub system server call return unpack param. pack result stub system
RTP slide 40Programmatuur voor real-time controleYolande Berbers RPC: scenario n RPC is transparent u the calling procedure is not aware that the called procedure is executing on a different machine u and vice versa n client and server can be designed in the traditional way n parts of existing programs can be used n ‘easy’ reconversion of programmers
RTP slide 41Programmatuur voor real-time controleYolande Berbers Java RMI: Architecture overview Transport Layer Stub generated by rmic implements java.rmi.Remote extends java.rmi.UnicastRemoteObject ClientServer Skeleton Remote Reference Layer
RTP slide 42Programmatuur voor real-time controleYolande Berbers Java RMI: Naming and Registry n How to obtain a remote reference to a server ? u Name service: registry l Maintains Name-Reference bindings Can be started by rmiregistry command or in application n java.rmi.Naming u Remote Server objects can bind a name to a reference u Client objects can retrieve a reference by giving the name
RTP slide 43Programmatuur voor real-time controleYolande Berbers Java RMI: Client/Server objects n How to create a remote server object u Create a remote interface must inherit from java.rmi.Remote every method: throw java.rmi.RemoteException u Create an implementation u Generate stubs and skeletons u Generate a server l Start a remote object l Register the object with the Registry n Create a Client u Obtain a reference to a remote object
RTP slide 44Programmatuur voor real-time controleYolande Berbers Java RMI: Parameter Handling n Non remote calls u primitive data types: by value u Object data types: by reference n Remote calls u primitive data types: by value u Object data types: by value (must be serializable)
RTP slide 45Programmatuur voor real-time controleYolande Berbers RPC: problemen n zie hoofdstuk 14