RTP
Real-Time Programmatuur
hoofdstuk 7:
concurrent
programming
Yolande Berbers
Programmatuur voor real-time controle
slide 1
RTP
kenmerken van een RTS
(copie van slide van H1)
verschillende software componenten zijn gelijktijdig actief
de apparaten in de omgeving werken gelijktijdig
deze gelijktijdigheid wordt het best gerealiseerd door
gelijktijdig uitvoerende software componenten
meer en meer real-time systemen zijn gedistribueerde systemen
dit vraagt ondersteuning van programmeertalen en/of systemen
Yolande Berbers
Programmatuur voor real-time controle
slide 2
RTP
gelijktijdigheid: inleiding
Multiprogrammatie
gelijktijdige processen
processen: onafhankelijk of samenwerkend
Monoprocessor
multiplexing van de CPU
Multiprocessor
processen voeren echt gelijktijdig uit
Yolande Berbers
Programmatuur voor real-time controle
slide 3
RTP
samenwerkende processes
samenwerkende processen:
elke proces wordt beïvloed door of beïnvloed andere processen
ze delen informatie (gegevens, toestandsinformatie, …)
veronderstelt “communicatie mechanisme”
voordelen:
modulariteit
versnelling
monoprocessor: als ene moet wachten kan andere verder
multiprocessor: werkelijk in parallel
Yolande Berbers
Programmatuur voor real-time controle
slide 4
RTP
communicatie mechanismen
gedeeld geheugen (zie H8)
booschappen (zie H9)
zenden - ontvangen
sturen van events (zie H11)
asynchroon
Yolande Berbers
Programmatuur voor real-time controle
slide 5
RTP
gedeeld geheugen
processen delen stuk van geheugen
besturingssyst.oproepen voor export / import geheugen
communicatie zonder tussenkomst besturingssysteem
Yolande Berbers
Process A
Process B
Import
Export
Store Ri,xyz
Load Rj,xyz
Programmatuur voor real-time controle
slide 6
RTP
communicatie met boodschappen
geen gedeeld geheugen
besturingssysteemoproepen voor zenden / ontvangen
van boodschappen
Process A
Send
Yolande Berbers
besturingssysteem
Process B
Receive
Programmatuur voor real-time controle
slide 7
RTP
events (zie H11)
vergelijkbaar met interrupts
besturingssyst.oproep voor signaleren van event (kill) /
voor aanduiden van handler (signal)
(volgt het resumptionmodel)
Process A
Kill
Yolande Berbers
Process B
Signal
Programmatuur voor real-time controle
slide 8
RTP 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
Yolande Berbers
Programmatuur voor real-time controle
slide 9
RTP
seq. vs concurrent prog. talen
sequentiële prog.talen: Pascal, C, 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
Yolande Berbers
Programmatuur voor real-time controle
slide 10
RTP
een proces en zijn levencyclus
niet bestaand
niet bestaand
Proces
Code
PC
Data
+ Stack
gecreëerd
initialiserend
beëindigd
uitvoerbaar
Yolande Berbers
Programmatuur voor real-time controle
slide 11
RTP
seq. vs concurrent prog. talen
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
Yolande Berbers
Programmatuur voor real-time controle
slide 12
RTP
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 hele virtuele machine
de programmeur en de taal moeten de controledraden voor
elkaar beschermen
Yolande Berbers
Programmatuur voor real-time controle
slide 13
RTP
Threads
Process
Threads
Code
Code
PC
PC
PC
PC
Data
+ Stack
Data
+ Stack
Thread, LWP (Lightweight Process)
Yolande Berbers
Programmatuur voor real-time controle
slide 14
RTP
Threads
Process
Process
Registers
Registers
Registers
PC
Code
Data
Registers
Registers
Registers
Other state ...
Stack
PC
Code
Data
Other state ...
PC
Stack
Stack
Registers
Registers
Registers
Other state ...
Resources
Resources
Yolande Berbers
Programmatuur voor real-time controle
slide 15
RTP
Threads
Thread
own state
IC, registers, CC, …, stack (+ SP)
code, data, other resources: shared
Disadvantage
no protection between threads of 1 task
Advantages:
context switch = less overhead
thread creation / termination = cheap
Yolande Berbers
Programmatuur voor real-time controle
slide 16
RTP
Threads
Implementation
User-Level Threads
Supported by OS
Library Routines
SVC CREATE-THREAD
Switching = Fast!
More Overhead
Blocking SVC!
threads blocked!
Blocking SVC
other threads still run
Scheduling (process)
Scheduling (thread)
E.g. Unix
E.g. OS/2, Solaris, ...
Yolande Berbers
Programmatuur voor real-time controle
slide 17
RTP
Threads
Client
Server
Client
Client
Server
Client
Yolande Berbers
Programmatuur voor real-time controle
slide 18
RTP
Kernel
Threads
Switch
Blocking
SVC
Sched.
Multi-CPU
Overhead
Switch
thread
by kernel:
Fair (?)
# in Parallel
Lib.
Fast!
Routine
(user level)
Yolande Berbers
Wait (block Progr. (do
process)
it yourself)
Programmatuur voor real-time controle
Max. 1
slide 19
RTP
Threads
Kernel (OS):
single-threaded vs multi-threaded
single-thread:
at most 1 process active in kernel
multi-thread:
many processes active in kernel
synchronization! (shared data structures)
Yolande Berbers
Programmatuur voor real-time controle
slide 20
RTP
seq. vs concurrent prog. talen
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
Yolande Berbers
Programmatuur voor real-time controle
slide 21
RTP
seq. vs concurrent prog. talen
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
Yolande Berbers
Programmatuur voor real-time controle
slide 22
RTP
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
Yolande Berbers
Programmatuur voor real-time controle
slide 23
RTP
gelijktijdig uitvoeren
verschillen tussen procesmodellen
structuur
niveau
granulariteit
initialisatie
beëindiging
relaties tussen gecreëerd proces en andere
voorstelling
Yolande Berbers
Programmatuur voor real-time controle
slide 24
RTP
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)
Yolande Berbers
Programmatuur voor real-time controle
slide 25
RTP
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
Yolande Berbers
Programmatuur voor real-time controle
slide 26
RTP
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
Yolande Berbers
Programmatuur voor real-time controle
slide 27
RTP
Process States
niet bestaand
niet bestaand
gecreëerd
wacht op
init kind
Yolande Berbers
initialiserend
beëindigd
uitvoerbaar
wacht op
afhank. einde
Programmatuur voor real-time controle
slide 28
RTP
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: beschermd door passieve entiteit
server: resource waarbij de controle actief is (proces is nodig)
Yolande Berbers
Programmatuur voor real-time controle
slide 29
RTP
gelijktijdig uitvoeren
voorstelling: 4 basis mechanismen
co-routines
fork/join
cobegin/coend
expliciete procesdeclaratie
Yolande Berbers
Programmatuur voor real-time controle
slide 30
RTP
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
Yolande Berbers
Programmatuur voor real-time controle
slide 31
RTP
procesvoorstelling: co-routines
Co-routine A
1
6
Co-routine B
2
3
resume B
7
resume B
12 11
Co-routine C
4
resume C
8
10
5
resume A
9
resume A
6
13
14
12
resume B
15
resume C
Yolande Berbers
Programmatuur voor real-time controle
slide 32
RTP
procesvoorstelling: fork en join
methode:
C := fork F
join C;
een nieuw proces start de uitvoering van F
oproepend proces gaat ook verder
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 bv expliciet wachten op al zijn kinderen
Yolande Berbers
Programmatuur voor real-time controle
slide 33
RTP
procesvoorstelling: fork en join
tijdsas
fork
fork
P
F
P
F
join
join
vaderproces voert
join uit voordat kind
beëindigd is
Yolande Berbers
kindproces heeft
gedaan voordat vader
join uitvoert
Programmatuur voor real-time controle
slide 34
RTP 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
Yolande Berbers
Programmatuur voor real-time controle
slide 35
RTP procesvoorstelling: cobegin/coend
tijdsas
cobegin
coend
Yolande Berbers
Programmatuur voor real-time controle
slide 36
RTP
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)
Yolande Berbers
Programmatuur voor real-time controle
slide 37
RTP
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 is
task A;
task body A is
-- lokale declaraties
begin
-- bevelen van de taak A
end A;
begin
... -- taak A begint met uitvoeren voor het eerste bevel in dit blok
end eenvoudige_taak;
Yolande Berbers
Programmatuur voor real-time controle
slide 38
RTP
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;
Yolande Berbers
Programmatuur voor real-time controle
slide 39
RTP
gelijktijdige uitvoering in Ada
parameters kunnen doorgegeven worden bij initialisatie
procedure Main is
type Dimension is (Xplane, Yplane);
task type Control (Dim: Dimension);
C1: Control(Xplane);
C2: Control(Yplane);
task body Control is
-- lokale declaraties
begin
-- bevelen van de taak Control (zie in boek)
end Control;
begin
null;
end Main;
Yolande Berbers
Programmatuur voor real-time controle
slide 40
RTP
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)
Yolande Berbers
Programmatuur voor real-time controle
slide 41
RTP 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)
Yolande Berbers
Programmatuur voor real-time controle
slide 42
RTP 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 */
Yolande Berbers
Programmatuur voor real-time controle
slide 43
RTP 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 */
Yolande Berbers
Programmatuur voor real-time controle
slide 44
RTP 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 */
Yolande Berbers
Programmatuur voor real-time controle
slide 45
RTP 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 */
Yolande Berbers
Programmatuur voor real-time controle
slide 46
RTP 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 */
Yolande Berbers
Programmatuur voor real-time controle
slide 47
RTP 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 */
Yolande Berbers
Programmatuur voor real-time controle
slide 48
RTP
Robot Arm in C/POSIX
#include <pthread.h>
pthread_attr_t attributes;
pthread_t xp, yp, zp;
typedef enum {xplane, yplane, zplane} dimension;
int new_setting(dimension D);
void move_arm(int D, int P);
void controller(dimension *dim)
{
int position, setting;
position = 0;
while (1) {
setting = new_setting(*dim);
position = position + setting;
move_arm(*dim, position);
};
/* note, process does not terminate */
}
Yolande Berbers
Programmatuur voor real-time controle
slide 49
int main() {
dimension X, Y, Z;
void *result;
Need JOIN as when a process terminates,
all its threads are forced to terminate
X = xplane,
Y = yplane;
Z = zplane;
PTHREAD_ATTR_INIT(&attributes);
/* set default attributes */
PTHREAD_CREATE(&xp, &attributes, (void *)controller, &X);
PTHREAD_CREATE(&yp, &attributes, (void *)controller, &Y);
PTHREAD_CREATE(&zp, &attributes, (void *)controller, &Z);
PTHREAD_JOIN(xp, &result);
/* need to block main program */
exit(-1); /* error exit, the program should not terminate */
}
SYS_CALL style indicates a call to
sys_call with a check for error returns
RTP
Threads in Java
Two techniques:
subclassing Thread and overriding run
Implementing Runnable Interface
for classes that extend another class
no multiple inheritence
Yolande Berbers
Programmatuur voor real-time controle
slide 51
RTP
Threads in Java
class FirstThread extends Thread {
public FirstThread (String str) { super(str); }
public void run ()
{ … what the thread should do … }
}
class SecondThread extends Thread {
public SecondThread (String str) { super(str); }
public void run () { … what this thread should do … }
}
public class TwoThreadsTest {
public static void main (String [] args) {
new FirstThread(“First”).start();
new SecondThread(“Second”).start();
}
Yolande Berbers
Programmatuur voor real-time controle
slide 52
RTP
Threads in Java
class Name extends Whatever implements Runnable {
public Name (...) { ... }
public void run ()
{ … what the thread should do … }
}
public class ThreadsTest {
public static void main (String [] args) {
Name obj = new Name (…);
Thread objThread = new Thread(obj, “NameThread”);
objThread.start();
}
}
Yolande Berbers
Programmatuur voor real-time controle
slide 53
RTP
Threads in Java
Lifecycle of a thread
yield( )
start( )
new Thread
Runnable
block on I/O
sleep( millisec )
wait for a condition
Not Runnable
run() terminates
Dead
Yolande Berbers
Programmatuur voor real-time controle
slide 54
RTP
Robot Arm Example
public class UserInterface
{
public int newSetting (int Dim) \{ ... \}
...
}
public class Arm
{
public void move(int dim, int pos) \{ ... \}
}
UserInterface UI = new UserInterface();
Arm Robot = new Arm();
Yolande Berbers
Programmatuur voor real-time controle
slide 55
RTP
Robot Arm Example
public class Control extends Thread
{
private int dim;
public Control(int Dimension) // constructor
{
super();
dim = Dimension;
}
public void run()
{
int position = 0;
int setting;
while(true)
{
Robot.move(dim, position);
setting = UI.newSetting(dim);
position = position + setting;
}
Yolande Berbers}
Programmatuur voor real-time controle
slide 56
RTP
Robot Arm Example
final int xPlane = 0;
final int yPlane = 1;
final int zPlane = 2;
// final indicates a constant
Control C1 = new Control(xPlane);
Control C2 = new Control(yPlane);
Control C3 = new Control(zPlane);
C1.start();
C2.start();
C3.start();
Yolande Berbers
Programmatuur voor real-time controle
slide 57
RTP
Alternative Robot Control
public class Control implements Runnable
{
private int dim;
public Control(int Dimension)
{
dim = Dimension;
}
// constructor
public void run()
{
int position = 0;
int setting;
while(true)
{
Robot.move(dim, position);
setting = UI.newSetting(dim);
position = position + setting;
}
}
Yolande
} Berbers
Programmatuur voor real-time controle
slide 58
RTP
Alternative Robot Control
final int xPlane = 0;
final int yPlane = 1;
final int zPlane = 2;
Control C1 = new Control(xPlane); // no thread created yet
Control C2 = new Control(yPlane);
Control C3 = new Control(zPlane);
// constructors passed a Runnable interface and threads created
Thread X = new Thread(C1);
Thread Y = new Thread(C2);
Thread Z = new Thread(C2);
X.start(); // thread started
Y.start();
Z.start();
Yolande Berbers
Programmatuur voor real-time controle
slide 59
RTP
Java Thread States
non-existing
Create thread object
new
start
executable
run method exits
stop, destroy
blocked
Yolande Berbers
dead
Programmatuur voor real-time controle
slide 60
RTP
Points about Java Threads
Java allows dynamic thread creation
Java (by means of constructor methods) allows arbitrary data
to be passed as parameters
Java allows thread hierarchies and thread groups to be
created but there is no master or guardian concept; Java
relies on garbage collection to clean up objects which can no
longer be accessed
The main program in Java terminates when all its user threads
have terminated (see later)
One thread can wait for another thread (the target) to
terminate by issuing the join method call on the target's
thread object.
The isAlive method allows a thread to determine if the
target thread has terminated
Yolande Berbers
Programmatuur voor real-time controle
slide 61
RTP
A Thread Terminates:
when it completes execution of its run method either
normally or as the result of an unhandled exception;
via its stop method — the run method is stopped and the
thread class cleans up before terminating the thread
(releases locks and executes any finally clauses)
the thread object is now eligible for garbage collection.
if a Throwable object is passed as a parameter to stop,
then this exception is thrown in the target thread; this allows
the run method to exit more gracefully and cleanup after itself
stop is inherently unsafe as it releases locks on objects and
can leave those objects in inconsistent states; the method is
now deemed obsolete (depreciated) and should not be used
by its destroy method being called -- destroy terminates the
thread without any cleanup (never implemented in JVM)
Yolande Berbers
Programmatuur voor real-time controle
slide 62
RTP
Daemon Threads
Java threads can be of two types: user threads or
daemon threads
Daemon threads are those threads which provide general
services and typically never terminate
When all user threads have terminated, daemon threads
can also be terminated and the main program terminates
The setDaemon method must be called before the
thread is started
(Daemon threads provide the same functionality as the
Ada ``or terminate'' option on the select statement)
Yolande Berbers
Programmatuur voor real-time controle
slide 63
RTP
Thread Exceptions
IllegalThreadStateException is thrown when:
start method is called and thread has already been started
the setDaemon method has been called and the thread has
already been started
SecurityException is thrown by security manager when:
a stop or destroy method has been called on a thread for
which the caller does not have the correct permissions for the
operation requested
NullPointerException is thrown when:
A null pointer is passed to the stop method
InterruptException is thrown if a thread which has
issued a join method is woken up by the thread being
interrupted rather than the target thread terminating
Yolande Berbers
Programmatuur voor real-time controle
slide 64
RTP
Ada, Java and C/POSIX
Ada and Java provide a dynamic model with support for
nested tasks and a range of termination options.
POSIX allows dynamic threads to be created with a flat
structure; threads must explicitly terminate or be killed.
Yolande Berbers
Programmatuur voor real-time controle
slide 65
RTP 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
thermokoppel
T
drukmeter
P
verwarming
S
pomp
scherm
Yolande Berbers
Programmatuur voor real-time controle
slide 66
RTP 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
Yolande Berbers
Programmatuur voor real-time controle
slide 67
RTP 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;
Yolande Berbers
Programmatuur voor real-time controle
slide 68
RTP 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
Yolande Berbers
Programmatuur voor real-time controle
slide 69
RTP 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 ...
Yolande Berbers
Programmatuur voor real-time controle
slide 70
RTP 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
Yolande Berbers
Programmatuur voor real-time controle
slide 71
RTP 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 ;
Yolande Berbers
Programmatuur voor real-time controle
slide 72
RTP 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)
Yolande Berbers
Programmatuur voor real-time controle
slide 73
RTP
seq. vs concurrent prog. talen
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
Ada/Java: voordelen groter dan nadelen
Yolande Berbers
Programmatuur voor real-time controle
slide 74