Systèmes et réseaux Marc Pouzet et Timothy Bourke Introduction, 16 février 2017 1 / 18 Système digital Langages de programmation et compilation Système digital Langages de programmation et compilation Systèmes et réseaux > 15 800 000 LOC Système digital 2 / 18 3 / 18 4 / 18 seL4 < 10K LoC 5 / 18 Plan du cours Le cours de systèmes présente les concepts fondamentaux des systèmes d’exploitation, leur utilisation et leur mise en œuvre dans un système Unix. Ce cours abordera, entre autres, les points suivants : I système de fichiers ; I gestion des processus ; I communication et synchronisation entre processus concurrents (mémoire partagée, signaux, sémaphores, sockets) ; I ordonnancement préemptif et non-préemptif ; OS temps-réel ; I processus légers (threads) ; I modèles de concurrence de haut niveau ; I micro-noyaux—leur modélisation et leur vérification. I Langages dédiés pour modéliser/implémenter des systèmes réactifs I Modélisation et vérification avec le langage Lustre Les notions introduites seront illustrées par l’écriture d’applications en C ou en OCaml, en utilisant l’interface POSIX. 6 / 18 Approche du cours I Il ne s’agit pas I I de la programmation détaillée à très bas niveau, ni de la manipulation de bits sur une architecture spécifique. I Mais rien n’empêche les hackers parmi vous d’aller plus loin ! I Il s’agit des concepts (POSIX) et de leur modélisation (en OCaml). I On verra des méthodes modélisation/vérification de certaines parties de systèmes, et ce qui se pratique couramment dans le domaine des systèmes critiques. I Cette approche vise à vous donner une vision limpide des éléments importants d’un OS dans son ensemble. Elle est en accord avec la recherche moderne. I I seL4, par ex., 3 codes sources : C, Haskell, HOL. 7 / 18 Informations pratiques I Les jeudis : I I I I Nous commençons le jeudi 16 févr. 16 févr., 23 févr., 2 mars, 9 mars, 16 mars, 23 mars, 30 mars, vacances 20 avr., 27 avr., 4 mai, 11 mai (soutenances du projet), 18 mai, 1 juin (examen). Projet de programmation par groupes de deux. I I I 13h15–15h15 Cours (Pouzet ; salle U/V) 15h15–17h15 Travail Pratique (Bourke ; salle Info 4) Rock’n’Roll : programmation d’un petit OS (par ex., Raspberry PI) Vanille : réseaux de processus de Kahn ; plus conceptuel Site web : http://www.di.ens.fr/~pouzet/cours/systeme/ 8 / 18 Références (système Unix) Livres : I Systèmes d’exploitation Andrew Tanenbaum. Pearson Education. I Unix, programmation et communication Jean-Marie Rifflet et Jean-Baptiste Yunès. Dunod. I Programmation Linux 2.0 Rémy Card, Eric Dumas et Franck Mével. Eyrolles. Cours (disponibles sur le web) : I Principes et Programmation des Systèmes d’exploitation Didier Rémy. http://pauillac.inria.fr/~remy/poly/system/ I Programmation des systèmes Philippe Marquet. http://www2.lifl.fr/~marquet/cnl/pds/ I Computer Systems : A Programmer’s Perspective Randal E.Bryant and David R.O’Hallaron, CMU http://csapp.cs.cmu.edu 9 / 18 Historique A lire ! I http://www.computerhistory.org/timeline I http://en.wikipedia.org/wiki/Operating_system I ... 10 / 18 Systèmes d’exploitation (e.g., Unix, Windows, MacOSX) : généralistes ; temps partagé (orienté multi-utilisateurs) ; pas (ou peu) de contraintes temporelles ; pas (ou peu) critiques. Systèmes embarqués : I Certains sont dits “critiques” (e.g., commande de vol de Airbus, freinage d’urgence) : garantir statiquement des temps de réponse pire-cas ; du déterminisme ; l’absence de blocage (deadlock). I D’autres non (e.g., TVHD, téléphone) : des contraintes de qualité de service (estimation de l’écart à l’optimal). I Ces systèmes sont beaucoup plus nombreux. Des problèmes et solutions spécifiques. Des méthodes/langages de programmation très différents (cf. cours 8 – 10). 11 / 18 Rôles du système d’exploitation : machine virtuelle latex emacs gcc tar Système d'exploitation Périphériques I Processeur Mémoire Abstraction du matériel I I I Protection : les tâches matérielles sont déléguées au système. Portabilité : un même système peut être disponible sur plusieurs architectures. Simplicité : pour le programmeur, c’est la même chose de lire un fichier sur le disque dur ou sur un CD-ROM. 12 / 18 Rôles du système d’exploitation : gestion des ressources I Partage : donner l’illusion que I I I Équité : I I I chaque programme tourne seul sur la machine chaque utilisateur est seul sur la machine accès au processeur gestion des quotas Protection : garantir que I I un utilisateur ne peut pas modifier les données d’un autre un processus ne peut pas modifier la mémoire d’un autre 13 / 18 Rôles du système d’exploitation : centre de communication I Communication entre le matériel et le logiciel I I Concurrence, parallélisme I I I I interruptions créer/tuer un processus l’interrompre/le reprendre processus lourds, processus légers (threads) ; vérrous, conditions Communication entre les processus (IPC, pour Inter-Process Communication) I I I signaux tubes (pipes) prises (sockets) 14 / 18 Structure du système Programmes utilisateurs mkdir gcc tar ls Noyau cd hardware ftp ed sh date I I Deux modes d’exécution : noyau et utilisateur La tendance est à faire des noyaux les plus petits possibles. 15 / 18 Structure du système Interface appels système Systèmes de fichiers Centre du noyau ext2fs hfs+ vfat ntfs Gestion des processus Ordonnanceur Signaux Gestion Mémoire Gestionnaires de périphériques Gestion réseau son cdrom scsi pci ipv4 ethernet Interface avec la machine 16 / 18 Programmer le système : quel langage ? Pour programmer le système I C est le langage de choix : simple et uniforme, sémantique assez claire (par rapport à Java et C++, même si peu de sûreté/typage), efficacité et contrôle fin des ressources (espace ET temps) I Pertinent pour le code du noyau I L’interface avec le système est un ensemble de librairies C (POSIX, pour Portable Operating System Interface) I Utiliser des langages de plus haut niveau pour les couches hautes du système (avec une interface ad-hoc vers les librairies C). I De nouveaux langages plus sûrs émergents (e.g., Rust) La réference : Le langage C, B.W Kernighan, D.M. Ritchie, Prentice Hall. 17 / 18 Manuel (en ligne) Unix I % man 1 command (Commande Unix). E.g., cd I % man 2 appel_systeme (appels systèmes). E.g., open I % man 3 appel_a_une_librairie (librairie C, appel système de plus haut niveau). E.g., malloc La fin des pages de man donne des pointeurs sur d’autres commandes. Voir aussi les pointeurs sur la page du cours. 18 / 18