~~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 ...