A) Mise en oeuvre sous linux
============================
1. A faire une seule fois par compte informatique
----------------------------------------------
* A la racine du compte, taper
cp .cshrc .tcshrc puis nedit .tcshrc
* Ajouter la ligne (dans la partie Linux) :
alias sig_init 'source /user/info_lib/signal/Linux/polychronyEnv'
et sauvegarder le fichier.
2. A faire une seule fois au de'but de chaque session (ou dans chaque terminal)
--------------------------------------------------
* Taper /bin/tcsh
(sig_init est de'sormais disponible)
sig_init
- permet d'utiliser dans la me^me fene^tre terminal les commandes :
sig_comp, sig_make, sig_exec, sig_save, sig_wash, sig_redo, sig_data, sig_resu
- se passe bien si donne uniquement des messages commencant par
%% WARNING %% ou par >>>> use
3. De'roulement pour chaque exercice (prog) sous Linux
---------------------------------------------------
* cre'ation d'un sous-re'pertoire particulier pour chaque nouvel exercice
Tous les fichiers (prog.SIG, prog.par, R*.dat) doivent e^tre dans ce
sous-re'pertoire, et toutes les commandes sig_* doivent e^tre exe'cute'es
a` partir de ce sous-re'pertoire.
* cre'ation du fichier source : nedit prog.SIG
(et e'ventuellement du fichier prog.par --> voir chapitre B)
Attention ! Les noms du fichier et du process
doivent e^tre identiques a` la majuscule pre`s.
* compilation signal -> C :
sig_comp prog
- lance: la destruction des fichiers d'erreurs (voir ci-dessous)
sig -c prog.SIG prog.par
(s'il n'y a pas de .par, lance juste sig -c prog.SIG)
- ge'ne`re: des fichiers .c et .h
- se passe bien si aucun warning ni aucun nouveau fichier .SIG ge'ne're'
- peut afficher certaines erreurs de syntaxe
que l'on peut retrouver dans le fichier POLYCHRONY_STDERR.log
* en cas d'erreur, la compilation ge'ne`re les fichiers:
PROG_LIS.SIG et/ou PROG_CYC.SIG et/ou PROG_TRA.SIG et/ou PROG_bDC_TRA.SIG
sig_list prog
- permet de les visualiser;
. regarder les messages d'erreur dans ces fichiers.
. quand il n'y a plus d'erreur, passer a` l'e'tape suivante.
* compilation C -> exe'cutable :
sig_make prog
- ne'cessite un re'pertoire contenant les fichiers .c et .h ge'ne're's par sig_comp
- lance: cc -o ./prog.x ./prog/*.c -I $sigdir/Signal/lib/C/export -lm
- ge'ne`re: des fichiers .o et l'exe'cutable prog.x
- la compilation C ne devrait pas produire d'erreur
* cre'ation des fichiers de donne'es en entre'e :
par exemple: nedit REntree.dat (pour le signal Entree)
(plus e'ventuellement des fichiers RC_*.dat --> voir chapitre C)
* exe'cution :
sig_exec prog
- lance ./prog.x
- ne'cessite les fichiers R*.dat
(RTOP.dat, RCOMMANDE.dat, RTERMINEE.dat pour le veilleur)
et e'ventuellement les fichiers RC_*.dat
(RC_TOP.dat, RC_COMMANDE.dat, RC_TERMINEE.dat pour le veilleur)
- ge'ne`re: les fichiers de sortie W*.dat
(WALARME.dat pour le veilleur)
* visualisation des fichiers de donne'es en sortie :
- par exemple: more WSortie.dat (pour le signal Sortie)
(plus e'ventuellement un fichier montrant l'horloge du
signal Sortie, par exemple C_Sortie --> WC_Sortie.dat)
sig_data prog
- permet de visualiser tous les R*.dat
sig_resu prog
- permet de visualiser tous les W*.dat
ATTENTION : uniquement apre`s un sig_save ou sig_redo
- pour le veilleur :
. Regarder le fichier WALARME.dat
. Question: La valeur pre'sente dans ce fichier est certainement bonne (!!!),
mais comment connaitre son horloge ?
. Re'ponse: Il faut ajouter un signal de sortie concu pour cela :
boolean C_ALARME
qui devra e^tre faux aux instants ou` ALARME est absent
>>> Exercice: e'crire la de'finition de ce signal et ve'rifier WC_ALARME.dat
* nettoyage du compte
- sig_wash prog
ne conserve que le .SIG (+ .par) et les R*.dat
- sig_save prog
ATTENTION : a` faire avant sig_wash prog !
permet de conserver en plus l'exe'cutable et les W*.dat
* re'percuter une petite modification
- sig_redo prog
. enchai^ne toutes les ope'rations apre`s une modification de prog.SIG ou prog.par
sig_comp, sig_make, sig_exec, sig_save, sig_wash
. s'il y a des erreurs, refaire sig_comp pour pouvoir visualiser les PROG_*.SIG
B) Les parame`tres
==================
* Ne pas confondre parame`tre (une seule valeur) et
signal d'entre'e (suite de valeurs).
* L'ordre des parame`tres n'est pas indiffe'rent.
* Cre'er un fichier du me^me nom que le fichier source (.SIG)
mais d'extension .par .
* Ne cre'er de fichier .par que si le processus a au moins un
parame`tre (le fait que des sous-processus aient des parame`tres
n'implique pas que le processus en ait !)
* La cre'ation du fichier .par doit intervenir avant la compilation.
* Modifier le fichier .par oblige a` re-compiler.
* Les valeurs des parame`tres doivent e^tre se'pare's par des virgules.
C) Fichiers de donne'es / Exe'cution / Fichiers de re'sultats
=============================================================
1. Entre'es monochrones (premiers exercices)
--------------------
* Il suffit de cre'er un fichier R*.dat par signal d'entre'e.
Les valeurs peuvent e^tre se'pare'es par des espaces et/ou
des retours a` la ligne.
2. Entre'es polychrones (exemple du veilleur)
--------------------
* En plus des fichiers R*.dat :
- RTOP.dat :
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
- RCOMMANDE.dat :
7 8 9
- RTERMINEE.dat :
1 1 1
Ces fichiers ne testent pas TOUS les cas inte'ressants.
>>> Exercice: e'crire des tests exhaustifs.
* Les signaux d'entre'e n'ayant pas la me^me horloge, il faut
pre'ciser leurs horloges respectives dans des fichiers
RC_TOP.dat, RC_COMMANDE.dat, et RC_TERMINEE.dat :
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1
0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0
Explication : a` chaque 1 dans RC_*.dat, on va chercher la
valeur suivante dans le fichier R*.dat correspondant ;
a` chaque 0 dans RC_*.dat, correspond une absence de valeur.
FIN DU MODE D'EMPLOI