Académique Documents
Professionnel Documents
Culture Documents
Ali Larab
CUFR d’Albi
2008-2009
Présentation du module « S.E-
S.E-1 »
Objectif:
– Comprendre les fonctionnalités d'un système d'exploitation et les utiliser au moyen
d’un langage de commande.
Volume horaire: 30h (12h cours + 8h TD + 10h TP).
Contenu:
– Introduction aux systèmes d’exploitation
– Gestion des supports de stockage
– Langage de commande.
Thèmes de TP :
– Commandes principales de Linux et primitives de gestion de fichiers (+ script).
Evaluation:
– Contrôle de connaissances sur table + Evaluation TP.
PLAN
I.1 Pourquoi un SE ?
• Un système informatique est constitué :
– d'un ou plusieurs processeurs,
– d'une mémoire principale et mémoires secondaires (disques durs, clé USB,
mémoire flash...),
– d'un clavier, d'un écran, d'une interface réseau,
– d’une imprimante, d’une carte TV...
Ce système est donc très complexe: Écrire un programme qui prend en
compte et utilise tous ces composants est une tâche très difficile.
Astuce: trouver un moyen qui va gérer tout ce matériel et offrir une
interface simplifiée à ce programme pour qu'il manipule ce matériel
facilement et d'une manière optimale.
« logiciels systèmes ». Le plus important de ces logiciels est le
« système d'exploitation ».
Fonctions d’un SE :
1. Extension de la machine,
Machine virtuelle ou machine étendue,
2. Gestion des ressources.
• OS/2 d’IBM ;
• OS/400 présent sur les moyens systèmes IBM (AS/400 - ISéries) ;
• Mac OS : le premier système d’exploitation des ordinateurs Apple Macintosh, qui a succédé
aux systèmes Lisa et Apple II, et a été suivi de Mac OS X puis d'iPhone OS ;
• VMS et OpenVMS (Compaq, ex-Digital) ;
• Geekeo : Open source et spécialisé dans la virtualisation ;
• la famille des DOS, dont :
– PC-DOS (version fournie par IBM avec les premiers x86), MS-DOS, DR-DOS, FreeDOS,
PTS-DOS...
• Windows 9x, le système d’exploitation fenêtré de Microsoft basé sur le MSDOS ;
• Windows NT ;
• ReactOS, Un système d'exploitation libre compatible win32.
• BeOS et ses successeurs libres et propriétaires : Haïku.
• AtheOS et son fork Syllable dont l'arborescence du système de fichier est très proche d'UNIX.
Exemples de SE (2/4)
Liste non-
non-exhaustive… !
[Source: Wikipedia]
Exemples de SE (4/4)
Liste non-
non-exhaustive… !
• Critères de classification:
classification
1. Libre et gratuit / Propriétaire et payant
2. Services rendus
3. Architecture de fonctionnement
4. Architecture matérielle supportée
5. Évolution
6. Contraintes de temps réel
7. …
• Libres et gratuits:
– Libre on peut avoir le code source.
– Gratuit on peut l’avoir gratuitement.
Ex. Les distributions GNU/Linux (Debian - Fedora – Gentoo, Mandrake – Slackware-
SUSE), NetBSD - payants FreeBSD – OpenBSD ...
• Propriétaires et payants :
– Il faut payer pour pouvoir les utiliser. Ces SE sont généralement non libres
(on ne peut pas avoir accès à leur code source).
Ex. MacOS, OS/2, QNX, Solaris, UNIX, Windows (95, 98, NT, 2000, XP), DOS...
Services rendus:
a) Mono-tâche : Le SE ne peut exécuter qu'une seule tâche à la fois.
Exemple : DOS
b) Multi-tâche : Le SE peut exécuter plusieurs tâches ou processus
simultanément. (effectuer, par exemple, une compilation et consulter le fichier
source du programme correspondant).
Ex. UNIX, OS/2 d'IBM, Windows.
-------------
a) Mono-utilisateur : Il ne peut y avoir qu'un seul utilisateur qui utilise le
système à un instant donné.
a) Ex. DOS, Windows.
b) Multi-utilisateurs : Le système peut gérer plusieurs utilisateurs au
même temps. Le SE partage l'accès aux ressources entre ces
utilisateurs.
Ex. UNIX, VMS (vax)...
Architecture de fonctionnement :
• Système centralisé : L'ensemble du système est entièrement présent
sur la machine considérée. Les autres machines reliées à celle-ci sont
vues comme des entités étrangères disposant elles aussi d'un
système centralisé.
Le SE ne gère que les ressources de la machine sur laquelle il est
installé.
Exemple: UNIX, Windows.
• Système réparti (distribué) : Les différentes abstractions du SE sont
réparties sur plusieurs machines, mais apparaît aux utilisateurs
comme une seule machine virtuelle.
L'utilisateur n'a pas à se soucier de la localisation des ressources; Il
n'a pas à connaître le nom de la machine qui exécute le programme
qu'il va lancer.
Les 2 principaux avantages d'un tel système est l'exécution
parallèle de tâche ainsi que la résistance aux pannes.
Ali Larab, Univ-JFC, 08-09 Systèmes d'Exploitation, partie 1 36
Critères de classification (4/6)
Architecture matérielle supportée:
• Monoprocesseur : La machine a 1 seul processeur Pseudo-
parallélisme (illusion d'un parallélisme dans l'exécution des tâches (processus),
car il y a une rapide commutation entre les différents processus qui s'exécutent sur
la machine).
• Multiprocesseur : La machine possède plusieurs processeurs. Chacun
s'occupe d'une tâche. Plusieurs architectures sont possibles:
– SIMD (Single Instruction Multiple Data) : Tous les processeurs exécutent les
mêmes instructions, mais sur des données différentes.
– MIMD (Multiple Instructions Multiple Data) : Chaque processeur est complètement
indépendant des autres et exécute des instructions sur des données
différentes.
– Pipeline : Les différentes unités d'exécution sont mises en chaîne et font
chacune partie du traitement à effectuer
– Architectures fortement couplées : architectures à mémoire commune,
– Architectures faiblement couplées : chaque processeur possède sa propre
mémoire locale (ex. réseau de stations).
– Architectures mixtes : différents niveaux de mémoire (commune et privée).
Ali Larab, Univ-JFC, 08-09 Systèmes d'Exploitation, partie 1 37
Critères de classification (5/6)
Évolution :
• Système fermé : Le système n'accepte pas des ajouts (ou ayant une
extensibilité réduite).
Pour lui ajouter d'autres fonctionnalités, il faut remettre en cause sa
conception et refaire une archive (système complet).
Exemple : UNIX, Windows, DOS...
• Système ouvert : Le système accepte des ajouts de fonctionnalités et
des abstractions sans avoir à repenser le système ou même sans avoir
à l'arrêter (extensible à chaud).
Pour cela le système doit être basé sur une conception modulaire
(modèle client-serveur).
Le SE qui doit gérer cet automatisme doit alors répondre dans les
délais.
On parle dans ce cas d'un système à temps réel.
Ex. Linux-RT.
• 1ère génération (1945 - 1955) : Les tubes à vide et les cartes enfichables
• 2ème génération (1955 - 1965) : Les transistors et le traitement par lots
• 3ème génération (1965 - 1980) : Les circuits intégrés et la multiprogrammation
• 4ème génération (1980 - 1990) : Les ordinateurs personnels
• 5ème génération (1990 - Aujourd'hui et +) : Les ordinateurs personnels
portables et de poche.
1ère génération (1945 - 1955) : Les tubes à vide et les cartes enfichables
• Apparition des PIC (Personal Intelligent Communicator de chez Sony) et des PDA
(Personal Digital Assistant), grâce à l'intégration des composants et l'arrivée des
systèmes d'exploitation de type « micro-noyau ».
• Ils sont utiles pour les « nomades » et les systèmes de gestion des
informations (recherche, navigation, communication).
• Ils utilisent la reconnaissance de caractère (OCR) et les modes de
communication synchrone et asynchrone (mode messagerie).
• Très bon marché, ils sont capables de se connecter à des ordinateurs
distants et performants.
• Les systèmes d'exploitation de type « micro-noyau » sont modulaires (un
module par fonction) ; ils peuvent être réalisés avec plus ou moins de modules
et donc adaptables à des très petites machines (PDA et PIC).
Historique:
Historique
Historique:
Historique
2) 1979 - 1984 : Les premiers pas commerciaux
– En 1979, avec la version 7, UNIX se développe commercialement :
Par des sociétés privées comme Microport (1985), Xenix-Microsoft (1980)
... qui achetèrent les sources et le droit de diffuser des binaires.
– Des UNIX like apparaissent ; le noyau est entièrement récrit.
– L'université de Berkeley fait un portage sur VAX (UNIX 32V).
– AT&T vend la version 7 sur les ordinateurs de la gamme PDP 11.
Historique:
Historique
3) 1984 - 1993 : La standardisation
• En 1984 le Système V.2 est adopté comme standard.
• En 1984 X/Open est chargée d'organiser la portabilité d'UNIX.
• En 1985 AT&T publie SVID (System V Interface Definition) qui définit l'interface
d'application du Système V.2 et non pas son implémentation.
• En 1986, le Système V.3 apporte les Streams, les librairies partagées et RFS
(Remote File Sharing).
• En 1993, X/Open lance le COSE (Common Open Software Environment). Il s'agit
d'accords entre constructeurs pour le développement d'applications dans un
environnement commun. L'authentification d'UNIX appartient désormais à un
consortium de constructeurs (USL, HP, IBM, SUN ...).
Historique:
Historique
4) 1991 - 2000 : Linux
Linux,, le renouveau d'UNIX
• LINUX est une implantation libre des spécifications POSIX avec des
extensions System V (AT&T) et BSD (Berkeley).
• En 1991, Linus B. Torvalds (Helsinki) utilise MINIX (A. Tannenbaum)
• Août 1991 : 1ère version de LINUX 0.01. C'est une réécriture de MINIX, avec
des ajouts de nouvelles fonctionnalités et la diffusion des sources sur Internet
--> une version instable
• Mars 1994 : 1ère version stable
• Aujourd'hui : Les versions 2.0 ... respectent la norme POSIX (code source
portable) et le code source est gratuit.
1. Multi-tâche / multi-utilisateur
2. Système de fichiers arborescent
3. Entrée/Sorties compatible fichiers, périphériques et processus
4. Réduction du noyau système
5. Interface au noyau
5. Interface au noyau
• L'interface entre le noyau UNIX et les périphériques est assurée par
les gestionnaires de périphériques (devices driver).
• L'interface entre le noyau UNIX et les programmes utilisateurs est
assurée par un ensemble d'appels systèmes.
• D’autres variations:
– « Bourne Again Shell » ou bash correspond au Bourne Shell
augmenté de la plupart des fonctionnalités avancées du C
Shell (/bin/bash ).
Un script Bourne Shell (sh) est correctement interprété avec
un Bourne Again Shell (Bash), car sh ∈ bash
– « Tcsh » C’est une extension du C Shell d’origine ( /bin/tcsh )
Ali Larab, Univ-JFC, 08-09 Systèmes d'Exploitation, partie 1 61
A-1) Langage de commandes
Commandes internes et commandes
externes
Ex.
type cp
cp is /usr/bin/cp
$ a=1 $ bash
$ bash $ echo $a
$ echo $a 1
$ exit $
$ export a cet héritage est fait à tous les fils puis on
$ remonte
on fait hériter les fils de la valeur de a $ exit
$ bash $
$ echo $a
1
$
La variable a bien été transmise
$ read a
10 $ read d e f
$ echo $a Bonjour
10 $ echo $d
Bonjour
$ read b c d $ echo $e
voici trois mots $ echo $f
$ echo $d $c $b
mots trois voici $ IFS=u$IFS
$ read g h
$ read a b c cou cou
et voici quatre mots $ echo $g
$ echo $a co
et $ echo $h
$ echo $b co
voici
$ echo $c Remarque:
quatre mots IFS=u$IFS -> concaténation du contenu de IFS
avec le u. Elle va donc contenir « u + blanc »
IFS=u réinitialisation de IFS
$ p2 a b c
p2 a b c
$ cat p4 $ p4
who c1 term/c4 Jul 19 07:41
echo statut de who : $? manu term/b1 Jul 18 15:22
date −z fun term/b3 Jul 19 09:10
echo statut de date −z : $? statut de who : 0
$ ls −l p4 date: illegal option −− z
−rwxr−x−−x 1 c1 cours 94 Jul ... statut de date −z : 1
p4 $ echo $?
1
$
Ali Larab, Univ-JFC, 08-09 Systèmes d'Exploitation, partie 1 93
Langage de commandes
Procédures
Commande Exit
• C’est une commande interne permettant de terminer la
procédure sans exécuter les lignes qui suivent.
• Elle est suivie par l’argument qui fournit le statut de retour
de la procédure.
• Ex.
$ cat proc5
ls −l p4
exit 2
Who
$ proc5
−rwxr−x−−x 1 c1 cours 94 Jul ... P4
$ echo $?
2
$
$cat pgm_Feu1
$ for i in 3 2 1 Feu
> do echo $i
> done
$pgm_Feu1
3
2
1
Feu
for i for i in $*
do do
commande est équivalent à : commande
done done
$ pgm_listarg f* $HOME
argument: fic1
argument: fic2
argument: /usr/c1
$
Ali Larab, Univ-JFC, 08-09 Systèmes d'Exploitation, partie 1 102
Langage de commandes
Structures de contrôle
La structure « for »
for var in $**
$ VAR="3 2 1 Feu"
(ou for var) (3/4)
• Ex2. $ cat pgm_Feu2
$ for i in $VAR
for var in $variable > do
> echo $i
Il est possible de passer une liste > done
dont les éléments seront variables.
$ pgm_Feu2
3
2
1
Feu
$
$ cat exist_user
if grep "$1" /etc/passwd > /dev/null
then echo "L’utilisateur $1 a un compte"
else echo "L’utilisateur $1 n’existe pas"
Fi
$ exist_user c1
L’utilisateur c1 a un compte
$
if commandes1 if commandes1
then commandes2 then commandes2
else if commandes3 Que l’on elif commandes3
then commande4 peut then commandes4
else if commande5 elif commandes5
...... écrire .....
fi sous la fi
fi forme
fi
abrégée
en :
• commande1 || commande2
Cette commande provoque l’exécution de commande2 uniquement si
commande1 est fausse.
$ engtofr one
un
$
Explications:
• Tant que l’utilisateur passé en argument (ici c1) est dans la liste de la commande who
(donc est connecté), on boucle après avoir attendu 180 secondes et affiché une virgule.
• Puis on signale qu’il n’est plus connecté. Les commandes testées dans le while sont
exécutées, donc leur affichage se fait à l’écran (sortie standard), afin d’éviter de recevoir
l’affichage parasite (seul le statut nous intéresse), on redirige la sortie standard de la
dernière commande dans le pseudo−périphérique /dev/null.
$ cat fichexist $ ls
while : fichexist
do fichA
echo −e "nom de fichier: \n"
read fic $ fichexist
if test −f "$fic" nom de fichier : foo
then foo fichier inconnu
break nom de fichier : barbe
else barbe fichier inconnu
echo $fic fichier inconnu nom de fichier : fichA
fi fin de traitement
done $
# le break branche ici
# la suite du traitement
echo "fin de traitement"
L’opérateur « ET logique »
Syntaxe : cmd1 && cmd2
• On exécute cmd2 uniquement si cmd1 se termine
correctement $ pwd
/usr/c1
$ mkdir tmp
Explications de l’ex.: $ test -d $HOME/tmp && cd $HOME/tmp
Si le répertoire tmp $ pwd
existe dans le /usr/c1/tmp
répertoire courant,
$ cd
alors aller dans ce
$ rmdir tmp
répertoire. $ test -d $HOME/tmp && cd $HOME/tmp
$ pwd
/usr/c1
$
L’opérateur « OU logique »
Syntaxe : cmd1 || cmd2
• On exécute cmd2 uniquement si cmd1 ne se termine pas
correctement (statut ≠ 0).
$ pwd
/usr/c1
Explications de l’ex.: $ mkdir tmp
S'il n'existe pas de $ test -d $HOME/tmp || echo $HOME/tmp
répertoire tmp dans le inexistant
répertoire courant,
$ rmdir tmp
alors afficher un $ test -d $HOME/tmp || echo $HOME/tmp
message. inexistant
/usr/c1/tmp inexistant
$
Ex.
$ cat testarg
if test "$#" -eq "0"
then
echo "usage: $0 arg1 arg2" >&2
exit 1
fi
$
chat$
chat$ reconnaît ‘chat’ placé en fin de ligne
^chat
chat$
$ reconnaît une ligne qui ne contient que le mot ‘chat’
egrep ‘q[^u]’ fich1 cherche dans le fichier fich1 toutes les lignes
avec des mots qui comptent un q non suivi d’un
u (comme coq ou iraq).
{0,1} Correspond à: ?
{1, } Correspond à: +
{0,} Correspond à: *
While +(.*) +{ While {1,}(.{0,}) {1,}{
à ne pas utiliser car risque de créer une confusion entre le métacaractère { et
le caractère {
Soit la chaîne suivante : <b> gras </b> normal <b> gras </b>
On veut reconnaître le texte à l’intérieur de la première balise <b>
Si on utilise <b>.*</b> cela ne marche pas car on reconnaît tout le texte
entre le premier <b> et le dernier </b>
Perl propose d’ajouter le symbole ? aux quantificateurs pour les rendre
paresseux, c-à-d. les forcer à reconnaître la chaîne la plus courte.
On écrira donc en perl <b>.* ?</b>
Mais cette possibilité n’est présente que dans perl.