0% ont trouvé ce document utile (0 vote)
6 vues4 pages

Examen CS333 : Systèmes d'exploitation

Ce document est un examen de mi-session pour le cours CS333 sur les systèmes d'exploitation à l'Université d'Alexandrie. Il contient des questions à choix multiples et des questions à réponse courte sur divers concepts liés aux systèmes d'exploitation, tels que la gestion des ressources, la synchronisation des threads, et les appels système. Les étudiants doivent démontrer leur compréhension des principes fondamentaux des systèmes d'exploitation et de la programmation concurrente.

Traduit par

ScribdTranslations
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues4 pages

Examen CS333 : Systèmes d'exploitation

Ce document est un examen de mi-session pour le cours CS333 sur les systèmes d'exploitation à l'Université d'Alexandrie. Il contient des questions à choix multiples et des questions à réponse courte sur divers concepts liés aux systèmes d'exploitation, tels que la gestion des ressources, la synchronisation des threads, et les appels système. Les étudiants doivent démontrer leur compréhension des principes fondamentaux des systèmes d'exploitation et de la programmation concurrente.

Traduit par

ScribdTranslations
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université d'Alexandrie Examen de mi-session

Faculté de génie CS333 : Systèmes d'exploitation


Ingénierie Informatique et Systèmes Samedi 22 novembre 2014
Automne 2014 Temps autorisé : 90 minutes

Entourez la bonne réponse.


1. (3 points) Toutes les tâches suivantes sont effectuées par le système d'exploitation, sauf :
A. Fournir une interface conviviale aux utilisateurs.
B. Abstraction des ressources.
C. Gestion des ressources.
D. Collecte de statistiques sur l'exécution des processus.
2. (3 points) Lequel des éléments suivants est attendu pour être le plus lent ?
A. Function call. B. Library call. C. Appel système.
D. Ils sont tous censés s'exécuter à des vitesses similaires.

3. (3 points) lequel des éléments suivants est la méthode la plus rapide pour écrire un programme qui multiplie deux
matrices en parallèle ?
A. Serial program.B. Multi-threaded. C. Diviser le travail sur plusieurs processus.
D. Distribuez le travail sur plusieurs machines en utilisant par exemple MapReduce.

4. (3 points) Lequel des éléments suivants est déclenché par le matériel ?


A. Interruptions. B. System calls. C. Process creation. D. Aucun des éléments ci-dessus.

5. (3 points) Lequel des resources suivants n'est pas partagé par les threads du même processus ?
A. Program code.B. CPU registers.C. Heap. D. Variables globales.

Questions à réponse courte.

6. (5 points) Considérez la perspective d'un développeur qui code une application multithread.
des primitives existantes telles que les verrous et les variables de condition. Qu'est-ce qui est plus difficile, écrire cette application-

tion pour une machine uniprocesseur ou multiprocesseur ?

Solution : Les deux sont identiques du point de vue d'un développeur d'application.

7. (5 points) Consider the perspective of a developer who codes an operating system. Which is
plus difficile, mettant en œuvre des primitives de synchronisation telles que des verrous et des variables de condition pour un

machine uniprocesseur ou multiprocesseur ?

Solution:Implementing synchronization primitives are harder on multiprocessors. For ex-


une approche simple telle que l'activation et la désactivation des interruptions ne sera pas adaptée à un
multiprocesseur. Des instructions matérielles spéciales telles que comparer et échanger sont nécessaires.

8. (5 points) Considérez un environnement dans lequel il existe une correspondance un à un entre le niveau utilisateur
threads and kernel-level threads that allows one or more threads within a process to issue block-
appels système en cours pendant que d'autres threads continuent à s'exécuter. Expliquez pourquoi ce modèle peut rendre mul-
Les programmes multithreadés s'exécutent plus rapidement que leurs homologues monocœurs sur un processeur unique.
puter.

1 sur 4
Solution : Les programmes multi-threadés sont exécutés à très grande vitesse (comparé à
leurs homologues à un seul fil) sur une machine uniprocesseur, où il existe une carte 1-1
ping entre les threads au niveau utilisateur et les threads au niveau noyau. Cela est dû au fait que le thread au niveau noyau
dans un programme multi-thread, permet à au moins un thread d'émettre un appel système bloquant de manière indépendante
sans influencer d'autres fils et permettant ainsi à d'autres fils de fonctionner sans interruption
continuez avec leur exécution. Cependant, dans les équivalents à un seul thread des programmes multi-threadés
Un programme, une machine passe généralement une quantité significative de temps à attendre les opérations d'E/S.
pour être complet. Par conséquent, sur une machine à processeur unique, un processus qui a été autorisé à être bloqué
continue d'exécuter ses autres threads.

9. (5 points) Listez au moins deux types d'opérations matérielles qui sont utilisées pour mettre en œuvre des niveaux supérieurs
primitives de synchronisation telles que des verrous, des sémaphores et des moniteurs.

Solution :

Chargement et stockage d'un seul mot.

Désactiver et activer les interruptions.

Instructions atomiques telles que comparer et échanger.

10. (5 points) Expliquez la différence entre le mode utilisateur et le mode noyau. Pourquoi deux modes d'exécution ?
Les modes sont importants pour atteindre les objectifs d'un système d'exploitation ?

Solution : En mode utilisateur, certaines zones de la mémoire sont protégées de l'utilisation par les utilisateurs, certaines
les registres sont inaccessibles, et certaines instructions peuvent ne pas être exécutées.
La distinction entre les deux modes est importante pour que le système d'exploitation maintienne le contrôle sur le
matériel et se protéger contre d'éventuels changements apportés par les programmes.

2 of 4
11. (8 points) Considérez le programme suivant.

boolean verrouillé [2];


int tour;
vide P (int id){
tandis que (vrai) {
/ * acquérir le verrou / *
locked[id] = true;
tour = 1 - id;
tandis que (verrouillé[1-id] && tour == (1 - id)) / ne rien faire /;* *
/ * section critique / *
/ * libérant le verrou / *
locked[id] = false;
}
}
void main(){
locked[0] = false; locked[1] = false; turn = 0;
parbegin (P(0), P(1));
}
(a) (4 points) Le programme fournit-il une exclusion mutuelle pour deux processus ? Justifiez votre réponse.

Solution : Oui, cela garantit l'exclusion mutuelle.

(b) (4 points) Si nous échangeons deux lignes dans le code pour que la fonction p() ressemble à ce qui suit, le programme va-t-il
provide mutual exclusion for two processes? Justify your answer.
void P (int id){
tant que (vrai) {
/ * acquérir le verrou / *
tourner = 1 - id;
locked[id] = true;
tant que (verrouillé[1-id] && tour == (1 - id)) / ne rien faire /;* *
/ * section critique / *
/ * libérer le verrou / *
locked[id] = false;
}
}

Solution : Non. Un contre-exemple est le suivant :

P(0) P(1) locked[0] locked[1] turn


turn = 0 faux vrai 0
turn = 1 faux faux 1
locked[0] = true vrai faux 1
(verrouillé[1-id] & tour == (1 - id)) faux
, sortie d'attente active vrai faux 1
/*section critique*/ vrai faux 1
locked[1] = true vrai vrai 1
(verrouillé[1-id] & tour == (1 - id)) faux
sortie attente occupée vrai vrai 1
/*section critique*/ vrai vrai 1

3 sur 4
12. (12 points) Dans le laboratoire #1, vous avez appris à propos des appels système fork et waitpid. Considérez le
programme suivant qui les utilise :
int i;
void forkProcess() {
pid_t pid;
int statut;
i++;
pid = fork();
si (pid == 0){ / enfant* / *
printf("%d", i);
retour;
} sinon { / *parent / *
i--;
waitpid(pid, &status, 0);
printf("%d", i);
retour;
}
}
void main(){
i = 0;
forkProcess();
forkProcess();
}
(a) (4 points) Quel est le nombre total de processus (y compris le processus principal parent) qui
sera créé lorsque ce programme sera exécuté ?

Solution : Quatre processus.

(b) (4 points) Montrez la sortie qui sera imprimée lorsque ce programme sera exécuté à cause de la
statementprintf("%d", i);. La sortie doit être une séquence de chiffres imprimée par tous les
processus qui sont créés lorsque ce programme s'exécute.

Solution : Notez que la fourchette crée un clone du processus. Le processus enfant aura
ses propres variables globales, pourtant leur valeur sera la même que celle du parent au moment de
fourche. 1 2 1 0 1 0

(c) (4 points) Si la ligne waitpid(pid,&status,0); dans la fonction forkProcess() est supprimée


et le programme est réexécuté, montrez la sortie qui sera imprimée dans ce cas. La sortie
devrait être une séquence de nombres imprimée par tous les processus qui sont créés lorsque cela
le programme s'exécute.

Solution : Les valeurs imprimées par chaque processus sont les mêmes que dans la partie (b), cependant, le
L'ordre de l'impression changera en fonction de la planification des processus. Contraintes :

La séquence comprend deux 0, trois 1 et un 2.


•Au moins un 1 doit précéder le 2. Cela est dû au fait que le premier enfant bifurqué ne sera pas
procédez à forker un autre enfant (qui imprimera "2") jusqu'à ce qu'il ait imprimé "1".

•At least one 0 must precede the last 1. This is to guarantee that the main process
a imprimé "0" avant d'avoir forké son deuxième enfant.
Réponses correctes possibles : 1 1 0 0 2 1, 0 0 1 1 1 2, 0 1 0 1 2 1

4 sur 4

Vous aimerez peut-être aussi