Professional Documents
Culture Documents
Corrige SE 5
Corrige SE 5
Cours INF2610
Solution:
1. Un code réentrant est un code qui ne produit pas de résultats erronés
lorsqu’il est exécuté par plusieurs processus (en pseudo-parallèle). Il existe
plusieurs méthodes qui permettent de transformer un code non réentrant en
code réentrant :
• protéger les sections critiques avec des sémaphores
• désactiver les interruptions
• désactiver l’ordonnanceur
• utiliser uniquement des variables locales, etc.
Solution :
1.
Moniteur Sémaphore
{
int value = 0; // compteur du sémaphore
condition c; // sémaphore disponible
void Incrémenter()
{
value++;
c.signal();
}
void Décrémenter()
{
while (value == 0)
c.wait();
value--;
}
Page 1 sur 4
INF2610 : Noyau d’un système d’exploitation Corrige Examen final Hiver 2008
}
Solution :
1.
P3 P2 P2 P3 P1 P2 P3 P2 P1 P3 P2 P2 P3 P1 P1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2.
A1 A2 A2 A2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Solution :
1.
/*1*/
// Créer la queue de message
msgQ = OSQCreate((MSG_R *)&QMsgTbl[0], NUM_MSG);
/*2*/
// Récupérer le message reçu en paramètre
msgR.routine = (VOIDFUNCPTR) pdata->routine;
msgR.arg = pdata->arg;
/*3*/
// Déposer le message msgR dans la queue
Page 2 sur 4
INF2610 : Noyau d’un système d’exploitation Corrige Examen final Hiver 2008
OSQPost(msgQ, (void*) &msgR);
/*4*/
// Retirer un message de la queue, sans timeout
msgR = (MSG *) OSQPend(msgQ, 0, &err);
2. Code à ajouter:
void main(void)
{
...
SemStart = OSSemCreate(0);
SemStop = OSSemCreate(0);
...
}
void Task1(void* p)
{
...
for( ; ; )
{
OSSemPost(SemStart);
...
OSSemPend(SemStop,0,&err);
}
}
void TaskTimer(void* p)
{
for( ; ; )
{
OSSemPend(SemStart,0,&err);
OSTimeDly(PERIOD);
OSSemPost(SemStop);
Page 3 sur 4
INF2610 : Noyau d’un système d’exploitation Corrige Examen final Hiver 2008
}
}
Solution :
1. N : signifie une unité de temps où la tâche n’est pas exécutée par le processeur
2.
T4 : À partir de l’instant 7 : EAENC
T3 : À partir de l’instant 2 : CCNNANNNCNE
T2 : À partir de l’instant 13 : EEEE
T1 : À partir de l’instant 0 : AANNAANNNNNNNNNNNE
3.
T4 : À partir de l’instant 8 : EAEC
T3 : À partir de l’instant 4 : CCACNNNNE
T2 : À partir de l’instant 13 : EEEE
T1 : À partir de l’instant 0 : AAAANNNNNNNNNNNNNE
4.
a. B3 = 7, B4 = 5
b. B3 = 2, B4 = 1
c. B3 = 0, B4 = 0
Les protocoles PIP et ICPP réduisent les temps de blocage des tâches (la réduction
est plus grande avec ICPP qu’avec PIP).
Page 4 sur 4