L’environnement informatique

Environnement – Session 1

  • Qu’est-ce qu’un ordinateur ?
  • Le système d’exploitation
  • Le terminal
  • Récapitulatif de la session

Qu’est-ce qu’un ordinateur ?

Machines à calculer

Abaque (2700 et 2300 av. J.C.)

Machine d'Anticythère (IIème siècle av. J.C.)

Pascaline (1642)

Machine analytique de Charles Babbage (1834)

Calculatrice mécanique 'Curta' (1948 - 1954)

Qu’est-ce qu’un ordinateur ?

Définition moderne

Un ordinateur est un dispositif électronique qui peut être programmé pour exécuter automatiquement des séquences d’opérations arithmétiques ou logiques (calcul)

Le principe de l’ordinateur moderne a été défini par Alan Turing en 1936

Machine de Turing universelle :

  • Lire et écrire des symboles sur une bande infinie selon un ensemble de règles définies par sa fonction de transition
  • Elle déplace sa tête de lecture/écriture à gauche ou à droite et change d’état en fonction du symbole et de l’état courant

Une machine de Turing physique

Une machine de Turing en LEGO (ENS Lyon)

Une machine de Turing dans Minecraft

Qu’est-ce qu’un ordinateur ?

Architecture matérielle

Les machines de Turing décrivent une machine abstraite

Comment passer de ce modèle idéalisé à un ordinateur réel ?


Description des systèmes ou architectures informatiques

  • L’architecture von Neumann (ou architecture Princeton)
  • L’architecture Harvard
  • L’architecture Harvard modifiée

Qu’est-ce qu’un ordinateur ?

Architecture von Neumann (1945)

Qu’est-ce qu’un ordinateur ?

Exécuter un programme sur l’architecture von Neumann

Somme A + B

  1. Récupérer l’instruction
  2. Incrémenter le Program Counter (PC)
  3. Décoder l’instruction
  4. Récupérer les opérandes (A & B)
  5. Phase d’exécution
  6. Phase de stockage
  7. Mise à jour du PC

Qu’est-ce qu’un ordinateur ?

L’architecture Harvard

Qu’est-ce qu’un ordinateur ?

Exécuter un programme sur l’architecture Harvard

Somme A + B

  1. Récupérer l’instruction
  2. Incrémenter le Program Counter (PC)
  3. Décoder l’instruction
  4. Récupérer les opérandes (A & B)
  5. Phase d’exécution
  6. Phase de stockage
  7. Mise à jour du PC

Qu’est-ce qu’un ordinateur ?

Comparaison

von Neumann

  • Un CPU avec à la fois une unité de contrôle (CU) et une unité arithmétique et logique (ALU)

  • La mémoire stocke à la fois les données et les instructions :

    • Un programme peut facilement modifier ses instructions (boucles)
    • Goulot d’étranglement
    • Problèmes de sécurité

Harvard

  • CU et ALU séparés

  • Voies mémoire et instructions séparées :

    • Traitement des données plus rapide et plus efficace
    • Coût plus élevé et moins de flexibilité en programmation

Qu’est-ce qu’un ordinateur ?

Le meilleur des deux mondes

Architecture Harvard modifiée

  • Utilisée dans les ordinateurs modernes et les microcontrôleurs

  • Caches séparés pour les données et les instructions

  • Adressage mémoire unifié (mais voies ou caches séparés)

  • Flexibilité

  • Optimisation des performances

Qu’est-ce qu’un ordinateur ?

Composants matériels d’un ordinateur “moderne”

  • Un CPU (généralement avec plusieurs cœurs)
  • Mémoire vive (RAM)
  • Périphériques de stockage :

    • Disques durs (HDD)
    • Disques à état solide (SSD)

Qu’est-ce qu’un ordinateur ?

Composants matériels d’un ordinateur “moderne”

Carte mère

  • Socket CPU
  • Chipset
  • Emplacements RAM (emplacements DIMM)
  • Connecteurs de stockage
  • Emplacements d’extension

Composants matériels d’un ordinateur “moderne”

Beaucoup plus de périphériques d’entrée/sortie

Systèmes d’exploitation

Qu’est ce qu’un Système d’Exploitation (Operating System - OS)

Envoyer des instructions binaires à un ordinateur est possible mais peu pratique

$\rightarrow$ Utiliser un logiciel principal appelé système d’exploitation (OS) pour agir comme intermédiaire entre les utilisateurs et le matériel informatique

Systèmes d’exploitation

Un peu d’histoire

Un autre voyage dans le temps

  • Premiers ordinateurs (années 1940 – 1950) :

    • Opérations manuelles, traitement par lots
  • Ère des mainframes (années 1960) :

    • Transition des systèmes mono-utilisateur, mono-tâche vers des environnements multi-utilisateurs, multitâches
  • Unix et premiers mini-ordinateurs (années 1970) :

    • Portabilité, système de fichiers hiérarchique, sécurité et permissions
  • Ordinateurs personnels (années 1980) :

    • Plus simples, plus intuitifs, capables de fonctionner sur du matériel moins puissant
    • Introduction de l’interface graphique (GUI) par Apple

Systèmes d’exploitation

Un peu d’histoire

L’essor des systèmes d’exploitation modernes

  • Microsoft Windows :

    • De 3.0 à 95, étape clé pour établir Microsoft comme système d’exploitation dominant sur bureau
    • Windows NT/2000/XP et suivants ont apporté stabilité et facilité d’utilisation
  • GNU/Linux – la révolution open-source :

    • 1991 : première version du noyau Linux
    • Dans les années 2000, Linux domine le marché des serveurs et plus encore
  • MacOS :

    • Noyau basé sur Unix
    • Lien fort avec le matériel Apple

Systèmes d’exploitation

Composants et fonctionnalités

L’essor des systèmes d’exploitation modernes

  • La gestion des ressources matérielles est sous la responsabilité du noyau

  • Les fonctions clés du noyau sont :

    • Gestion des processus
    • Gestion de la mémoire
    • Gestion des périphériques
    • Gestion du système de fichiers
    • Communication inter-processus
    • Sécurité et contrôle d’accès

Systèmes d’exploitation

Comment intéragir avec le Systèmes d’exploitation?

Le shell en ligne de commande (Command-line shells)

  • Mode historique d’interaction avec le système d’exploitation
  • Les shells en ligne de commande demandent à l’utilisateur de saisir des commandes textuelles pour effectuer des tâches telles que la gestion des fichiers, le contrôle des processus, etc.
  • Exemples : sh, bash, zsh, cmd.exe, Powershell

Les shells graphiques

  • Permettent d’accéder aux fonctions d’un système d’exploitation sans avoir à taper des commandes
  • Souvent construits au-dessus de ce qu’on appelle un système de fenêtres
  • Exemples : Gnome Shell, Windows shell, Aqua

Systèmes d’exploitation

Autres composants et fonctionnalités

Le programme Init

  • Le premier programme à s’exécuter après le chargement du noyau

Daemons et services

  • Tâches en arrière-plan qui effectuent des fonctions spécifiques (attente de connexions, surveillance de l’ordinateur)

Utilisateurs

  • Utilisateurs humains – Réguliers ou administrateur/root
  • Comptes de service – utilisés par le système d’exploitation pour exécuter des tâches spécifiques (e.g., www-data)

Le terminal

Intéragir avec l’OS en utilisant un terminal

Historiquement, le seul moyen d’interagir avec votre système

De nos jours, le terminal est généralement une application pré-installée, e.g.,

  • Windowscmd.exe (Batch), PowerShell
  • Linux – Gnome Terminal (Bash),
  • MacOS – Terminal.app (Zsh)

Le terminal

Écrire une commande

Le format standard d’une commande

<prompt> <command> <param_1> <param_2> <param_3> ... <param_N>
  • <prompt> – Généré par le programme pour fournir un contexte à l’utilisateur (il se termine généralement par l’un des caractères $, %, #, :, > ou _)

  • <command> – Fournie par l’utilisateur. Cela peut être :

    • Des commandes internes ou intégrées
    • Des commandes externes pour exécuter des exécutables
  • <param_1> ... <param_N> – Paramètres fournis par l’utilisateur, si nécessaire

Le terminal

Petit exemple

  • $ – L’invite de commande

  • ls – La commande interne pour lister les fichiers dans un répertoire

  • -l – Le paramètre pour présenter les résultats de ls en format liste longue

  • -a – Le paramètre pour afficher tous les fichiers, y compris ceux commençant par . qui sont cachés par défaut

Le système de fichiers plus en détails

Hiérarchie, chemins et formats

Organisation des données

  • Un système de fichiers organise les données en fichiers et répertoires, structurés en hiérarchie depuis une racine
  • Windows : hiérarchie par lecteur (C:\, D:\, …)
  • Linux / MacOS : hiérarchie unique (/), les volumes supplémentaires sont montés dans l’arborescence

Chemins

  • Absolu – depuis la racine – vs relatif – depuis le répertoire courant
  • Séparateur \ (Windows) vs / (Linux/MacOS) ; . = répertoire courant, .. = répertoire parent

Formats et fichiers cachés

  • Formats natifs : NTFS/FAT32 (Windows), ext4 (Linux), APFS (MacOS)
  • Fichiers cachés : attribut dédié (Windows) vs nom commençant par . (Linux/MacOS)

Le système de fichiers plus en détails

Droits d’accès et volumes

Droits d’accès

Modèle Unix

  • Trois catégories : user (propriétaire), group, others
  • Trois droits : read, write, execute – consultés avec ls -l, modifiés avec chmod / chown

Modèle Windows

  • Windows utilise des listes de contrôle d’accès (ACL) plus fines (icacls)

Droits administrateur

  • sudo (Linux/MacOS) vs UAC (Windows) pour élever ses privilèges ponctuellement

Environnement logiciel de développement

Python et son interpréteur

Un langage interprété

  • Python est un langage interprété : l’interpréteur traduit et exécute une instruction à la fois
  • Différent d’un compilateur (C, C++, …) qui traduit tout le code source en binaire avant l’exécution
  • Vérifier l’installation : python --version (Windows) / python3 --version (Linux, MacOS)

Modules et paquets

  • La bibliothèque standard couvre de nombreux besoins (sys, datetime, …)
  • Des paquets externes (numpy, matplotlib, …) s’installent avec pip, depuis PyPI
  • Un environnement virtuel (python -m venv) isole les paquets installés par projet, pour éviter les conflits de versions

Environnement logiciel de développement

Exécuter un script Python

Deux façons d’utiliser l’interpréteur

  • Session interactive – lancée avec python/python3, chaque instruction est exécutée et son résultat affiché immédiatement (invite >>>)
  • Script – les instructions sont écrites dans un fichier texte (extension .py), exécuté en une fois avec python script.py

Pourquoi préférer un script ?

  • Réutilisable et modifiable, contrairement à une session interactive
  • Peut recevoir des arguments au lancement (sys.argv, ou la bibliothèque argparse pour des options nommées comme --nom valeur)

Environnement logiciel de développement

Développer avec un IDE

Qu’est-ce qu’un IDE ?

  • Un environnement de développement intégré (IDE) regroupe en un seul outil : éditeur de code, interpréteur, débogueur, …
  • Apporte coloration syntaxique, complétion de code, détection d’erreurs (linting), gestion de projet
  • Un IDE ne remplace pas l’interpréteur : il s’appuie dessus (il faut donc toujours installer Python séparément)

Visual Studio Code

  • IDE gratuit et multiplateforme, extensible via des extensions
  • L’extension Python (avec Pylance) permet d’exécuter, compléter et déboguer du code directement depuis l’éditeur
  • Un terminal intégré reste disponible pour exécuter les commandes manuellement

Développement collaboratif

Pourquoi le contrôle de versions ?

Le problème du versionnage manuel

  • Rapport.docx, Rapport_FINAL.docx, Rapport_FINAL_REEL.docx, … – un système ad-hoc qui s’effondre à plusieurs contributeurs
  • Un bon suivi des fichiers doit répondre à trois questions : quoi (les changements), pourquoi (la raison), qui (le responsable)

Les outils de contrôle de versions

  • Trois briques de base : branchement (travailler en parallèle et isolément), fusion (recombiner le travail), résolution de conflits
  • Git – l’outil standard de l’industrie
  • GitLab – plateforme qui héberge les dépôts Git et ajoute wiki, tickets, espace web, …

Développement collaboratif

Le workflow Git

Quatre zones

  • Working tree – les fichiers sur lesquels vous travaillez
  • Staging / Index – les modifications sélectionnées pour la prochaine version (git add)
  • Local repository – l’historique des versions validées (git commit)
  • Distant repository – le dépôt partagé, hébergé sur GitLab

Les commandes essentielles

  • git clone – récupérer un dépôt distant sur sa machine
  • git add / git commit -m "..." – indexer puis valider des modifications localement
  • git push – envoyer ses commits vers le dépôt distant
  • git pull – récupérer les commits des autres et mettre à jour son répertoire local

Développement collaboratif

Gérer les conflits

Qu’est-ce qu’un conflit ?

  • Deux contributeurs modifient les mêmes lignes d’un même fichier de manière incompatible
  • Détecté par Git lors d’un pull – il récupère les commits distants mais laisse le fichier en conflit à résoudre manuellement
  • Git indique précisément où se situent les portions en désaccord dans le fichier

Bonnes pratiques

  • pull avant de commencer à modifier, et avant chaque push
  • commit souvent, avec des messages clairs
  • Communiquer avec son équipe pour éviter de travailler sur les mêmes portions de code en parallèle

Récapitulatif de la session

À suivre

Activité pratique (~1h15)

Découvrez votre ordinateur

  • Que contient votre ordinateur ?
  • Familiarisez-vous avec le terminal et le système de fichiers

Programmez avec votre ordinateur

  • langage de programmation Python
  • Environnement de développement
  • Gestion de versions

Après la session

  • Lisez les articles de la session pour compléter vos connaissances
  • Vérifiez votre compréhension avec le quiz
  • Réalisez en autonomie le tutoriel de découverte de votre environnement de travail
  • Consultez la section “Avant le cours” de la prochaine session