Académique Documents
Professionnel Documents
Culture Documents
#define N 10
void C(int i) {
int c ;
while(1) {
…
c = calcul_local() ;
…
part +=c;
…
}
}
void X(){
while (1) {
…
calcul_global(part) ;
part = 0;
…
}
}
1.1. (3 points)
Com plétez les cod es d e fonctions C et X.
Spécifiez les sémaphores et/ ou variables partagées u tilisés ainsi qu e leur
initialisation.
void C(int i) {
int c ;
w hile(1) {
P(SC[i]);
c = calcul_local() ;
P(MUTEX1);
part +=c;
V(MUTEX1);
P(MUTEX2);
cpt++;
if (cpt==N )
V(SX);
V(MUTEX2);
}
}
void X(){
int i;
w hile (1) {
P(SX);
/ * Mutexs inutiles ici car X est forcém ent seul ici */
calcul_global(part) ;
part = 0;
cpt = 0;
for (i=0 ; i<N ; i++)
V(SC[i]) ;
}
}
1.2. (3 points)
On sou haite m od ifier la synchronisation pou r qu e X soit réveillé lorsqu e les K
prem iers (K<N ) calcu ls locau x ont été effectu és. Les valeurs prod u ites par ces
K calcu ls locau x sont accu m u lées dans la variable partagée part. Com me
précéd em m ent, tous les processu s C i doivent attend re qu e tou s aient fini leu r
calcu l local avant de continu er.
Mod ifiez vos program m es en conséquence.
2/ 8
void C(int i) {
int c ;
w hile(1) {
P(SC[i]);
c = calcul_local() ;
P(MUTEX1);
cpt++ ;
if (cpt <= K) {
part +=c;
if (cpt == K)
V(SC);
}
else {
if (cpt == N ) {
for (c=0 ; c<N -1 ; c++)
V(SC[c]) ;
cpt = 0;
part = 0;
V(Attente);
}
}
V(MUTEX1);
}
}
void X(){
w hile (1) {
P(SX);
P(MUTEX1);
calcul_global(part) ;
V(MUTEX1);
P(Attente);
}
}
3/ 8
2.2. (0,5 point)
La table d es pages d ’u n processu s est-elle stockée en RAM ? A quel m om ent
la table d es pages d’u n processus est créée ?
N on, c’est u ne m ém oire interne d e la MMU, u tilisée pou r éviter les accès
RAM lors d e la tradu ction.
0 0 101 0
1 200 1 101 0
2 0 110 0
3 0 110 0
(L : lecteur, E : écriture, X : eXécution)
2.4. (2 points)
Qu e se passe-t-il lorsqu e P fait :
a) u n accès en lecture à l’ad resse 2019 ?
b) u n accès en écritu re à l’ad resse 3000 ?
Vou s préciserez les actions faites par le m atériel et celles faites par le systèm e.
Vou s d onnerez l’adresse physiqu e correspond ant à l’accès .
a) MMU : accès page <1,995>, d roit OK, Présence OK, ad resse physique = 200*1024+995 =
205795
b) MMU : accès page <2,952> , IT d éfaut d e page , Systèm e : traite d éfaut d e la page 2,
alloue la case 300, ad resse physique = 300*1024+952 = 308152
2.5. (1 point)
Donnez le nou vel état d e la table d es pages d e P après ces 2 accès.
0 0 101 0
1 200 1 101 1
2 300 1 110 1
4/ 8
3 ° 110 0
3.1. (3 points)
a) Qu els sont les d éfau ts d e page engend rés par cette séqu ence ? Faites un
tableau pou r ind iqu er à qu els m om ents ces d éfau ts ont lieu et la case u tilisée
lors d e chacu n d e ces d éfau ts.
b) Quel est le nombre total d e d éfau ts d e pages ?
P1 P2 P1 P2 P1 P2
0 1 2 1 2 3 2 1 0 3 4 1 1 2 0 2 1 4
0 10
P1 1 20
2 30
1 40 X 50
2 50 X 60
P2
3 60 X
4 40
Défau ts D D D D D D D D D
9 d éfauts
5/ 8
3.2. (1,5 points)
Donnez l’état d es tables d es pages à la fin d e ses séquences. Pou r chaque
page, vous ind iqu erez : la case éventuelle, les bits d e présence.
TP d e P1
<page,case,P >
<0,10,1>
<1,20,1>
<2,30,1>
TP d e P2
<page,case,P >
<1,50,1>
<2,60,1>
<3,-,0>
<4,40,1>
4. FICHIERS (5 POIN TS )
6/ 8
del_flag : 0 ind iqu e qu e l’entrée est libre ; 1 ind iqu e qu e l’entrée est
occu pée.
name : nom d u fichier
first_bloc, last bloc: prem ier et d ernier bloc d u fichier.
size : taille d u fichier.
Les entrées 11 à 127 d e la table pt_FAT contiennent 0.
4.1. (1 point)
- Qu els sont les blocs com posant les fichiers « fichier1 » et « fichier2 » ?
- Qu els sont les blocs libres ?
fichier1 : 5 4 7
fichier2 : 6 10 8
Libres : 2, 3, 9, 11 à 127
4.2. (4 points)
Donnez le programm e C d e la fonction fu sion_file.
int fusion_file(char *f1, char *f2){
int i,auxb1,auxb2,b1,b2;
struct ent_d ir * pt = pt_DIR, *pt1, *pt2;
if (!pt1 | | !pt2) {
return -1;
}
7/ 8
b1 = pt1->first_bloc;
b2 = pt2->first_bloc;
8/ 8