Architecture matérielle et systèmes d’exploitation

Les élèves doivent savoir
  • Distinguer les rôles et les caractéristiques des différents constituants d’une machine.
  • Dérouler l’exécution d’une séquence d’instructions simples du type langage machine.
  • Mettre en évidence l’intérêt du découpage des données en paquets et de leur encapsulation.
  • Dérouler le fonctionnement d’un protocole simple de récupération de perte de paquets (bit alterné).
  • Simuler ou mettre en œuvre un réseau.
  • Identifier les fonctions d’un système d’exploitation.
  • Utiliser les commandes de base en ligne de commande.
  • Gérer les droits et permissions d’accès aux fichiers.
  • Identifier le rôle des capteurs et actionneurs.
  • Réaliser par programmation une IHM répondant à un cahier des charges donné.

27.    Modèle d’architecture séquentielle

Constituants d’une machine

Dans l’histoire de l’informatique, vue en début d’année, nous avions vu que les premiers ordinateurs, au sens moderne, possédant une mémoire et capable de faire des traitements variés, étaient apparus dans la première moitié du XXe siècle. En 1945, le mathématicien américano-hongrois John Von Neumann, utilisant les recherches d’Alan Turing, décrit le modèle d’un calculateur à programme possédant une mémoire. Ce modèle est encore utilisé aujourd’hui et est connu sous le nom d’Architecture Von Neumann :

Dans ce modèle d’architecture, les composants principaux suivants font fonctionner la machine :

  • Le CPU (Central Processing Unit) ou Processeur qui possède deux parties :
    • UAL : unité arithmétique et logique qui effectue les opérations de base (addition, soustraction, multiplication…)
    • CU (control unit) Unité de contrôle : elle commande le fonctionnement du système en séquençant les commandes et en choisissant le chemin que doivent prendre les données.
    • Le processeur possède également une petite mémoire temporaire appelée registre. (on parle aussi parfois d’accumulateurs pour les calculs intermédiaires).
  • La mémoire qui contient les données et les programmes :
    • RAM (Random Access Memory) : mémoire qui contient les programmes et données en cours de traitement. Chaque cellule mémoire est accessible par son adresse.
    • Le stockage de masse (Mass Storage) : espace de stockage permanent des programmes et donné (disques SSD ou HDD, supports USB…)
  • Les dispositifs d’entrée et sortie (E/S ou I/O) permettant de communiquer avec l’environnement et les utilisateurs (écrans, clavier, imprimante, réseau…)
  • Les bus : fils qui relient les différents composants de l’ordinateur.

On retrouve les connecteurs pour ces éléments dans le cœur d’un ordinateur moderne : la carte mère.

Remarque : les cartes mères possèdent une mémoire intégrée (stockée dans une EPROM : Erasable Programmable Read-Only Memory) permettant d’exécuter le BIOS (basic input/output system) qui fera la liaison entre les éléments physiques de base (processeur, mémoire, stockages de masse…) et le système d’exploitation installé par l’utilisateur (MacOS, Linux, Windows…).
Dans les ordinateurs récents, le BIOS est remplacé par un UEFI (Unified Extensible Firmware Interface) qui conserve ses données sur une partition spéciale de la mémoire de masse plutôt que dans une EPROM. Cela permet aussi de charger davantage de données et de proposer plus de services : interface graphique, outils de dépannages…

Exécution d’instructions simples en langage machine

Le CPU exécute les instructions de manière séquentielle, aidé en cela par une horloge qui définit le passage au traitement suivant. Le cycle de fonctionnement normal des instructions est le suivant :

  • Chargement de l’instruction à exécuter
  • Décodage de l’instruction
  • Incrémentation du compteur ordinal (équivalent au déplacement de la tête de lecture dans une machine de Turing)
  • Recherche des données nécessaires en mémoire avec leur adresse
  • Chargement des données nécessaires
  • Exécution de l’instruction (calcul, écriture…)
  • Reprise au début

Chaque instruction ou donnée à une longueur d’un certain nombre de bits appelé « mot machine » dont la longueur correspond à la largeur du bus de données. En 2021, la plupart des ordinateurs fonctionnent avec des bus de 64 bits, soit 8 octets.

Les mots représentants des données sont codés de la façon que nous avons vu dans le chapitre sur les types simples. Étant donné que ce ne sont que des successions de 0 et de 1, il faut concevoir son programme pour qu’il n’y ait pas de confusion entre un entier et un caractère ASCII, par exemple.

Les mots d’instruction dépendent du type de processeur et sont constitués de deux parties : un code d’opération et une adresse pour retrouver les données. Plus le nombre bit réservé à l’adresse est grand, plus la taille de la mémoire adressable est grande (plus on peut mettre de mémoire vive dans l’ordinateur).

Dans l’exemple fictif ci-dessus, 4 bits sont réservés au code de l’opération à effectuer et 16 bits à l’adressage mémoire (donc 65536 octets adressables).

Pour les ordinateurs actuels, le jeu d’instruction-machine de base est situé entre 100 et 300 opérations de base. Plus il y a d’instruction, moins on peut adresser de mémoire, il faut donc trouver un compromis. Chaque opération de base possède un code mnémonique de deux ou trois lettres indiquant ce que fait l’opération. Pour la machine ces codes mnémoniques correspondent à un code binaire que l’on exprime souvent sous forme hexadécimale (pour plus de lisibilité).

Exemple de codes mnémoniques :

Code mnémoniqueBinaire/HexadecimalDescription
NOP00000000/00Ne rien faire et passer à l’instruction suivante
LDA01011011/5BCharger l’accumulateur avec la donnée située à l’adresse indiquée
ADD01101101/6DLa donnée dont l’adresse est fournie est additionnée avec celle située dans l’accumulateur et le résultat est stocké dans l’accumulateur
SUB10100010/A2Soustraction
STA10001010/8AEnregistre la valeur de l’accumulateur dans un adresse mémoire
JMP01001100/4CBranchement : recherche l’instruction suivante à l’adresse indiquée
JPZ01110110/76Branchement si zéro : si le contenu de l’accumulateur est zéro, exécute l’instruction située dans l’adresse mémoire. Sinon exécute l’instruction de la case mémoire suivante.
HLT00111111/3FArrêt du traitement : fin du programme

L’accumulateur est une petite mémoire utilisée pour le traitement au cours du CPU.

Voici un exemple de programme en langage machine (simplifié) :

Adresse mémoire (hex)Code OpérationMnémoniqueDescription
00005BLDA$0300Charge la donnée située dans la case mémoire 0300 : 10 dans l’accumulateur
000100  
000203  
0003A2SUB$0301Soustrait la donnée 5 de l’accumulateur
000401  
000503  
0006JPZ$0400Si le contenu de l’accumulateur vaut zéro, cherche la suite du programme à l’adresse 0400
000702  
000803  
000976HLTSi le résultat de la soustraction précédente n’est pas nul, le programme s’arrête ici.
000A00  
000B04  
000C   
   
030010  
03015  
0302B  

Instruction séquentielle et pipeline d’instruction

Dans un processeur, un cycle d’instruction correspond à l’une des opérations suivantes :

  • LI : lire une instruction
  • DI : décoder une instruction
  • EX : exécuter une instruction dans l’UAL
  • M : accéder à la mémoire en lecture ou écriture
  • ER : écrire le résultat dans les registres (mémoire interne du CPU)

Ces instructions peuvent être exécutées l’une après l’autre de manière séquentielle :

Pour gagner du temps et accélérer les traitements, les CPU modernes peuvent exécuter simultanément plusieurs instructions à des étapes différentes : c’est le fonctionnement par pipeline d’instruction. Cela fonctionne tant qu’une instruction n’a pas besoin du résultat d’une autre instruction :

On voit ici qu’en 9 cycles on a pu exécuter 5 séries d’instructions, alors que dans l’exemple précédent il a fallu 15 cycles pour en exécuter 3.

En plus du processus de pipeline, la plupart des CPU récents possèdent plusieurs cœurs capables d’effectuer des calculs en parallèle pour accélérer les traitements. Là encore il ne faut pas qu’un processeur soit obligé d’attendre les résultats des calculs d’un autre pour ne pas ralentir les opérations.

circuits combinatoires

Nous avons déjà vu les opérations booléennes dans le chapitre sur les types simples. Au niveau électronique, ces opérations booléennes peuvent être réalisées avec des portes logiques pour créer des circuits combinatoires permettant de réaliser les opérations de bases en informatique. Ces portes sont représentées par les symboles suivants :

Le principe du circuit combinatoire est de combiner ces portes logiques pour réaliser diverses opérations.

Par exemple, pour réaliser une addition binaire il faut d’abord résoudre la table de vérité suivante :

abS (bit de somme)C (bit de retenue)
0000
0110
1010
1101

On voit que la somme peut être obtenue par une porte XOR (voir chapitre sur les types simples) alors que la retenue est obtenue par une porte AND. On appelle cela un « demi-additionneur » qui sera modélisé avec des portes logiques de la façon suivante :

Pour utiliser la retenue dans l’addition, il nous faudra un résultat sur deux bit afin de gérer la retenue. Cela donne la table de vérité suivante :

Pour réaliser cet additionneur complet, on va combiner deux demi-additionneurs : a+b et (a+b)+retenue (Cin « carry in »). La valeur du second bit (retenue sortante Cout « carry out ») sera obtenue par une porte OU entre les retenues des deux demi-additionneurs :

Pour la réalisation de cet additionneur, nous avons donc vu la méthode de réalisation d’un circuit combinatoire :

  • Conceptualiser l’opération à effectuer et les différentes conditions booléennes à prendre en compte
  • Écrire la table de vérité des opérations. Nous verrons l’an prochain comment simplifier cette table afin d’effectuer le moins d’opérations possibles et ainsi d’utiliser le moins de portes possibles
  • Choisir les bonnes portes et réaliser le schéma du circuit combinatoire.

28.    Réseau

Découpage en paquets

Internet c’est la mise en réseau des ordinateurs de par le monde. La première mise en réseau de radars connectés à des ordinateurs date de 1952. On se rend vite compte qu’il faut mettre au point des méthodes de communications fiables : les protocoles de communication.

En 1971, les services de recherches de l’armée américaine, la DARPA, poussent au développement d’ARPANET pour relier les différents centres de recherches, aux États-Unis d’abord, puis progressivement à l’Angleterre et la Norvège. En 1973 est mis au point le protocole de communication TCP/IP, encore utilisé aujourd’hui.

Le réseau s’ouvre progressivement à l’ensemble des universités de la planète et au grand public à partir de 1979, aux États-Unis avec le premier grand fournisseur d’accès au réseau : CompuServe. Rapidement des serveurs se mettent en place à mesure que le nombre d’utilisateurs augmente. De nouveaux services sont créés pour utiliser ce réseau : courrier électronique, forums de discussion, partage de fichiers.

Au début des années 1990, le chercheur du CERN, Tim Berners-Lee, invente les liens hypertextes, qui permettent de relier des documents entre eux par des mots clefs, et parle du World Wide Web (www). Il participe à la mise au point du premier navigateur web : NCSA Mosaic.

Le nombre d’ordinateurs connectés à Internet explose alors, passant de 1 million en 1992, à 36 millions en 1996 et 368 millions en 2000. Actuellement ce sont plusieurs milliards de terminaux qui se connectent à Internet.

Relier les ordinateurs les uns aux autres a pour but de leur permettre de partager des données entre eux. Si deux ordinateurs seulement sont en réseau, tout message/fichier… envoyé, se destine forcément à l’autre. Mais dès qu’il y a plusieurs ordinateurs sur le réseau, de nouveaux problèmes se posent :

  • À qui est destiné le message ?
  • Comment identifier l’émetteur et le destinataire ?
  • Comment savoir quel chemin prendre pour rejoindre le destinataire ?
  • Si l’information est longue, comment la découper pour qu’elle passe sans saturer le réseau ?
  • Les paquets ainsi formés vont-ils arriver dans le bon ordre ? Sinon que faire ?
  • Que faire si des paquets se perdent en route ?
  • Comment concilier des réseaux qui fonctionnent à des vitesses différentes ?

Toutes ces questions dépendent également du type d’informations que l’on souhaite transmettre : texte, image, vidéo, flux de communication vidéo/voix…

TCP/IP est une famille de protocoles destinée à répondre à ces questions, tout en étant indépendante du support de communication. Ainsi les informations transitant d’une machine à l’autre, dans la même pièce ou à l’autre bout du monde, vont-elles être constituées d’un empilement de protocoles qui vont permettre leur cheminement.

Toute information qui transite sur Internet va devoir suivre différents protocoles qui s’empilent et permettent à l’information de circuler jusqu’au point d’arrivée prévu : c’est le modèle OSI.

Nous avons déjà vu, en SNT en seconde, le modèle de communication sur Internet (TCP/IP), qui se découpe en 4 étapes :

  1. Le protocole physique permet d’accéder à Internet en utilisant le réseau « local » physique auquel est connecté le terminal : 4G/5G, Bluetooth, wifi, Ethernet…
    Chaque machine va posséder une adresse (MAC) physique qui permet de l’identifier sur le réseau.
  2. L’émetteur et le destinataire sont ensuite identifiés sur Internet par une adresse IP – Internet Protocol – (ex : 216.58.206.228 en IPv4) qui va permettre d’envoyer les paquets au bon endroit.
  3. Le protocole TCP – Transmission Control Protocol – découpe les informations en petits paquets et s’occuper de numéroter les paquets et de vérifier qu’ils arrivent tous à destination. Si des paquets se perdent, il s’occupe de demander le renvoi des paquets manquants.
  4. Le protocole lié aux données formate les données correspondantes pour qu’elles soient utilisables par le destinataire.

Cette superposition de protocoles permet une grande souplesse d’utilisation et rends Internet indépendant des moyens physiques pour y accéder, ouvrant ainsi l’accès à Internet à de nombreux appareils, en particulier des appareils autonomes comme des appareils ménagers, des feux de signalisation ou des véhicules, ouvrant la voie à l’internet des objets (IoT : Internet of Things).

Protocole réseau

Le modèle OSI est utilisé dans le fonctionnement de TCP/IP et découpe plus finement les couches réseau encapsulées en 7 étapes qui peuvent être appliquées à tous les réseaux (et simplifié en 4 étapes pour le TCP/IP) :

Chaque couche correspond à une tâche précise, de la plus simple à la plus complexe. Les couches sont encapsulées, comme des enveloppes mises les unes dans les autres.

Par exemple, une communication web se ferait avec quatre enveloppes les unes dans les autres :

  • Enveloppe Ethernet contenant l’adresse de la machine (adresse MAC)
    • Enveloppe IP contenant l’adresse du destinataire (adresse IP)
      • Enveloppe TCP pour découper le message (Port et protocole)
        • Message HTTP (page web)

Le découpage en paquets permet de se prémunir contre des problèmes de connexions : chaque paquet peut prendre un chemin différent et, les paquets étant numérotés, on peut redemander un paquet en cas de perte.

A chaque couche OSI correspondent des fonctionnalités qui vont déterminer le type de message et de commande que contient ce niveau :

  • 7.Application (http, ftp, smtp) : service réseau utilisant les données. Cette couche est associée à des commandes spécifiques à chaque protocole.
  • 6.Présentation : formatage des données pour être comprises par le système destinataire en fonction du système d’exploitation et de la structure des données transportées.
  • 5.Session : établissement et gestion des sessions entre applications. Maintiens la connexion si nécessaire, vérifie que les messages sont bien transmis et arrivés…
  • 4.Transport : protocole chargé du transport des paquets. Principalement UDP (User Datagram Protocole) et TCP. Pour l’UDP il n’y a pas de contrôle de la réception, on s’en sert pour une requête DNS ou une récupération de courrier POP.
  • 3.Réseau : Chemin choisi pour aller de la source vers le destinataire. C’est ici que se fait le routage.
  • 2.Liaison de données : Moyen choisi pour transférer un message d’une machine à une autre sur une liaison partagée. C’est ici que se fait l’adressage physique et le contrôle de flux (Ethernet par exemple)
  • 1.Physique : Caractéristiques techniques des éléments de réseau pour fonctionner ensemble (câblage, débits, tensions…)

Concrètement, cette encapsulation se traduit par une trame réseau binaire qui contient toutes les informations des différentes couches.

Voici un exemple de trame réseau pour une requête DNS sur le serveur SMPT de l’académie de Strasbourg :

Architecture réseau

Un réseau local sera constitué de plusieurs éléments servant à faire la connexion avec Internet, mais également à partager des données entre les machines : fichiers, base de données, authentification des comptes…

Voici un exemple des éléments que l’on peut retrouver dans un réseau local d’un établissement scolaire ou d’une petite entreprise. Certains éléments de ce réseau peuvent être regroupés au sein d’une même machine, comme le firewall qui peut être intégré au routeur, ou la borne Wifi qui peut également être intégrée au routeur :

Voici le rôle de ces éléments :

  • Firewall

Cet élément se trouve directement entre Internet et les éléments du réseau interne. Il filtre les paquets qui entrent ou qui sortent en fonction de règles établies par l’administrateur du réseau. Cela permet d’interdire l’utilisation de certains services (peer to peer par exemple) et aussi de protéger les machines du réseau contre des attaques ciblant une adresse IP et un port précis.

Il est possible d’ouvrir un port d’accès complet pour une machine du réseau (généralement un serveur web) en déclarant alors une DMZ vers cette machine (DeMilitarized Zone). Cette DMZ peut aussi servir de leurre en cas d’attaque (on parle alors de « Honeypot »).

  • Routeur

Le routeur gère tous les paquets qui entrent et sortent du réseau. Il permet de faire une translation d’adresse entre les adresses IP internes du réseau et l’adresse IP unique de l’ensemble du réseau sur Internet.

A chaque fois qu’un client demande une ressource sur Internet, le routeur relaie la demande et prend note de l’adresse de la machine qui a demandé le paquet afin de lui transmettre lorsqu’il le reçoit.

Le routeur gère parfois aussi l’authentification, vérifiant alors si la machine est bien autorisée à effectuer une requête, puis si l’utilisateur actuel de la machine possède également les droits pour cette requête.

Enfin il est possible, si le routeur possède un espace de stockage, d’utiliser le routeur pour mettre en cache certaines données qui transitent entre Internet et le réseau local. C’est particulièrement utile pour réduire la demande de bande passante sur Internet lors des mises à jour des systèmes d’exploitation.

  • Commutateur

Les commutateurs permettent de connecter physiquement les machines du réseau entre elles. Pour une fiabilité des connexions et un bon débit, les commutateurs sont filaires dans les entreprises. Les technologies de connexion dépendent de la distance : Ethernet pour moins de 100m et fibre optique au-delà.

Les commutateurs, aussi appelés « switch », permettent généralement des connexions à des débits de 1 ou de 10 Gbs pour les réseaux domestiques et scolaires (en 2021) et 100 Gbs en entreprise.

  • NAS

Lorsque des fichiers sont utilisés par plusieurs personnes, il est intéressant de centraliser leur stockage sur des NAS (Network Attached Storage). Ce sont des serveurs spécialisés, comportant plusieurs disques et capables de gérer les droits d’accès aux informations au sein du réseau.

Pour assurer une intégrité des données, les NAS sont généralement configurés en mode RAID (Redundant Array of Independent Disks) de façon à ce qu’une information soit enregistrée simultanément sur plusieurs disques (RAID 1 ou RAID 5). Ainsi, en cas de défaillance d’un disque, les données ne sont pas perdues.

Il arrive toutefois que le NAS entier soit défaillant. Une entreprise sérieuse en mettra donc au moins deux en miroir, de préférences dans des lieux différents pour limiter les risques en cas d’incendie.

  • Serveur 

Le serveur du réseau local va gérer toutes les fonctions de partages de ressources. Il peut opérer comme serveur web local (Intranet), serveur d’authentification des machines du réseau (centralisant les informations de gestions de comptes), de serveur de base de données et de centralisation des logiciels métiers…

  • Borne Wifi

Pour permettre un accès sans fil au réseau, il faut une ou plusieurs bornes Wifi. Celles-ci ayant une portée et un nombre de connexions simultanées limitées, on en installe généralement plusieurs dans une entreprise ou un établissement scolaire.

  • Imprimante réseau

Une imprimante est rarement utilisée en permanence par une même personne. Il est donc intéressant de partager imprimante et scanner dans le réseau.  Certaines imprimantes personnelles peuvent être transformées en imprimante réseau par l’ajout d’une carte réseau ou d’une clef Wifi.

  • Postes clients

c’est ainsi que l’on désigne les machines qui se connectent au réseau pour accéder à ses ressources ou à Internet (ordinateur fixe ou portable, smartphone, tablette…)

29.    Systèmes d’exploitation

Histoire des systèmes d’exploitation

Un système d’exploitation est le logiciel de base d’un ordinateur. Son rôle est de faire la liaison entre les différents composants physiques du système : processeur, mémoires, entrées et sorties. Il rend ainsi ces composants accessibles aux programmeurs qui peuvent créer des programmes sans avoir à utiliser les codes spécifiques à chaque type de composant.

Un système d’exploitation doit donc contenir les instructions qui lui permettent de communiquer directement avec chaque partie de l’ordinateur, souvent par l’intermédiaire de programmes de bas niveau fournis par chaque fabricant et appelés « pilote ».

Un même matériel informatique peut ainsi fonctionner avec différents systèmes d’exploitation, à condition que des pilotes existent pour chacun de ses composants.

Dans la seconde moitié du XXe siècle, chaque fabricant d’ordinateurs développait son propre système d’exploitation. le premier d’entre eux pouvant fonctionner sur plusieurs machines de fabricants différents, grâce à des pilotes adaptés, ayant été UNIX, créé en 1969. En 1980, IBM demande à une petite startup californienne, Microsoft, de lui créer un système d’exploitation pour ses nouveaux Personal Computers basés sur les récents processeurs 8086 d’Intel. C’est la naissance de MS-DOS (interface textuelle) qui sera suivi de Windows, un système d’exploitation à interface graphique en 1985. Windows est devenu le système d’exploitation dominant dans le monde.

Parallèlement, de nombreux systèmes d’exploitation ont été créés spécifiquement par d’autres constructeurs, comme Commodore (Amiga), Atari ou Apple. Seul ce dernier existe encore avec son système nommé désormais macOS et basé sur Unix.

Linux a été créé en 1991 par Linus Torvald et est un système d’exploitation en licence libre basé sur Unix. La licence libre signifie que les codes sources sont ouverts à quiconque souhaite les modifier, les enrichir ou les adapter à de nouvelles machines. Cela a permis à ce système de devenir populaire et de servir de base, entre autres, à Android pour les téléphones mobiles, mais aussi aux compteurs électriques Linky !

Installation d’un système Linux

Linux peut être installé en parallèle d’un autre système (Windows ou macOS) et même sur une clef USB bootable (sur laquelle le système peut démarrer à la place du stockage interne).

Pour les besoins de ce cours, nous allons toutefois l’installer dans une « machine virtuelle » : un programme qui simule un ordinateur et permettra de faire fonctionner un système Linux dans sa propre fenêtre en même temps que Windows (ou macOS).

La machine virtuelle utilisée est Oracle VirtualBox (https://www.virtualbox.org/) qui a l’avantage d’être gratuit et simple d’utilisation.

Après avoir installé VirtualBox, il faut télécharger le fichier d’installation de Linux, que l’on nomme une « distribution ». Pour les besoins de ce cours, nous allons prendre la distribution Ubuntu Desktop (https://ubuntu.com/download/desktop ) qui est simple d’utilisation et possède beaucoup de pilotes (et sait donc gérer beaucoup de matériels différents).

Une fois la distribution téléchargée, il faut « monter » son image disque pour que VirtualBox puisse procéder à l’installation. De cette façon, Windows (ou macOS) va penser qu’un CD avec Ubuntu a été inséré dans un lecteur virtuel :

Dans l’explorateur de fichier, cliquez avec le bouton droit sur le fichier Ubuntu téléchargé et choisissez « monter ».

Vous lancerez alors VirtualBox et cliquez sur le gros bouton en forme de plus vert. Si vous entrez comme nom de système d’exploitation « Ubuntu », le reste se complétera tout seul (type Linux, version Ubuntu 64-bit) :

Dans un premier temps vous pouvez valider toutes les options par défaut, il sera toujours possible d’effectuer des modifications par la suite.

  • Note sur les partitions :

Si vous installez Linux sur ordinateur (en système principal ou avec un double boot), vous devrez séparer le disque (désigné par sdX pour un SSD ou hdX pour un disque dur magnétique) en « partitions ».

Par défaut, Linux a besoin d’au moins deux partitions :

  • La partition racine (root : « / ») qui est la base de l’arborescence de système et qui va contenir les fichiers système ainsi que les programmes et données. Un minimum de 8 Go est nécessaire et 15 Go sont recommandés.
  • La partition swap (espace d’échange) qui sert à stocker temporairement les données lors des traitements. Il est recommandé qu’elle fasse le double de taille que la mémoire vive du système.

Il est également possible de réserver une autre partition (ou un autre disque) pour le dossier personnel « /home ». On parle alors de point de montage (voir plus loin).

  • Installation d’Ubuntu

Maintenant que l’environnement virtuel est prêt, vous pouvez « démarrer » celui-ci et VirtualBox vous demandera alors de spécifier où se trouve l’image ISO d’installation d’Ubuntu. Choisissez le lecteur créé après le montage effectué précédemment :

Après quelques instants, l’interface d’Ubuntu va apparaître et vous pourrez choisir la langue puis cliquer sur « installer Ubuntu » et vous laisser guider par la suite des opérations (qui peut prendre plusieurs minutes, selon la vitesse de votre disque de stockage) :

Au cours de l’installation, vous devrez spécifier votre nom d’utilisateur et un mot de passe.

  • Ubuntu et le compte ROOT

Un système Linux classique comporte un compte administrateur (aussi appelé super utilisateur), nommé « ROOT », qui possède tous les droits sur le système.

Pour ne pas compromettre la sécurité, il est déconseillé d’utiliser ce compte au quotidien et il vaut mieux créer un compte utilisateur normal pour les tâches quotidiennes et n’utiliser le compte ROOT que pour des besoins spécifiques (installation de certains logiciels, formatages de disques…).

Pour faciliter la transition depuis Windows, Ubuntu a choisi de copier le système de Microsoft en ne proposant qu’un compte utilisateur qui possède des droits d’administrateur. Il n’y a donc pas de compte ROOT à proprement parler sous Ubuntu, mais le système demandera le mot de passe de l’utilisateur principal (créé lors de l’installation) pour les opérations sensibles.

Après avoir redémarré, vous allez arriver sur l’écran d’Ubuntu :

Fonctions de bases d’un système d’exploitation

Le système Linux est composé d’un « noyau » (kernel) chargé de gérer les interactions avec le matériel de la machine (écran, clavier…). À ce noyau on peut ajouter différents logiciels de façon modulaire. Une « distribution » est un pack de logiciels clé en main. Une distribution peut être généraliste (comme Ubuntu) ou plus spécialisée : pour un serveur, pour composer de la musique, pour les graphistes, les programmeurs…

Il existe des centaines de distributions Linux. Les plus connues viennent de trois grandes familles historiques : Debian (dont est dérivé Ubuntu), Suse et Redhat. Cette dernière est très utilisée dans le monde de l’entreprise et mêle logiciels libres et application commerciale avec un support utilisateur payant. Ubuntu (mot Bantu qui signifie « l’humanité aux autres ») est la distribution la plus conviviale, avec une interface proche de Windows ou macOS et elle est compatible avec les « packages » (logiciels) Debian.

Une des fonctions principales d’un système d’exploitation est de permettre un accès aux données stocké sur les mémoires de masse. Pour cela il faut « partitionner » les disques, c’est-à-dire en effectuer un découpage logique. Chaque disque physique est reconnu comme un ou plusieurs disques virtuels (les partitions).

Pour l’utilisateur, chaque partition est vue comme un disque indépendant contenant son propre système de fichier. Un système de fichier est la façon de stocker les informations sur la mémoire de masse. Windows utilise principalement le système de fichier NTFS, ainsi que FAT et FAT32 pour les anciens systèmes et les mémoires amovibles (clefs USB…). macOS utilise les systèmes AFPS et HSF/HSF+ pour les anciens systèmes.

Linux utilise les systèmes de fichiers ext3 et ext4. Tous ces systèmes de fichiers sont incompatibles entre eux et il faut parfois installer un pilote supplémentaire à un système pour lire les systèmes de fichier des autres systèmes d’exploitation.

Commandes Bash

Comme tout système d’exploitation moderne, Ubuntu propose un gestionnaire de fichiers permettant les opérations de bases : création, ouverture, copie, suppression… de fichiers.

Voici les principaux répertoires d’un système Linux après installation :

L’outil le plus puissant pour exécuter des commandes système sous Linux est le « shell ». C’est un interpréteur de lignes de commandes qui permet d’interagir avec les services (logiciels qui fonctionnent en arrière-plan pour le système) ainsi que le noyau du système.

Pour saisir des commandes Shell dans une interface graphique, on utilise un programme appelé « terminal » (il est également possible d’installer un Linux sans interface graphique qui donne alors un accès direct au Shell).

Sous Ubuntu, vous trouverez le terminal dans votre liste d’applications installées par défaut :

Une fois dans le terminal, on pourra saisir des commandes complexes appelées « bash ».

Voici un exemple de terminal dans lequel on a exécuté une commande de listing des fichiers :

Remarquez le « prompt » (vert) qui est toujours sous la forme « utilisateur@machine$ ». Ici, l’utilisateur est « jlr » et la machine se nomme « jlr-VirtualBox:/ ».

Le symbole dollar ($) sera remplacé par un symbole hachtag (#) si on passe en mode  ROOT.

C’est après ce prompt que vous pouvez saisir vos commandes.

Les commandes ont une syntaxe sous la forme :

Nom_commande [option] [paramètres]

Les indications entre crochets sont optionnelles.

Vous pouvez obtenir de l’aide sur une commande à tout moment en saisissant

« Nom_commande –help » ou « man Nom_commande »

Lors de la navigation dans les répertoires ou la copie de fichiers, deux types de caractères du chemin sont particulièrement importants :

  • « / » : indique le répertoire racine
  • « .. » : indique le répertoire parent

Notez également que les fichiers cachés du système ont leur nom qui commence par un point.

Voici les principales commandes utilisées pour la gestion de fichiers sous Linux :

  • « cd » : changement de répertoire (ex : « cd /home » pour revenir au répertoire utilisateur)
  • « ls » : liste le contenu d’un répertoire. Les options les plus utiles sont -l (affichage complet des informations) et -h (lisible par un humain)
    (ex : « ls -lh »)
  • « mkdir » : créer un répertoire
  • « rm » : effacer un fichier
  • « rmdir » : effacer un répertoire
  • « touch » : actualiser les dates d’un fichier ou créer un fichier vide
  • « cp source destination» : copier un fichier ou un répertoire
  • « mv » : déplacer un fichier ou un répertoire (efface l’original)
  • « pwd » : affiche le chemin absolu du répertoire courant

Il est également possible de chaîner plusieurs commandes avec un point-virgule entre les commandes : « cd /home ; ls »

Certaines commandes ne seront pas autorisées (par exemple pour un souci de droit ou de sécurité). On peut alors forcer l’exécution en précédant la commande par « sudo » (super user do). Le mot de passe ROOT sera alors demandé pour lancer la commande. Attention à ne pas supprimer des fichiers vitaux du système !

Enfin il est possible de préparer une série de commandes et de les conserver dans un fichier nommé « script bash » pour les lancer d’un coup. Il est alors possible d’y inclure des conditions pour ne lancer des commandes que si les précédentes ont été exécutées avec succès.

Gestion des droits et permissions

Dans un système Unix (Linux, macOS, mais aussi Windows), un utilisateur est associé à un identifiant utilisateur (UID) et au moins un identifiant de groupe (GID). Ces deux identifiants permettent de contrôler les droits de l’utilisateur.

Chaque utilisateur possède donc :

  • login : son nom de connexion
  • mot de passe
  • UID
  • GID de son groupe principal
  • Répertoire de connexion (home)

Un utilisateur peut faire partie de plusieurs groupes, mais il n’aura qu’un seul groupe principal. C’est ce groupe principal qui sera appliqué lors de la création d’un fichier.

La commande « groups » permet de savoir à quels groupes appartient l’utilisateur.

Si on regarde les informations des fichiers dans l’écran ci-dessus, on constate qu’ils ont tous l’information de leur nom d’utilisateur (« jlr » ici) suivi de leur groupe (« jlr ». Ici les noms d’utilisateurs et de groupes sont identiques, mais ce n’est pas toujours le cas). Ces informations déterminent qui est « propriétaire » de ce fichier.

La commande « adduser » permet de créer un nouvel utilisateur et « deluser » permet de supprimer un utilisateur.

Dans le listing ci-dessus, vous constatez que chaque ligne commence par une série de dix symboles. Par exemple « drwxr-xr-x ».

  • Le premier symbole indique le type de document. « d » pour dossier, « – » pour un fichier, « l » pour un lien symbolique…
  • Les 9 autres indiquent les droits en lecture (r), écriture (w) et exécution (x) pour :
    • L’utilisateur
    • Les membres du groupe
    • Les autres

Le symbole « – » indique l’absence de droit.

Voici à quoi correspondent exactement ces droits :

SymboleFichiersDossiers
rAutorisation de lire le contenuAutorisation de faire la liste du contenu
wAutorisation de modifier le contenuAutorisation de modifier les entrées du dossier (suppression par exemple)
xAutorisation d’exécuter le fichierAutorisation d’entrer dans le dossier et d’accéder aux fichiers contenus.

Pour gérer les droits, Linux propose trois commandes :

  • « chown » : permet de changer le propriétaire
  • « chgrp » : permet de changer le groupe
  • « chmod » : permet de changer les autorisations

Pour changer les autorisations, on peut procéder de deux manières : en notation symbolique ou en notation octale.

En notation symbolique on peut ajouter des droits (+), supprimer des droits (-) ou changer plusieurs droits d’un coup (=). On utilise les lettres u (utilisateur), g (groupe) ou o (autres) ainsi que r, w et x pour définir les droits. Le caractère a (all) correspond à « ugo ».

Exemple : chmod o-x text.txt

En notation octale, chaque droit est codé sur 3 bit. 1 signifie que le droit est accordé et 0 qu’il est refusé. Cela donne les combinaisons suivantes :

Droit symboliqueBinaireoctal
0000
–x0011
-w-0102
-wx0113
r–1004
r-x1015
rw-1106
rwx1117

On utilise alors chmod en spécifiant les 3 nombres octaux correspondant aux droits utilisateur, groupe et autres.

Par exemple : rwxr-xr-x correspond à 755. On fera donc « chmod 755 ».

30.    Entrée et sorties

Capteurs et actionneurs

Pour interagir avec le monde physique à l’aide de programmes informatiques, il faut des éléments permettant d’importer des informations vers la machine, des capteurs, ainsi que des éléments permettant au programme d’agir sur le monde physique, les actionneurs.

Les capteurs les plus simples sont le clavier et la souris, tandis qu’un microphone, une imprimante ou un écran permettent « d’agir » sur l’environnement par le biais de la programmation.

Lorsque l’on parle de capteur ou d’actionneurs, on pense toutefois plutôt à des robots ou des microcontrôleurs dans lesquels la distinction entre ces deux types d’objets est plus évidente :

  • Capteurs : de température, de pression, d’humidité, de CO2, de force…
  • Actionneur : moteur, pompe…


Arduino Uno branché sur un affichage digital

Interface Homme-Machine

Il ne suffit pas d’avoir des microcontrôleurs, des capteurs et une alimentation pour faire un système embarqué efficace. Il faut aussi que le contrôle de ce système par l’utilisateur soit aisé et intuitif.

Pour cela il est fondamental de disposer d’une bonne interface entre l’homme et la machine (IHM). Celle-ci doit être lisible, claire, non surchargée d’option, tout en donnant accès à tout ce qui est nécessaire pour piloter le système.

La création de ces interfaces, qui s’apparente à celle de la création de la fenêtre d’un logiciel, est une science à part entière qui mêle créativité, réflexion et suivi des modes. En effet, plusieurs modes graphiques se sont succédé depuis les développements massifs de ces concepts avec l’avènement des téléphones intelligents : skeuomorphisme (apparence du réel), flat design, material design…

Exemple de skeuomorphisme dans l’interface d’un amplificateur guitare dans Logic : tout est fait pour qu’on ait l’impression de manipuler les boutons d’un vrai amplificateur de guitare.

Material Design en thème sombre de l’horloge d’un smartphone sous Android 10.

Pour concevoir une interface homme-machine sur smartphone, on peut utiliser le logiciel gratuit « App Inventor » qui se compose d’un module permettant de créer l’interface à partir de différents éléments standards du système : boutons, boîtes de sélections, sélecteurs à glissière… A chacun de ces éléments, on pourra ensuite affecter des blocs de codes afin que le logiciel réalise certaines choses. Enfin un émulateur permet de tester l’application finale avant de l’envoyer au smartphone.

Avec « App Inventor » il est ainsi possible de piloter à distance un microcontrôleur embarqué qui possède une liaison Bluetooth ou wifi, afin de lire les valeurs de ses capteurs et de lui donner des ordres.

Sur Mac, on peut utiliser le logiciel gratuit XCode pour créer des logiciels complets qui pourront s’exécuter sur téléphone mobile, tablette ou ordinateur. On dispose alors également d’un module permettant de créer l’ensemble de l’interface, comme on le voit dans la capture d’écran ci-dessous :

Programmer un microcontrôleur

La programmation d’un microcontrôleur passe généralement par un appareil externe : un ordinateur qui sera relié au microcontrôleur en USB, Wifi ou Bluetooth.

Prenons l’exemple d’un Arduino Uno, un microcontrôleur peu coûteux et assez répandu. Pour faciliter la connexion des capteurs, nous l’avons équipé d’une platine « grove » avec des connecteurs plastiques simples à mettre et à retirer. Pour les besoins de notre exemple, nous utilisons comme capteur et actionneur un ensemble ultrason composé d’un émetteur (actionneur) et d’un récepteur (capteur).

Le principe du module est d’émettre une salve d’ultrasons avec l’émetteur et de capter les ultrasons qui se sont réfléchis contre un obstacle avec le récepteur.

Pour simplifier au maximum, nous nous contentons d’afficher, à intervalle régulier, la distance en centimètre des obstacles placés devant le module.

Voici ce que donne le montage physique :

Notez que le module ultrason est branché sur le port D3 (digital 3) de la platine Grove.

L’arduino Uno sera ensuite branché par USB sur un ordinateur sur lequel on aura installé l’interface de développement Arduino :

Arduino IDE : https://www.arduino.cc/en/software

Cette interface se programme en C. Il existe également des systèmes permettant de programmer un Arduino en Python, avec une conversion du code en C. La programmation en C est toutefois plus rapide pour de petites applications simples ne faisant pas appel à la création d’une interface graphique ou d’autres bibliothèques spécialisées.

Pour piloter le module grove ultrason, il faut installer son pilote qui se télécharge sur le lien suivant : https://github.com/Seeed-Studio/Seeed_Arduino_UltrasonicRanger/archive/master.zip

Ce pilote est ensuite installé directement depuis le fichier zip téléchargé en utilisant le menu bibliothèque de l’IDE Arduino :

Il ne reste plus alors qu’à taper le code pour mesurer une distance avec le module ultrason :

Remarquez l’initialisation du module grove avec la commande « Ultrasonic ultrasonic(3) » où le « 3 » correspond au port où ce module est branché.

Une fois le programme téléversé (avec la flèche vers la droite du menu de l’IDE Arduino), on peut lire sur l’afficheur série de l’IDE le résultat des mesures :

Chaque numéro de mesure est suivi de la distance à un obstacle en centimètre.

Il est possible de coupler plusieurs modules pour réaliser des interfaces hommes-machines complexes : gestion d’une serre, station météo, robots…

Chapitre précédent

Retour aux chapitres