- Comprendre les mécanismes derrière l'exécution d'un programme
- lancement et exécution
- exécution parallèle
- mémoire
- communication entre programmes
- Se renforcer en programmation C
- Gestion de la mémoire et des entrées/sorties
- Communication avec l'OS
----
### C'est quoi un OS ?
Système d'exploitation
**O**perating **S**ystem
----
### Des exemples ?
.. d'appareils sur lesquels il y a un OS ?
- ordinateur personnel (PC)
- smartphone / dumbphone
- serveur
- voiture
- machine à café / distributeur
- casque bluetooth
- satellite
- calculatrice TI/Casio
- supercalculateur
----
### Des exemples ?
.. de systèmes d'exploitation
----
![](img/windows.jpg)
Note: Shitty mais omniprésent
----
![](img/os_x.jpg)
----
![](img/ubuntu.jpg)
Note: Ubuntu != Linux, on verra ça plus tard
----
![](img/freebsd.png)
Note: Utilisé par Netflix pour leur CDN
----
![](img/openbsd.png)
Note:
OpenSSH vient d'OpenBSD
----
Note:
Android 3 pour la blague
Dérivé de Linux, on verra ça plus tard
----
![](img/switch.jpg)
Note: Basé sur FreeBSD, tout comme les Playstation
----
Systèmes spécifiques :
- Xen
- FreeRTOS
- ...
Note:
Hyperviseur très léger, délégation dom0
Système embarqué, temps réel
----
![](img/capitalism.jpg)
Note: Malheureusement, c'est un cours d'informatique, je vais pas pouvoir développer
----
### Licence
- Propriétaire
- Libre, permissive
- Libre, contagieuse
Note:
Les logiciels libres sont majoritaires dans le fonctionnement d'Internet.
La majorité des nouveaux logiciels sont libres.
La quasi-totalité des logiciels propriétaires connaissent un équivalent libre.
Les logiciels et services propriétaires reposent sur une pile de logiciels libres.
Ils ne sont que le dernier maillon.
Ce n'est pas l'objet du cours mais je pourrais parler des implications politiques de tout ça pendant longtemps.
----
### Histoire très rapide d'Unix
![](https://upload.wikimedia.org/wikipedia/commons/7/77/Unix_history-simple.svg)
[lien](https://upload.wikimedia.org/wikipedia/commons/7/77/Unix_history-simple.svg)
Note:
Linux, BSD, Apple : Unix
Histoire d'Unix
----
### Disclaimer
- Systèmes génériques
- Pas de systèmes embarqués, micro-controlleurs
- Linux
- Pas de Solaris, FreeBSD, MacOS
- Encore moins Windows
- Software
- On parlera peu de Hardware
----
![](img/memes/linux.jpg)
---
### Définition
Rôles du système d'exploitation :
- Logiciel "principal"
- Ensemble de programmes
----
### Rôles du système d'exploitation
1. Chef d'ochestre
- Dirige l'utilisation des ressources
- Gère l'exécution des programmes
- Ordonnancement
- Sécurité
----
### Rôles du système d'exploitation
2. Offrir ses services aux programmes
Note:
- Périphériques (Clavier, Écran, souris)
- Unités de calcul (Proc, graphics)
- Disques : Système de fichiers
- Réseau
- Horloge, timer
----
### Kernel / User-space
- Kernel
- User-space
Note:
- Fonctions précédentes : Kernel
- Allume l'ordinateur
- Initialise le matériel
- Lance un seul programme
- Fonctions secondaires fonctionnent en user-space
----
### Fonctions secondaires
- Démarrage des programmes nécessaires (init)
- Interactions avec le kernel (réseau, fichiers, etc)
----
### Fonctions secondaires
Visibles par l'utilisateurice
- Gestion des users
- Sessions
- Authentification
----
### Fonctions secondaires
Visibles par l'utilisateurice
- Gestion de l'installation des applications
- Gestionnaire de paquets (Linux/ *BSD)
- App Store (Apple)
- Play Store (Android)
----
### Fonctions secondaires
Visibles par l'utilisateurice
- Environnement graphique
- Gestionnaire de fenêtres
- Menu des applications
- Barre des tâches
----
### Kernel / User-space / IHM
- Kernel : Linux
- User-space : GNU, Ubuntu
- IHM : Gnome
---
## Langage C
Note:
Souvenir douloureux du C, déso
----
### Pourquoi on fait encore du C ?
- Unix écrit en C
- Nombreux langages écrits en C
- Bas niveau → proche du système
- Performance
Note:
- Unix écrit en C, par les créateurs du C, simultanément
- écriture : 1973
- standardisations : 1989, 1999, 2011, 2018, 2024
- syntaxe qui a influencé langages (Java, Javascript, ...)
- intermêle C et Unix dans la suite
----
*démo*
Note: Comparaison des exécutions dans `comparaison/`
----
## Exécution d'un programme sous Unix
- Programme : 📝
- Processus : ⚙️
----
Note:
- Tambouille du kernel
- Alloc de mémoire
- Text → Code segment
- Constantes globales → Data (strings...)
- Variables globales → BSS
- Accès hors mémoire
- Segmentation fault
- Écritures du code
----
*démo*
Note:
- dans `memory/`
- utiliser `size a.out`
----
## Lancement d'un processus
----
## Lancement d'un processus
Appel système : `fork()`
- Mise en attente du processus en cours (processus parent)
- Création du nouveau processus (processus enfant)
- Changement de contexte
- Sauvegarde du processus courant
- État noyau
- État matériel (registres...)
- Exécution du processus enfant
----
## Lancement d'un processus
Appel système : `execve()`
- Réinitialisation des différents segments du processus
- Chargement du programme
- Exécution du programme
----
## Ordonnancement des processus
- Système mono-tâche
- Un seul processus à la fois
- Ne peut pas faire tourner Discord et [insérer nom de jeu vidéo] en même temps
----
## Ordonnancement des processus
- Système multi-tâche
- Basculement entre les processus sans attendre leur fin
- Quand ?
- Quelles priorités ?
- Tout un art : l'ordonnancement
- Linux :
- CFS, depuis 2008
- EEVDF, 2024
Note:
- CFS, Completely Fair Scheduler, 2008
- EEVDF, Earliest Eligible Virtual Deadline First, 2024
----
#### Avantages
- Meilleure utilisation des ressources
- Pas de blocage du système sur les I/O
- Calculs en parallèle
- Programmes en parallèle
#### Inconvénients
- Conflits d'accès aux ressources
- → Protéger les espaces mémoire
- → Gérer l'accès aux ressources
----
#### Processus et threads
- Appel système : `clone()`
- Plus léger
- Même PID
- Rarement fait à la main
- Géré par des librairies (`pthread` en C sur Unix)
----
## Tâches parallèles
*démo*
Note:
- dossier `parallel/`
- démo `/proc` avec un `sleep 10m`
----
## Adressage mémoire
----
## Adressage mémoire
Chaque processus a un espace d'adressage **virtuel**
- Évite les conflits d'adresse
- Permet des mécanismes de protection
- Nécessite une traduction pour avoir la *vraie* adresse
----
----
## Pages
Le kernel maintient une table de pages pour chaque processus
----
## Pages
- Taille par défaut : 4 Ko (4096 octets)
- Configurable pour des usages spécifiques
----
## `malloc()`
- gère la heap
- stocke des métadonnées avec chaque pointeur
- demande plus de heap au kernel avec un appel système
---
## Abstraction du matériel
Note:
Quelle que soit la souris/écran/disque/carte wifi, même utilisation pour un programme
----
***Tout est fichier***
----
***Tout est fichier***
- `/dev/pts/1`, `/dev/tty0`...
- `/dev/sda`
- `/sys/class/backlight/nv_backlight/brightness`
- `/dev/random`
- `/dev/stdout`, `/dev/stdin`, `/dev/stderr`
---
## Sources et ressources
- Super cours de [C.Raïevsky](https://raievskc.gricad-pages.univ-grenoble-alpes.fr/enseignement/BUTInfo/OS/OSBUTInfo.html)
- Wikipédia ([Linux versions](https://en.wikipedia.org/wiki/Linux_kernel_version_history), [C](https://en.wikipedia.org/wiki/C_language), [Text segment](https://en.wikipedia.org/wiki/Code_segment)...)
- Le manuel, `man`:
- `man fork`,
- `man execve`,
- ...
- kernel.org ([cfs](https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html), ...)
- Stack Overflow ([fork/clone](https://stackoverflow.com/questions/9477753/linux-system-call-for-creating-process-and-thread#9478840))
----
## Sources et ressources
- Pour aller plus loin sur les licences :
- [Introduction au droit d'auteur et à la culture libre](https://librecours.net/modules/enjeux/dall01/solweb/co/dall01.html)
- [L'imposture du logiciel libre](https://visio.coopaname.coop/playback/presentation/2.3/5b449311b781fc60822d4b4a0c87b705df7b1c4e-1697451358451)
- *C'est une visio un peu à l'arrache mais elle est très bien, par un mainteneur de la distribution Linux [Yunohost](https://yunohost.org)*.
----
## Sources
Images :
[Windows](https://hipertextual.com/2022/09/windows-xp-delta-edition),
[Mac OS X](https://www.fireebok.com/resource/fifteen-years-old-of-mac-os-x.html),
[Ubuntu](https://cdn.benchmark.pl/uploads/backend_img/c/newsy/2022-04/WK/ubuntu-2204-ui.jpg),
[Généalogie UNIX](https://upload.wikimedia.org/wikipedia/commons/7/77/Unix_history-simple.svg),
[Android](http://banagadgets.blogspot.com/2013/06/free-download-and-install-android-40.html),
[FreeBSD](https://fity.club/lists/suggestions/freebsd-iso/),
[OpenBSD](https://www.reddit.com/r/openbsd/comments/77rpfi/openbsd_62/),
[Nintendo Switch](https://www.digitaltrends.com/gaming/how-to-take-a-screenshot-on-the-nintendo-switch/)