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.
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.
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 !
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
Exécutions séquentielles
Exécutions parallèles (deux processeurs)
Exécutions entrelacées
Exécutions entrelacées (autre)
Impression de disposer d’un processeur pour chaque processus: vitualisation du processeur
Idem
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 ?
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:
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.
On peut faire bien mieux !
Notez que l’on dispose de deux fichiers différents (pas la même adresse dans la
mémoire) bien qu’ils portent le même nom Damon_Matt.txt.
Imaginez maintenant que l’on veuille modifier les fichiers concernant cet
acteur. Il faudra faire le travail dans chacun de ces fichiers. Ce n’est pas
très optimal, vous en conviendrez.
Il est préférable dans ce cas d’avoir un seul et unique fichier.
Manipuler le système de fichiers depuis un terminal
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
a) Télécharger et placer le fichier script.shdans le dossier Documents de
votre compte.
Pour atteindre ce dernier dossier, rendez vous dans le lecteur Windows (C:),
puis le dossier Utilisateurs, puis dans le dossier portant votre nom
d’utilisateur, vous y trouverez le dossier recherché Documents.
b) Dans votre terminal, taper la série de commandes suivante
cp ../../mnt/c/Users/hennebelle.op/Documents/script.sh ~/;./script.sh; cd Science_Fiction/Films/;
Vous pouvez passer à la question suivante.
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 40962 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---?