~~SLIDESHOW~~ ====== Les systèmes d'exploitation ====== V 1.5 le 02/06/2021 ===== Généralités ===== **Système d'exploitation** : logiciel servant d'interface entre le **matériel** et les **logiciels applicatifs** Appelé **Operating System** (**OS**) en anglais * permet d'assurer l'exploitation des périphériques * disques durs * écrans, clavier, ... * et ressources diverses * processeur * mémoire * ... ===== Schéma de principe ===== {{:250px-operating_system_placement-fr.svg.png|}} ===== Typologie - 1 ===== * SE : * **mono-utilisateur** : une seule session utilisateur simultanée (MS/DOS) * **multi-utilisateur** : permet plusieurs sessions utilisateur simultanées (Linux) * **mono-tâche** : ne permet pas l'exécution simultanée de plusieurs programmes (ex. : MS/DOS) * **multi-tâche** : permet l'exécution simultanée de plusieurs programmes (Windows 10,8, 7, ... Linux) * **mono-processeur** : MS-DOS * **multi-processeur** : (Sun Solaris, Linux, ...) ===== Typologie - 2 ===== * un SE peut être adapté à : * un gros système (mainframe): Sun Solaris, IBM AIX, HP-UX, Linux, ... * un poste de travail : Windows 10, 7, XP, ..., Linux, Mac/OS, ... * un serveur : Windows Server 2012/16, Linux, Mac/OS Server, ... * une tablette : Android, Apple IOS, ... * un téléphone portable : Android, IOS, Blackberry OS * un routeur ou un switch : Cisco IOS, ... * des appliances (box internet, NAS, ...) : base Linux ===== Les composants ===== * un **chargeur d'OS** qui permet le démarrage * un **noyau** ou kernel * un **interpréteur de commande** (**bash** sous Linux, **cmd** sous Windows) qui sert d'interface entre le noyau et l'utilisateur * des **outils divers** permettant paramétrage et maintenance du système, gestion du stockage et des fichiers, ... ===== Les appels système ===== * un SE propose une bibliothèque de fonctions et procédures standardisées utilisables par les programmes * on parle d'**API** : Application Programming Interface * **API POSIX** : systèmes Unix * **API Windows** pour les systèmes Microsoft * exemple : * **fork** permet de créer un nouveau processus (env. Posix) * **fopen** ouvre un fichier (env. Posix) ===== Le processeur ===== * il est chargé de l'exécutution des programmes * dans un environnement multi-tâches, il doit être considéré comme une ressource à partager entre les différentes **tâches** ou **processus** ===== Les processus ===== * un processus est un **programme en exécution** : il comporte * un espace mémoire qu'il est le seul à utiliser : * les instructions * les données en mémoire * un processus est lancé par un utilisateur avec des droits spécifiques * un processus est identifié par un **PID** (Process Identifier) * le système gère une table des processus du système * on peut les examiner avec les commandes * **ps**, **top**, **pstree** (Linux) * **Gestionnaire de tâches** (Windows) * ou les interrompre (**kill**) si l'on dispose des droits ad-hoc. ===== Les processus - Linux ===== {{:top.png|}} ===== Ordonanceur ===== * **scheduler** : c'est le programme du système d'exploitation qui contrôle le déroulement des autres programmes dans un SE multi-tâche * il répartit le temps processeur entre les différents processus en exécution : il alloue des tranches (**slices**) de temps CPU (de l'ordre de 100 ms) à chacun des processus puis passe au processus suivant ===== Mode noyau/Mode user ===== * le noyau (**kernel**) partie fondamentale du SE qui gère les ressources (processeur, mémoire, systèmes de fichier, réseau, périphérique divers, ...) * partie critique du SE * le noyau fonctionne en mode **noyau** : * il dispose de l'accès intégral aux ressources et de priorités élevées * les autres programmes non fondamentaux (Firefox, LibreOffice, ...) comme ceux lancés par l'utilisateur fonctionnent en mode **user** * ils disposent de droits et de priorités limités pour ne pas mettre en péril l'intégrité du système ===== La mémoire ===== * le système doit : * **allouer un espace mémoire** pour la mettre à disposition d'un programme * **libérer l'espace mémoire** à la fin du programme * **assurer la protection** et limiter l'accès à une zone mémoire ===== La mémoire virtuelle ===== * ce mécanisme permet au SE d'exécuter des programmes dont la taille peut dépasser celle de la mémoire physique * il libère de l'espace en stockant sur disque des blocs mémoire occupés (mécanisme de **swap**) : :!: ce mécanisme est très lent * ce stockage peut se faire dans un fichier d'échange (Windows : pagefile.sys) ou dans une partition spécifique (Linux). * ce dispositif permet de fonctionner avec très peu de mémoire mais au prix de performances très faibles : * un système en production devrait disposer de suffisamment de mémoire pour **ne pas swapper** ===== Les pilotes ===== * le SE pour fonctionner doit utiliser des logiciels permettant de gérer chacun des périphériques * ces logiciels sont appelés des **pilotes** ou **drivers** * ils sont spécifiques : * au matériel lui même ( Carte réseau Ethernet Intel Pro 1000 ) * au système d'exploitation et à sa version (Windows Seven 64 bits) * ils sont * soit livrés avec le SE, * soit avec le matériel lui-même * ou encore intégrés au SE (Linux) ===== Les disques ===== * les dispositifs de stockage à long terme ===== Les disques logiques ===== * un disque physique est fréquemment scindé en plusieurs disques logiques pour * organiser plus efficacement l'espace disque * améliorer la séparation entre différents espaces de stockage (système, applicatifs, espace utilisateur, ...) * améliorer la sécurité * permettre éventuellement l'installation de plusieurs SE (Windows, Linux, ...) * simplifier les sauvegardes et les réinstallations * on effectue un **partitionnement** du disque dur en **plusieurs disques logiques** ===== Les types de partition ===== * partition **primaire** * peut démarrer * 4 maxi sur un disque * partition **étendue** * nécessaire si on veut plus de 4 partitions * une seule partition étendue par disque * une partition étendue peut comporter 4 lecteurs logiques maxi ===== LVM et disques dynamiques ===== * les partitions décrites plus haut sont compatibles avec la totalité des environnements * mais * leur nombre est limité pour Windows (7 maxi) * on ne peut pas changer leur taille sauf à utiliser un outil spécifique (PartitionMagic, ou un LiveCD avec Gparted) => intervention à froid * on dispose maintenant de solutions permettant de * créer, retailler (agrandir, rétrécir) les partitions à chaud * ces outils s'appelent * **LVM** : **Logical Volume Manager** pour Unix/Linux * **disques dynamiques** pour Wndows * ils mettent en oeuvre les concepts de **volumes logiques**, **volumes physiques**, **volume group** ===== Les disques logiques - Linux ===== pb:/home/lee# fdisk -l Disk /dev/sda: 40.0 GB, 40007761920 bytes 255 heads, 63 sectors/track, 4864 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xe02ae02a Device Boot Start End Blocks Id System /dev/sda1 * 1 1930 15502693+ 7 HPFS/NTFS /dev/sda2 1932 4864 23559322+ f W95 Ext'd (LBA) /dev/sda5 1932 2660 5855629+ 83 Linux /dev/sda6 2661 2757 779121 82 Linux swap / Solaris /dev/sda7 2758 4864 16924446 83 Linux ===== Les disques logiques - Linux - gparted ===== {{:gparted.png|}} ===== Les unités logiques ===== * sous **Windows**, les unités ou disques logiques sont repérés par des lettres : **A:**, **B:**, **C:**, **D:**, **E:** ... **Z:** * sous **Linux**, les unités logiques (**sda2**, **sd3**, ...) sont raccordées à la **racine** (**root**) au moyen d'une opération de **montage** ===== Les systèmes de fichiers ===== * **file system** : il permet de stocker les fichiers dans des structures en forme d'arbre * le SE comporte un certain nombre d'utilitaires permettant d'effectuer les opérations de base : * lister : **ls** (Linux), **dir** (DOS) * copier : **cp** (Linux), **copy** (DOS) * renommer : **mv** (Linux), **ren** (DOS) * supprimer : **rm** (Linux), **del** (DOS) * créer/supprimer un répertoire : **mkdir**, **rmdir** * formatter : **mkfs** (Linux), **format** (DOS) * ... ===== Les systèmes de fichiers - suite ===== * chaque SE propose ses propres systèmes de fichiers * **Windows** * **FAT16**, **FAT32**, **EXFAT** * **NTFS** * **Linux** * **ext4** * **xfs** * **btrfs** * **MacOS** * **HFS** ===== Les systèmes de fichiers - FAT ===== * **FAT** : File Allocation Table * **FAT16** : taille maxi 2 Gio * **FAT32** : * pas de sécurité locale (pas de permissions) * taille maxi fichier : 4 Gio - partition : 8 TiO * très utilisé sur les clés USB et cartes mémoire * résistance moyenne aux pannes => **scandisk** au démarrage ===== Les systèmes de fichiers - NTFS ===== * **NT File System** * système de journalisation permettant une "réparation automatique" au démarrage : raisonnablement robuste * sécurité locale * compression éventelle * support des **quotas** * le **standard** pour les systèmes de fichiers windows * taille maxi fichier : 16 Tio - partition : 256 Tio * chiffrement possible ===== Les systèmes de fichiers - ext4 - xfs ===== * **ext4** * système de journalisation * sécurité locale * support des **quotas** * robuste * le **standard** actuel pour les systèmes de fichiers Linux * taille maxi 16 TiO * **xfs** * développé par Silicon Graphics * très robuste * bonnes perormances * choisi par Redhat comme SF de base ===== Les utilisateurs et l'authentification ===== * l'accès au système doit être réglementé pour ne pas mettre en péril son intégrité et sa sécurité * => nécessité d'utiliser un mécanisme d'**authentification** et des **comptes utilisateurs** * un utilisateur est caractérisé par divers attributs (selon le SE - ici Linux) : * **login** : adupont * **nom complet** : Albert Dupont * son **home directory** : /home/adupont * son **mot de passe** (stocké sous forme chiffrée) : $1$ni0H4A2x$hQxRycgLCYE13QjAid11K0 * son **shell** (Linux) : /bin/bash * son appartenance à différents **groupes** : users, ... * ... * fichier **/etc/passwd** : adupont:x:1000:1000:Albert Dupont,,,:/home/adupont:/bin/bash ===== Les groupes ===== * la gestion d'un système requiert un minimum de structuration * on répartit les utilisateurs en groupes * on affecte les droits et permissions à chacun des groupes plutôt qu'aux utilisateurs * sous Windows, le groupe **Administrateurs** dispose de l'ensemble des droits d'administration * on dispose de groupes équivalents sous Linux (root, admin, ...) ===== Administrateurs et super-utilisateurs ===== * chaque SE dispose d'utilisateurs bénéficiant de **droits d'administration étendus** * sous Linux : l'utilisateur **root** encore appelé **superutilisateur** (cf. commande **su**) * sous Windows : l'utilisateur **administrateur** ou les membres du groupe **administrateurs** * l'administrateur a le droit de tout faire (surtout sous Linux: //Linux vous donne la longueur de corde qu'il vous faut pour vous pendre. Et pour être sûr, on rajoute un mètre !// ===== L'authentification ===== * l'**authentification** consiste à vérifier l'identité d'une personne ou d'un ordinateur au moyen de divers procédés : mot de passe, paire de clés, ... * elle peut être **locale** : quand elle est effectuée avec une base de comptes **locale** (**SAM** locale pour Windows, fichier **/etc/password** pour Linux, ...) * ou **centralisée** et distante au moyen d'un serveur d'annuaire (**Active Directory** pour Windows, **LDAP** pour Linux, ...) * les comptes utilisateur décrits plus haut peuvent être des comptes * **locaux** : situés sur la machine à laquelle on se connecte * **globaux** : situé sur un machine distante (Contrôleur de domaine Microsoft, serveur d'annuaire ,...) ===== Interface utilisateur ===== * ligne de commande : **CLI** (command Line Interface) * interface **graphique** avec la souris ===== Interface utilisateur : CLI ===== * * historiquement mode texte (25 lignes x 80 colonnes) en "**ligne de commande**" * efficace mais austère et peu conviviale : peu adaptée au grand public et domaine d'utilisation un peu restreint * utilise un **interpréteur de commande** * **sh**, **bash**, ... en Linux * **command**, **cmd** pour Windows {{:diu-eil:linux-cli.png?|}} ===== Interface utilisateur : graphique avec souris ===== * depuis les année 80, **interface graphique** avec la souris * Mac d'Apple * X-Window pour les machines Unix (Gnome, Kde, xfce, Lxde, ...) * Windows (depuis) Windows 1.0 ===== Les familles des SE ===== * à l'origine, les SE sont des SE pour les gros systèmes * dans les années 80, apparaissent la micro-informatique et des SE simples :(MS/DOS, CPM, ...) dans un environnement en mode texte * au milieu des années 80, apparaissent les interfaces graphiques sur Mac et sur PC avec Windows * c'est aussi l'apparition de la famille Unix, orientée multi-utilisateur et gestion puis un mode graphique apparaît avec X-Window, * enfin cette famille donnera naissance à Linux et à Mac/OS ===== Les SE et le terminaux portables ===== * la forte montée en puissance des terminaux mobile conduit à développer des SE spécifiques comme : * Android * IOS (Apple). * Ils sont souvent basés sur Linux (Android) et disposent de bibliothèques spécifiques pour gérer les écrans tactiles, les circuits liés à la téléphonie. ===== Systèmes d'exploitation propriétaires / libres ===== * Logiciel libres / Logiciel Open Source : logiciel dont les sources sont publiques * Richard Stallman, fondateur de la **Free Software Fundation** (FSF) est à l'origine de la GPL pour protéger ses développements (compilateur C gcc et editeur Emacs) ===== La GPL ===== **General Public Licence (Licence Publique Générale)**. Elle garantit : * la liberté d'exécuter le logiciel, pour n'importe quel usage * la liberté d'étudier le fonctionnement d'un programme et de l'adapter à ses besoins, ce qui passe par l'accès aux codes sources ; la liberté de redistribuer des copies ; * la liberté d'améliorer le programme et de rendre publiques les modifications afin que l'ensemble de la communauté en bénéficie. La GPL a un **caractère viral** : un logiciel développé à partir de logiciel en GPL est également en GPL ===== Les logiciels libres ===== * écosystème très riche * quelques fleurons : noyau Linux, Apache, mysql/mariadb, php, de très nombreuses briques d'infrastructure de l'internet ===== La famille Microsoft ===== * famille **poste de travail** * MS-DOS : année 80 - système 16 bits - mode texte * Windows 1 2, 3.1 : 16 bits - interface graphique * Windows 95 : système 32 bit -"vrai multitâche" * Windows 2000, XP * Windows Vista, Seven, 8, 8.1, 10 ===== La famille Microsoft - suite ===== * famille **serveur** * Windows NT server 3.5, 4.0 (1996) * Windows 2000 Server * Windows 2003, 2008 Server, 2012, 2016 ===== La famille Unix/Linux ===== * **Linux** depuis 1991 (distributions Debian, Ubuntu, Redhat, Centos, Suse, ...) * famille **BSD** - * **NetBSD** * **OpenBSD** * **FreeBSD**, * **Mac/OS** * **AIX** (IBM) * **Solaris** (Sun) * **HP/UX** (HP) ===== Linux ===== * depuis 1991 Linus Torvalds * derniere version : 5.13 - ~ 25 M de lignes de code * env. un millier de développeurs * licence GPL * 64 bits ou 32 bits * sur les box internet, les GPS, le téléphones portables, les PC jusqu'au mainframe ===== Les distributions Linux ===== * Une distribution est un ensemble logiciel (à l'origine sur CD/DVD) permettant d'installer Linux. * Elle est élaborée par un éditeur ou une association/projet * peut être gratuite ou payante * Les distributions sont très nombreuses mais celles couramment utilisées sont en petit nombre. * 2 grandes familles : * **Redhat/Fedora/Centos** * **Debian/Ubuntu** ===== Redhat ===== * Le leader historique en matière de distribution Linux : c'est la référence * emploie de nombreux développeurs du noyau * à l'origine de nombreuses avancées technologiques (paquetages **RPM**, ...) * bonne santé financière * l'offre : * **RedHat** Entreprise Linux(commercial) * **Fedora Core** : distrib. communautaire * **Centos** : base RHEL recompilée : gratuite sans support ... ===== Debian ===== * distribution communautaire * communauté active * stable, sûre et efficace * plus de 20 000 paquet .deb * dernière version : **10** (**Stretch**) * **11** **Bullseye** (sortie courant juin 2021) ===== Ubuntu ===== * distribution commerciale basée sur la version **testing** (n+1) de Debian * plus grand public * support commercial * des choix techniques parfois incertains * 2 versions/an + LTS (Long Term Support tous les 2 ans) **20.04 Focal Fossa** * dernière version : **21.04** (Hirsute Hippo) ===== Installation ===== * s'assurer de disposer des ressources nécessaires * **espace disque** * **mémoire** (~ 1Go en mode texte, minimum 2 Go en mode graphique) * **processeur** * **carte réseau** * **carte graphique** * et du support d'installation : CD/DVD, clé USB, ... ===== Installation - 2 ===== * machine * **physique** * **virtuelle** * péripérique d'installation * **CD/DVD** (ou image **ISO** si machine virtuelle) * **clé USB** * **réseau** (PXE) * schéma de partitionnement * **monopartition** (le plus simple) * **multipartition** : plus élaboré - adapté à un serveur mais nécessite de faire un plan de partitionnement ===== Démarrage ===== * **MBR** : Master Boot Record * ou **zone amorce** : premier secteur d'un disque dur - 512 octets * cylindre 0, tête 0 et secteur 1, ou secteur 0 en adressage logique) * contient la table des partitions (4 primaires) * comporte aussi un code d'amorçage permettant de charger le SE (ou le boot loader/chargeur d'amorçage s'il existe) présent sur la partition active. ===== Chargeur d'amorçage ===== * **bootloader**: **chargeur d'amorçage** : il permet de choisir le SE à lancer * le **BIOS** lit le **MBR** puis le **VBR** de la partition active * à partir de ces informations, il peut déterminer l'emplacement du chargeur d'amorçage et le lancer * exemples de chargeurs d'amorçage : * **GRUB**, **GRUB2** * **LILO** * **ntldr** (Windows NT et XP) * **winload.exe** (Vista et suivants) * Remarque : :!: les bootloaders Windows ne tiennent pas compte des partitions Linux existantes * à la fin d'une installation Linux, si on n'installe pas GRUB, on n'est pas capable de redémarrer ...