Formation les systèmes d’exploitation 1ère année, tutoriel & guide de travaux pratiques en pdf.
Émergence Et Évolution Des Systèmes D’exploitation
Dans ce chapitre nous évoquons la naissance des systèmes d’exploitation sous plusieurs aspects. Nous voyons en un premier moment la notion de » machine virtuelle » avec les « appels système » ainsi que leur lien avec le mécanisme des « interruptions ». Nous parlons ensuite du « traitement par lots », qui peut être considéré l’ancêtre des langages de script. Nous voyons comment par l’utilisation du « processeur canal », la « multiprogrammation » a vu le jour. Nous abordons enfin la notion de processus et une partie de la problématique du partage imposé par l’exécution de plusieurs processus en mémoire (partage du CPU, partage de ressources, …)
Les premiers ordinateurs n’avaient pas de Système d’exploitation. Ce n’est que dans le cours des années 50 que les premiers Systèmes d’exploitation ont vu le jour suite à l’évolution de la technologie et au souci de minimiser le coût des ordinateurs (machines très onéreuses à l’époque). Les ordinateurs et les systèmes d’exploitation ont évolué parallèlement depuis ces années, avec eux ont évolué les besoins des utilisateurs.
Notre but n’est pas de retracer l’historique détaillé de cette évolution, nous nous limiterons à mettre en évidence les concepts de base d’un système d’exploitation.
Machine virtuelle
La première raison d’être d’un Système d’exploitation a certainement été celle de décharger le programmeur de l’écriture d’une série d’instructions très « fastidieuses » nécessaires à la gestion de périphériques (écrire sur un disque ou sur l’imprimante), Ces opérations sont de loin plus complexes de comment les programmeurs les perçoivent aujourd’hui, le système d’exploitation offre au programmeur une « machine virtuelle » : les aspects de plus bas niveau sont masqués (transparence des périphériques). Plus loin, nous verrons des exemples de Système de Fichier : service mis en place par le Système d’exploitation cachant le détail physique du disque en lui-même.
Avant tout voyons comment se présente un disque dur. Un disque est divisé physiquement en pistes et secteurs et des têtes de lecture/écriture mobiles permettent d’accéder l’information des secteurs du disque. Une tête parcourt une piste, chaque opération de lecture et écriture se fait à un emplacement physique défini par un numéro de piste et de secteur. La lecture nécessite donc un positionnement du bras de lecture préalable. Pourtant, les opérations de lecture et écriture sont, pour les programmeurs, des opérations élémentaires, leurs détails sont masqués (on se limitera à donner l’ordre de lire N bytes (14) dans le fichier nommé « fichier» peu importe où celui-ci réside sur le disque et de quel sorte de disque il s’agit.
Ce sera le rôle du Système d’exploitation d’organiser les données sur le disque et de traduire l’information donnée par le programmeur (un nom de fichier) en adresse physique sur le disque (un numéro de secteur). Les détails physiques du disque sont ainsi masqués au programmeur.
piste secteur
fichier ?
fig 2.1.1.1.1 : constitution d’un disque dur [TNB] et détail d’un plateau piste :
ligne fictive tracée sur une bande ou un disque magnétique par une tête de lecture-écriture. secteur :
enregistrement physique constitué d’un ensemble contigu de mots situés sur une piste du disque
14 1 byte = 8 bits
cylindre : dans une pile de disques, ensemble de pistes qui peuvent être lues sans qu’intervienne un mouvement des têtes de lecture/écriture
L’interaction avec le « Système d’ Exploitation » se fait par l’intermédiaire de morceaux de code écrits pour la gestion des « entrées sorties ». Aujourd’hui ces morceaux de code s’appellent « appels système »; ils constituent un ensemble d’instructions étendues fournies par les systèmes d’exploitation. A chacune de ces « instructions étendues » correspondent plusieurs instructions du processeur.
Puisque le système d’exploitation s’occupe de l’accès au matériel et fournit comme interface un
« système de fichiers », toute demande de lecture/écriture devra être adressée au Système. Les lectures/écritures de secteurs sur le disque seront des instructions réservées au Système d’ Exploitation, c’est facilement compréhensible si on imagine la complexité de l’organisation d’un système de fichiers sur disque.
Apparaît donc la notion d’instruction privilégiée : instruction qui ne peut être exécutée que par du
« code système » : du code sûr (contrairement au code utilisateur). Avant d’exécuter une telle instruction, le processeur vérifie qu’il est bien en « mode privilégié» , un registre du processeur (flag de mode) permet de mémoriser le mode.
Appels Système et interruptions
Le code d’un appel système ainsi que le code des interruptions s’exécute « en mode privilégié » contrairement à un programme « utilisateur » qui s’exécute en « mode utilisateur ». Le mode privilégié donne accès à toutes les instructions du processeur et à toute la mémoire du système. Il existe donc un ensemble d’instructions de base communes plus un ensemble d’instructions privilégiées. L’unité de contrôle reconnaît le mode de fonctionnement par un bit d’état qui joue le rôle de « flag de mode ».
Seul le processeur et le système d’exploitation ont le droit de modifier ce bit de mode. Dans le cas du traitement d’interruptions le basculement en mode privilégié est automatique (le processeur s’en charge (15)).
Pour passer en mode privilégié, dans le cadre d’une demande de service par un programme (Appel Système), on nécessite une instruction qui puisse être appelée par du code utilisateur en mode « non privilégié ». Par ailleurs, si il existait une instruction non privilégiée ayant comme seul effet de basculer en « mode privilégié » celle-ci permettrait à tout « code utilisateur » de s’exécuter en « mode privilégié » ce qui n’est pas souhaitable.
Les appels système utilisent le mécanisme hardware des interruptions : ce dernier permet un branchement automatique sur du code système (donc du code « sûr ») qui se trouve à une adresse connue (16) par le processeur. Lorsque une interruption est prise en charge, le processeur bascule automatiquement en mode privilégié. Il est important de noter que l’adresse de branchement est déterminée par le processeur et non par le code de l’utilisateur, ce qui permet de garantir que l’on aboutit bien dans du code système.
Une interruption se matérialise par du courant sur un fil. Le processeur vérifie à chaque cycle d’interprétation d’une instruction si une interruption s’est produite. Dans l’affirmative, le processeur bascule en mode privilégié et effectue un branchement à l’adresse où se trouve le code du traitement de l’interruption..
Une instruction particulière permet de déclencher ce mécanisme pour un appel système, sur les architectures 80×86 il s’agit de l’instruction INT.
Voici le fonctionnement du processeur intégrant le mécanisme des interruptions :
✗ si une interruption s’est produite sauvegarder IP(17) (il faudra le récupérer plus tard pour revenir au code interrompu), positionner le registre de mode privilégié et mettre dans IP l’adresse du traitement de l’interruption
✗ le bus d’adresse reçoit la valeur contenue dans IP (l’adresse à lire)
✗ RI, via le bus de données, reçoit le contenu de la mémoire à l’adresse donnée et IP est incrémenté
✗ l’instruction dans RI est exécutée et on recommence avec la nouvelle valeur de IP (instruction suivante). Le code qui s’exécute à ce stade est le traitement de l’interruption, dans le cas d’un appel système, ce code effectuera le branchement sur le service demandé.
Les interruptions recouvrent trois mécanismes :
les déroutements (erreurs d’exécution : division par 0 …)
les interruptions externes (évènements externes impromptus : bloc disponible, horloge…)
les appels système (interruptions logicielles : produites sur demande du programme :
demande d’ E/S, )
A chaque interruption est associé un morceau de code de traitement qui fait partie du système d’exploitation (18). L’appel système utilise une interruption qui n’est pas générée par des évènements externes, mais par une instruction spécifique sur demande du programme (19).
Retour au code appelant en monoprogrammation
Lorsque une interruption survient, IP prend soudainement(20) une nouvelle valeur qui correspond à l’adresse du code système à exécuter. Avant cela le processeur doit se soucier de sauvegarder la valeur de IP pour permettre le retour au code interrompu, le moment venu. Cette valeur est sauvegardée par le processeur, dans une zone de mémoire appelée PILE (STACK) une pile est une zone de mémoire dans laquelle viennent s’empiler successivement des valeurs qui seront réutilisées par la suite dans l’ordre inverse de leur arrivée sur la pile (le dernier entré est le premier sorti), un peu comme une pile d’assiettes(21).
Dans un contexte de monoprogrammation (22) (un seul programme à la fois en mémoire) l’appel système se terminerait en rétablissant le mode « non privilégié » et en restaurant la valeur de IP pour retourner au programme interrompu (23).
Traitement par lots (batch processing)
En un premier moment, le chargement des programmes en mémoire ainsi que leur enchaînement sera confié à un opérateur humain, l’exécution d’un programme peut prendre plusieurs heures. Nous sommes encore loin des temps de réponse permettant une exploitation interactive de la machine, « on dépose son programme le matin et on revient le soir chercher les résultats, en espérant que tout ait bien marché ». Dans ce contexte la lenteur de l’opérateur humain est relativement insignifiante.
Des Lecteurs et perforateurs de « cartes(24)» sont reliés à l’ordinateur pour permettre les entrées/sorties de données.
1 Introduction
1.1 L’ordinateur et ses composants
1.1.2 Unité centrale de traitement (CPU)
1.1.3 Mémoire centrale (RAM)
1.1.4 Périphérique
1.1.5 En bref
1.2 Amorce et BIOS
1.2.1 BIOS et chargeur de démarrage
2 Émergence et évolution des systèmes d’exploitation
2.1 Machine virtuelle
2.2 Appels Système et interruptions
2.2.1 Retour au code appelant en monoprogrammation
2.3 Traitement par lots (batch processing)
2.4 Processeur canal
2.5 Multiprogrammation
2.6 Time slicing et quantum de temps
2.7 Processus
2.8 Accès direct et partage du système informatique
2.9 Ressources
2.9.1 Interblocages
2.10 Les Systèmes d’exploitation aujourd’hui
2.11 Testez votre compréhension
3 Systèmes de fichiers
3.1 Système de fichiers : vue utilisateur
3.2 Système de fichiers : mise en oeuvre
3.3 FAT
3.4 Systèmes de fichiers avancés
3.5 NTFS
3.6 Testez votre compréhension
4 Bibliographie
5 Quelques liens