Enseignement des Systèmes
Cette page est une contribution au groupe de travail sur l'enseignement
de systèmes mis en place à l'UFR d'Informatique et Mathématiques
Appliquées au printemps 2003. Elle rassemble des ressources diverses
: spécifications d'objectifs, plans et propositions de cours, bibliographies,
etc.
Pour toutes suggestions et contributions, écrire
à Sacha Krakowiak
Champ disciplinaire et niveaux de formation
Champ disciplinaire
Matériau existant : sur la discipline "systèmes"
: voir transparents de la présentation
à la Table ronde du 20 février 2003.
La discipline désignée sous le terme général
de "systèmes " a profondément évolué au cours
des 10 dernières années sous l'influence des progrès
de la recherche et du développement technologique. Elle s'est étendue
des systèmes d'exploitation vers les systèmes répartis
ainsi que vers le développement d'applications sur l'Internet. Parallèlement,
le niveau d'exigence sur les compétences a également évolué
:
-
d'une part, une bonne connaissance du domaine est maintenant requise de
tout informaticien en raison de la diffusion générale des
techniques liées aux services et applications réparties.
-
d'autre part, un niveau élevé de compétence et de
savoir-faire est requis des spécialistes du domaine en raison de
l'accroissement de sa complexité technique. Est également
requise une grande capacité d'évolution (noter que la plupart
des mots-clés énumérés ci-après n'existaient
pas il y a 10 ans), ce qui suppose une formation de base solide centrée
sur les principes.
Les évolutions les plus significatives peuvent se résumer
comme suit.
-
Développement et diffusion du domaine des applications et services
répartis, reposant sur des outils intergiciels (middleware)
; les mots-clés dans ce domaine sont Java, CORBA, Enterprise
Java Beans, bus logiciels (MOM), composants logiciels, services Web.
-
Développement de l'informatique "ubiquitaire" (infrastructure globale
d'accès aux services, objets communicants, mobilité des services
et des utilisateurs), tant pour le monde professionnel que pour le grand
public.
-
Evolution du domaine des systèmes d'exploitation : à côté
des systèmes d'exploitation "traditionnels", se développe
le domaine des noyaux et exécutifs "sur mesure" pour les systèmes
embarqués, les télécommunications, et plus généralement
l'informatique ubiquitaire, ainsi que les grappes ouvertes de processeurs
pour les applications parallèles.
-
Importance croissante des aspects "non fonctionnels" : sécurité,
disponibilité et tolérance aux fautes, qualité de
service pour les données multimédia.
-
Importance croissante des aspects liés à l'administration
(systèmes, réseaux, applications, composition de services)
Par ailleurs, l'intérêt croissant pour le logiciel libre (open
source) n'est pas sans influence tant sur les besoins en compétences
que sur les techniques propres de l'enseignement.
Le domaine des systèmes et applications répartis a des
interactions avec plusieurs autres domaines, dont doivent tenir compte
les programmes d'enseignement.
-
réseaux et protocoles de communication, administration de systèmes
et de réseaux, administration d'applications
-
modélisation de systèmes, évaluation de performances,
systèmes critiques
-
systèmes parallèles, grappes, metacomputing
-
génie logiciel (en particulier techniques liées aux composants
et à l'architecture logicielle)
-
bases de données et systèmes d'information
-
interfaces et communication homme-machine.
Dans cette note, on considère l'enseignement relatif aux systèmes
d'exploitation, aux réseaux et aux applications réparties
(middleware, programmation sur le Web et l'Internet). Les interactions
avec les autres domaines devront être précisées ultérieurement.
Objectifs de la formation, par niveaux et filières
Matériau existant : sur les objectifs et programmes
: voir contribution au quadriennal,
déjà un peu ancienne (janvier 2002).
On devrait trouver ci-après une version complétée
et mise à jour de cette contribution.
Objectifs et contenus
[en cours de rédaction]
Les objectifs sont exprimés en termes de compétences et de
savoir-faire qui devraient être acquis aux principales étapes
des cursus tant généraux que spécialisés. Les
programmes détaillés doivent être élaborés
à partir de ces objectifs.
Les niveaux de formation sont définis dans le cadre du système
LMD, avec des aspects transversaux correspondant au poids de la discipline
systèmes dans la formation considérée ("spécialistes"
vs "non spécialistes" dans ce domaine), et au caractère spécifiquement
professionnel ou non de la formation. Il faut considérer que tout
diplôme "terminal" implique un minimum de compétences valorisables
en termes professionnels. Quant aux niveaux "intermédiaires"
(soit L1, L2, M1) leurs objectifs sont définis par le diplôme
niveau terminal auquels ils préparent.
Au niveau Licence, on a défini d'une part les objectifs d'une
formation générale (destinée à être poursuivie
plus avant, mais en tenant compte du fait que le diplôme est terminal)
et les objectifs d'une formation professionnelle (Licence professionnelle),
qui doivent intégrer un plus fort accent sur le savoir-faire développé
autour de projets.
Objectifs au niveau L3 : Formation générale
|
Connaissance des principes
-
Connaissance élémentaire du fonctionnement général
d'un système d'exploitation, de son architecture d'ensemble et de
ses interfaces.
-
Introduction aux notions de base des réseaux
-
Principes généraux de la programmation répartie, illustrés
par des systèmes client-serveur
|
Savoir-faire pratique
-
Utilisation des principales fonctions du langage de commande d'un système
d'exploitation (niveau utilisateur et niveau API).
-
Introduction à la programmation d'applications réparties
simples, par utilisation de langages de scripts
|
Objectifs au niveau L3 : Formation professionnelle
|
Connaissance des principes
-
comme ci-dessus, mais davantage de contenu sur réseaux
|
Savoir-faire pratique
-
comme ci-dessus, avec plus d'accent sur le développement de projets
et la pratique des outils [à rédiger]
|
Au niveau Master, la première année (Bac+4) est consacrée
à l'acquisition des principes de base, illustrés par des
des applications destinées à maîtriser les mécanismes
élémentaires et les méthodes de travail en projets,
notamment en équipe. La seconde année (Bac+5) vise surtout
à approfondir l'expertise technique dans les domaines choisis et
à développer les compétences liées au travail
en projets (architecture, qualité, communication).
Objectifs au niveau M1 : Formation générale, ou
formation professionnelle orientée vers les applications (par ex.
MIAGE)
|
Connaissance des principes
-
Principes des systèmes d'exploitation (processus, programmation
concurrente, gestion de fichiers, principes de désignation, liaison,
composition ; architecture d'ensemble d'un système : noyau, extensions,
communication.
-
Principes de base des systèmes répartis : intergiciels, construction
de services, intégration de logiciel
|
Savoir-faire pratique
-
Programmation concurrente élémentaire (illustrée par
ex. avec threads Java)
-
Utilisation élémentaire de systèmes intergiciels (par
ex. une application simple en Java RMI et en CORBA)
-
Utilisation de mécanismes de base de déport d'exécution
(par ex. applets et servlets)
|
Objectifs au niveau M2 : Formation professionnelle "systèmes"
(par
ex. ingénieurs RICM option réseaux-systèmes)
|
Connaissance des principes
Cf ci-dessus, plus :
-
Approfondissement des systèmes d'exploitation : architecture interne,
gestion de mémoire, multiprocesseurs, communications
-
Eléments d'algorithmique répartie
-
Modélisation, mesure, évaluation de performances
|
Savoir-faire pratique
Cf ci-dessus, plus :
-
Programmation avancée en communication (couches basses des protocoles,
etc.)
-
Administration de système (notamment introduction à la sécurité)
|
Objectifs au niveau M2-P : Formation professionnelle "systèmes"
(par
ex. ingénieurs RICM et DESS GI, options réseaux-systèmes)
|
Connaissance des principes
-
Approfondissement des principes de l'intergiciel avec objets, composants
-
Sécurité des réseaux, systèmes, applications
-
Administration de réseaux
-
Tolérance aux fautes ; qualité de service
|
Savoir-faire pratique
-
Utilisation de systèmes intergiciels
-
Développement d'outils intergiciels pour des cas d'utilisation spécifiques
-
Construction de systèmes spécialisés (embarqués,
etc) par assemblage de composants
-
Adaptation de systèmes à des environnements spécifiques
(mobile, etc).
|
Objectifs au niveau M2-P : Formation professionnelle (autre
domaine de spécialité)
|
Connaissance des principes
-
Sécurité des réseaux, systèmes, applications
|
Savoir-faire pratique
-
Utilisation de systèmes intergiciels
-
Déploiement et administration d'applications (composition d'applications,
intégration)
-
Mise en oeuvre de politiques de sécurité
|
Ces objectifs sont exprimés pour les formations générales
et professionnelles. Concernant la formation à la recherche (niveau
M2-R), l'objectif est de permettre la composition de parcours très
modulaires pouvant incluse aussi bien des modules propres à M2 que
des modules proposés en M1 notamment au titre des options.
Les modules M2 actuels relevant du domaine des systèmes au sens
large sont regroupés dans l'option SAP
du DEA ISC. On y trouve notamment des modules "fondamentaux" (Algorithmique
et techniques de base des systèmes répartis, Algorithmique
et techniques de base des systèmes parallèles, Évaluation
de performances, etc.) et des modules plus appliqués (Construction
d'applications parallèles et réparties, Architectures en
grappes, Communiations mobiles, etc.).
Le système LMD permet la mise en place de modules d'option en
M1. Concernant les systèmes, on peut concevoir plusieurs orientations
pour ces options (typiquement 6 ECTS chacune). Les contenus sont donnés
à titre très indicatif.
-
une option orientée "systèmes " : 1) Noyaux de systèmes
(devrait intéresser aussi systèmes embarqués) : construction
de noyaux modulaires en environnement contraint) 2) Techniques de "programmation
système", i.e. gestion de ressources, techniques de ramasse-miettes,
implantation de machines virtuelles, etc.
-
une option orientée "middleware". Celle ci est effectivement
proposée en 2003-2004 (Middleware
Adaptable)
-
une option orientée "réseaux". Contenu à définir
(réseaux ad hoc, réseaux mobiles, qualité de service,
etc.).
Ces options devraient faire une large part à l'expérimentation
pratique et au travail personnel.
Sur la situation existante
On peut faire les constatations suivantes (expérience des enseignants,
réactions des industriels qui emploient nos étudiants et
les accueillent en stage).
-
Il y a une baisse sensible (sur les 10 dernières années)
de la compétence des étudiants, en termes de savoir-faire
pratique ("se débrouiller" concrètement face à des
problèmes de réalisation un peu complexe). En particulier,
les étudiants manquent de méthode et n'utilisent pas de façon
rigoureuse et systématique (voire n'utilisent pas du tout) les outils
élémentaires de développement (make,
gestion de versions, etc).
-
Il y a un manque important de connaissances et de savoir-faire dans tout
ce qui relève de la programmation de "bas niveau" et des notions
concrètes relatives aux systèmes (manipulation des APIs système,
gestion des ressources, etc.). Le passage d'un environnement Unix à
un environnement Windows ne fait qu'accentuer cette tendance.
-
Il y a un manque de lien entre les connaissances théoriques et la
pratique courante, et un défaut de sens physique. En particulier,
les notions d'ordre de grandeur échappent très souvent aux
étudiants, ainsi que les techniques simples (du niveau de la règle
de 3) permettant de chiffrer des performances de manière approximative.
Programmes existants et propositions
Existant (programmes, transparents, TP, etc).
-
au niveau bac+2, Introduction
aux systèmes et réseaux en MIAG1 et DEUG-TI 2. Doit disparaître
dans la réforme LMD mais le contenu sera essentiellement repris
en L3 (voir plus loin) et dans le cours équivalent en MIAGE2
-
au niveau bac+5
Propositions (maquette pour LMD)
Cours
-
Cours au niveau L3 : Introduction
aux Systèmes et Réseaux
-
Cours au niveau M1 (tronc commun) :
-
Cours au niveau M1 (option proposée)
-
Cours au niveau M2
-
reprennent en gros l'existant, voir ci-dessus (DESS-GI pour M2-P et DEA
pour M2-R)
Projets (les 2 projets sont nouveaux et seront
introduits à partir de 2003-2004)
Niveau M1 : projet "système" (3 semaines), proposé
en parallèle avec le projet de compilation]
L'objectif de ce projet est de réaliser un noyau de gestion de
processus. Ce noyau doit permettre d'exécuter un programme C écrit
en terme de processus légers (threads) coopérant à
travers des données partagées. Il offre les opérateurs
permettant de créer/détruire des processus et de les synchroniser
via des objets de synchronisation (sémaphores, verrous). Une gestion
des processus en temps partagé avec priorité et un service
échéancier en font un noyau dit "temps réel".
La machine cible de ce noyau est une architecture Intel 386 "nue".
La réalisation du noyau exige de manipuler les mécanismes
de bas niveau que sont les interruptions, les commutations de contexte,
les horloges et contrôleurs
d'entrées/sorties. Si la majeure partie de la programmation
se fait en C, une petite partie se fait en assembleur.
Le développement du noyau et des programmes de test
se fait de façon "croisée" à partir d'une station
de travail Linux (édition, compilation et édition de lien).
La réalisation du noyau s'accompagne de la réalisation d'un
minimum de services permettant de charger un programme concurrent sur la
machine cible, de l'exécuter et d'interagir avec lui via le clavier
et l'écran.
Niveau M2 (également en RICM-3): projet "intégrateur"
en middleware, interaction avec aspects BD, IHM, GL.
Voir description ici.
Volumes horaires
Tableau
provisoire de la répartition prévue en 2003-2004.
Autres ressources
Voir ICAR 2003, École
d'été sur les Intergiciels et la Construction d'Applications
Réparties
Modalités de mise en oeuvre
Les modalités de l'enseignement évoluent avec les nouveaux
modes de diffusion des informations (matériau sur le web, logiciel
libre) et les exigences croissantes sur le niveau de qualité des
projets. Même si les cours sont nécessaires (surtout jusqu'à
M1) pour asseoir les principes et assurer la cohérence globale de
l'enseignement, le centre de gravité de l'activité d'enseignement
se déplace vers les activités de projets ou de travail
d'acquisition semi-encadré. La préparation des supports et
matériaux de projets, l'encadrement et la coordination de ces activités,
requièrent un effort qu'il faut chiffrer. Deux remarques peuvent
etre faites à ce propos.
-
c'est de plus en plus sur de tels projets réalistes, de taille crédible,
utilisant les techniques et les standards courants, que se fera la différenciation
entre les formations, notamment professionnelles, et que s'établira
leur rayonnement et leur attractivité tant vis-à-vis des
étudiants que de leurs futurs employeurs (et cela d'autant plus
que ces projets seront diffusés vers l'extérieur, ce qui
est un objectif visé à terme).
-
de tels projets constituent un support essentiel pour les activités
de formation permanente pour lesquelles la demande est grande.
Voir à titre d'exemple le bilan
d'une activité de projet mise en place depuis 5 ans en DESS-GI et
depuis 2 ans en RICM3.
Les activités de TP et de projet en systèmes
doivent s'appuyer largement sur de standards ouverts et sur l'usage de
logiciel libre (notamment Linux pour ce qui concerne le système
d'exploittaion), d'une part pour des raisons financières, mais surtout
pour exploiter les ressources disponibles (logiciel, documentation) et
utiliser la compétence de la communauté regroupée
autour de ces ressources.
Recommandations
Concernant les programmes et leur évolution
Il est souhaitable d'introduire plus tôt dans le cursus, même
à un niveau élémentaire :
-
les notions de programmation par objets
-
la familiarisation avec les outils courants de développement, en
particulier dans les environnements C et Java.
Sur le deuxième point, il est proposé d'introduire une option
en L3 orientée vers la programmation système (usage des interfaces
Unix en C, gestion fine de ressources, mémoires, entrées-sorties,
outils de développement).
Concernant les liens avec les autres disciplines
Il faut renforcer les liens entre le "système" et diverses disciplines
connexes.
-
algorithmique, programmation, génie logiciel
-
architecture matérielle
-
réseaux
-
bases de données, systèmes d'information
-
interaction homme-machine
Le point important est d'éviter le cloisonnement,
et cela dès le début de la formation. Par exemple, les méthodes
et outils de génie logiciel doivent être explicitement utilisés
dans le projets. D'autre part, il faut crééer des projets
"intégrateurs" regroupant plusieurs domaines. C'est ce qui
sera fait en M2 et RICM3 à partir de la rentrée 2003 (projet
ECOM
regroupant systèmes et middleware, BD, IHM). Le projet système
en M1 est également proche des aspects d'architecture matérielle.
Concernant les ressources matérielles et
logicielles
1) Il est essentiel d'augmenter la
proportion de machines équipées de systèmes Linux.
Le "double boot" d'après l'expérience acquise, n'est pas
utilisable (perte de configuration). Dans l'immédiat, le besoin
est de 4 salles de TP équipées en PC Linux.
2) Il faut examiner la possibilité d'extensions WiFi au réseau
existant pour généraliser l'usage de portables par les étudiants.
Une pré-étude sera menée sur ce sujet (coordinateur
: Jean-Marc Vincent)
Dernière mise à jour : 11
juin 2003
Pour toutes suggestions et contributions, écrire
à Sacha Krakowiak