0% ont trouvé ce document utile (0 vote)
56 vues3 pages

Solutions Systèmes d'Exploitation II

Transféré par

aitabbouzakaria216
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)
56 vues3 pages

Solutions Systèmes d'Exploitation II

Transféré par

aitabbouzakaria216
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

UNIVERSITE IBNOU ZOHR,

FACULTE DES SCIENCES 2016-2017


DEPARTEMENT INFORMATIQUE
AGADIR
Solution épreuve Systèmes d’Exploitation II – SMI4/II4 (session de rattrapage)
Durée : 2h00

Exercice 1 (13 pts):


Q1- 2n
Q2- Donnez le contenu du fichier « file » à la fin de l’exécution de chacun des codes suivants :

(b) (c)
(a) int main(){ int main(){
int main(){
int fd; int fd;
int fd;
char* buffer= “toto” ; char* buffer= “toto” ;
char* buffer= “toto” ;
if((fd=open(“file”, O_WRONLY |O_APPEND))>0) { if((fd=open(“file”,
if((fd=open(“file”, O_RDONLY))>0) {
lseek(fd,8, SEEK_SET); O_WRONLY|O_APPEND|O_TRUNC))>0) {
lseek(fd,8, SEEK_CUR);
if(write(fd,buffer,sizeof(buffer))>0){ lseek(fd,8, SEEK_SET);
if(write(fd,buffer,sizeof(buffer))<0){
perror(“Erreur write”); if(write(fd,buffer,sizeof(buffer))<0){
perror(“Erreur write”); exit(1);
exit(1); perror(“Erreur write”);
}
} exit(1);
}
} }
return(0);
return(0); }
}
} return(0);
}

On suppose, qu’avant chaque exécution, le fichier «file» contient la chaîne de caractères ASCII suivante :
Bonjour SMI4

(a) Contenu :Bonjour SMI4


Pourquoi ? : car le fichier est ouvert en lecture seul donc pas de possibilité d’écriture
(b) Contenu : Bonjour SMI4
toto
justificatif : Le fichier est ouvert en écriture en mode ajout (O_EPPEND) ==> écriture à la fin du fichier
(c) contenu : toto
justificatif : Le fichier est ouvert en écriture en mode ‘trunc’ (O_EPPEND) à chaque ouverture le contenu
initial sera écrasé avant toute opération d’écriture ou de lecture.

Q3- Les états d’un processus (voir cours) : prêt, élu, bloqué
Transitions possibles exemple
-------------------------------------------
Prêt-- > élu processus attend le processeur, une fois il a eu il s’exécute ‘relance par
l’ordonnaceur).
Elu --- > bloqué attente d’une entrée sortie (E/S).
Bloqué -- > prêt fin d’une E/S.
Elu --- > prêt fin d’un quantum, ou arrivé d’un processus plus prioritaire.

1/2
Q4- Dans quel état est le processus pour chacun des deux cas suivants ?
1- bloqué
2- prêt
Q5- Soit le diagramme de Gantt suivant :
P1 inactif P2 inactif P3 P2 P3 inactif P1 P2
0 2 3 5 6 8 10 12 14 16 18

1- l’état du processus P1 à t=3 ? == > bloqué


2- le temps d’arrivée du processus P2 et P3.== > P2 : ta=3 ; P3 : ta=6
3- le processeur est inactif entre les instants t = 5 et t = 6 : P1 et P2 sont dans état bloqué
4- l’état des processus P1 et P2 entre t=10 et t=12 ?. P1 et P2 sont plus prioritaire que P3 donc
forcément P1 et P2 sont dans un état bloqué
Q6- Soit le programme suivant :

int main(){ L’arbre généalogique affichage de chaque processus créé


pid_t pid;
int f=10, status ; P0 (main) 4 20
if(fork()==0){
if(fork()==0){
printf("1"); P1 2 20
f=f+10;
printf("f=%d",f);
}else{ P2 1 20 3 30
wait(status);
printf("2");
f=f+10;
printf("f=%d",f);
exit(1);
}
printf("3");
f=f+10;
printf("%d",f);
}
printf("4");
f=f+10;
printf("f=%d",f);
return 0;
}

2/2
Exercice 2 (3 pts) :

#include <stdio.h>
#include <unistd.h>
#include<fcntl.h>

creatP(){
int i, pid;
for(i=1 ;i<=4 ;i++){
if((pid=fork())>0){
break; // si pere on quitte
}else{ // le fils
printf("pid=%d---PPId=%d\n",(int) getpid(),(int) getppid());
}

int main(){

int pid;
pid=fork();
if(pid==0){// 1er fils
printf("pid=%d---PPId=%d\n",(int) getpid(),(int) getppid());
}else{
createP(); // les fils de P2 à P5
}
return 0 ;

Exercice 3 ( 4 pts) :

Le programme prog.c doit donc juste lire ce qui sort du tube (lire le stdin= descripteur 0)

3/2

Vous aimerez peut-être aussi