Obtenir le pack complet des cours, TDs, examens sur Systèmes d’Exploitation!
Vous souhaitez maîtriser Systèmes d’Exploitation ? Ne cherchez plus, nous avons le pack bien choisi pour vous.
Accédez à une collection complète des supports de cours, des travaux dirigés (TDs) corrigés, TPs avec solution, examens...
Télécharger packUniversit" de Bouira- D ́epartement d’InformatiqueAnn ́ee 2016-2017
Syst`emes d’exploitation des Ordinateurs 23`eme ann ́ee
TP 5: Exclusion Mutuelle par S ́emaphore
Exercice 1
(Produit de deux matrice) :
On veut effectuer en parall`ele le produit de deux matricesAetBd’ordren(n∗n). Pour se faire,
on cr ́eem(m < n) processus l ́egers (threads). Chaque processus l ́eger se charge de calculer quelques
lignes de la matrice r ́esultatR:
P our j= 0 `an−1R[i, j] =∑ k= 0, n−1
A[i, k]∗B[k, j];
Questions
- ́
Ecrire le programme de la fonction CalculeLigne, sans l’utilisation des threads ;
- ́
Ecrire le programme de la fonction CalculeLigne, en utilisant des threads et s ́emaphores ;
- Faites une comparaison entre les deux programmes en fonction du temps d’ex ́ecution.Notes: int rand
ab(int a, int b){return rand()%(b-a) +a;}g ́en`ere des nombres dans l’intervalle [a,b[;
#include< time.h >; clockt temps ; temps=clock(); pour m ́esurer le temps d’ex ́ecution.
Rappels des fonctions de manipulation des s ́emaphores d ́efinis par le
standard Posix
1. #include<semaphore.h>: librairie contenant les services Posix de manipulation des s ́emaphores;
2.semt: d ́esigne le type du s ́emaphore;
3.int seminit(semt *sem, int pshared, unsigned int valeur) : Initialisation du s ́emaphore sem;
•sem: est un pointeur sur le s ́emaphore `a initialiser;
•pshared: indique si le s ́emaphore est local au processus (pshared=0) ou partag ́e entre le
p`ere et le fils (pshared6= 0).
•valeur: est la valeur initiale du s ́emaphore ;
4. intsemwait(semt *sem) : est ́equivalente `a l’op ́eration P (S) et retourne toujours 0;
5. intsem
post(semt *sem): est ́equivalente a l’op ́eration V(S) : retourne 0 en cas de succ`es ou
-1 autrement;
6. intsemtrywait(semt *sem) : d ́ecr ́emente la valeur du s ́emaphore sem si sa valeur est sup ́erieure
`a 0 ; sinon elle retourne une erreur. C’est une op ́eration atomique;
7. intsem
getvalue(semt * sem, int * sval): r ́ecup ́erer la valeur d’un s ́emaphore : il retourne
toujours 0;
8. intsem
destroy(semt* sem): d ́etruire un s ́emaphore. Retourne -1 s’il y a encore des waits.
Par: A. ABBASpage 1
