Académique Documents
Professionnel Documents
Culture Documents
1/9
1.4. (0,5 point)
Pourquoi la taille des pages est toujours une puissance de 2 ?
Cela permet à la MMU de retrouver plus rapidement le numéro de page au
sein d'une adresse : la division par une puissance 2 correspond à un simple
décalage.
0 0 101 0
1 100 1 101 1
2 0 101 0
3 0 110 0
4 0 110 0
6 200 1 110 0
7 0 110 0
8 300 1 110 0
Figure 1
1.6. (3 points)
a) Quels sont les défauts de page engendrés par cette séquence ?
Faites un tableau pour indiquer à chaque accès l’état de la liste des pages en
mémoire avec le bit R associé.
b) Quel est le nombre total de défauts de pages ?
Init 2 1 7 1 8 1 2 8
File 1,1 2,1 2,1 7,1 7,1 8,1 1,1 2,1 2,1
6,0 1,1 1,1 2,1 2,1 7,0 8,1 1,1 1,1
8,0 6,0 6,0 1,1 1,1 2,0 7,0 8,1 8,1
100 1 1 1 1 1 8 8 8 8
200 6 6 6 7 7 7 7 2 2
300 8 2 2 2 2 2 1 1 1
Def. X X X X X
5 défauts
3/9
2. SYNCHRONISATIONS PAR SEMAPHORES (7,5 POINTS)
Processus B :
while (1) {
calculB() ;
P(mutex)
if (nb_A >= N) {
V(mutex)
return ;
}
V(mutex)
}
Processus PA :
while (1) {
P(sem_A)
calculA();
P(mutex)
nb++;
if (nb == N){
nb=0;
for (i=0; i < N; i++)
V(sem_B);
}
V(mutex);
}
Processus PB :
while (1) {
P(sem_B)
calculB();
P(mutex)
nb++;
if (nb = N){
5/9
nb=0;
for (i=0; i < N; i++)
V(sem_A);
}
V(mutex);
}
Processus PA :
while (1) {
calculA() ;
P(MutexA)
nb_A++ ;
if (nb_A == N) {
P(MutexB)
for (i=0; i < nb_B; i++)
V(sem_B);
V(MutexB)
}
V(MutexA);
}
Processus B :
while (1) {
P(MutexA)
if (nb_A < N) { /* se bloquer */
P(MutexB);
nb_B++ ;
V(MutexB);
V(MutexA);
P(B);
else
V(MutexA);
calculB() ;
6/9
}
Processus PA :
while (1) {
calculA() ;
P(Mutex)
nb++ ;
if (nb == N)
V(sem_B);
V(Mutex)
}
Processus B :
while (1) {
P(sem_B);
V(sem_B);
calculB() ;
}
3. FICHIERS (5 POINTS)
fichier1 : 4 12 7 9
fichier2 : 6 13 10
3.2. (1 point)
Donnez la nouvelle configuration des entrées du répertoire et de la FAT qui ont été
modifiées à la suite de l’appel à addfirst("fichier1", 5).
pt_DIR[0].first_bloc = 5;
pt_DIR[0].size = 640;
pt_FAT[5] = 4
3.3. (3 points)
Donnez le programme C de la fonction addfirst.
int addfirst(char *fich, int b){
int i = 0;
struct ent_dir * pt = pt_DIR;
if (pt_FAT[b] != 0)
return -1;
9/9