Professional Documents
Culture Documents
Ecole d’informatique temps réel - La Londes les Maures 7-11 Octobre 2002
Plan
Exécutif
Tâches
Evénements et synchronisation
Partage de ressources
Communications entre taches
Gestion de la mémoire
Gestion du temps
Interruptions
Fichiers temps réel
POSIX et le temps réel
1
Rôle d’un exécutif
Principal :
- ordonnancer les exécutions des tâches
mais aussi:
- protéger l’accès aux ressources partagées
- recevoir et transmettre les signaux de synchronisations
Tâches applicatives
interruptions
Monde matériel
2
Exécutif ou noyau temps réel
C’est d’abord un système d’exploitation.
Tâche
-contexte d’exécution
registres du processeur,
pile exécution,
ressources détenues
- priorité
-état d’exécution
-état de protection (préemptible ou pas)
3
Tâche
Dans les OS d’aujourd’hui les tâches sont implantées comme des
fils d’exécution (thread).
Supprimer
Hors Services
Supprimer
Lancer
Arrêter Arrêter
Créer
Continuer
Actif Sélection
Opération d’attente
Prêt En Cours En Attente
Arrivée événement
Préemption
4
Synchronisation par événements
synchrones
Phases temporelles de l’occurrence d’un événement:
apparition production prise en compte consommation
5
Synchronisation par événements
synchrones
Services génériques événements
Créer (événement)
Supprimer(événement)
Attendre_occurrence( événement )
Signaler_occurrence( événement )
IT Créer (evt)
Boucle
Lire data Attendre(evt)
Copie mémoire Traiter data
Signaler(evt) Fin boucle
6
Signalisation asynchrone
Une tâche est associée à un signal et elle sera automatiquement activée
quand l’événement associé au signal arrivera. La tâche est appelée
pilote (handler) du signal.
Signalisation asynchrone:
exemple
/* signal POSIX simple */
/*---------------------------*/
int stopbit;
void signalled(){
stopbit = 1;
}
main(){
stopbit = 0;
signal( SIGINT, signalled);
while( !stopbit)
{ … faire un travail qui sera arrêté par CtrlC …}
terminer_proprement();
}
7
Partage de ressources
Problème:
- gérer un nombre limité de ressources ( de 1 à n ) entre plusieurs
tâches
- assurer la modification cohérente de données partagées
Objet:
Sémaphore binaire (mutex) un utilisateur à la fois
Sémaphore à compte pour n utilisateurs maxi
Partage de ressources
Services génériques sémaphores:
Créer(sem)/Détruire(sem)
Prendre_ressource(sem) parfois appelée P()
Libérer_ressource(sem) parfois appelée V()
sem
Boucle
Créer(sem) …
Boucle Prendre(sem)
… exploiter(liste)
Prendre(sem) …
Insérer(elem,liste)
Libérer(sem)
liste sortir(elem,liste)
Libérer(sem)
… Fin boucle
Fin boucle
Détruire(sem)
8
Partage de ressources: exemple
/* sémaphore à compte POSIX */
/*------------------------------------*/
sem_t sem;
void consommateur(){
ret = sem_wait(&sem);
manipuler_ressource();
sem_post(&sem);
}
main(){
sem_init(&sem, …, nombre_utilisateurs);
for ( i=0; i<10; i++)
{ pthread_create( …, consommateur, …); }
attente_fin();
sem_destroy(&sem);
}
9
Communication entre tâches
Boite au lettres: Queue de message POSIX
Ces points sont reliés aux couches réseaux de l’OS qui assurent
le transfert (TCP ou UDP pour Internet).
10
Communication entre tâches
Tableau noir
Services génériques:
Créer/Détruire
Afficher/Lire
Services génériques:
Appeler_entrée demande de rendez-vous
Accepter_entrée déclaration de la capacité à recevoir des demandes
de rendez-vous
Terminer_entrée
11
Gestion de la mémoire
Selon les possibilité du hardware sous jacent on peut avoir 3 type de
gestion de la mémoire.
Gestion du temps
La précision dépend du support matériel
- horloge temps réel
- réveils (timer)
disponibles sur la carte.
12
Gestion du temps
Services génériques:
Initialiser_date
Lire_date/Lire_heure
Attendre_date(date) suspend la tâche jusqu’à la date
Signaler_a_date(date) signaler un événement à une date
Attendre_délai(delai) suspendre la tâche pendant un délai
Créer_réveil/Supprimer_réveil réveil=timer
Arrêter_réveil
Signaler_top_horloge permet d’envoyer un signal périodique
Une routine d’interruption (ISR) doit être aussi courte que possible:
- pendant son exécution la source d’IT est masquée (mais imbrication
d’IT de niveaux de priorités différents possible)
- ce n’est pas un mode d’exécution « normal »
13
Gestion des interruptions:
exemple
/* rtlinux capter le signal d’horloge temps réel */
/*------------------------------------------------------*/
#define RTC_IRQ 8
int init_module(void){
struct sigaction act;
act.sa_handler = intr_handler;
sigaction( RTC_IRQ, &act, NULL);
programmer_horloge( fréquence );
rtl_hard_enable_irq(RTC_IRQ);
return(0);
}
Ce sont:
- fichiers projetés en mémoire (évitent les I/O pendant l’usage)
- les fichiers stream ou temps réel (permettent écrire de façon
continues sur des pistes physiquement contiguës d’un disque)
- les écritures/lectures asynchrones
14
POSIX
Depuis 1984 à l’IEEE
15
OS temps réel du marché
Tornado,VxW orks
Blue C atLinux and LynxO s
Q N X N eutrino
H ard H atLinux
Lineo,Em bedix
16