Simulation d`un outil d`aide au contrôle aérien

Transcription

Simulation d`un outil d`aide au contrôle aérien
Simulation d’un outil d’aide au contrôle aérien
Nicolas Belloir et Eric Cariou
Projet commun des modules
(( Introduction aux Systèmes Distribués )) et (( Système d’Exploitation ))
Licence Informatique 3ème année - UPPA - 2009/10
Ce document décrit le sujet du projet commun entre le module de système d’exploitation et le
module d’introduction aux systèmes distribués. Il est à faire en binôme. Il sera rendu un rapport
par partie, suivi d’une évaluation sur machine.
1
Description générale de l’application à développer
On désire simuler le fonctionnement d’un outil d’aide au contrôle aérien (appelé dans la suite
Système de Gestion du Contrôle Aérien SGCA). L’application devra permettre de prendre en charge
plusieurs avions, de présenter au contrôleur aérien la liste triée par priorité des avions dont il a la
charge. Le contrôleur pourra sélectionner un avion de cette liste et entrer au clavier une instruction.
Il n’est pas obligé de prendre le premier avion de la liste.
communication
via sockets TCP
SGCA
Gestion
Consoles
communication
via Java RMI
Console
Console
Fig. 1 – Architecture générale de l’application
L’application est constituée d’un ensemble d’éléments étant distribués, comme représenté sur la
figure 1 :
( Des avions
( Un SGCA coordonnant les communications entre les avions et le(s) contrôleur(s)
( Une console pour chaque contrôleur lui permettant, via le SGCA de contrôler des avions
Les avions et le SGCA sont à programmer en C et les consoles en Java. Pour faire le lien entre
le SGCA (en C) et les consoles (en Java), un élément particulier de gestion des consoles sera à
développer.
2
Description des éléments formant l’application
2.1
Un avion
Un avion est caractérisé par les informations suivantes : son numéro de vol, son altitude courante, sa vitesse courante, son cap courant et ses coordonnées. L’état de l’avion doit être donné au
contrôleur. Il doit être d’un de ces types :
( normal : l’avion ne présente pas de problème ;
( alarme intermédiaire : l’avion présente un problème ne nécessitant pas d’atterrissage ou de
déroutage ; il doit cependant avoir un couloir aérien plus large ;
( alarme critique : l’avion présente un problème nécessitant un atterrissage immédiat.
1
Système d’exploitation
Introduction aux systèmes distribués
Un contrôleur, via le SGCA, peut modifier les caractéristiques de l’avion en lui demandant de
changer son altitude, son cap ou sa vitesse. A intervalle de temps régulier, un avion envoie toutes
ses caractéristiques au SGCA.
La communication entre le SGCA et un avion se fait via des sockets TCP.
Pour implémenter un avion, complétez le programme avion.c qui vous a été donné. Ce programme gère le vol de l’avion en fonction de ses caractéristiques. Il reste à implémenter la partie
communication avec le SGCA.
2.2
Le SGCA
Le SGCA devra être multiprocessus. Il sera composé de quatre processus : un processus qui
calculera l’ordonnancement des avions afin d’aider le contrôleur à faire son choix, un autre qui se
chargera de la communication avec les avions, un troisième qui gérera la sécurité et l’intégrité du
système, et enfin un dernier qui se chargera de la communication avec le contrôleur. Les processus
partageront un espace de mémoire partagée. Un cycle de calcul dure 5 secondes (ce temps n’est pas
réaliste mais doit permettre une meilleure observation du fonctionnement de l’application. Ce temps
doit être par ailleurs paramétrable au lancement de l’application).
Le cycle d’exécution des processus doit être le suivant : le processus système prend la main au
début du cycle et vérifie que tout va bien dans le système. Le processus communication prend alors
la main et envoie et reçoit les messages vers/depuis les avions et les intègre au système. Le processus
ordonnanceur effectue un un tri des avions en fonctions des dernières modifications. Le processus
console prend alors la main et effectue la communication entre les consoles et le système.
2.2.1
Le processus Ordonnanceur
Ce processus a pour rôle de proposer au contrôleur une liste triée des avions qu’il a en charge.
Pour cela, il gère une fille multi-niveaux à retour représentant les 3 niveaux de criticité. En plus de
cela, il doit gérer le temps d’attente des avions. Si un avions n’est pas traité depuis longtemps, sa
priorité augmente. Cette liste doit être établie à chaque cycle.
2.2.2
Le processus de Communication
Ce processus reçoit les informations provenant des avions et les écrit en SHM. Il émet également
les ordres du contrôleur à l’intention de l’avion concerné. Chaque avion sera géré par un thread
dédié.
2.2.3
Le processus Sécurité
Ce processus surveille le fonctionnement de l’application. Pour cela, il s’assure qu’à chaque
cycle les processus ont tous terminé ce qu’ils avaient à faire. Pour cela, il surveille chaque processus avec un chien de garde (Un cycle type pour un processus correspond à une suite d’actions : chien de garde = 1 ; fonctionnel du processus ; chien de garde = 2 ; armerTimer
de t secondes ; endormissement). Si le processus de sécurité détecte trois débordements consécutifs,
il arrête l’application après en avoir averti le contrôleur et avoir marqué le problème dans un fichier
log.
2.2.4
Gestion de console
L’élément de gestion de console, à développer en Java, à pour but de faire le lien entre les consoles
écrites en Java et le reste du SGCA écrit en C. Pour cela, cet élément communiquera avec le reste
du SGCA via une socket UDP.
2
Système d’exploitation
2.3
Introduction aux systèmes distribués
Une console
Il existe deux types de console :
– Console IHM : elle affiche les données des avions sous une forme tabulaire triée par ordre de
criticité.
– Console de contrôle : pour saisir et envoyer des ordres aux avions. Le contrôleur sélectionne
d’abord le numéro de l’avion, puis tape les instructions pour l’avion sélectionné.
Plusieurs consoles de chaque type peuvent être exécutées, et cela sur plusieurs machines. Pour
les consoles de contrôle, il faudra s’assurer que deux contrôleurs ne peuvent traiter le même avion
en même temps.
La communication entre une console et le SGCA se fait en utilisant le middleware d’appels de
méthodes à distance Java RMI.
3
Travail à réaliser
La plus grosse partie du projet est commune aux deux matières. Les projets seront évalués la
semaine du 3 au 7 mai 2010. Pour chaque partie, vous rendrez, pour le 3 mai, un rapport (format
PDF) d’environ 10 pages rédigé en LATEX.
3.1
Spécificités de la partie SE
Une attention particulière sera portée à la robustesse du système ainsi qu’au respect de l’ordonnancement des processus.
3.2
Spécificités de la partie SD
Comme précisé dans le sujet, il y a trois types de communication à utiliser : les sockets TCP
pour la communication entre un avion et le SCGA, Java RMI pour la communication entre une
console et le SCGA et une socket UDP pour la communication en interne dans le SCGA entre les
parties C et la gestion de console en Java.
Une attention particulière sera portée sur la dynamicité du système. Il devra être possible de
lancer à tout moment de nouveaux avions et votre système doit gérer correctement le crash des
avions. De même, il devra être possible de lancer un nombre quelconque de consoles, de manière
dynamique.
Vous justifierez clairement les interfaces RMI que vous avez définies et donc l’interaction entre
les consoles en le SCGA.
4
Remarques
On devra pouvoir suivre via les IHM le déroulement de la simulation. Essayer de travailler de
manière modulaire afin de toujours fournir un programme exécutable. Si une partie de votre
programme ne marche pas, assurez vous de pouvoir tester le reste.
Toute tricherie impliquera un 0. Les correcteurs se réservent le droit de donner une note différenciée
à chaque membre d’un binôme.
3