ada tres bon cours

128
 Développement de systèmes embarqués temps réel avec Ada F rank Singhoff Bureau C-207 Université de Brest, France LISyC/EA 3883 [email protected] UE sys tèmes temps rée l, Univ ersité de Bres t – Page 1/128

Upload: sidi-youssef-bacadi

Post on 21-Jul-2015

150 views

Category:

Documents


0 download

TRANSCRIPT

Dveloppement de systmes embarqus temps rel avec AdaFrank Singhoff Bureau C-207 Universit de Brest, France LISyC/EA 3883 [email protected]

UE systmes temps rel, Universit de Brest Page 1/128

Sommaire1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.

UE systmes temps rel, Universit de Brest Page 2/128

Prsentation Caractristiques des systmes embarqus temps rel et objectifs :

1. Comme tous systmes temps rel : dterminisme logique, temporel et abilit. 2. Mais en plus : Ressources limites (mmoire a , vitesse processeur, nergie). Accessibilit rduite. Autonomie leve. Interaction avec son environnement (capteurs).= Environnements dexcution spciques.a

footprint ou empreinte mmoire.UE systmes temps rel, Universit de Brest Page 3/128

Systmes dexploitation temps rel (1) Caractrisques :Aussi appel "Moniteur" ou "Excutif". Modulaire et de petite taille. Flexible vis--vis de lapplication. Accs ais aux ressources physiques. Abstractions adaptes (paralllisme, exception, interruption, tches, ...) Support de langages pour le temps rel (ex : C, Ada). Livr avec ses performances temporelles (en thorie). Amliorer la portabilit : architecture + standardisation (du langage de programmation, des services du systme dexploitation).UE systmes temps rel, Universit de Brest Page 4/128

Systmes dexploitation temps rel (2)

Architecture en couches : Bibliothque langage (ou runtime) constituant lenvironnement dexcution dun programme (C, Ada). Portabilit de lapplication (adapte le langage au systme dexploitation). BSP/Board support package : portabilit du systme dexploitation (adapte le systme dexploitation au matriel).UE systmes temps rel, Universit de Brest Page 5/128

Systmes dexploitation temps rel (3) Performance connue et dterministe: Doit permettre lvaluation de la capacit des tches par exemple. Utilisation de benchmarks (ex : Rhealstone, Hartstone, etc). Critres de performances : Latence sur interruption. Latence sur commutation de contexte/tche. Latence sur premption. Smaphore "shufe" (temps coul entre la libration dun smaphore et la ractivation dune tche bloque sur celui-ci). Temps de rponse pour chaque service (appel systme, fonctions de bibliothque). etc.UE systmes temps rel, Universit de Brest Page 6/128

Systmes dexploitation temps rel (4). TCP/IP sur Ethernet , liens sries, etc . TFTP, NFS Environnement de dveloppementGDB

Machine cibleRGDB

rshHte (windows)

OS temps rel

Disque NFS

Phase de dveloppement : dition du source, compilation croise, tlchargement, excution et tests. Phase dexploitation : construction dune image minimale (excutif + application) sans les services de dveloppement. Stockage en EEPROM, Flash.UE systmes temps rel, Universit de Brest Page 7/128

Etat du march (1)30 Nombre dentreprises utilisant le systme 25

21.4220 Pourcentage

19.7

15

12.84 10.19

10

6.64 5.965

4.69

3.89

2.86 2.41 2.3 1.95 1.83 1.72 1.61

pr

in

So

lu

tio

W

n

Systmes temps rel embarqus

Caractristiques du march [TIM 00] : Diversit des produits prsents = produits gnralistes ou spciques des applications types. Prsence importante de produits "maisons".UE systmes temps rel, Universit de Brest Page 8/128

W

in

III sC N uc E le us + RT RT -L X in Ch ux or us O S A ut re s do w

X RT

ire

ks

T S9

S

X

O

sN

O nx iR

S M

or

pS

ta

ri

Q

O

W

w

V

op

do

vx

Ly

X

N

Etat du march (2) Quelques exemples de produits industriels : VxWorks : produit gnraliste et largement rpandu (PABX, terminal X de HP, Pathnder, satellite CNES, etc). pSOS dit par ISI (appli militaire, tl. portable). VRTX dit par Microtec (appli militaire, tl. portable). LynxOs (Unix temps rel). Windows CE/Microsoft (systmes embarqus peu temps rel). Produits "open-source" : OSEK-VDX (appli. automobile). RTEMS de Oar (appli. militaire). eCos de cygnus. RT-Linux.UE systmes temps rel, Universit de Brest Page 9/128

Etat du march (3) Quelques standards :

Langages de conception logicielle: UML/MARTE, AADL, HOOD HRT, ... Langages de programmation : Ada 2005, C, ... Systmes dexploitation : POSIX, ARINC 653, OSEK VDX, ...

UE systmes temps rel, Universit de Brest Page 10/128

La norme POSIX (1) Objectif : dnir une interface standard des services offerts par UNIX[VAH 96, J. 93] an doffrir une certaine portabilit des applications. Norme tudie/publie conjointement par lISO et lANSI. Problmes : Portabilit difcile car il existe beaucoup de diffrences entre les UNIX. Tout nest pas (et ne peut pas ?) tre normalis. Divergence dans limplantation des services POSIX (ex : threads sur Linux). Architecture de la norme. Exemple de systmes POSIX : Lynx/OS, VxWorks, Solaris, Linux, QNX, etc .. (presque tous les systmes temps rel).UE systmes temps rel, Universit de Brest Page 11/128

La norme POSIX (2) Architecture de la norme : dcoupe en chapitres optionnels et obligatoires. Chaque chapitre contient des parties obligatoirement prsentes, et dautres optionnelles. Exemple de chapitres de la norme POSIX :

Chapitres POSIX 1003.1

Signication Services de base (ex : f ork , exec, ect) POSIX 1003.2 Commandes shell (ex : sh) POSIX 1003.1b [GAL 95] Temps rel POSIX 1003.1c [RIF 95] Threads POSIX 1003.5 POSIX et Ada etcUE systmes temps rel, Universit de Brest Page 12/128

La norme POSIX (3) Cas du chapitre POSIX 1003.1b : presque tout les composants sont optionnels !!Nom _POSIX_PRIORITY_SCHEDULING _POSIX_REALTIME_SIGNALS _POSIX_ASYNCHRONOUS_IO _POSIX_TIMERS _POSIX_SEMAPHORES etc ... Signication Ordonnancement priorit xe Signaux temps rel E/S asynchrones Chien de garde Smaphores

Consquence : que veut dire "tre conforme POSIX 1003.1b" ... pas grand chose puisque la partie obligatoire nest pas sufsante pour construire des applications temps rel.

UE systmes temps rel, Universit de Brest Page 13/128

La norme POSIX (4)Les threads POSIX. Services dordonnancement. Outils de synchronisation. Les signaux temps rel. La manipulation du temps. Les entres/sorties asynchrones. Les les de messages. La gestion mmoire.

UE systmes temps rel, Universit de Brest Page 14/128

Sommaire1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.

UE systmes temps rel, Universit de Brest Page 15/128

Introduction au langage Ada 2005 (1) Pourquoi ce langage : Abstractions temps rel : tche, interruption, ordonnancement, synchronisation, timer et gestion du temps, ... Langage standardis par lISO (portabilit). Compilation spare (logiciel volumineux) et typage fort (abilit). Langage complexe. Domaines : transport (avionique et ferroviaire), spatial, militaire. Exemples : Airbus (320, 380), Boeing (777), Fokker, Tupolev, Eurostar, Metro (14 Paris), TGV, Ariane (4 et 5), Satellites (Intersat), spatial (sonde Cassini, Huygens, Soho, Mars Express), militaire (Tigre, Apache, Patriot) = http://www.seas.gwu.edu/ mfeldman/ada-project-summary.html. Points de repre historique : Ada 83, Ada 95, Ada 2005, Ada 2012.UE systmes temps rel, Universit de Brest Page 16/128

Introduction au langage Ada 2005 (2)1. Cest quoi un programme Ada ? 2. Types, oprateurs, variables, constantes. 3. Structure et ot de contrle. 4. Entres/sorties. 5. Pointeur et allocation dynamique. 6. Paquetages gnriques.

UE systmes temps rel, Universit de Brest Page 17/128

Cest quoi un programme Ada (1) Compilation spare : unit de programme = entit logicielle compilable indpendamment. Logiciels de grande taille. Catgories dunit de programme (chiers GNAT) :Procdure principale : point dentre dun programme (chier .adb). Paquetage : collection de dclarations (sous programmes, types, tches, ...). Partie visible (spcication du paquetage, chier .ads). Partie cache (corps du paquetage, chier .adb). Tches : spcication (chier .ads) et implmentation (chier .adb). Units gnriques: units (paquetage ou sous programmes) paramtres par types, constantes, sous-programmes ou paquetages.UE systmes temps rel, Universit de Brest Page 18/128

Cest quoi un programme Ada (2) Structure dune procdure principale : w i t h nom_paquetage1 ; use nom_paquetage1 ; w i t h nom_paquetage2 ; use nom_paquetage2 ; procedure n o m _ p r o c e d u r e _ p r i n c i p a le i s d e c l a r a t i o n s begin i n s t r u c t i o n s end n o m _ p r o c e d u r e _ p r i n c i p a l e ; Fichier nom_procedure_principale.adb Clauses with et useUse est optionnel (notation pointe dans ce cas)UE systmes temps rel, Universit de Brest Page 19/128

Cest quoi un programme Ada (3) Exemple de procdure principale :

with text_io ; use t e x t _ i o ; procedure Coucou i s begin Put_Line ( " Coucou " ) ; end Coucou ;

UE systmes temps rel, Universit de Brest Page 20/128

Cest quoi un programme Ada (4) Structure dune spcication de paquetage :

package nom_du_paquetage i s d e c l a r a t i o n s p u b l i q u e s private d e c l a r a t i o n s p r i v e e s end nom_du_paquetage ; Structure dune implmentation de paquetage :

package body nom_du_paquetage i s sous programmes begin code d i n i t i a l i s a t i o n end nom_du_paquetage ;UE systmes temps rel, Universit de Brest Page 21/128

Cest quoi un programme Ada (5) Spcication dun paquetage (chier lemien.ads) :package Lemien i s procedure somme( a : i n i n t e g e r ; b : i n i n t e g e r ; r e s u l t a t : out i n t e g e r ) ; f u n c t i o n somme( a : i n i n t e g e r ; b : i n i n t e g e r ) return integer ; private variable_interne : integer ; end Lemien ;

UE systmes temps rel, Universit de Brest Page 22/128

Cest quoi un programme Ada (6) Implmentation dun paquetage (lemien.adb) :package body Lemien i s procedure somme( a : i n i n t e g e r ; b : i n i n t e g e r ; r e s u l t a t : out i n t e g e r ) i s begin r e s u l t a t : = a+b+ v a r i a b l e _ i n t e r n e ; end somme; f u n c t i o n somme( a : i n i n t e g e r ; b : i n i n t e g e r ) return integer is begin r e t u r n a+b+ v a r i a b l e _ i n t e r n e ; end somme; begin va ri a b l e _ i n te rn e :=100; end Lemien ;UE systmes temps rel, Universit de Brest Page 23/128

Cest quoi un programme Ada (7) Exemple dutilisation du paquetage lemien :with t e x t _ io ; use t e x t _ i o ; w i t h Lemien ; use Lemien ; procedure p r i n c i s a : integer :=0; begin somme( 1 0 , 2 0 , a ) ; Put_Line ( i n t e g e r image ( a ) ) ; a : =somme( 4 0 , 5 0 ) ; Put_Line ( i n t e g e r image ( a ) ) ; end p r i n c ;UE systmes temps rel, Universit de Brest Page 24/128

Cest quoi un programme Ada (8) Compiler ce programme (avec GNAT) :>gnatmake p r i n c . adb gcc c lemien . adb gcc c p r i n c . adb g n a t b i n d x p r i n c . a l i gnatlink princ . a l i gnatmake : gestion des dpendances entre units de programme. gcc : compilation gnatbind : phase dlaboration (initialisation des paquetages). gnatlink : dition des liens. Rsultats : princ, lemien.ali, lemien.o, princ.ali et princ.oUE systmes temps rel, Universit de Brest Page 25/128

Cest quoi un programme Ada (9) Exercice 1 :package c a l c u l i s function additionne (a : in integer ; b : in integer ) return integer ; function multiplie (a : in integer ; b : in integer ) return integer ; function soustrait (a : in integer ; b : in integer ) return integer ; function divise (a : in integer ; b : in integer ) return integer ; end c a l c u l ; crire une procdure principale qui , grce au paquetage calcul, calcule et afche lexpression suivante (2 3) + 4. crire limplmentation du paquetage.UE systmes temps rel, Universit de Brest Page 26/128

Types, oprateurs, variables (1) Typage fort:

Amliorer la maintenabilit (lisibilit). Amliorer la scurit: analyse statique la compilation et lexcution (exception). Interdire les oprations entre variables de types diffrents (pas de cast implicite). Type:

Type = taille mmoire + reprsentation + plage de valeurs + attributs/oprateurs. Plage de valeurs dnie par la norme (portabilit). Attribut : oprateurs pr-dnis pour tous les types, dnis par lutilisateur ou non.UE systmes temps rel, Universit de Brest Page 27/128

Types, oprateurs, variables (2) Types scalaires :

float, integer, boolean, character, acces ainsi que les numrations.

Exemples dattribut : integerlast, integerfirst, integerrange Types composs : array, string (qui est un array), record, union, task, protected Principaux oprateurs :

Arithmtiques : +, -, *, /, mod Relationnels : =, /=, =, in, not, and, or, xorUE systmes temps rel, Universit de Brest Page 28/128

Types, oprateurs, variables (3)Types drivs : si a est un type driv de b, alors a et b sont deux types diffrents, et ne sont pas compatibles. Sous types : si a est un sous type de b, alors a et b sont compatibles. a est un alias de b.

UE systmes temps rel, Universit de Brest Page 29/128

Types, oprateurs, variables (4) Exemples de dclarations :with t e x t _ i o ; use t e x t _ i o ; procedure d e c l a r e _ v a r i s i1 : integer ; i2 : i nteger := 0; s1 : s t r i n g ( 1 . . 1 0 ) ; f1 : constant f l o a t := 10.5; begin Put_Line ( " i n t e g e r f i r s t =" & i n t e g e r image ( i n t e g e r f i r s t ) ) ; Put_Line ( " i n t e g e r l a s t =" & i n t e g e r image ( i n t e g e r l a s t ) ) ; end d e c l a r e _ v a r ;

UE systmes temps rel, Universit de Brest Page 30/128

Types, oprateurs, variables (5) Exemples types drivs et sous types:procedure d e r i v e i s t y p e te mp e ra tu re i s new i n t e g e r range 280 . . 300; t 1 : te mp e ra tu re : = 0 ; t 2 : te mp e ra tu re : = 300; i : integer :=10; begin t1 := t1+t2 ; t1 := t1+ i ; t 2 : = t 2 +1; end d e r i v e ;UE systmes temps rel, Universit de Brest Page 31/128

Types, oprateurs, variables (6) Exemples types drivs et sous types:procedure d e r i v e i s subtype te mp e ra tu re i s i n t e g e r range 280 . . 300; t 1 : te mp e ra tu re : = 0 ; t 2 : te mp e ra tu re : = 300; i : integer :=10; begin t1 := t1+t2 ; t1 := t1+ i ; t 2 : = t 2 +1; end d e r i v e ;UE systmes temps rel, Universit de Brest Page 32/128

Types, oprateurs, variables (7)Le typage fort facilite lanalyse statique. Exemple du programme C de D. Lesens [LES 10].

/ / Programme C i n c o r r e c t / / q u i compile c o r r e c te m e n t t y p e d e f enum { ok , nok } t_ok_nok ; t y p e d e f enum { o f f , on } t _ o n _ o f f ; v o i d main ( ) { t_ok_nok s t a t u s = nok ; i f ( s t a t u s == on ) p r i n t f ( " i s on \ n " ) ; }

UE systmes temps rel, Universit de Brest Page 33/128

Types, oprateurs, variables (8)Et la version Ada maintenant :with t e x t _ i o ; use t e x t _ i o ; Programme Ada i n c o r r e c t q u i NE compile procedure c fa u x i s ty p e t_ok_nok i s ( ok , nok ) ; ty p e t _ o n _ o f f i s ( o f f , on ) ; s t a t u s : t_ok_nok : = nok ; begin i f ( s t a t u s = on ) then Put_Line ( " i s on \ n " ) ; end i f ; end c fa u x ;UE systmes temps rel, Universit de Brest Page 34/128

Types, oprateurs, variables (9) Types composs : 1. Constructeurs de type : type 2. numration : type discret, implantation mmoire cache (ex: enum en C) mais attributs spciques (succ et pos). 3. Structure : constructeur record. Initialisation des attributs par ordre de dclaration ou en les nommant. 4. Tableau : constructeur array, une ou deux dimensions, indices de type discret (entier, numration), taille connue la dnition du type ou la dclaration du tableau.

UE systmes temps rel, Universit de Brest Page 35/128

Types, oprateurs, variables (10) Exemple dnumration :with t e x t _ i o ; use t e x t _ i o ; procedure enumeration i s ty p e u n _ j o u r i s ( l u n d i , mardi , mercredi , j e u d i , vendredi , samedi , dimanche ) ; j : un_jour := l u n d i ; package i o i s new t e x t _ i o . e n u m e r a ti o n _ i o ( u n _ j o u r ) ; begin i o . Put ( un_jour f i r s t ) ; i o . Put ( un_jour l a s t ) ; j : = un_jour succ ( j ) ; i o . Put ( j ) ; Put_Line ( un_jour image ( j ) ) ; end enumeration ;UE systmes temps rel, Universit de Brest Page 36/128

Types, oprateurs, variables (11) Exemple de tableau :ty p e u n _ j o u r i s ( l u n d i , mardi , mercredi , j e u d i , vendredi , samedi , dimanche ) ; ty p e tab1 i s a r r a y ( 0 . . 3 ) o f i n t e g e r ; ty p e tab2 i s a r r a y ( 1 . . 4 ) o f u n _ j o u r ; ty p e tab3 i s a r r a y ( l u n d i . . dimanche ) o f i n t e g e r ; t 1 : tab1 : = ( 3 0 , 4 3 , 2 8 , 1 0 0 ) ; t 2 : tab2 : = (4= > l u n d i , 2=>mardi , 3=>dimanche , 1=> m e r c r e d i ) ; t 3 : tab3 ; begin t1 (0):= t1 (0)2; t 2 ( 1 ) : = dimanche ; t3 ( lundi ) :=2 ; ...UE systmes temps rel, Universit de Brest Page 37/128

Types, oprateurs, variables (12) Exemple de structure :with t e x t _ i o ; use t e x t _ i o ; procedure p o i n t i s ty p e u n _ p o i n t i s r e c o r d x : integer ; y : integer ; end r e c o r d ; p1 : u n _ p o i n t : = ( 1 0 , 2 0 ) ; p2 : u n _ p o i n t : = ( y = >20 , x = >10); begin Put_Line ( i n t e g e r image ( p1 . x ) ) ; Put_Line ( i n t e g e r image ( p1 . y ) ) ; end p o i n t ;UE systmes temps rel, Universit de Brest Page 38/128

Types, oprateurs, variables (13) Exercice 2 : pour chaque affectation, indiquez si elle est correcte ou non. ty p e t 1 i s new i n t e g e r range 0 . . 1 0 ; ty p e t 2 i s new i n t e g e r range 0 . . 1 0 0 ; subtype t 3 i s t 1 ; subtype t 4 i s t 3 ; subtype t 5 i s t 2 ; a , b : t1 ; c : t2 ; d : t3 ; e, f : a : = b+c ; d : = ca ; d : = c f ; f : = a+b ; e : = e 100;UE systmes temps rel, Universit de Brest Page 39/128

t4 ;

Flots de contrle (1)Squence :i1 ; i2

Conditionnelle :i f cond then i 1 ; else i2 ; end i f ;

UE systmes temps rel, Universit de Brest Page 40/128

Flots de contrle (2)Diverses formes ditration :w h i l e cond loop i1 ; i2 ; end l o o p ; loop i1 ; i2 ; e x i t cond ; end l o o p ; f o r i i n a . . b loop i1 ; i2 ; end l o o p ;

UE systmes temps rel, Universit de Brest Page 41/128

Flots de contrle (3) Exemple employant des attributs:s1 , s2 , s3 : i n t e g e r : = 0 ; subtype i n d i c e i s i n t e g e r range 1 . . 1 0 ; ... f o r i i n 1..10 loop s1 : = s1+ i ; end l o o p ; f o r j i n indice f i r s t . . indice l a s t loop s2 : = s2+ j ; end l o o p ; f o r k i n i n d i c e range l o o p s3 : = s3+k ; end l o o p ;

UE systmes temps rel, Universit de Brest Page 42/128

Entres/sorties (1)Typage fort : chaque type doit disposer des services dentres/sorties mais familles de type. Services offerts par le paquetage Text_Io : pour les types String et Character uniquement (extrait de GNAT): Get : saisie dune chane de caractres de taille xe. Put : afchage dune chane de caractres. New_Line : retour chariot Put_Line : Put + New_Line Get_Line : saisie dune chane de caractres de taille variable. Autres types : instancier les paquetages gnriques Float_Io, Integer_Io, Enumeration_Io, ...UE systmes temps rel, Universit de Brest Page 43/128

Entres/sorties (2) Spcication de Text_Io: package Ada . Text_IO i s procedure Get ( Item : o u t S t r i n g ) ; procedure Put ( Item : S t r i n g ) ; procedure Get_Line ( Item : o u t S t r i n g ; Last : out Natural ) ; procedure Put_Line ( Item : S t r i n g ) ; procedure New_Line ( Spacing : P o s i t i v e _ C o u n t : = 1 ) ; generic ty p e Num i s range < >; package I n t e g e r _ I O i s . . . generic ty p e Num i s range < >; package Enumeration_IO i s . . .

UE systmes temps rel, Universit de Brest Page 44/128

Entres/sorties (3) Exemple du gnrique Integer_Io: generic ty p e Num i s range < >; package Ada . Text_IO . I n t e g e r _ I O i s D e f a u l t _ W i d t h : F i e l d : = Num Width ; Default_Base procedure Put ( Item Base : Num; : Number_Base : = Default_Base ) ; Width : F i e l d : = D e f a u l t _ W i d t h ; procedure Get ( Item : o u t Num; Last : out P o s i t i v e ) ; end Ada . Text_IO . I n t e g e r _ I O ; : Number_Base : = 1 0 ;

UE systmes temps rel, Universit de Brest Page 45/128

Entres/sorties (4) Exemple dutilisation de Integer_Io: w i t h t e x t _ i o ; use t e x t _ i o ; procedure I n t i o i s ty p e te m p e r a tu r e i s new i n t e g e r range 300..300; package t e m p e r a t u r e _ i o i s new t e x t _ i o . i n t e g e r _ i o ( te m p e r a tu r e ) ; t1 , t 2 : te m p e r a tu r e ; begin Put ( " S a i s i r te m p e r a tu r e 1 : " ) ; t e m p e r a t u r e _ i o . Get ( t 1 ) ; New_Line ; Put ( " S a i s i r te m p e r a tu r e 2 : " ) ; t e m p e r a t u r e _ i o . Get ( t 2 ) ; New_Line ; Put ( " Somme = " ) ; t e m p e r a t u r e _ i o . Put ( t 1 + t 2 ) ; New_Line ; exception when Da ta _ E r r o r => P u t _ l i n e ( " Donnee s a i s i e non conforme au ty p e temperature " ) ; end I n t i o ;UE systmes temps rel, Universit de Brest Page 46/128

Entres/sorties (5) Exercice 3 :

crire un programme qui permet de saisir des entiers et afche la somme des valeurs saisies. Le programme doit sarrter lorsque lutilisateur saisie le chiffre zro et doit sarrter et afcher une erreur lorsque les donnes saisies ne sont pas entires.

UE systmes temps rel, Universit de Brest Page 47/128

Pointeurs, allocations dynamiques (1) Gnralement pas de pointeur et pas dallocation dynamique dans les systmes temps rel, mais : Typage fort : un pointeur ne peut adresser quun seul type de donne. Pointeur typ. Contrle sur lutilisation des pointeurs : abilit. Exemple de dclarations : t y p e I n t e g e r _ P t r i s access I n t e g e r ; pointeur1 : Integer_Ptr := n u l l ; mon_integer : I n t e g e r ; p o i n t e u r 2 : I n t e g e r _ P t r : = mon_integer access ; Allocation dynamique : oprateur new. Dsallocation : non standardise.UE systmes temps rel, Universit de Brest Page 48/128

Pointeurs, allocations dynamiques (2) Exemple : w i t h T e x t _ I o ; use T e x t _ I o ; procedure P o i n t e u r i s package I o i s new T e x t _ I o . I n t e g e r _ I o ( I n t e g e r ) ; ty p e I n t e g e r _ P t r i s access I n t e g e r ; I P1 , begin P1: = new I n t e g e r ; P1 . a l l : = 1 0 0 ; P2: = new I n t e g e r ( I ) ; P4: = new I n t e g e r ( 1 0 ) ; I o . Put ( P1 . a l l ) ; I o . Put ( P2 . a l l ) ; I o . Put ( P4 . a l l ) ; I o . Put ( P3 . a l l ) ; end P o i n t e u r ;UE systmes temps rel, Universit de Brest Page 49/128

: Integer P2 , P3 ,

: = 110; P4 : I n t e g e r _ P t r ;

Pointeurs, allocations dynamiques (3) Contrle sur lutilisation des pointeurs : abilit. w i t h T e x t _ I o ; use T e x t _ I o ; procedure Alloc_Faux i s ty p e I n t e g e r _ P t r i s access I n t e g e r ; Global : I n t e g e r _ P t r ; procedure A f f e c t e r _ V a l e u r i s I 1 : I n t e g e r : = 100; begin G l o b a l : = I1 access ; end A f f e c t e r _ V a l e u r ; package I o i s new T e x t _ I o . I n t e g e r _ I o ( I n t e g e r ) ; begin Affecter_Valeur ; I o . Put ( G l o b a l . a l l ) ; end Alloc_Faux ;UE systmes temps rel, Universit de Brest Page 50/128

Units de programme gnriques (1)Unit de programme paramtre par : types, constantes, sous-programmes, paquetages. Procdure ou paquetage gnrique. Permet deffectuer un traitement identique sur plusieurs entits diffrentes (ex : types). Instantiation : une unit de programme gnrique ne peut pas tre employe sans tre instancie, c--d donner une valeur pour chaque paramtre. Structure :generic paramtres du gnrique package fo o . . . package body fo o . . . u t i l i s a t i o n des paramtres dans l a s p c i f i c a t i o n e t l i m p l m e n t a t i o n du gnriqueUE systmes temps rel, Universit de Brest Page 51/128

Units de programme gnriques (2)generic ty p e Element i s p r i v a t e ; w i t h procedure Put (E : i n Element ) ; package L i s t e s i s ty p e Element_Ptr i s access Element ; ty p e C e l l u l e i s p r i v a t e ; ty p e L i e n i s access C e l l u l e ; procedure A f f i c h e r ( L : i n L i e n ) ; procedure A j o u t e r ( L : i n o u t L i e n ; private ty p e C e l l u l e i s r e c o r d Suivant : Lien ; Info end r e c o r d ; end L i s t e s ; : Element_Ptr ; E : i n Element_Ptr ) ;

UE systmes temps rel, Universit de Brest Page 52/128

Units de programme gnriques (3)package body L i s t e s i s procedure A j o u t e r ( L : i n o u t L i e n ; E : i n Element_Ptr ) i s Nouveau : L i e n ; begin Nouveau : =new C e l l u l e ; Nouveau . I n f o : =E ; Nouveau . S u i v a n t : = L ; L : = Nouveau ; end A j o u t e r ; procedure A f f i c h e r ( L : i n L i e n ) i s Courant : L i e n : = L ; begin w h i l e Courant / = n u l l l o o p Put ( Courant . I n f o . a l l ) ; Courant : = Courant . S u i v a n t ; end l o o p ; end A f f i c h e r ; end L i s t e s ;UE systmes temps rel, Universit de Brest Page 53/128

Units de programme gnriques (4)with Listes ; procedure T e s t e _ L i s t e s i s ty p e Personne i s r e c o r d ... ...

procedure A f f i c h e (A : i n Personne ) i s

package Ma_Liste i s new L i s t e s ( Personne , A f f i c h e ) ; use Ma_Liste ; Une_Liste : L i e n ; P begin P: = new Personne ; A j o u t e r ( Une_Liste , P ) ; A f f i c h e r ( Une_Liste ) ; ...UE systmes temps rel, Universit de Brest Page 54/128

: Ma_Liste . Element_Ptr ;

p o i n t e u r s u r une personne

ConcurrenceTche Synchronisation et communication par rendez vous. Communication par objets protgs.

UE systmes temps rel, Universit de Brest Page 55/128

Tche (1) Une tche Ada est constitue :

Dune spcication qui dcrit son interface. Partie visible. Dune implmentation qui contient le code excut par la tche. Partie cache. ventuellement dun type. Dans le cas contraire, on parle de tche anonyme. Une tche Ada est dclare par :

Les instructions task/task type (spcication de la tche) et task body (implantation de la tche). La procdure principale est aussi une tche.UE systmes temps rel, Universit de Brest Page 56/128

Tche (2) Exemple dune tche anonyme, alloue statiquement :w i t h T e x t _ I o ; use T e x t _ I o ; procedure Tache_anonyme i s t a s k Ma_Tache ; t a s k body Ma_Tache i s begin loop Put_Line ( " tache a c t i v e e " ) ; delay 1 . 0 ; end l o o p ; end Ma_Tache ; begin null ; end Tache_anonyme ;

Combien de tches ici ?UE systmes temps rel, Universit de Brest Page 57/128

Tche (3) Exemple de tches types, alloues statiquement :w i t h T e x t _ I o ; use T e x t _ I o ; procedure Tache_type i s t a s k ty p e Un_Type ; t a s k body Un_Type i s begin loop Put_Line ( " tache a c t i v e e " ) ; delay 1 . 0 ; end l o o p ; end Un_Type ; T1 , T2 : Un_Type ; T : a r r a y ( 1 . . 1 0 ) o f Un_Type ; begin null ; end Tache_type ;

Combien de tches ici ?

UE systmes temps rel, Universit de Brest Page 58/128

Tche (4) Exemple de tches types, alloues dynamiquement :w i t h T e x t _ I o ; use T e x t _ I o ; procedure Tache_dynam i s t a s k ty p e Un_Type ; t a s k body Un_Type i s begin loop Put_Line ( " tache a c t i v e e " ) ; delay 1 . 0 ; end l o o p ; end Un_Type ; ty p e Un_Type_Ptr i s access Un_Type ; T : a r r a y ( 1 . . 3 ) o f Un_Type_Ptr ; begin f o r i i n 1 . . 3 loop T ( i ) : = new Un_Type ; end l o o p ; end Tache_dynam ;UE systmes temps rel, Universit de Brest Page 59/128

Tche (5) Une tche peut tre : active, avorte, acheve, termine. Rgles dactivation : Tche alloue statiquement: au dbut de bloc o la tche est dnie. Tche alloue dynamiquement : lors de lallocation dynamique. Rgles de terminaison : Sur exception: lexception est perdue si non rattrape. Lorsque toutes les tches de niveau infrieur sont termine. Avortement : grce linstruction abort x, avec x le nom de la tche.

UE systmes temps rel, Universit de Brest Page 60/128

Tche (6) Ce programme est faux. Pourquoi ?procedure T a c h e _ i n c o r r e c t e i s cpt : integer :=0; t a s k ty p e Un_Type ; t a s k body Un_Type i s begin loop c p t : = c p t +1; delay 1 . 0 ; end l o o p ; end Un_Type ; T1 , T2 : Un_Type ; begin delay 3 . 0 ; c p t : = c p t +1; a b o r t T1 ; a b o r t T2 ; end T a c h e _ i n c o r r e c t e ;UE systmes temps rel, Universit de Brest Page 61/128

Tche (7) Exercice 4 :

Dites pour les exemples de programme des pages 57, 58 et 59 quand les tches sont actives et quand elles sont termines.

UE systmes temps rel, Universit de Brest Page 62/128

Tche (8) Exercice 5 :

crire un programme qui contient deux tches. La premire tche calcule et afche les lments de la suite Un = Un1 2 avec U0 = 1. La tche doit attendre une seconde entre le calcul/afchage de deux lments successifs. La deuxime tche calcule et afche les lments de la suite Un = Un1 +2 avec U0 = 0. La tche doit attendre deux secondes entre le calcul/afchage de deux lments successifs.

UE systmes temps rel, Universit de Brest Page 63/128

ConcurrenceTche Synchronisation et communication par rendez vous. Communication par objets protgs.

UE systmes temps rel, Universit de Brest Page 64/128

Mcanismes de rendez vous (1)

Le rendez vous est un mcanisme : Asymtrique : tche appelante et tche appele. Qui permet de synchroniser deux tches : le rendez vous ncessite que les deux tches soient simultanment prtes. Qui permet lchange de donnes entre deux tches.UE systmes temps rel, Universit de Brest Page 65/128

Mcanismes de rendez vous (2) Mise en uvre des rendez vous avec Ada :

Notion dentre: point de rendez vous dclar dans la spcication de la tche. Interface de la tche. Spcication de tche : peut comporter plusieurs entres. Instruction accept : permet une tche dattendre un rendez vous sur lune de ses entres, puis, dexcuter une squence dinstructions pendant le rendez vous. Appelants : se placent en position de rendez vous en rfrenant lentre voulue.

UE systmes temps rel, Universit de Brest Page 66/128

Mcanismes de rendez vous (3) Exemple de rendez vous (synchronisation uniquement):w i t h T e x t _ I o ; use T e x t _ I o ; procedure H e l l o i s t a s k Ma_Tache i s e n t r y Hello_World ; end Ma_Tache ; t a s k body Ma_Tache i s begin loop accept Hello_World do Put_Line ( " H e l l o word " ) ; end Hello_World ; end l o o p ; end Ma_Tache ; begin Ma_Tache . Hello_World ; a b o r t Ma_Tache ; end H e l l o ;UE systmes temps rel, Universit de Brest Page 67/128

Mcanismes de rendez vous (4) Rendez vous avec communication:t a s k ty p e Ma_Tache i s e n t r y I n c r e m e n t e r ( S1 : i n o u t I n t e g e r ) ; end Ma_Tache ; t a s k body Ma_Tache i s begin loop accept I n c r e m e n t e r ( S1 : i n o u t I n t e g e r ) do S1 : = S1+1; end I n c r e m e n t e r ; end l o o p ; end Ma_Tache ; T1 : Ma_Tache ; Val : I n t e g e r : = 0 ; begin T1 . I n c r e m e n t e r ( Val ) ; Put_Line ( " Val = " & i n t e g e r image ( Val ) ) ; a b o r t T1 ;UE systmes temps rel, Universit de Brest Page 68/128

Mcanismes de rendez vous (5) Quelques clauses additionnelles :

Clause select : permet dattendre simultanment sur plusieurs entres. Clause terminate : utilise conjointement avec select, permet dinterompre proprement une instruction accept Entre garde : condition boolenne dligibilit de lentre. Clause else : attente non bloquante sur les entres. ...

UE systmes temps rel, Universit de Brest Page 69/128

Mcanismes de rendez vous (6) Tches avec plusieurs entres :t a s k body Ma_Tache i s Bool : Boolean : = False ; begin loop select accept Hello_World do Put_Line ( " H e l l o word " ) ; end Hello_World ; or accept Do_Exit do Put_Line ( " Bye bye " ) ; Bool : = True ; end Do_Exit ; end s e l e c t ; e x i t when Bool ; end l o o p ; end Ma_Tache ;UE systmes temps rel, Universit de Brest Page 70/128

t a s k Ma_Tache i s e n t r y Hello_World ; e n t r y Do_Exit ; end Ma_Tache ;

begin Ma_Tache . Hello_World ; Ma_Tache . Do_Exit ; end Main ;

Mcanismes de rendez vous (7) Exemple avec la clause terminate :t a s k body Ma_Tache i s begin loop select accept I n c r e m e n t e r ( S1 : i n o u t I n t e g e r ) do S1 : = S1+1; end I n c r e m e n t e r ; or terminate ; end s e l e c t ; end l o o p ; end Ma_Tache ; t a s k Ma_Tache i s entry Incrementer ( S1 : i n o u t I n t e g e r ) ; end Ma_Tache ; Val : I n t e g e r : = 0 ; begin Ma_Tache . I n c r e m e n t e r ( Val ) ; P u t _ l i n e ( " Val = " & i n t e g e r image ( Val ) ) ; end i n c r e m e n t _ t e r m i n a t e ;

UE systmes temps rel, Universit de Brest Page 71/128

ConcurrenceTche Synchronisation et communication par rendez vous. Communication par objets protgs.

UE systmes temps rel, Universit de Brest Page 72/128

Objets et types protgs (1) Un objet protg cest : Une structure de donnes comportant plusieurs variables accessibles de faon concurrente. Un mcanisme de synchronisation proche du modle lecteur-rdacteur. Un objet protg est constitu : Dune spcication qui dcrit son interface: procdures, fonctions et entres. Partie visible. Dune implmentation qui inclue les variables protges et le code des fonctions, procdures et entres. Partie cache. ventuellement dun type. Dans le cas contraire, on parle dobjet anonyme.

UE systmes temps rel, Universit de Brest Page 73/128

Objets et types protgs (2) Verrous mis en uvre par un objet protg :

Fonctions : peuvent tre excutes de faon concurrente car ne change pas ltat des variables protges par lobjet protg: lecture des variables seulement. Procdures : excutes en exclusion mutuelle sur les variables protges.= Verrous fonctions et procdures = lecteurs/rdacteurs.

Entres : idem procdure + garde boolenne. Une entre dont la garde est false ne peut tre excute (blocage de la tche), mme si aucune procdure/entre utilise lobjet.UE systmes temps rel, Universit de Brest Page 74/128

Objets et types protgs (3) Exemple dune variable protge (spcication) :package Vars i s p r o t e c t e d t y p e Var i s procedure E c r i t u r e ( Va le u r : i n I n t e g e r ) ; f u n c t i o n Lecture re tu rn Integer ; private Variable : Integer :=0; end Var ; end Vars ;

UE systmes temps rel, Universit de Brest Page 75/128

Objets et types protgs (4) Exemple dune variable protge (corps) :package body Vars i s p r o t e c t e d body Var i s procedure E c r i t u r e ( Va le u r : i n I n t e g e r ) i s begin V a r i a b l e : = Va le u r ; end E c r i t u r e ; f u n c t i o n Lecture re tu rn Integer i s begin return Variable ; end L e c t u r e ; end Var ; end Vars ;UE systmes temps rel, Universit de Brest Page 76/128

Objets et types protgs (5) Exemple dune variable protge (utilisation) : w i t h Vars ; use Vars ; procedure V a r i a b l e _ P r o t e g e e i s Une : Vars . Var ; t a s k Ma_Tache ; t a s k body Ma_Tache i s begin loop Put_Line ( " Val = " & i n t e g e r image ( Une . L e c t u r e ) ) ; end l o o p ; end Ma_Tache ; I : Integer :=0; begin loop Une . E c r i t u r e ( I ) ; I : = I +1; end l o o p ; end V a r i a b l e _ P r o t e g e e ;UE systmes temps rel, Universit de Brest Page 77/128

Objets et types protgs (6) Exemple dun smaphore (spcication):package Semaphores i s p r o t e c t e d t y p e Semaphore i s entry P; procedure V ; procedure I n i t ( Val : i n N a t u r a l ) ; private Value : N a t u r a l : = 1 ; end Semaphore ; end Semaphores ;

UE systmes temps rel, Universit de Brest Page 78/128

Objets et types protgs (7) Exemple dun smaphore (corps): package body Semaphores i s p r o t e c t e d body Semaphore i s e n t r y P when Value > 0 i s begin Value : = Value 1; end P ; procedure V i s begin Value : = Value +1; end V ; procedure I n i t ( Val : i n N a t u r a l ) i s begin Value : = Val ; end I n i t ; end Semaphore ; end Semaphores ;UE systmes temps rel, Universit de Brest Page 79/128

Objets et types protgs (8)Mutex : Semaphore ; t a s k ty p e Une ; t a s k body Une i s begin loop Mutex . P ; Put_Line ( " en s e c t i o n c r i t i q u e Mutex . V ; end l o o p ; end Une ; ty p e Une_Ptr i s access Une ; P l u s i e u r s : a r r a y ( 1 . . 1 0 ) o f Une_Ptr ; begin Mutex . I n i t ( 1 ) ; f o r i i n 1..10 loop P l u s i e u r s ( i ) : = new Une ;UE systmes temps rel, Universit de Brest Page 80/128

!!");

Objets et types protgs (9) Exemple dun lecteur/rdacteur :

package Lecteurs_Redacteurs i s protected ty p e Lecteur_Redacteur i s e n t r y Debut_Lecture ; procedure F i n _ L e c t u r e ; entry Debut_Ecriture ; procedure F i n _ E c r i t u r e ; private Nb_Lecteurs : N a t u r a l : = 0 ; Nb_Redacteurs : N a t u r a l : = 0 ; end Lecteur_Redacteur ; end l e c t e u r s _ R e d a c t e u r s ;

UE systmes temps rel, Universit de Brest Page 81/128

Objets et types protgs (10)p r o t e c t e d body Lecteur_Redacteur i s e n t r y Debut_Lecture when Nb_Redacteurs = 0 i s begin Nb_Lecteurs : = Nb_Lecteurs +1; end Debut_Lecture ; e n t r y D e b u t _ E c r i t u r e when Nb_Lecteurs + Nb_Redacteurs = 0 i s begin Nb_Redacteurs : = Nb_Redacteurs +1; end D e b u t _ E c r i t u r e ; procedure F i n _ L e c t u r e i s begin Nb_Lecteurs : = Nb_Lecteurs 1; end F i n _ L e c t u r e ; procedure F i n _ E c r i t u r e i s begin Nb_Redacteurs : = Nb_Redacteurs 1; end F i n _ E c r i t u r e ; end Lecteur_Redacteur ;UE systmes temps rel, Universit de Brest Page 82/128

Temps rel Services temps rel disponibles via les standards:

ISO/IEC Ada 1995/2005 : et en particulier les annexes C (Systems programming) et D (Real-Time) [TAF 06]. "Binding" Ada POSIX 1003 [BUR 07, GAL 95]. ARINC 653 [ARI 97]. ...

UE systmes temps rel, Universit de Brest Page 83/128

Temps rel Avec Ada 2005, services temps rel offerts via des pragmas et des paquetages spciques:

Comment implanter une tche priodique : 1. Reprsenter le temps (paquetage Ada.Real_Time). 2. Implanter les rveils priodiques (instruction delay). 3. Affecter des priorits (pragma). Comment activer un protocole dhritage de priorit (pour des objets/types protgs). Comment slectionner un ordonnanceur (RM, EDF, ...). ...

UE systmes temps rel, Universit de Brest Page 84/128

Ada 2005: tches priodiques (1)package Ada . Real_Time i s ty p e Time i s p r i v a t e ; Time_Unit ... f u n c t i o n Clock r e t u r n Time ; ... f u n c t i o n Nanoseconds f u n c t i o n Microseconds (NS : I n t e g e r ) r e t u r n Time_Span ; (NS : I n t e g e r ) r e t u r n Time_Span ; : c o n s t a n t : = i m p l e m e n ta ti o nd e f i n e d ; ty p e Time_Span i s p r i v a t e ;

f u n c t i o n Seconds ( S : I n t e g e r ) r e t u r n Time_Span ; f u n c t i o n Minutes (M : I n t e g e r ) r e t u r n Time_Span ; ...

Ada.Real_Time est un paquetage qui offre une horloge haute rsolution and documente, ainsi que des sous-programmes pour la manipuler.

UE systmes temps rel, Universit de Brest Page 85/128

Ada 2005: tches priodiques (2) Principaux types et sous-programmes :

Time implmente un date absolue. Ce type doit permettre dexprimer des dates de 50 ans au moins. Time_Span reprsente une dure. Time_Unit la plus petite unit de temps reprsentable par le type Time. Dni par limplmentation, mais doit tre infrieur ou gal 20 micro-secondes. Clock retourne le temps coul depuis epoch.

Sous-programmes pour convertir des donnes temporelles en Time_Span : Nanoseconds, Microseconds, ...UE systmes temps rel, Universit de Brest Page 86/128

Ada 2005: tches priodiques (3) Linstruction delay :

1. delay expr : bloque une tche pendant au moins expr units de temps. 2. delay until expr : bloque une tche jusquau moins la date expr. Une tche ne peut pas tre rveille avant le dlai/date spci par linstruction delay. Mais une tche peut trs bien tre rveille aprs le dlai/date spci par linstruction delay. Une borne maximale doit tre documente par lditeur du compilateur.

UE systmes temps rel, Universit de Brest Page 87/128

Ada 2005: tches priodiques (4) Exemple dune tche priodique :w i t h Ada . Real_Time ; use Ada . Real_Time ; ... t a s k Tspeed i s end Tspeed ; t a s k body Tspeed i s Next_Time : Ada . Real_Time . Time : = Clock ; P e r i o d : c o n s t a n t Time_Span : = M i l l i s e c o n d s ( 2 5 0 ) ; begin loop Read th e c a r speed sensor Read_Speed ; Next_Time : = Next_Time + P e r i o d ; d e l a y u n t i l Next_Time ; end l o o p ; end Tspeed ;UE systmes temps rel, Universit de Brest Page 88/128

Ada 2005: tches priodiques (5)package System i s P r i o r i t y r e l a t e d D e c l a r a t i o n s (RM D. 1 ) : constant P o s i t i v e := 30; Max_Priority

M a x _ I n t e r r u p t _ P r i o r i t y : constant P o s i t i v e := 31; subtype A n y _ P r i o r i t y subtype P r i o r i t y is Integer range 0 . . 31; 0 . . 30;

i s A n y _ P r i o r i t y range

subtype I n t e r r u p t _ P r i o r i t y i s A n y _ P r i o r i t y range 31 . . 3 1 ; D e f a u l t _ P r i o r i t y : constant P r i o r i t y := 15; ...

System.Priority doit offrir au moins 30 niveaux de priorit, mais plus, cest mieux pour lanalyse de lordonnancement.

Priorit de Base = priorit affecte statiquement. Priorit active = priorit hrite (accs aux objets protgs).UE systmes temps rel, Universit de Brest Page 89/128

Ada 2005: tches priodiques (6) Rgles dassignation des priorits avec Ada 2005:

Toute tche a une priorit par dfaut (voir le paquetage System). Le pragma Priority peut tre employ dans la spcication dune tche. Le pragma Priority peut tre employ dans une procdure principale. Sans pragma, toute tche hrite de la priorit de la tche qui la instancie.

UE systmes temps rel, Universit de Brest Page 90/128

Ada 2005: tches priodiques (7)Dclaration dune tche : t a s k Tspeed i s pragma P r i o r i t y ( 1 0 ) ; end Tspeed ; Dclaration dun type tche : t a s k ty p e T i s pragma P r i o r i t y ( 1 0 ) ; end T ; Tspeed : T Dclaration dun type tche avec discriminant : t a s k ty p e T ( M y _ P r i o r i t y : System . P r i o r i t y ) i s entry Service ( . . . pragma P r i o r i t y ( M y _ P r i o r i t y ) ; end T ; Tspeed : T ( M y _ P r i o r i t y = >10);UE systmes temps rel, Universit de Brest Page 91/128

Ada 2005: tches priodiques (8) Soit le jeu de tches :

TacheTdisplay Tengine Tspeed

Priode Priorit (milli-secondes) Pdisplay = 100 12 Pengine = 500 10 Pspeed = 250 11

Et le code de chaque tche :procedure Display_Speed i s begin Put_Line ( " T d i s p l a y d i s p l a y s th e speed o f th e c a r " ) ; end Display_Speed ; procedure Read_Speed i s . . . procedure Monitor_Engine i s . . .UE systmes temps rel, Universit de Brest Page 92/128

Ada 2005: tches priodiques (9)w i t h System ; generic w i t h procedure Run ; package G e n e r i c _ P e r i o di c_ T as k i s t a s k ty p e P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y : System . P r i o r i t y ; Period_In_Milliseconds : Natural ) i s pragma P r i o r i t y ( T a s k _ P r i o r i t y ) ; end P e r i o d i c _ T a s k ; end G e n e r i c _ P e r i o d ic _T a sk ;

UE systmes temps rel, Universit de Brest Page 93/128

Ada 2005: tches priodiques (10)package body G e n e r i c _ P e r i o di c _T as k i s t a s k body P e r i o d i c _ T a s k i s Next_Time : Ada . Real_Time . Time : = Clock ; Period begin loop Run ; Next_Time : = Next_Time + P e r i o d ; d e l a y u n t i l Next_Time ; end l o o p ; end P e r i o d i c _ T a s k ; end G e n e r i c _ P e r i o d ic _T a sk ; : c o n s t a n t Time_Span : = Milliseconds ( Period_In_Milliseconds ) ;

UE systmes temps rel, Universit de Brest Page 94/128

Ada 2005: tches priodiques (11)procedure Car_System i s package P1 i s new G e n e r i c _ P e r i o d ic _T a sk ( Run => Display_Speed ) ; package P2 i s new G e n e r i c _ P e r i o d ic _T a sk ( Run => Read_Speed ) ; package P3 i s new G e n e r i c _ P e r i o d ic _T a sk ( Run => Monitor_Engine ) ; T d i s p l a y : P1 . P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y => 12 , P e r i o d _ I n _ M i l l i s e c o n d s => 1 0 0 ) ; Tspeed Tengine : P2 . P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y => 11 , P e r i o d _ I n _ M i l l i s e c o n d s => 2 5 0 ) ; : P3 . P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y => 10 , P e r i o d _ I n _ M i l l i s e c o n d s => 5 0 0 ) ; pragma P r i o r i t y ( 2 0 ) ; begin Put_Line ( " Les tches dmarrent s u r l a t e r m i n a i s o n de l a procedure p r i n c i p a l e " ) ; end Car_System ;UE systmes temps rel, Universit de Brest Page 95/128

Ada 2005: types/objets protgs (1) Protocole dhritage de priorits supports par Ada 2005 : ICPP (Immediate Ceiling Priority Protocol) et PLCP (Preemption Level Control Protocol). ICPP est une variation de PCP dont le fonctionnement est:

Priorit plafond dun objet protg = maximum des priorits de base des tches qui lemploient. Priorit active dune tche = maximum entre sa priorit de base et la priorit plafond de tous les objets protgs quil a verrouill.

UE systmes temps rel, Universit de Brest Page 96/128

Ada 2005: types/objets protgs (2) Affectation dune priorit plafond un objet protg :

p r o t e c t e d A_Mutex i s pragma P r i o r i t y ( 1 5 ) ; entry E . . . procedure P . . . end A_Mutex ; Pour activer le protocole ICPP :

pragma L o c k i n g _ P o l i c y ( C e i l i n g _ L o c k i n g ) ;

UE systmes temps rel, Universit de Brest Page 97/128

Ordonnancement avec Ada 2005 (1) Avec Ada 2005, services temps rel offerts via des pragmas et des paquetages spciques:

Comment implanter une tche priodique : 1. Reprsenter le temps (paquetage Ada.Real_Time). 2. Implanter les rveils priodiques (instruction delay). 3. Affecter des priorits (pragma). Comment activer un protocole dhritage de priorit (pour des objets/types protgs). Comment slectionner un ordonnanceur (RM, EDF, ...). ...

UE systmes temps rel, Universit de Brest Page 98/128

Ordonnancement avec Ada 2005 (2)

Une le dattente pour chaque niveau de priorit. Toutes les tches prtes de mme priorit sont insres dans la mme le dattente. Chaque le dattente a une politique (ou dispatching policy ). Deux niveaux dordonnancement: 1. Choisir la le dattente de priorit maximale avec au moins un tche. 2. Choisir la tche excuter parmi les tches de la le dattente slectionn en (1), et selon la politique de la le.

UE systmes temps rel, Universit de Brest Page 99/128

Ordonnancement avec Ada 2005 (3)

Exemple de la politique dordonnancement premptive priorit xe (politique FIFO_Within_Priorities) : Quand une tche devient prte, elle est insre la queue de le associe sa priorit. La tche en tte de le obtient le processeur quand sa le est la le de plus haute priorit avec une tche prte. Quand la tche en cours dexcution passe ltat bloque ou termine, alors elle quitte la le. = Il est facile dappliquer les tests de faisabilit (cf. cours sur Rate Monotonic), si les priorits sont correctement affectes (priorits uniques et selon la priode).

UE systmes temps rel, Universit de Brest Page 100/128

Ordonnancement avec Ada 2005 (4) Activation de la politique FIFO_Within_Priorities par :pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( F I F O _ W i t h i n _ P r i o r i t i e s ) ;

Autres politiques dordonnancement dAda 2005 : 1. Ordonnancement non premptif priorits xes :pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( Non_Preemptive_FIFO_Within_Priorities ) ;

2. Ordonnancement Earliest deadline rst :pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( EDF_Across_Priorities ) ;

3. Ordonnancement Round robin :pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( Round_Robin_Within_Priorities ) ;UE systmes temps rel, Universit de Brest Page 101/128

Ordonnancement avec Ada 2005 (5)

Cohabitation de tches critiques et non critiques grce des politiques diffrentes selon les niveaux de priorit :pragma P r i o r i t y _ S p e c i f i c _ D i s p a t c h i n g ( FIFO_Within_Priorities , 3 , 31); pragma P r i o r i t y _ S p e c i f i c _ D i s p a t c h i n g ( EDF_Across_Priorities , 2 , 2 ) ; pragma P r i o r i t y _ S p e c i f i c _ D i s p a t c h i n g ( Round_Robin_Within_Priorities , 0 , 1 ) ;UE systmes temps rel, Universit de Brest Page 102/128

Ordonnancement avec Ada 2005 (6) Exemple de notre application automobile :procedure Car_System i s ... T d i s p l a y : P1 . P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y => 12 , P e r i o d _ I n _ M i l l i s e c o n d s => 1 0 0 ) ; Tspeed Tengine : P2 . P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y => 11 , P e r i o d _ I n _ M i l l i s e c o n d s => 2 5 0 ) ; : P3 . P e r i o d i c _ T a s k ( T a s k _ P r i o r i t y => 10 , P e r i o d _ I n _ M i l l i s e c o n d s => 5 0 0 ) ; pragma P r i o r i t y ( 2 0 ) ; ... end Car_System ; F i c h i e r gnat . adc ( ou d i r e c t e m e n t dans l u n i t de programme )

pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( F I F O _ W i t h i n _ P r i o r i t i e s ) ; pragma L o c k i n g _ P o l i c y ( C e i l i n g _ L o c k i n g ) ;

UE systmes temps rel, Universit de Brest Page 103/128

Le prol Ravenscar (1) Comment tre certain que lapplication peut tre analyse avec les tests de faisabilit de Rate Monotonic ? = utiliser Ravenscar.

Ravenscar = sous-ensemble dAda compatible avec les tests de faisabilit. Ravenscar = prol dni par le standard Ada 2005. Prol = ensemble de restrictions, exprimes par des pragmas et vries par le compilateur, et donc assures lexcution. Activation de Ravenscar :pragma p r o f i l e ( Ravenscar ) ;

UE systmes temps rel, Universit de Brest Page 104/128

Le prol Ravenscar (2) Restrictions de Ravenscar : pragma T a s k _ D i s p a t c h i n g _ P o l i c y ( F I F O _ W i t h i n _ P r i o r i t i e s ) ; pragma L o c k i n g _ P o l i c y ( C e i l i n g _ L o c k i n g ) ; pragma R e s t r i c t i o n s ( No_Abort_Statements , No_Dynamic_Priorities , No_Local_Protected_Objects , No _ P r o te c te d _T ype_ Allo cator s , No_Requeue_Statements , No_Task_Hierarchy , Simple_Barriers , Max_Entry_Queue_Length => 1 , M a x _ P r o te c te d _ E n tr ies Max_Task_Entries => 0 , No_Dependence => Ada . Asynchronous_Task_Control , No_Dependence => Ada . Calendar , ... );UE systmes temps rel, Universit de Brest Page 105/128

No_Dynamic_Attachment , No_Implicit_Heap_Allocations , No_Local_Timing_Events , No_Relative_Delay , No_Select_Statements , No_Task_Termination , => 1 ,

No _ S p e c i fi c _ T e r m i n a ti o n _ Ha n d l e r s , No_Task_Allocators ,

Temps rel Services temps rel disponibles via les standards :

ISO/IEC Ada 1995 and 2005 : et en particulier les annexes C (Systems programming) et D (Real-Time) [TAF 06]. Binding Ada POSIX 1003 [BUR 07, GAL 95]. ARINC 653 [ARI 97]. ...

UE systmes temps rel, Universit de Brest Page 106/128

Standard POSIX 1003 (1)

Ordonnancement premptif priorits xes. Au moins 32 niveaux de priorits. Files dattente de tches prtes pour chaque priorit. Ordonnancement deux niveaux : 1. Choisir la le dattente de priorit maximale avec au moins une tche (prte). 2. Choisir la tche de la le slectionne en (1) selon une politique.UE systmes temps rel, Universit de Brest Page 107/128

Standard POSIX 1003 (2)

Politiques POSIX : 1. SCHED_FIFO : identique FIFO_Within_Priorities. La tche quitte la tte de le si : Terminaison de la tche. Blocage de la tche (E/S, attente dun dlai) => remise en queue. Libration explicite => remise en queue. 2. SCHED_RR : idem SCHED_FIFO mais en plus, la tche en tte de le est dplace en queue aprs expiration dun quantum (round robin). 3. SCHED_OT HERS : fonctionnement non normalis.UE systmes temps rel, Universit de Brest Page 108/128

Standard POSIX 1003 (3) Comment utiliser POSIX 1003.1b dans une application Ada : en utilisant le "binding" Ada POSIX 1003.5 (ex : Florist dAdaCore). Florist est un ensemble de paquetage permettant de manipuler les concepts de priorit et politique POSIX :package POSIX . Process_Scheduling i s subtype S c h e d u l i n g _ P r i o r i t y i s I n t e g e r ; ty p e S c h e d u l i n g _ P o l i c y i s new I n t e g e r ; Sched_FIFO Sched_RR : constant Scheduling_Policy := . . . : constant Scheduling_Policy := . . .

Sched_Other : c o n s t a n t S c h e d u l i n g _ P o l i c y : = . . . ty p e Scheduling_Parameters i s p r i v a t e ;UE systmes temps rel, Universit de Brest Page 109/128

Standard POSIX 1003 (4) Sous-programmes qui permettent lapplication de sadapter au systme sous jacent :package POSIX . Process_Scheduling i s ... f u n c t i o n Get_Maximum_Priority ( P o l i c y : S c h e d u l i n g _ P o l i c y ) return Scheduling_Priority ; f u n c t i o n G e t_ M i n i m u m _ P r i or ity ( P o l i c y : S c h e d u l i n g _ P o l i c y ) return Scheduling_Priority ; f u n c t i o n Get_Round_Robin_Interval ( Process : P O S I X _ P r o c e s s _ I d e n t i f i c a t i o n . Process_ID ) r e t u r n POSIX . Timespec ; ...

UE systmes temps rel, Universit de Brest Page 110/128

Standard POSIX 1003 (5) Consultation/modication de la priorit dun processus :package POSIX . Process_Scheduling i s procedure S e t _ P r i o r i t y ( Parameters : i n o u t Scheduling_Parameters ; Priority ( Process : Scheduling_Priority ) ; : P O S I X _ P r o c e s s _ I d e n t i f i c a t i o n . Process_ID ; procedure S e t _ S c h e d u l i n g _ P o l i c y New_Policy : S c h e d u l i n g _ P o l i c y ; Parameters : Scheduling_Parameters ) ; procedure Set_Scheduling_Parameters ( Process : P O S I X _ P r o c e s s _ I d e n t i f i c a t i o n . Process_ID ; Parameters : Scheduling_Parameters ) ; f u n c t i o n G e t_ S c h e d u l i n g _ P o l i c y . . . function Get_Priority ... f u n c t i o n Get_Scheduling_Parameters . . .UE systmes temps rel, Universit de Brest Page 111/128

Standard POSIX 1003 (6) Exemple :w i t h POSIX . P r o c e s s _ I d e n t i f i c a t i o n ; use POSIX . P r o c e s s _ I d e n t i f i c a t i o n ; w i t h POSIX . Process_Scheduling ; use POSIX . Process_Scheduling ; Pid1 : Process_ID ; Sched1 : Scheduling_Parameters ; begin Pid1 : = Get_Process_Id ; Sched1 : = Get_Scheduling_Parameters ( Pid1 ) ; S e t _ P r i o r i t y ( Sched1 , 1 0 ) ; S e t _ S c h e d u l i n g _ P o l i c y ( Pid1 , SCHED_FIFO , Sched1 ) ; Set_Scheduling_Parameters ( Pid1 , Sched1 ) ; ...UE systmes temps rel, Universit de Brest Page 112/128

Standard POSIX 1003 (7) Doit on utiliser POSIX avec Ada ? Points positifs de POSIX: POSIX est support par de nombreux systmes dexploitation temps rel. Les tests de faisabilit de Rate Monotonic sont utilisables avec POSIX ( condition que toutes les tches aient des priorits uniques). Points ngatifs de POSIX : Un processus Unix, cest quoi dans une runtime Ada ? Et les threads POSIX ? POSIX est il portable ?

UE systmes temps rel, Universit de Brest Page 113/128

Sommaire1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.

UE systmes temps rel, Universit de Brest Page 114/128

Exemples de runtimes Ada (1) Rappels sur les runtimes :Bibliothques constituant lenvironnement dexcution dun programme Ada. Doit permettre dexcuter un mme programme de faon identique sur des matriels/OS diffrents. Adapte les services du systme dexploitation aux abstractions du langage. Attention, une runtime peut ne pas contenir tous les lments du langage: 1. Le compilateur peut aider dtecter les lments disponibles au non. 2. Le paquetage System peut aider dtecter les lments disponibles ou non.UE systmes temps rel, Universit de Brest Page 115/128

Exemples de runtimes Ada (2)Open-Ravenscar, bas sur le systme dexploitation ORK. Compatible Ada 2005. (Universidad Politcnica de Madrid, http://polaris.dit.upm.es/~ork/). Marte OS + compilateur GNAT. (Universidad de Cantabria, http://marte.unican.es/). Runtime GNAT disponibles pour Windows, Linux, Solaris et de nombreux autres systmes (AdaCore,http://www.adacore.com/). RTEMS operating system (OAR Corporation, http://www.rtems.com/). ...

UE systmes temps rel, Universit de Brest Page 116/128

Exemples de runtimes Ada (3)

Runtime RTEMS : RTEMS : systme dexploitation temps rel/GNU GPL pour applications C et Ada critiques de faible envergure. Disponible pour de nombreux BSP (dont processeur Leon : 32 bits, VHDL open-source. SMP ou AMP, compatible SPARC, applications aronautiques/spatials). Compilateur GNAT/Ada 2005 (socit AdaCore). Compilation croise : compilation sur Linux, excution sur Leon.UE systmes temps rel, Universit de Brest Page 117/128

Exemples de runtimes Ada (4) Compilation croise :1. Compilation sur Linux et gnration dun binaire SPARC :#sparcrtems4.8gnatmake coucou sparcrtems4.8gcc c coucou . adb sparcrtems4.8 g n a t b i n d coucou . a l i sparcrtems4.8 g n a t l i n k coucou . a l i o coucou . o b j sparcrtems4.8 s i z e coucou . o b j text 288800 data 13012 bss 17824 dec 319636 hex f i l e n a m e 4e094 coucou . o b j

sparcrtems4.8nm coucou . o b j >coucou . num # f i l e coucou . o b j coucou . o b j : ELF 32 b i t MSB executable , SPARC, v e r s i o n 1 (SYSV) , s t a t i c a l l y linked , not s tr i p p e d # f i l e / bin / l s / b i n / l s : ELF 32 b i t LSB executable , I n t e l 80386 , v e r s i o n 1 (SYSV) ,

d y n a m i c a l l y l i n k e d ( uses shared l i b s ) , f o r GNU/ L i n u x 2 . 6 . 1 5 , s t r i p p

UE systmes temps rel, Universit de Brest Page 118/128

Exemples de runtimes Ada (5) Compilation croise (suite) :2 Transfert du binaire vers la carte Leon (lien srie, TCP/IP, ...) 3 Excution sur une carte Leon. Logiciel tsim (mulateur de processeur Leon 3).# tsimleon3 coucou . o b j TSIM / LEON3 SPARC s i m u l a t o r , v e r s i o n 2 . 0 . 1 5 ( e v a l u a t i o n v e r s i o n ) a l l o c a t e d 4096 K RAM memory , i n 1 bank ( s ) a l l o c a t e d 32 M SDRAM memory , i n 1 bank a l l o c a t e d 2048 K ROM memory read 2257 symbols tsim > go resuming a t 0x40000000 I n i t s t a r t I n i t end coucou Program e x i t e d n o r m a l l y . tsim >UE systmes temps rel, Universit de Brest Page 119/128

Exemples de runtimes Ada (6) Paquetage Systems.ads pour RTEMS : package System i s Tick : constant := 0.01;

ty p e B i t _ O r d e r i s ( H i g h _ O r d e r _ F i r s t , Low_Order_First ) ; Default_Bit_Order : constant Bit_Order := High_Order_First ; P r i o r i t y r e l a t e d D e c l a r a t i o n s (RM D. 1 ) RTEMS p r o v i d e s 0 . . 2 5 5 p r i o r i t y l e v e l s Max_Priority subtype A n y _ P r i o r i t y subtype P r i o r i t y : constant P o s i t i v e := 30; is Integer range 0 . . 31; 0 . . 30; M a x _ I n t e r r u p t _ P r i o r i t y : constant P o s i t i v e := 31; i s A n y _ P r i o r i t y range

subtype I n t e r r u p t _ P r i o r i t y i s A n y _ P r i o r i t y range 31 . . 3 1 ; D e f a u l t _ P r i o r i t y : constant P r i o r i t y := 15; ...UE systmes temps rel, Universit de Brest Page 120/128

Exemples de runtimes Ada (7) Runtime GNAT intel/Linux : Linux/intel : systme dexploitation non temps rel mais service temps rel souple via POSIX 1003. Destin aux applications temps rel non critiques. Compilateur/runtime GNAT. Compatible Ada 2005 mais aussi POSIX 1003 (avec binding Ada/POSIX 1003.5, orist) Pas de compilation croise.

UE systmes temps rel, Universit de Brest Page 121/128

Exemples de runtimes Ada (8) Spcicits : Rappel ordonnancement Linux : priorit 0 pour SCHED_OTHER (temps partag) et priorits 1 99 pour SCHED_FIFO/SCHED_RR (temps rel). Les changements de priorit ncessitent les privilges root, ignors dans le cas contraire. GNAT/intel/Linux traduit les priorits Ada en priorits Linux selon la politique du processus : 1. Processus en SCHED_OTHER : priorits Ada ignores. 2. Processus en SCHED_RR ou SCHED_FIFO : priorits Ada traduites dans la plage des priorits offertes par Linux pour ces politiques.

UE systmes temps rel, Universit de Brest Page 122/128

Exemples de runtimes Ada (9) Paquetage System de GNAT/Linux intel:package System i s Tick : c o n s t a n t : = 0.000 _001 ;

ty p e B i t _ O r d e r i s ( H i g h _ O r d e r _ F i r s t , Low_Order_First ) ; D e f a u l t _ B i t _ O r d e r : c o n s t a n t B i t _ O r d e r : = Low_Order_First ; P r i o r i t y r e l a t e d D e c l a r a t i o n s (RM D. 1 ) L i n u x p r o v i d e s 0 . . 9 9 p r i o r i t y l e v e l s ( 0 f o r SCHED_OTHER, 1_99 f o r SCHED_FIFO /SCHED_RR Max_Priority subtype A n y _ P r i o r i t y subtype P r i o r i t y : constant P o s i t i v e := 97; is Integer range 0 . . 98; 0 . . 97; M a x _ I n t e r r u p t _ P r i o r i t y : constant P o s i t i v e := 98; i s A n y _ P r i o r i t y range

subtype I n t e r r u p t _ P r i o r i t y i s A n y _ P r i o r i t y range 98 . . 9 8 ; D e f a u l t _ P r i o r i t y : constant P r i o r i t y := 48; ...UE systmes temps rel, Universit de Brest Page 123/128

Sommaire1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.

UE systmes temps rel, Universit de Brest Page 124/128

RsumPourquoi Ada : abilit, abstractions temps rel, compilation spare, portabilit (modulo les capacits/caractristiques de la runtime). Concurrence, synchronisation et communication : tches Ada, rendez vous et objets protgs. Implanter une tche priodique : priorits, rveils priodiques, instant critique tre compatible avec les mthodes analytiques dordonnanabilit. Notions de compilation croise et de runtime.

UE systmes temps rel, Universit de Brest Page 125/128

Sommaire1. Gnralits sur les systmes embarqus temps rel. 2. Introduction au langage Ada 2005. 3. Concurrence. 4. Temps rel. 5. Exemples de runtimes Ada. 6. Rsum. 7. Rfrences.

UE systmes temps rel, Universit de Brest Page 126/128

Rfrences[ARI 97] Arinc. Avionics Application Software Standard Interface. The Arinc Committee, January 1997. [BUR 07] A. Burns and A. Wellings. Concurrent and Real Time programming in Ada. 2007. Cambridge University Press, 2007. [GAL 95] B. O. Gallmeister. POSIX 4 : Programming for the Real World . OReilly and Associates, January 1995. [J. 93] J. M. Rifet. La programmation sous UNIX. Addison-Wesley, 3rd edition, 1993. [LES 10] D. Lesens. Using Static Analysis in Space. Why doing so ? . pages 5170. Proceedings of the SAS 2010 conference, Springer Verlag, LNCS, volume 6337, September 2010. [RIF 95] J. M. Rifet. La communication sous UNIX : applications rparties. Ediscience International, 2rd edition, 1995.

UE systmes temps rel, Universit de Brest Page 127/128

Rfrences[TAF 06] S. T. Taft, R. A. Duff, R. L. Brukardt, E. Ploedereder, and P. Leroy. Ada 2005 Reference Manual. Language and Standard Libraries. International Standard ISO/IEC 8652/1995(E) with Technical Corrigendum 1 and Amendment 1. LNCS Springer Verlag, number XXII, volume 4348., 2006. [TIM 00] M. Timmerman. RTOS Market survey : preliminary result . Dedicated System Magazine, (1):68, January 2000. [VAH 96] U. Vahalia. UNIX Internals : the new frontiers. Prentice Hall, 1996.

UE systmes temps rel, Universit de Brest Page 128/128