Ce cours a été remanié de très nombreuses fois au cours du temps. La dernière mouture (non satisfaisante) consistait à mélanger dans le même enseignement l’apprentissage de la programmation en langage C et de la programmation système. Même si ces deux choses sont liées historiquement, les mélanger ainsi en un même enseignement n’était pas réalisable dans les contraintes temporelles qui m’étaient imparties.
On trouvera ici, classées comme j’ai pu, des supports de différents genres autour du systèmes et de sa programmation.
Contenu
Les cours se basent sur
- la norme ISO pour le langage C et,
- sur la norme IEEE 1003.1 aka POSIX pour le système.
Vous pouvez consulter la page Wikipédia consacrée à Mr Dennis MacAllistair Ritchie, le père d’Unix.
Attention! Si vous savez lire le code suivant, il n’est pas utile de suivre les cours de programmation C.
unsigned funny(unsigned n) {
See:
https://en.wikipedia.org/wiki/Fibonacci_number
<% if (n < 2) return 1; %>
<% if (n < 2) { goto See; goto https; } %>
unsigned __, *_ = malloc(sizeof(*_) * (n + 1));
<%0
<:_:>=1
<:_:>=1
;%>
for (
__= + +(0<:_:><<1); !!(__ <= n);
__= + +(1<:_:><<0) + +__
)(__<<0>>0)
<:_
:>=(__-(0<:_:><<0))<:_
:>+(__-(1<:_:><<1))<:_
:>;
unsigned res = _[n];
free(_);
return res;
}
Cours
2016—2017
- Premier cours, généralités, Hello World, compilation élémentaire, manuel, shell et ligne de commande, les diapos.
- Second cours, shell : redirections, pipes, scripts, expansion des variables, arguments, terminaison, C : définition de variables, expressions et opérateurs, instructions, blocs, contrôle de séquence, déclarations et définitions de fonctions, durée de vie, porté et visibilité des variables; les diapos (Attention les diapos sont brutes et recèlent encore des petits manques, des erreurs mineures et typos diverses).
- Troisième cours, pointeurs divers et variés, un petit retour sur les types, les diapos
- Quatrième cours, énumérations, types structurés, déclarations anticipées, alignement et bourrage, les diapos
- Cinquième cours, modularité, chaîune de compilation et makefiles, les diapos
- Sixième cours, création de bibliothèques (statiques et dynamiques), entrées/sorties en C les diapos
- Septimère cours, gestion des erreurs en C, Systèmes : système de fichiers, arborescence, inoeuds, appels systèmes et fonctions POSIX les diapos
- Huitième cours, manipulation des inoeuds et E/S systèmes les diapos
- ???
- Dernier cours E/S non-bloquantes : lecteur, écrivain.
Projet
Le sujet du projet : ici.
Examen
Le sujet de l’examen
Tutoriels
2015—2016
- Premier cours : UNIX en tant qu’utilisateur, quelques commandes de base (cd, pwd, ls) et quelques-unes de leurs options. Les redirections des entrées/sorties. À quoi sert un shell ? « Bonjour le monde » en langage C.
- Second cours : Retour sur le C. La chaîne de compilation avec gcc. Les inclusions en préprocessing. La génération de code. L’édition de liens (concept de bibliothèque). La décomposition des phases avec gcc. L’outil make et la description d’un arbre de dépendances. Notion de code source, entêtes, code objet, fichier exécutable. L’usage de printf.
- Troisième cours : pointeurs, tableaux, arithmétique des pointeurs et autres amusements…
- Quatrième cours : Entrées/Sortie en C vs entrées/sorties systèmes. Une copie de fichier en C et sa cousine avec l’API Posix. Les résultats de l’expérience (sur OSX El Capitan 10.11) sont donnés dans le tableau ci-dessous.
Observations (attention les échelles sont logarithmiques) : Avec l’API C le temps system est quasi-constant (le travail du système est donc constant), le temps elapsed se stabilise au-delà de 1000. Avec l’API POSIX le temps system devient quasi-constant au-delà d’une taille de quelques milliers (~5000) et les temps user et elapsed se recouvrent (il n’y a que le système qui travaille). À la limite, pour l’API C le temps user se stabilise à une valeur supérieure à celui de l’API POSIX (ce qui suggère donc que la version C fournit un travail plus important en mode utilisateur, un calcul est caché derrière les appels C). Sachant que l’API C fait ultimement appel à l’API POSIX et qu’elle utilise un cache, il est fort probable que la longueur de ce cache soit de l’ordre du millier d’octets (sur ce système la valeur exacte est 1024). L’effet équivalent pour la couche POSIX indique qu’il s’agit d’un cache d’environ 5000 octets (en réalité, on le verra après, c’est 4096, la taille d’une page VM qui intervient puisque sous FreeBSD les fichiers sont mappés en mémoire et le cache utilise le mapping).
- Cinquième cours : un système de fichiers ? un système de gestion de fichiers ? une arborescence ? Un fichier est un i-nœud. Les types d’i-nœud. L’arborescence est créée via les fichiers de type répertoire. Une commande ls primitive
- Cours : processus. Certaines de leurs propriétés, en particulier l’espace d’adressage : text, data, stack, heap. Pourquoi j’ai parfois un message type
Bus Error
,Segmentation Violation
. Comment ils naissent ?fork()
. La parentéPID
etPPID
. L’attente synchrone de la terminaisonwaitpid()
. Les codes produits en cours (ce qu’il en reste): clone, clone2, espace et ex3??? - Cours (je sais plus lequel mais du 10/12) : Interruption d’un handler par un autre signal et exclusion mutuelle, Éviter l’accumulation de zombis (si y’en a trop on ne peut plus les combattre)
Projet
Le sujet du projet pour l’année 2015—2016 est disponible ici.
Examen
Le sujet d’examen, un code possible pour rateau.c, fil.c, arbre.c, elimine.c et crible.c
Bibliographie
Une bibliographie n’est jamais exhaustive et est souvent une affaire de goût, mais il vous est conseillé de jeter un œil attentif aux ouvrages suivants :
2019
2019, ISBN: 978-2212677607.
Operating System Concepts Ouvrage
10, 2019.
2016
Computer Systems: A Programmer's Perspective, 3rd Edition Ouvrage
2016, ISBN: 9780134092669.
2015
Modern Operating Systems, 4th Edition Ouvrage
2015, ISBN: 9780133592184.
2013
Advanced Programming in the UNIX Environment, 3rd edition Ouvrage
2013, ISBN: 9780321637734.
2007
Operating Systems Design and Implementation, 3rd Edition Ouvrage
2007, ISBN: 9780131429871.
2003
Unix: Programmation et Communication Ouvrage
Dunod, 2003, ISBN: 978-2100079667.
1996
The Design and Implementation of the 4.4 BSD Operating System Ouvrage
1996, ISBN: 978-0201549799.