Introduction au système d`exploitation UNIX

publicité
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
Lab2 : Introduction au système Unix –suite : les processus
Objectifs:
• Gestion des processus et surveillance de comportement.
• Éditeur de texte Vi et programmes en C/C++
• Les appels fork(), exec() and Wait
Deuxième série d’exercices sur Unix
Partie 1
Tapez la commande qui permet de réaliser ce qui suit :
1.
2.
3.
4.
5.
Afficher la liste des utilisateurs connectés au système.
Afficher votre code utilisateur.
Afficher le nom du répertoire courant.
Afficher le contenu du répertoire courant.
Créer un répertoire de nom laboratoire, afficher le contenu du répertoire courant
et changer de répertoire pour passer à celui qui vient d’être créé.
6. Afficher le nom du répertoire courant puis son contenu.
7. Créer un fichier de nom fich1, en utilisant l’éditeur Vi (Annexe1), dont le contenu
du fichier est :
#include<iostream.h>
#define long 180
int main ()
{
char chaine [long];
cin.getline(chaine,long);
cout<<chaine<<endl;
return 0;
}
8. Afficher le code de protection du fichier créé.
9. Ajouter la permission en exécution pour le propriétaire et le groupe.
10. Changer le nom du fichier en prog1.cpp.
11. Compiler le fichier avec la commande g++ -o prog1 prog1.cpp.
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
12. Exécuter le programme : prog1
13. Supprimer la permission en exécution du programme prog1.cpp pour le groupe.
14. Rediriger la sortie standard du programme vers un fichier nommé resultat.
15. Afficher le contenu de ce fichier.
Partie 2
Que fait chacune des commandes suivantes :
•
•
•
•
•
•
ls *.cpp
file laboratoire
ls|sort
ls*/*.c
ls|wc –w
cat>>prog1.cpp
//fin du programme
^D
• grep cin prog1.cpp|wc –l
• find . –name titi –print
Partie 3
Écrire la commande qui permet d’afficher:
•
•
•
Les 2 premières lignes du fichier prog1.cpp.
Les 3 dernières lignes du fichier prog1.cpp.
La 4ème ligne du fichier prog1.cpp.
Partie 4
1. Soit le script suivant :
#!/bin/csh
# Mon script d’exo
clear
while (1)
echo "Menu"
echo " Affichage repertoire courant 1"
echo " Liste des fichiers du repertoire 2"
echo " Informations sur un fichier 3"
echo " Changement de repertoire 4"
echo " n premieres lignes d'un fichier 5"
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
echo " Sortie 0"
echo -n "Choix: "
set choix=$<
switch ($choix)
case 0: exit(0)
case 1: ?? ; breaksw
case 2: ??
case 3: ??
case 4: ??
case 5: ??
default: echo "Choix non propose"
endsw
end
Créez le fichier Menu qui sera exécuté sous le shell et programmez les différents
éléments du menu.
2. Écrire un programme crcdrep qui crée un répertoire (dont le nom sera passé en
paramètre) dans le répertoire courant et qui vous positionne dedans
Partie 5
Qu’affiche chacun des segments de programmes suivants :
1. for (i=1 ; i<=4 ; i++ )
{
pid = fork();
if(pid >0) printf(“%d”,pid);
}
2. for (i=1 ; i<=4 ; i++ )
{
pid = fork();
if(pid == 0) break;
else printf(“%d”,pid);
}
Quel est le nombre de processus créés ?
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
Partie 6
Écrire un programme en C ou C++ qui lit à l’écran le nombre de fils à créer puis
les crée l’un à la suite de l’autre. Chaque fils affiche à l’écran son pid (getpid()) et
celui de son père (getppid()).
Partie 7
Écrire un programme qui lance en créant un processus le programme prog2.cpp,
puis se met en attente de la fin d’exécution du programme.
NB. Deux annexes (A & B) sont à votre disposition afin
résoudre les exercices ci-dessus.
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
Annexe A
1. Éditeurs Unix
Plusieurs éditeurs fonctionnent sous Unix : emacs, vi, xedit, pico….
Mais vi est l’éditeur standard sur la majorité des systèmes UNIX.
vi utilise deux modes :
• Mode insertion : utilisé pour entrer du texte.
• Mode de commandes : utilisé pour manipuler le fichier.
Pour créer un fichier nomfich avec vi :
• On lance la commande : vi nomfich
• Appuyer sur la touche i pour passer en mode insertion
• Taper le texte
• Peser sur <Esc> pour passer en mode commandes
• Pour la sauvegarde, appuyer sur les 3 touches :wq
Pour plus d’informations sur cet éditeur, consulter le lien suivant :
http://w3.uqah.uquebec.ca/DOC/unx_vi.html ou
http://www.cs.fsu.edu/general/vimanual.html
2. Fichiers et répertoires
Chaque utilisateur du système Unix est identifié par un numéro unique appelé
UID (user identifier).
Un utilisateur particulier, appelé le superviseur ou l’administrateur avec le UID
= 0 possède des privilèges que les autres utilisateurs n’ont pas. Il peut accéder à
tous les fichiers et effectuer certains appels systèmes réservés.
Le système Unix offre la possibilité de constituer des groupes d’utilisateurs.
Chaque groupe a un numéro unique appelé GID (group identifier).
Les UID et GID d’un utilisateur servent, par exemple, à définir les droits d’accès
aux fichiers de l’utilisateur.
a. Permissions d’accès aux fichiers et aux répertoires
Les fichiers sont regroupés dans des répertoires qui peuvent contenir aussi
d’autres répertoires. Le système de fichiers UNIX représente donc une
structure arborescente.
Chaque fichier a un propriétaire (le créateur du fichier) et un groupe.
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
Pour contrôler les accès aux fichiers et aux répertoires, neuf (9) bits de
protection ou bits de droits leur sont attribués.
Les 3 premiers bits définissent les droits d’accès pour le propriétaire, les 3
autres pour le groupe (même département, …) et les 3 derniers bits pour
l’ensemble des utilisateurs.
Chaque groupe de 3 bits contrôle les accès en lecture(r), en écriture(w)
et en exécution(x) pour les fichiers.
En ce qui concerne les catalogues ou répertoires (qui sont aussi des
fichiers) :
• r : permet de lire les noms des fichiers
• w : permet d’ajouter et de retirer des fichiers
• x : permet la recherche dans un catalogue.
Exemple :
-rwxr-xrw- => permet la lecture, l’écriture et l’exécution pour
le propriétaire, la lecture et l’exécution pour le groupe et la lecture et
l’écriture pour les autres.
Remarque :
•
•
•
On peut aussi transcrire l’écriture précédente en octal : 756.
Le premier tiret à gauche des permissions indique que c’est un
fichier.
Pour indiquer un répertoire il y aura un d à la place du tiret.
b. Modifications des permissions
On peut donc pour une raison ou une autre, vouloir modifier ces
permissions.
L’appel système utilisé est la commande chmod.
Cette commande a plusieurs formes, on peut, soit utiliser les codes
r, w, x avec les codes u (utilisateur), g(groupe), o(autres), ou bien tout
simplement utiliser les valeurs octales.
Exemple :
chmod go+rw lab1 : ajouterait au groupe et aux autres les
permissions de lecture et d’écriture sur le fichier lab1.
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
chmod go=u-x lab1 : donnerait les mêmes permissions que
l’utilisateur au groupe et aux autres sauf l’exécution.
chmod 640 lab1 : donne les permissions de lecture et d’écriture à
l’utilisateur, de lecture au groupe et aucune permission aux autres.
c. Chemin d’accès absolu et relatif
Il y a deux façons de spécifier les noms des fichiers en Unix.
La première est le chemin d’accès absolu qui indique comment
accéder au fichier à partir du répertoire racine. Le répertoire racine est
spécifié par /.
Exemple : /labo/inf3723/lab2
La deuxième façon est le chemin d’accès relatif, où le chemin est
donné par rapport au répertoire de travail en cours.
Exemple : si inf3723 est le répertoire en cours, les commandes :
mv lab2 lab3 (ici les chemins sont relatifs)
Et
mv /labo/inf3723/lab2 /labo/inf3723/lab3
Font exactement la même chose.
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
Annexe B
Les processus
Les seules entités actives d’un système UNIX sont les processus et le seul moyen
de créer des processus est de dupliquer un processus existant. Les appels systèmes
d’Unix permettent la création, l’arrêt des processus, la communication et la
synchronisation des processus.
Mais tout d’abord définissons la structure de l’espace d’adressage du processus.
Cet espace est constitué de 3 segments (texte, données et pile) :
•
•
•
Le segment de texte contient les instructions en langage machine (le code)
produit par le compilateur et l’assembleur.
Le segment de données contient l’espace de stockage des variables du
programme. Il est divisé en deux parties : une pour les données initialisées
et une autre pour les données non initialisées. La taille de cet espace peut
augmenter ou diminuer durant l’exécution du programme.
Le segment de pile contient au départ les variables d’environnement
(shell) et la ligne de commande envoyée au shell pour demander
l’exécution du programme. Un programme peut ainsi connaître ses
paramètres.
Les processus en Unix sont créés de façon très simple. L’appel système fork()
crée une copie exacte du processus appelant qui est le processus père. La copie
créée est le processus fils. Le père et le fils ont chacun leur propre image mémoire
privée mais partage les fichiers qui sont ouverts.
L’exécution des 2 programmes père et fils continue après l’appel du fork().
Le fait que les images mémoire, les variables et les registres soient identiques
pour le père et pour le fils pose un problème : comment savoir quel processus est
le père et lequel est le fils? Pour résoudre ce problème, l’appel système fork()
retourne 0 dans le fils, une valeur supérieure à 0 qui est en fait le pid (process
identifier) du fils, dans le père et une valeur inférieure à 0 si l’appel système a
échoué.
Un processus fils peut connaître son pid par l’appel système getpid() et il peut
connaître celui de son père par l’appel système getppid().
Cette possibilité d’avoir des arbres de processus est la clé du fonctionnement
d’Unix en temps partagé.
Systèmes d’exploitation INF 3723—Automne 2008
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
États de processus
Téléchargement