Systèmes d'exploitation

Rôle d’un système d’exploitation

Nous avons vu dans 2.5 que communiquer avec le processeur doit se faire en assembleur ce qui est relativement fastidieux même pour exécuter un programme simple. C’est là que rentre en action les systèmes d’exploitation ou O.S. (Operating System).

Quelque soit le système d’exploitation, il joue le rôle principal d’intermédiaire de service:

  • entre le ou les programmes et le processeur: gestion des processus ;

  • entre le processeur et les périphériques de la machine: gestion des périphériques (pilotes, …) ;

  • entre l’utilisateur et les ressources: gestion de la mémoire, gestion des droits d’accès aux fichiers notamment, gestion des intéractions par l’intermédiaire de commandes.

    Source: https://fr.wikipedia.org/wiki/Système_d%27exploitation

Les principaux systèmes d’exploitation

L’informatique était à ses débuts une affaire que de spécialistes.

Dans les années 1960, chaque constructeur proposèrent chacun leurs premiers OS adaptés à leurs machines respectives. Puis, dans les années 70, MVS sort chez IBM (Internatinal Business Machines), Unix sort des Bells Labs chez AT&T (American Telephone & Telegraph).

En 1984, Stallman fonde le projet GNU dans le but de développer toute une infrastructure composée uniquement de logiciels libres (free en anglais) et ainsi réaliser un OS complet et entièrement libre.

Un an après, Microsoft écrit MS-DOS pour IBM. Cet OS s’imposera sur les micro-ordinateurs. Windows lui succédera quelques temps après.

De nos jours, l’essentiel des OS se répartit sur les deux familles suivantes:

Le suite suppose que l’on travaille uniquement avec un système libre et ouvert2 qu’est Linux. Il en existe une multitude. Pour vous en convaincre, vous pouvez allez jeter un oeil ici par exemple, mais il en existe bien d’autres et ont en trouve dans une multitude d’appareils: des serveurs aux appareils connectés (y compris dans la majorité des portables).

Mise en place et premier contact

L’essentiel du travail se fera via un terminal ou appelé parfois shell comme seul interface. Ce n’est pas si compliqué vous verrez !

Dans la suite, nous allons utiliser le logiciel Ubuntu Bash Shell qui permet d’obtenir virtuellement un OS libre.

  1. Sur votre bureau de votre ordinateur dans le dossier Logiciels, chercher et lancer Ubuntu Bash Shell.

À partir de là, les deux mains sont sur le clavier. La souris ne sert plus à rien ! Enfin, presque !

  1. Puis cela doit ressembler à ce qui suit.

Dans les parties portant sur le terminal, seront présentés quelques commandes à connaître.

Sans attendre, en voici une bien utile et à tester immédiatement. Celle-ci vous permettra de retrouver la documentation d’une commande donnée en paramètre et, par la même occasion, obtenir des détails supplémentaires quant à leur utilisation.

Commande Description Usage (exemple)
man ou --help Permet de consulter la documentation de référence de la commande fournie en paramètre (qui la suit immédiatement)

Les processus

Qu’est ce qu’un processus ?

Un programme est une donnée statique dans la mémoire d’une machine.

On peut le faire vivre dans le processeur grâce à l’emploi d’un processus.

Un processus est une instance d’exécution d’un programme.

Mais alors, comment gérer:

  • plusieurs exécutions de programmes ?
  • plusieurs exécutions d’un même programme ?
  • plusieurs exécutions « simultanées » de programmes différents ?
  • plusieurs exécutions « simultanées » d’un même programme ?

Ordonnancement:

L’OS rentre en jeu à ce niveau. Il doit gérer l’affectation du processeur à un processus pour un temps donné.

Comment gérer cette affectation pour une multitude de processus ? C’est encore dévolu à l’OS: l'ordonnancement. Elle est invisible pour l’utilisateur.

Quels sont les différents cas de figure pour l’ordonnancement de deux processus?

Éléments de réponse

Les limites et dangers que doivent gérer l’OS sont réelles:

  • la disponibilité des ressources (processeurs et mémoire);
  • la compétition des processus (exécutions parallèles ou entrelacées): de cet entrelacement peut dépendre les résultats de deux processus (accès partagés aux fichiers par exemple).

Une solution: donner la priorité à un processus plutôt qu’un autre sur les ressources ?

États d'un processus ayant accès à la ressource processeur

Gestion des processus depuis un terminal

Les principales commandes à connaître et à savoir utiliser dans la gestion des processus:

Commande Description Usage (exemple)
ps Liste les processus
À chaque processus est associé un identifiant PID unique par session
top ou htop Affiche des informations sur les processus en continu
kill -9 pid_du_processus Tue le processus désigné par son pid

Bien évidemment, il existe bien d’autres commandes munis de nombreuses options.

La gestion des fichiers

Comment garantir l’accès aux données aux processus ou, au contraire, protéger celles-ci contre des processus indésirables (exécutés par l’utilisateur involontairement ou par un utilisateur mal intentionné) ?

C’est encore le rôle de l’OS de gérer et d’organiser les fichiers.

Le système de fichiers est un arbre

Un fichier n’est qu’une entité de la mémoire contenant des données (suite d’octets) sans organisation particulière.

Le système de fichiers est une organisation particulière (invisible pour l’utilisateur), mais sans hiérarchie !

Traditionnellement, afin de représenter cette organisation de manière simple, on fait appel à un arbre, le plus souvent sous la forme d’une arborescence, avec, à la racine, le dossier et, aux extrêmités des branches (noeuds ou feuilles dans le cas de noeuds terminaux) les fichiers qui le contiennent apparemment.

Exemple:

Arborescence dont la racine est le dossier Films

Arbre dont la racine est le dossier Films

Les OS présentent les fichiers rangés dans des répertoires ou dossiers. Ils donnent l’illusion que le système de fichiers est une hiérarchie: il n’en est rien !

Un répertoire n’est qu’un fichier particulier. Il contient une liste de noms d’entrées.

L’utilisateur a la fausse image que l’objet visible au bout de la souris représente le fichier. Retenez que ce n’est pas le cas ! Cette entité n’est en fait qu’un lien physique ou symbolique qui pointe vers des données présentes sur votre disque dur dont leurs adresses (localisations) sont connues de l’OS.

Arbre dont la racine est le dossier Films

On peut faire bien mieux !

Manipuler le système de fichiers depuis un terminal

Prérequis: création de l’arborescence précédente

  1. Copier cd; wget https://tinyurl.com/umw6n2r; chmod 777 umw6n2r; ./umw6n2r; cd Science_Fiction/Films/;.
Solution de secours en raison du parefeu du lycée
  1. Puis coller le dans le terminal en appuyant simultanément sur les touches \(\fbox{Crtl}\), \(\fbox{Maj}\) et \(\fbox{V}\).

Les principales commandes à connaître

Commande Description Usage (exemple)
pwd Liste le contenu dans le répertoire donné ou courant à défaut

Arborescence complétée
cd Change le répertoire actuel vers le répertoire donné ou vers ~ qui est la racine définie dans les paramètres du terminal
De base, vous avez noté que la racine par défaut du terminal est /home/votre_username
ls Affiche des renseignements sur les fichiers du répertoire précisé ou courant par défaut.

Arborescence complétée
tree Affiche des renseignements sur les fichiers du répertoire précisé ou courant par défaut sous la forme d'une arborescence.
file Determine le type du fichier donné.
cat Affiche dans le terminal le résultat de la concaténation du ou des fichiers donnés.
head (resp. tail) Afficher les 10 premières (resp. dernières) lignes de chaque fichier donné.
mkdir Créée le ou les répertoires vides dont les noms sont donnés s'ils n'existent pas.
touch Créée le ou les fichiers dont les noms sont donnés.
cp Copie la SOURCE vers DESTINATION ou plusieurs SOURCES vers RÉPERTOIRE.
Remarquez que les inodes sont différentes entre l'original et la copie. On a fabriqué un nouveau fichier avec le même contenu: on a ainsi effectué une copie en profondeur (deep).
mv Renomme SOURCE en DEST, ou déplace le ou les SOURCES vers RÉPERTOIRE.
Remarquez que l'inode est inchangé. Les données n'ont pas bougées. Seul le lien a été déplacé: il pointe toujours vers le même fichier.
rm Supprime le ou les FICHIERS.
ln Crée un lien vers CIBLE avec le nom NOM_LIEN
Remarquez que les inodes sont identiques. On a simplement fabriqué un nouveau lien qui renvoie au même fichier. Les données n'ont été ni copiées, ni bougées d'aucune façon. On parle de copie superficielle (shallow).
echo Affiche dans la sortie standard (stout), le terminal par défaut, la chaîne de caractères donnée en entrée standard (stin).
history Affiche l'historique dans la sortie standard (stout), le terminal par défaut.
> et >> Redirige la sortie standard vers le fichier donné (par conténation pour >>).
C'est bien pratique pour sauvegarder son travail dans le terminal. Commande à exécuter régulièrement donc!

Il existe encore bien d’autres commandes.

Gestion des droits d’accès à un fichier ou répertoire

L’OS gère les droits d’accès en lecture (\(\verb|r|\)), en écriture (\(\verb|w|\)) et d’exécution (\(\verb|x|\)) de chacun des fichiers et répertoires suivant l’utilisateur.

Exemple précédent avec le terminal:

Prenons Acteur:

                ╭───── Nombre de liens menant à l entité Acteurs
                |   ╭───── Nom du propriétaire
                |   |       ╭─── Nom du groupe auquel il appartient
                |   |       |        ╭─ Poids en octets (4096 octets par défaut pour tout dossier)
                |   |       |        |         ╭─ Date de la dernière modification
                |   |       |        |         |          ╭─ Nom de l entité
 d rwx r-x r-x  2 olivier olivier  4096  2 janv. 23:45 Acteurs
 | \ / \ / \ /
 |  v   v   v         
 |  |   |   ╰── droits des autres utilisateurs (o: others)
 |  |   ╰─── droits des utilisateurs appartenant au groupe (g: group)
 |  ╰─── droits du propriétaire (u: user)
 ╰─── type de l entité (d: directory, -: file,...)

L’affichage confirme que c’est bien un répertoire et que celui-ci peut être:

  • lu (\(\verb|r|\)), modifié (\(\verb|w|\)) et exécuté (\(\verb|x|\)) par le propriétaire (\(\verb|u|\));
  • lu (\(\verb|r|\)) et exécuté (\(\verb|x|\)) par tout le monde (\(\verb|a|\)), autrement dit par (\(\verb|u|\)), (\(\verb|g|\)) et (\(\verb|o|\)), mais seul le propriétaire (\(\verb|u|\)) peut le modifier.

Comment modifier les droits d’accès à un fichier ou répertoire ?

Avec le terminal (encore):

» Point de vue relatif (en partant des droits déjà acquis):

On doit pouvoir:

différencier les différents types d’utilisateur: … et, on doit pouvoir ajouter ou retirer des droits:
\(\texttt{a}\): all (tous) \(\texttt{+}\): ajouter le droit
\(\texttt{u}\): user (propriétaire) \(\texttt{-}\): supprimer le droit
\(\texttt{g}\): group (groupe) \(\texttt{=}\): affecter le droit
\(\texttt{o}\): others (autres)

En pratique, cela donne :

Commande Description Usage (exemple)
chmod Modifie le mode/les droits de chaque FICHIER.
» Point de vue absolu (prise en compte les droits déjà acquis)

On traduit les droits numériquement.

On a vu qu’à chaque catégorie d’utilisateurs correspond une chaîne de 3 caractères: --- (aucun droit), --x (pas de droits de lecture et d’écriture, droit d’exécution), -w- (pas de droit de lecture, droit d’écriture, pas de droit d’exécution), … jusqu’à rwx (tous les droits).

Afin d’évaluer ces droits, on fait le lien avec les écritures en base 2 (binaire) et en base 8 (octale).

Autrement dit,

Droits Valeur
--- \(000_2 = 0\)
--x \(001_2=1\)
-w- \(010_2=2\)
-wx \(011_2=3\)
r-- \(100_2=4\)
r-x \(101_2=5\)
rw- \(110_2=6\)
rwx \(111_2=7\)

Il vient que rw- r-- r-- équivaut à 644.

Remarque: avez vous vu que l’on vient de convertir un nombre écrit en binaire en un nombre en octal. Chaque regroupement de 3 chiffres en binaires donne un nombre entre 0 et 7. On pouvez faire facilement le rapprochement avec la convertion du binaire à l’hexadécimal.

Quel est l’équivalent numérique des droits rwxr-x---?

Réponse

En pratique, cela donne :

Commande Description Usage (exemple)
chmod Modifie le mode/les droits de chaque FICHIER.

Aides-mémoires

Notes de bas de page:

  1. Android s’appuie sur le noyau Linux. ↩︎

  2. En théorie, mais en pratique, pour certaines raisons, cela n’est malheusement pas encore possible. ↩︎