Vous êtes sur la page 1sur 9

Cours

Systèmes d’exploitation NSI


ou OS

I - Introduction
Considérons le programme ci-dessous :
from os.path import getsize
from tkinter.filedialog import askopenfilename

fichier = askopenfilename()
if fichier:
print(fichier, " fait ", str(getsize(fichier)), " octets")

La fonction askopenfilename de la bibliothèque graphique tkinter


créé une boîte de dialogue permettant de choisir un fichier : si l’utilisateur
clique sur le bouton annuler, cette fonction renvoie une chaîne vide et les
deux dernières lignes du programme ne sont pas exécutée. Sinon, la
fonction renvoie une chaîne contenant le chemin absolu du fichier (le nom
du fichier précédé de tous les répertoires à parcourir pour l’atteindre).

A l’utilisation de ce programme, on peut observer les caractéristiques d’un OS :


1. l’exécution de ce programme « ne bloque pas » le reste du système (autres fenêtres,
programmes, affichages système comme l’heure etc.).
2. l’exécution est indépendante des autres programmes en cours d’exécution, et ce aussi bien du
point de vue de l’utilisateur que du programmeur (la suite d’instruction est écrite sans tenir
compte des potentiels autres programmes)
3. le nombre de programmes en cours d’exécution peut être plus grand que le nombre de
processeurs (CPU) de la machine. « Quelque chose » permet l’exécution concurrente des
programmes, et ce de manière tout à fait transparente pour l’utilisateur et le programmeur.
4. Ce programme fonctionne correctement quelque soit l’emplacement du fichier sélectionné
(disque dur, clé USB, partage réseau etc...).
5. Le temps nécessaire à l’affichage de la taille du fichier ne varie pas, même si le fichier
sélectionné est très volumineux. On peut donc supposer que le système maintient des méta-
données sur les fichiers (type, taille etc...)

1
Cours
Systèmes d’exploitation NSI
ou OS

II – Principes
2.1 composants d’un OS
Un système d’exploitation ou operating system en anglais, est un ensemble de programmes dont le but
est de gérer les ressources matérielles et logicielles d’une machine. Il fournit un accès unifié à ces
ressources (exemple du point 4. ci-dessus).
Composition :
• l’ordonnanceur décide quel programme s’exécute à un
instant donné sur le processeur.
• Le gestionnaire de mémoire répartit la mémoire vive
entre les différents programmes en cours d’exécution
• les systèmes de fichiers définissent la manière de stocker
les fichiers sur les supports physiques (disques, clés
USB, disques optiques etc.)
• la pile réseau implémente les protocoles réseaux
(notamment TCP/IP) pour la communication inter-
machines.
• Les pilotes (ou drivers en anglais) gèrent la communication avec les périphériques matériels
(carte graphique, disques durs, clavier, …, mais aussi imprimantes, caméras, micros etc.)

2.2 Noyau (kernel)


Il s’agit du coeur du système, et en quelque sorte le chef d’orchestre des composants décrits ci-dessus.
C’est un programme chargé dans un endroit séparé de la mémoire vive (appelé kernel space), dont
l’accès est protégé : l’utilisation des fonctions du noyau se fait au travers d’appels système (system
call). Il est appelé en permanence par les différents programmes qui nécessitent des accès matériels
(clavier, écran, mémoire etc.), ce qui rend sa conception et sa programmation particulièrement
délicates en termes de performance.

2.3 Distribution
Une distribution est un ensemble de logiciels et de ressources (fichiers de configuration, icônes,
polices de caractères etc...) associés à un noyau. Lorsqu’on « installe Linux », on installe une
distribution particulière qui a ses familles et sous-familles : Ubuntu et Linux Mint (famille Debian),
fedora et redhat (famille redhat) etc... Ces distributions sont adaptées à des types de machine (grand
public, serveurs ou matériel embarqué) ou à des usages spécifiques (édition multimédia, gestion
d’entreprise etc...)
Il existe aussi des distributions pour d’autres noyaux : FreeBSD, GNU/Hurd…

2.4 Licences libres


Un logiciel est dit libre si son code est couvert par une licence autorisant l’utilisation, l’accès au code
source, la modification du code source et la rediffusion publique de ces modifications. Parmi les
différentes catégories de licences libres, on trouve des licences permissives (par exemple la licence
BSD) qui autorisent une diffusion des modifications sous licence propriétaire (c’est-à-dire avec
copyright), et les licences contraignantes (dites copyleft) qui oblige à conserver une licence
compatible et donc à diffuser les modifications sous licence libre (exemple, la licence GNU GPL3)

2
Cours
Systèmes d’exploitation NSI
ou OS

III – Histoire

1956 : 1er 1978 : sortie de BSD, OS 1984 : l’entreprise 1991 : L’étudiant Linus Torvalds 2008 : Google
issu de la recherche Apple développe le noyau d’un nouvel diffuse le
OS, le
(Berkeley) et basé sur Unix. commercialise des OS, qu’il diffuse sous licence libre système
GM-NAA I/O
Ses licences open source ordinateurs GNU GPL. L’association avec le Android, basé
spécifique à
permissives autorisent à personnels basés sur projet GNU, qui développe des sur le noyau de
la machine
copier le code, que l’on l’architecture outils libres (bibliothèque C etc.) Linux qu’il
IBM 704
retrouve en partie dans les Motorola, puis donne naissance aux distributions entoure de
systèmes Apple (iOS/ PowerPC. Les Linux. Il connaît une adoption programmes et
macOS…) ou la bibliothèque machines sont rapide comme OS pour serveurs, bibliothèques
standard C d’Android équipées du système calculateurs et machines de propriétaires.
graphique Mac OS stockage.

1970 : sortie d’ 1980 : système MS- 1990 : Microsoft 2001 : Apple sort
Unix, OS des DOS de Microsoft. développe un un nouvel OS basé
laboratoires Bell, Conçu pour fonctionner système graphique sur BSD : macOS
multi-tâche, multi- sur le processeur x86 au dessus de MS- 2007 : Apple
utilisateurs. Les d’Intel. Le succès de DOS, qui deviendra commercialise une
1ère versions sont l’ordinateur personnel et un OS à part version de macOS
en assembleur puis de l’architecture x86 entière : le système pour ses téléphones
en C, d’Intel installent MS- Windows. portables, baptisé
nouvellement créé DOS comme l’OS iOS
pour cela. principal pour les
particuliers.

IV – Standard POSIX
Le Portable Operating System Interface définit :
• les fonctions offertes par le système pour lire/écrire dans les fichiers, accéder aux réseaux …
• les programmes de base permettant d’utiliser le système.
La plupart des OS modernes sont compatibles avec le standard POSIX, à l’exception du système
Windows de Microsoft. Cela s’explique par le fait que ce standard est très largement inspiré par le
système Unix dont tous les OS modernes sont des descendants (Linux, macOS, iOs, Android…) sauf
Windows, qui est un dérivé de MS-DOS.
Les commandes présentés dans la suite de ce cours sont réalisables sur tous les systèmes compatibles
POSIX.

3
Cours
Systèmes d’exploitation NSI
ou OS

5.1 L’interface système (ou shell)


Le shell est un interface utilisateur qui se résume généralement à
une invite de commandes dans laquelle on peut écrire des
commandes spécifiques. Historiquement, il n’y a pas d’autres
moyens d’interagir avec la machine. Ce n’est qu’à la fin des années
80 que les machines sont pourvues d’interfaces graphique avancés
comme les fenêtres : le shell est alors accessible depuis un
programme graphique appelé terminal (ci-contre).
L’invite de commande est généralement présentée ainsi :
nom_utilisateur@nom_machine:repertoire_courant$
Le curseur clignotant à la suite du symbole $ indique que le terminal attend la saisie d’une commande,
un peu à la manière de l’interprète python.
5.2 Utilisateurs et groupes
Les systèmes POSIX sont multi-utilisateurs : chaque utilisateur s’authentifie à l’aide d’un identifiant
(ou login) et d’un mot de passe. Il peut ensuite accéder à l’ensemble de ses fichiers personnels et
interagir avec une interface personnalisée. L’ensemble des interactions entre un utilisateur authentifié
et le système est appelé une session. A l’identifiant de connexion (utilisé par soucis d’ergonomie)
correspond un identifiant numérique unique appelé UID (pour User Identifier) qui représente
l’utilisateur au sein du système. Les utilisateurs peuvent ensuite être réunis au sein de groupes, afin de
gérer les droits d’accès de manière plus centralisée. Les groupes ont, de manière analogue au login,
des noms symboliques (ergonomie) et des identifiants numériques uniques associés :
• Le groupe principal d’un utilisateur est obligatoire, il permet notamment de définir à quel
groupe (par défaut) appartiennent les fichiers créés par cet utilisateur. Son identifiant est
nommé GID pour Group IDentifier
• les groupes secondaires réunissent des utilisateurs ayant des objectifs communs.
La commande id affiche les identifiants numériques et les groupes de l’utilisateur courant.
toto@pclinux:~$ id
uid=1001(toto) gid=2002(nsi) groupes=2002(nsi), 2003(premieres), 2035(sambashare)

toto a pour UID 1001, son groupe principal est nsi avec pour GID 2002 et il fait de plus partie des
groupes premieres (son niveau) et sambashare (partage réseau).
Dans tous les systèmes POSIX, il existe un utilisateur spécial nommé root, dont l’UID et le GID
valent 0 : on l’appelle traditionnellement le « super-utilisateur » et il correspond à l’administrateur
système : il a tous les droits sur le système et peut le modifier à sa guise.

4
Cours
Systèmes d’exploitation NSI
ou OS

5.3 Arborescence de fichiers


Dans les systèmes POSIX, les fichiers contiennent simplement des octets de données. Bien qu’un
utilisateur accède à un fichier par son nom, ces fichiers ne sont pas directement associés à de tels
noms. A la place, ils sont référencés par un inode (pour information node) qui contient les
informations relatives au fichier (taille, propriétaire, permissions, type de fichier, date de dernière
modification, emplacement mémoire etc...) et un identifiant numérique unique dans le système de
fichiers nommé simplement ino. Les noms des fichiers sont fournis par des fichiers spéciaux appelés
répertoires : ces derniers contiennent les associations nomFichier-ino et permettent d’organiser les
fichiers sous forme d’arborescence. Cette arborescence (ci-contre) est une
abstraction du système de fichier, qui donne à voir à l’utilisateur une version
simplifiée de la structure réelle. Cette année, nous étudierons l’arborescence
(le point de vue de l’utilisateur) et non la structure réelle avec les inodes (point
de vue de l’OS). Dans cette arborescence :
• Le répertoire racine (contenant tous les autres) est appelé « / »
• Un fichier peut être retrouvé par un chemin, c’est-à-dire une suite de
noms de répertoires/fichiers séparés par des « / »
• Si le chemin commence par « / » (racine), ce chemin est nommé
chemin absolu. Sinon, il se nomme chemin relatif et dénote un fichier
ou répertoire dont l’emplacement est cherché à partir du répertoire
courant.
• Le nom spécial « . » dénote le répertoire courant et
« .. » le répertoire parent (répertoire contenant le répertoire courant) Arborescence de fichiers :
les répertoires sont en police
Premières commandes : fixe et les fichiers en italique
Nom description
pwd Affiche le répertoire courant
ls Liste les fichiers et répertoires contenus dans le répertoire passé en paramètre
ou du répertoire courant si aucun paramètre n’est fourni
cd Change de répertoire
suzy@pc1:/home/suzy$ pwd
/home/suzy
suzy@pc1:/home/suzy$ ls /home/suzy/Documents ← chemin abolu
cours.odt
diapos.pdf
suzy@pc1:/home/suzy$ ls Photos ← chemin relatif (au répertoire /home/alice)
img_001.jpg
img_002.jpg
suzy@pc1:/home/suzy$ ls .
Documents
Photos
suzy@pc1:/home/suzy$ ls ..
suzy
Donner l’affichage des commandes suivantes :
suzy@pc1:/home/suzy/Photos$ ls ../Documents
suzy@pc1:/home/suzy/Photos$ ls ../..

5
Cours
Systèmes d’exploitation NSI
ou OS

NB : L’extension d’un fichier (par exemple « txt » pour monfichier.txt) n’a pas de signification sur les
systèmes POSIX. Son utilisation pour déterminer le type de fichier est une spécificité de Microsoft
Windows.
5.4 Gestion des droits
Les systèmes POSIX sont multi-utilisateurs. Pour différencier les fichiers de chaque utilisateur, l’OS y
associe l’UID du propriétaire et le GID du groupe propriétaire, puis définit des permissions pour les
utilisateurs. L’option -l de la commande ls permet un affichage détaillé
suzy@pc1:/home/suzy$ ls -l Photos
total 2672
-rw-r--r-- 1 suzy nsi 1431099 juil. 1 15:02 img_001.jpg
-rw-r--r-- 1 suzy nsi 1300458 juil. 1 15:02 img_002.jpg
• La 1ère ligne indique que les fichiers occupent 2672 blocs de 1024 octets
• le 1er tiret indique qu’il s’agit d’un fichier (un répertoire serait indiqué par la lettre d)
• les 9 caractères suivants sont à lire par groupe de 3 : chacun de ces groupes contient les
permissions de lecture (r pour read) d’écriture (w pour write) et d’exécution s’il s’agit d’un
exécutable (x pour execute). Le 1er groupe concerne les permissions du propriétaire du fichier,
le second du groupe propriétaire et le 3ème de tous les autres utilisateurs.

• Le nombre suivant (1 ci-dessus) est le nombre de « hard links » vers le fichiers. De manière
simpliste, il s’agit du nombre de raccourcis vers le fichier. De manière plus exacte, les liens
durs sont les associations nomFichier-ino des répertoires. Ce nombre compte donc combien il
existe d’associations pour l’ino de ce fichier dans tout le système de fichier (un même fichier
peut donc apparaître avec un nom nomFichier1 dans un répertoire et un nom nomFichier2
dans un autre).
• On trouve ensuite le nom du propriétaire (suzy), le groupe propriétaire (nsi), la taille du fichier
en octets (1431099), la date et l’heure de dernière modification et enfin le nom du fichier.
La commande chmod permet de modifier les permissions sur le fichier avec la syntaxe
chmod c ₁ m₁ p ₁ , c ₂ m₂ p ₂ , … , c n mn pn nomFicOuRep
où les c i sont les cibles qui peuvent valoir « u » pour le propriétaire, « g » pour le groupe, « o » pour
les autres et « a » pour tous. Les mi sont les modifications, « + » pour ajouter des permissions et
« - » pour les retirer. Les pi sont les permissions, « r », « w » ou « x ».
suzy@pc1:/home/suzy$ chmod g+w,o-r Photos/img_001.jpg
suzy@pc1:/home/suzy$ ls -l Photos
total 2672
-rw-rw---- 1 suzy nsi 1431099 juil. 1 15:02 img_001.jpg
-rw-r--r-- 1 suzy nsi 1300458 juil. 1 15:02 img_002.jpg

6
Cours
Systèmes d’exploitation NSI
ou OS

En se souvenant que les répertoires sont en réalité des fichiers spéciaux contenant les associations
nomFichier-ino des fichiers et répertoires qu’ils contiennent, on comprendra que :
• le droit en lecture permet de lister les éléments du répertoire.
• le droit en écriture permet de modifier les associations, i.e. créer / renommer / supprimer les
fichiers contenus dans le répertoire.
• Le droit d’exécution est interprété comme un droit de chercher : il permet d’utiliser ce
répertoire dans un chemin (par exemple pour en faire le répertoire courant), et d’accéder aux
inodes des fichiers et sous-répertoires. Sous Linux, il est nécessaire à l’affichage des fichiers et
sous-répertoires.
Suzy peut afficher les droits sur son répertoire à l’aide de l’option -d de la commande ls
suzy@pc1:/home/suzy$ ls -l -d .
drwxr----x 1 suzy nsi 4096 juil. 1 15:02 /home/suzy
Bob, n’appartenant pas au groupe nsi, il ne peut pas voir le contenu de /home/suzy (il n’a pas les
droits en lecture) :
bob@pc1:/home/bob$ cd /home/suzy
bob@pc1:/home/suzy$ ls -l
ls: impossible d’ouvrir le répertoire ‘.’ : Permission non accordée.
Kate, appartenant au groupe nsi, peut lister les entrées (sous Linux, il faudrait aussi les droits
d’exécution sur le répertoire), mais pas les informations associées :
kate@pc1:/home/kate$ ls -l /home/suzy
ls: impossible d’accéder à ‘/home/suzy/Photos : Permission non accordée.
ls: impossible d’accéder à ‘/home/suzy/Documents: Permission non accordée.
total 0
d ????????? ? ? ? ? ? Documents
d ????????? ? ? ? ? ? Photos
kate@pc1:/home/kate$ cd /home/suzy
bash: cd: /home/suzy/: Permission non accordée.

5.5 Motifs glob


Les commandes dans un terminal ont le format suivant :
commande arg ₁ arg ₂ … argn
• le shell s’attend à ce que commande soit un chemin relatif ou absolu vers un fichier
exécutable par l’utilisateur courant, comme /bin/ls ou ./test/monprogramme. Si la
commande est simplement un nom (i.e. ne contient aucun caractère « / » comme ls), un
fichier ayant ce nom est recherché dans plusieurs répertoires systèmes comme /bin
• les arguments arg ₁ arg ₂ … argn peuvent contenir des motifs glob, c’est-à-dire un
mélange de caractères normaux et de caractères spéciaux. Ces motifs glob permettent de
représenter avec une expression compacte, un ensemble potentiellement grand de noms :
◦ « * » signifie n’importe quelle séquence de caractères
◦ « ? » signifie n’importe quel caractère
◦ [AZE123] signifie un caractère parmi ceux listés : A, Z, E, 1, 2, 3.
◦ [^AZE123] signifie un caractère qui n’est pas listé.
◦ [A-Z] signifie un caractère majuscule

7
Cours
Systèmes d’exploitation NSI
ou OS

Quels fichiers correspondent aux motifs suivant sachant que le répertoire courant est /home/suzy:
• Photos/img/*
• Photos/img_001.j?g
• Photos/img_00[2345].jpg
• Documents/[^abc]*
• [A-Z]*/img*
Le processus de substitution des motifs en l’ensemble des noms correspondants s’appelle expansion
de la ligne de commande. Il est effectué par le shell avant l’exécution du programme.
suzy@pc1:/home/suzy$ ls /home/suzy/*/img?*[23].jpg
/home/suzy/Photos/img_002.jpg
Ci-dessus, le shell effectue les étapes suivantes :
• ls et /home/suzy/*/img?*[23].jpg sont expansés pour donner ls (inchangé) et
/home/suzy/Photos/img_002.jpg
• ls ne contenant pas de « / » est cherché dans les répertoires par défaut et trouvé dans /bin
• /bin/ls /home/suzy/Photos/img_002.jpg est exécuté
NB :
1. Si un motif ne correspond à aucun fichier, le motif est utilisé directement comme nom de
fichier avec le risque que la commande échoue.
2. Le caractère spécial « ~ » correspond au répertoire personnel de l’utilisateur courant, par
convention /home/suzy pour l’utilisateur suzy

5.6 Redirections
Les systèmes POSIX proposent à chaque programme 3 fichiers spéciaux :
1. l’entrée standard (ou stdin pour standard input) est un fichier spécial dans lequel le
programme peut lire et qui par défaut est reliée au clavier. Dans ce cas, lire dans ce fichier
bloque le programme jusqu’à ce que l’utilisateur presse une touche du clavier.
2. La sortie standard (ou stdout pour standard output) correspond à un fichier spécial
disponible en écriture, par défaut relié à l’affichage de la console.
3. Le sortie d’erreur (ou stderr pour standard error)
Le shell permet ensuite de faire des redirections :
• L’opérateur > permet de rediriger la sortie standard d’un programme vers un fichier :
suzy@pc1:/home/suzy$ ls Photos/* > liste_photos.txt
Ici, la liste des photos renvoyée par ls ne sera pas affiché dans la console mais écrite dans le fichier
liste_photos.txt

• L’opérateur 2> permet de rediriger la sortie d’erreur :


suzy@pc1:/home/suzy$ ls -l Photos/* abs.zip 2> erreur_commande.txt
total 2672
-rw-rw---- 1 suzy nsi 1431099 juil. 1 15:02 img_001.jpg
-rw-r--r-- 1 suzy nsi 1300458 juil. 1 15:02 img_002.jpg
Ci-dessus, la sortie est bien affichée, mais pas l’erreur liée au fichier abs.zip qui n’existe pas : le
message d’erreur sera disponible dans le fichier erreur_commande.txt

8
Cours
Systèmes d’exploitation NSI
ou OS

• L’opérateur | permet de rediriger la sortie standard d’un programme vers l’entrée standard
d’un second :
suzy@pc1:/home/suzy$ ls -l */* | sort -k 5 -n -r
-rw-r--r-- 1 suzy nsi 1431099 juil. 1 15:02 Photos/img_001.jpg
-rw-r--r-- 1 suzy nsi 1300458 juil. 1 15:02 Photos/img_002.jpg
-rw-r--r-- 1 suzy nsi 500341 juil. 1 15:02 Documents/cours.odt
-rw-r--r-- 1 suzy nsi 201314 juil. 1 15:02 Documents/diapos.pdf
La commande sort permet de trier les lignes d’un fichier, l’option -k 5 indique de prendre le 5ème
champ comme clé de tri, l’option -n indique que ce champ doit être considéré comme un nombre (et
non du texte) et l’option -r inverse l’ordre du tri. La sortie standard de ls est donc redirigé vers
l’entrée standard de la commande sort, pour être triée selon la taille du fichier.
• Les opérateurs >> et 2>> sont des variantes de > et 2> qui au lieu d’écraser le contenu du
fichier (vers lequel on redirige la sortie du programme), permettent d’ajouter le nouveau
contenu à la fin du fichier.

Commandes utiles :

Nom description exemple


cp Copie d’un fichier cp fichier.txt copie.txt
mv Déplacement d’un fichier mv fichier.txt copie.txt
rm Supprime définitivement un fichier rm fichier.txt
cat Affiche un fichier dans la console cat fichier.txt
touch Créé un fichier touch nouveauFichier.txt
head Extrait les première lignes d’un fichier head -n 3
tail Extrait les dernières lignes d’un fichier tail -n 4
wc Compte le nombre de caractères/mots/lignes d’un fichier wc fichier.txt
mkdir Créé un nouveau répertoire mkdir projets
cd Change de répertoire cd ..

Quelques erreurs classiques :


• Ne jamais rediriger vers un fichier qu’on est en train de lire
sort fichier.txt > fichier.txt commence par vider le contenu de fichier.txt
avant de l’ouvrir en écriture pour récupérer la sortie standard, puis exécute la commande sort
sur un fichier vidé.
• La commande rm permettant d’effacer les fichiers et répertoires est définitive : pas de notion
de corbeille dans le shell
• les noms de fichier contenant des caractères spéciaux doivent être entourés de quotes. Un
répertoire ~ danger doit être écrit ‘~ danger’ car rm -r -f ~ danger supprime
l’intégralité du répertoire de l’utilisateur courant en plus du dossier danger s’il existe.

Emulateur Linux en ligne :


https://bellard.org/jslinux/

Vous aimerez peut-être aussi