• Aucun résultat trouvé

S´erie d’exercices #6 IFT-2245 11 f´evrier 2017

N/A
N/A
Protected

Academic year: 2022

Partager "S´erie d’exercices #6 IFT-2245 11 f´evrier 2017"

Copied!
3
0
0

Texte intégral

(1)

S´erie d’exercices #6

IFT-2245 11 f´ evrier 2017

6.1 Lockfree 1

Soit le code suivant qui permet d’ins´erer des ´el´ements dans un arbre binaire :

struct tree { int key;

void *val;

struct tree *smaller, *larger;

}

struct tree *tree_insert (struct tree *t, int key, void *val) {

struct tree *n = malloc (sizeof (struct tree));

if (t) {

n->key = key; n->val = val;

n->smaller = NULL; n->larger = NULL;

} else if (key == t->key) { n->key = key; n->val = val;

n->smaller = t->smaller; n->larger = t->larger;

} else if (key < t->key) {

n->key = t->key; n->val = key->val;

n->larger = t->larger;

n->smaller = tree_insert (t->smaller, key, val);

return n;

} else { /* key > t->key */

n->key = t->key; n->val = key->val;

n->smaller = t->smaller;

n->larger = tree_insert (t->larger, key, val);

}

return n;

}

void tree_set (struct tree **t, int key, void *val) {

*t = tree_insert (*t, key, val);

}

1

(2)

1. Trouver les conditions de course pr´esentes si le code est utilis´e dans une application `a plusieursthreads.

2. Corriger ces conditions de course en ajoutant les verrous et op´erations correspondantes n´ecessaires. D´ecrire clairement quelles donn´ees sont prot´eg´ees par chaque verrou.

3. Corriger ces mˆemes conditions de course sans utiliser de verrous, en uti- lisant `a la place une approche de synchronisation optimiste, en utilisant l’op´erationcompare&swap.

6.2 Lockfree 2

Soit le code suivant qui permet d’ins´erer des ´el´ements dans un arbre binaire :

struct tree { int key;

void *val;

struct tree *smaller, *larger;

}

void tree_set (struct tree **t, int key, void *val) {

struct tree *n = *t;

if (n == NULL) {

n = malloc (sizeof (struct tree));

n->key = key; n->val = val;

n->smaller = NULL; n->larger = NULL;

*t = n;

} else if (key == n->key) { n->val = val;

} else if (key < n->key) {

tree_set (&n->smaller, key, val);

}

} else { /* key > t->key */

tree_set (&n->larger, key, val);

} }

1. Trouver les conditions de course pr´esentes si le code est utilis´e dans une application `a plusieursthreads.

2. Corriger ces conditions de course en ajoutant les verrous et op´erations correspondantes n´ecessaires. D´ecrire clairement quelles donn´ees sont prot´eg´ees par chaque verrou.

3. Corriger ces mˆemes conditions de course sans utiliser de verrous, en uti- lisant `a la place une approche de synchronisation optimiste, en utilisant l’op´erationcompare&swap.

2

(3)

6.3 Etat sˆ ´ ur et interblocage

D´evelopper un sc´enario o`u un syst`eme commence dans un ´etatunsafeet o`u malgr´e cela, l’ex´ecution des threads termine sans rencontrer d’interblocage.

6.4 Algorithme du banquier

Soit un syst`eme d´ecrit par la table suivante :

Allocation Max A B C D A B C D P0 0 0 1 2 0 0 1 2 P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6 P3 0 6 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6

Available A B C D

1 5 2 0

Selon l’algorithme du banquier :

1. Quel est le contenu de la matriceNeeded? 2. Le syst`eme est-il dans un ´etatsafe?

3. Si une requˆete arrive du processusP1 pour les ressources (0,4,2,0), la requˆete peut-elle ˆetre accept´ee imm´ediatement ?

3

Références

Documents relatifs

Expliquer pourquoi les spinlock sont inappropri´ es dans un syst` eme mono- processeur, mais sont souvent utilis´ es dans les syst` emes multiprocesseurs. 4.7 Section critique `

Illustrer comment un s´ emaphore binaire peut ˆ etre utilis´ e pour impl´ ementer l’exclusion mutuelle entre N threads.. 5.3 Spinlocks

Soit un algorithme de queues ` a niveaux multiples, o` u un processus passe ` a la queue de priorit´ e sup´ erieure s’il relˆ ache le CPU avant la fin de son quantum et passe ` a

Jouez le rˆ ole du syst` eme d’exploitation qui doit faire fonctionner les processus suivants sur une machine avec 16MB de m´ emoire et donc d´ ecider o` u placer ces segments dans

Dans beaucoup de syst` emes, les programmes sont structur´ es de la mani` ere suivante : le code commence ` a l’adresse 0, ensuite vient le bloc de donn´ ees utilis´ e pour

Soit un processeur avec des adresses logiques et physiques de 64bit, des pages de 16KBytes, et une pagination bas´ ee sur un table de pages hi´ erarchique.. Deviner combien de

Pour savoir quelles frames devraient ˆ etre ´ evinc´ ees pour faire place ` a de nou- velles pages, le syst` eme d’exploitation aimerait bien savoir quelles pages sont beaucoup

Lorsqu’une page fault se produit, le processus qui tente d’acc´ eder ` a la page doit bloquer en attendant la dite page?. Supposons qu’il existe un processus contenant 5