USTHB Le 24/11/2024
Faculté d’Informatique Année 2024/2025
Département des Systèmes Informatiques ING3 Soft Eng
Matricule : Nom : Prénom :
Interrogation
Durée : 45mn – Documents non autorisés
Exercice 1 : (5 pts)
1. Quel est l’intérêt de disposer dans l’inode de 10 pointeurs à accès direct ?
L’intérêt est faciliter l’accès aux fichiers de petites taille
2. Donner trois cas d’usage différents des interruptions ?
a) Demande de ressources via SVC
b) Disponibilité de ressource via routine d’interruption matérielle
c) Gestion d’erreur via déroutement
3. Donner trois cas d’usage des sémaphores.
a) Exclusion mutuelle
b) Synchronisation (précédence)
c) Gestion de ressources limitées en nombre
4. Les pointeurs à accès indirect (premier, deuxième et troisième niveau) posent un problème de
lenteur d’accès aux blocs de données. Comment le système Unix a résolu ce problème?
Le système Unix a résolu le problème en utilisant un buffer cache qui contient les blocs
utilisés selon la stratégie LRU
Exercice 2 : (5pts)
Soit un fichier Linux de 32 Moctets. Les blocs disque dont de 512 octets. Un numéro de bloc occupe 2
octets. Le temps d’un accès disque est de 10ms
1. Quel est le nombre de blocs de données du fichier ?
65536
2. Quel est le nombre de blocs d’indexes du fichier ?
257
Exercice 3 : (10 pts)
Soit la solution suivante pour le problème du producteur/consommateur
Semaphore mutex=1;
Semaphore empty=N;
producteur {
while (1) {
Produce new resource;
P(empty); // wait for empty buffer
P(mutex); // lock buffer list
Add resource to an empty buffer;
V(mutex); // unlock buffer list
}
}
consommateur {
while (1) {
P(mutex); // lock buffer list
1
USTHB Le 24/11/2024
Faculté d’Informatique Année 2024/2025
Département des Systèmes Informatiques ING3 Soft Eng
Matricule : Nom : Prénom :
Remove resource from a full buffer;
V(mutex); // unlock buffer list
V(empty); // note an empty buffer
Consume resource;
}
Décrivez pourquoi cette solution est erronée. Comment résoudre ce problème ?
Cette solution ne peut pas empêcher les consommateurs d'entrer. Imaginez l’exécution suivante :
// le tampon est vide..
Consommateur
Consommateur
.. ..
C'est clairement faux car les consommateurs devraient être bloqués lorsque le tampon est vide.
Pour résoudre ce problème, nous avons besoin d'un autre sémaphore : full
Semaphore mutex=1;
Semaphore empty=N;
Semaphre full = 0; // count of full buffers
consumer {
while (1) {
P(full); // wait for a full buffer
P(mutex); // lock buffer list
Remove resource from a full buffer;
V(mutex); // unlock buffer list
V(empty); // note an empty buffer
Consume resource;
}
}
producer {
while (1) {
Produce new resource;
P(empty); // wait for empty buffer
P(mutex); // lock buffer list
Add resource to an empty buffer;
V(mutex); // unlock buffer list
V(full); // note a full buffer