UNIX Pr BELKHIR ABDELKADER Module Système d’Exploitation Dpt Informatique USTHB Master Sécurité des Systèmes Informatiques 1. INTRODUCTION : Les travaux menés par principalement Ken Thompson et Dennis Ritchie pour la mise eu point d’un système de fichiers ont été vite détournés pour la réalisation d’une première version du système de fichiers UNIX. Après plusieurs tentatives de mise au point d’un système d’exploitation sur l’ordinateur GE645, ils implantent leur système sur la machine GECOS avec support de fichiers le PDP7 en intégrant une première version du système de fichiers UNIX : le sous système de processus et un petit ensemble de programmes utilisateurs. Ils se sont vite rendus compte qu’ils pouvaient se dispenser du système GECOS comme environnement de développement. Alors leur nouveau système a été baptisé UNIX. Il y a eu par la suite le développement de plusieurs versions du système UNIX à travers différents projets. En 1971, le système UNIX est porté sur PDP11, en 1973 l’ensemble du système UNIX est écrit en langage C UNIX a été écrit à 95% en langage C, ce qui permet sa portabilité. De plus, sa conception modulaire avec des interfaces bien définies a contribué à sa popularité. 1.1 Portabilité : Un logiciel est portable lorsqu’il peut fonctionner sur des machines différentes. Il faut considérer deux sortes de portabilités : celle du système lui-même et celle des utilitaires. Le noyau du système UNIX ainsi que ses utilitaires sont écrits dans un langage portable qu’est le langage C. 1.2 Capacité multi-utilisateurs : Le système UNIX donne la possibilité à plusieurs utilisateurs d’accéder aux ressources du système. 1.3 Capacité multi-tâches : UNIX offre à l’utilisateur la possibilité d’accomplir plus d’une tâche à la fois. 1.4 Système de fichiers : Le système de fichiers UNIX permet une structure hiérarchique. Il permet un contrôle souple de l’accès aux données utilisateurs, à un groupe d’utilisateurs ou l’ensemble des utilisateurs. 1.5 Programmes modulaires : Le système est composé d’utilitaires dont chacun est destiné à une tâche précise. 1.6 Interface utilisateur : Il est essentiellement orienté commandes. Cependant, il y a eu le développement d’interface graphique avec Xwindows. L’interface utilisateur sous UNIX est appelé shell (sh, csh, ksh,…). Il joue le rôle d’interprêteur de commandes et celui d’un langage de programmation. 2. ARCHITECTURE D’UNIX : Le système UNIX se caractérise par deux concepts principaux : le système de fichiers occupe de la place et les processus ont une vie. Ces deux composants constituent les deux sous systèmes dominants du système. La structure d’UNIX est constituée de quatre couches concentriques : 1. Le noyau central : contient les fonctions de base de gestion de processus ; c’est un automate d’affectation de type temps partagé. 2. Le noyau complet : contient les conducteurs d’interfaces d’entrée/sortie 3. La coquille (shell) : est l’interprêteur de commandes par lequel l’utilisateur interagit avec UNIX. 4. La dernière couche contient les outils et les applications : l’ensemble des programmes et utilitaires qui ont été écrits pour améliorer le système. utilitaires shell noyau hardware Pr BELKHIR A 2 Module Système d’Exploitation Dpt Informatique USTHB Master Sécurité des Systèmes Informatiques 2.1 L’interprêteur de commandes : L’interprêteur de commandes UNIX est appelé shell, son fonctionnement obéit à l’algorithme suivant : Lecture de la commande suivante (par défaut, sur le clavier) analyse de la syntaxe oui <erreur> non écrire un message sur la console non < commande interne ?> fourche (« fork ») oui création d’un processus fils exécuter le code correspondant à la commande interne exécuter le programme à la commande externe attendre la fin du processus fils signaler la fin du processus 2.2 Structure du noyau : Il partitionne l’ensemble des appels systèmes en deux groupes, ceux qui interagissent avec le sous système de contrôle de processus et ceux qui interagissent avec le sous système de fichiers. Le sous système de fichiers gère les fichiers, alloue de l’espace fichier, récupère l’espace libre et contrôle l’accès aux fichiers et récupère les données pour les utilisateurs. Le sous système de processus interagit avec le sous système de fichiers à travers un ensemble spécifique d’appels systèmes tels que : open (ouverture), close (fermeture), read (lire), write (écriture)… Le sous système de contrôle de processus est responsable de la synchronisation, communication de processus, de la gestion de la mémoire et du scheduling de processus. Certains appels systèmes de contrôle de processus sont fork (création d’un nouveau processus), exec (surcharge d’image d’un processus), wait (synchronise l’exécution du processus avec la fin de processus déjà crées par fork). Pr BELKHIR A 3 Module Système d’Exploitation Dpt Informatique USTHB Master Sécurité des Systèmes Informatiques Programmes utilisateurs bibliothèques Interface appel système Niveau utilisateur Niveau noyau Communication Interprocessus Sous système de fichiers Sous système De contrôle De processus Scheduler Buffer cache Caractère Gestionnaire De la mémoire bloc driver Contrôle hardware Niveau noyau Niveau hardware Hardware Diagramme du noyau du système 2.2.1 La gestion de processus et ordonnancement : Un programme est un fichier exécutable, un processus est une instance du programme lors de son exécution. Plusieurs processus peuvent s’exécuter simultanément sur le système UNIX, et plusieurs instances du programme peuvent coexister simultanément. 2.2.1.1 Implantation des processus : Un processus UNIX est représenté par 3 zones mémoires : 1. Segment texte 2. Segment de données utilisateur 3. Segment de données système 1. Segment texte : (User Text Segment) c’est le code du programme qui s’exécute. Ce segment est accessible en lecture seule. Lorsque plusieurs processus exécutent le même programme au même instant, le système les fait partager une seule copie de code en mémoire par l’intermédiaire d’une table supplémentaire gérée par le système : la table des textes. 2. Segment de données utilisateur : (User Data Segment) il contient les données modifiées par le programme. Le système n’utilise pas ce segment pour stocker ses propres données ; en particulier il n’y met pas de tampons d’entrée/sortie. Pr BELKHIR A 4 Module Système d’Exploitation Dpt Informatique USTHB 3. Master Sécurité des Systèmes Informatiques Segment de données système : (System Data Segment) il contient toutes les données dont le système a besoin quand le processus est actif (contexte, fichiers ouverts, facturation,….) Table des processus Segment De données systèmes Table des textes Structures résidant en mémoire Segment données processus Structures pouvant être mises sur disque Segment texte Espace disque La durée de vie d’un processus peut être conceptuellement divisée en un ensemble d’états qui décrivent le processus. 1. 2. 3. 4. 5. 6. 7. 8. 9. Le processus est en exécution en mode utilisateur Le processus est en exécution en mode noyau Le processus n’est pas en exécution mais est prêt à l’exécution dès qu’il sera élu Le processus est endormi et réside en mémoire principale Le processus est prêt pour s’exécuter, mais le swapper doit swapper le processus en mémoire principale avant que le noyau l’élise Le processus est endormi, le swapper a le processus en mémoire secondaire afin de laisser place dans la mémoire principale. Le processus retourne du mode noyau au mode utilisateur Le processus est crée, le processus existe, mais n’est pas prêt pour exécution et non endormi. Cet état est l’état de départ de tous les processus (sauf swapper : processus 0) Le processus exécute l’appel système « exit » et se trouve dans l’état zombie. Le processus n’existe plus, mais il reste un enregistrement contenant le code de sortie et certaines valeurs statistiques pour ses processus parents. Chaque processus est associé un certain nombre d’informations. Ces informations contribuent à l’identification et la gestion du processus. On dénote : - numéro de processus PID (Process Identifier) - numéro d’utilisateur UID (User IDentifier) - numéro de groupe GID (Group IDentifier) - durée de traitement utilisée (temps cpu) et priorité du processus - référence au répertoire de travail courant - table de référence des fichiers ouverts PID (Process Identifier) : le système étant multi-tâche, le PID est moyen d’identifier tout processus dans le système. Chaque processus peut créer lui-même des processus ; ces nouveaux processus sont alors appelés processus fils. Ces derniers connaissent leur origine par l’intermédiaire de PPID (PID du père) Pr BELKHIR A 5 Module Système d’Exploitation Dpt Informatique USTHB Master Sécurité des Systèmes Informatiques Mode utilisateur 1 zombie 9 Mode noyau 2 Endormi en mémoire 7 préemption Prêt en mémoire 4 3 crée 8 6 Endormi en mémoire secondaire 5 Prêt en mémoire secondaire Diagramme de transition d’état d’un processus UID et GID : Chaque processus dispose des numéros UID et GID à sa création. Ce qui lui permettra d’avoir les autorisations d’accès aux fichiers. Durée de traitement et priorité : La stratégie de scheduling est une variante de Roud Robbin basée sur les priorités. Ce qui permettra de partager le temps CPU entre les processus. Répertoire courant du processus : il indique le répertoire courant de travail et d’accès aux fichiers. Table des fichiers ouverts : elle permet l’accès aux fichiers en lecture et écriture. Les trois premières entrées sont prédéfinies : stdin (clavier), stdout (écran) et stderr (écran pour erreur). 2.2.1.2 Ordonnancement des processus : L’ordonnancement utilise la stratégie Round Robbin avec plusieurs files rétroactives. Le schéduler alloue le CPU à un processus, le désalloue dès qu’il termine son quantum et le met dans l’une des files de priorité. Le scheduler utilise des priorités variables ; plus un processus a utilisé l’unité centrale pendant le dernier intervalle, plus le système lui donne une faible priorité. Toutes les priorités sont réaffectées à la fin de chaque intervalle. La fonction de scheduling utilise le temps relatif d’exécution comme paramètre afin de déterminer le prochain processus à élire. Chaque processus actif dispose d’une priorité de scheduling. Le noyau recalcule la priorité du processus en exécution quand il passe du mode noyau au mode utilisateur et réajuste périodiquement la priorité de chaque processus. queue CPU 2.2.2 Gestion des entrées/sorties : Le système d’entrée/sortie est séparé en deux sous-systèmes indépendants : les entrées/sorties structurées (par blocs) et les entrées :sorties non structurées (par caractère). Chaque périphérique est identifié par deux numéro et une classe (bloc ou caractère). Pr BELKHIR A 6 Module Système d’Exploitation Dpt Informatique USTHB Master Sécurité des Systèmes Informatiques 2.2.2.1 Imprimante : Le service d’impression est de type spool, il sert d’intermédiaire entre les utilisateurs et les imprimantes. Le service d’impression appelé service LP, assure le stockage des requêtes, leur mise en forme et leur acheminement. a) Fonctionnement L’utilisateur achemine ses requêtes vers une destination qui peut être soit le nom logique d’une imprimante soit le nom d’une classe. Une classe est une liste ordonnée de noms logiques d’imprimantes. lorsqu’une requête est envoyée à une classe ; le choix est effectué par le gestionnaire en fonctions des disponibilités. Une fois le service d’impression configuré et initialisé, une impression de fichier se déroule en trois étapes : - l’utilisateur exécute la commande lp qui transmet une requête, elle sera stockée sur le répertoire /usr/spool - le gestionnaire (lpsched) analyse et met en forme la requête et l’achemine vers un programme d’interface - le programme d’interface activé par le gestionnaire, assure l’impression b) commande utilisateur La commande lp permet l’envoi d’une requête de demande d’impression d’une liste de fichiers. La commande cancel permet de supprimer des requêtes en instance. Toute requête en cours d’impression dont la suppression est demandée par cancel est interrompue et annulée. La commande lpstat permet de connaître la configuration du service ainsi que l’état des requêtes en instance. 2.2.3 Gestion de la mémoire : La gestion de la mémoire influe sur l’ordonnancement des processus. En effet, au moins une partie du processus doit être en mémoire pour l’exécuter. le CPU ne peut pas exécuter un processus qui est entièrement en mémoire secondaire. Historiquement, le système UNIX transférait tout le processus de la mémoire centrale vers la mémoire secondaire. Ensuite, il y a eu la stratégie « pagination à la demande » qui consiste à transférer des pages mémoires entre la mémoire centrale et la mémoire secondaire ; le système V utilise cette stratégie. En général, la gestion de la mémoire obéit à la gestion de la mémoire virtuelle (pagination à la demande). 2.2.4 Gestion des fichiers : Les système de gestion de fichiers est hiérarchisé selon la structure d’arbre. Il contient trois types de fichiers : Fichiers ordinaires Fichiers catalogues Fichiers spéciaux 2.2.5 La structure d’un disque : Un disque est vu par le système comme un tableau de blocs de 512 octets accessibles de façon aléatoire. Le système de gestion découpe le disque en quatre régions. Bloc0 Bloc1 Liste -i Zone de stockage Bloc0 : il est réservé pour la mise en route du système Bloc1 : est appelé le super bloc ; il contient entre autres, le nom du disque (label), la taille du disque et les frontières des autres zones. Liste-i : elle contient la liste des définitions des fichiers. Chaque définition est une structure de 64 octets appelée un nœud-i (i-node). Le numéro d’un nœud-i dans la liste-i n’est autre que le nombre-i qui identifie de faàon unique un fichier. Zone de stockage : elle s’étend de la fin de la liste jusqu’à la fin du disque. L’espace libre sur le disque est repéré par une liste chaînée, chaque bloc libre contient un pointeur sur le bloc suivant de la liste. Un nœud-i contient 13 adresses su le disque sous forme de 13 numéros de blocs. Les 10 premières adresses sont celles des 10 premiers blocs du fichier. Si le fichier contient plus de 10 blocs, la onzième adresse pointe sur un bloc qui contient les adresses des 128 blocs suivants dans le fichier. Si le fichier est plus grand que 138 blocs, la douzième adresse pointe sur un bloc dont chacune des 128 adresses pointe sur un bloc de 128 adresses de 128 blocs de fichiers. Pour un fichier encore plus grand que 8 mégaoctets, la treizième adresses utilise un schéma à trois niveaux d’indirection ; ce qui porte la taille maximum d’un fichier à plus de 1 gigaoctet. Pr BELKHIR A 7 Module Système d’Exploitation Dpt Informatique USTHB Master Sécurité des Systèmes Informatiques Noeud i 1 2 Bloc 11 . . Bloc 12 Bloc 2 Bloc 10 11 12 13 128 Bloc 138 Bloc 1 1 2 3 . . . 10 1ere s /liste de premier niveau 1 2 1 2 . . . . 128 128 Liste de second niveau 2eme s /liste de premier niveau 2eme s /liste 1 de premier niveau 1 2 2 . . . . 3eme s /liste de second niveau 1 2 Bloc 128 Bloc 128 128 s/liste de second niveau . . s/liste de 3eme niveau Pr BELKHIR A 8