Systèmes dexploitation pour lembarqué et THINK Etude Approfondie Arnaud CONSTANCIN 25/11/2003.
-
Upload
adolphe-porte -
Category
Documents
-
view
109 -
download
2
Transcript of Systèmes dexploitation pour lembarqué et THINK Etude Approfondie Arnaud CONSTANCIN 25/11/2003.
Systèmes d’exploitation pour l’embarqué et
THINK
Etude ApprofondieArnaud CONSTANCIN25/11/2003
Arnaud Constancin2/29
Sommaire :
Tini (Tiny Internet Interface) Principe des systèmes d’exploitation THINK Is Not a Kernel Des concepts à la pratique : Think/Tini Demo !
TINI : Tini Internet Interface
PrésentationMémoire : Caractéristiques Applications industrielles
Arnaud Constancin4/29
Tini : Présentation
Moins de 100 euros OS propriétaire + JVM Micro-contrôleur DS80C390 Controleur intégrés :
Ethernet Série (x2) CAN I2c 1-Wire
Arnaud Constancin5/29
Mémoire : caractéristiques
Adressage 24 bits (4Mo) Rom : 512 ko Ram 1024 ko
Periphérical segment
Data segment Code segment
Arnaud Constancin6/29
Applications industrielles
Accès aux bus de terrains Contrôle distant de capteurs et d’actionneurs Collecte de données Domotique etc…
Principes des systèmes d’exploitations
Présentation Les ressources Les differents types de noyaux Spécificité de l’embarqué
Arnaud Constancin8/29
Les Systèmes d’exploitation
Rôle Abstractions de la machine Partage des ressources matérielles
Services Accès aux ressources
Notion de noyau Couche essentielle d’un système Gestion et partage des ressources
Arnaud Constancin9/29
Les ressources matérielles
Processeur UAL, UC, Contexte (Registres) Exceptions et évènements Mode d’exécution (superviseur / utilisateur)
Mémoire et MMU Contrôleurs de Périphériques i/o
Série, USB,PCI, AGP, Fire-Wire, WIFI, IDE, etc…
Arnaud Constancin10/29
Ressources systèmes
Abstraction des ressources matérielles Fils d’exécution (Thread) Mémoire virtuelle --> Processus Fichiers, sockets, etc…
But : répartition des ressources
Arnaud Constancin11/29
Les concepts de noyaux (1/5)
Noyau à domaine de protection unique DOS, PalmOS
Efficace
Aucune sécurité
matériel
appli
service
Arnaud Constancin12/29
Les concepts de noyaux (2/5)
Noyau monolithiques 1eres générations de Linux et d’AIX… Performant et relativement sécurisé. Peu extensible, maintenance délicate.
matériel
appli
service
Noyau monolithique
Arnaud Constancin13/29
micronoyau
Les concepts de noyaux (3/5)
Micronoyaux Mach(BSD, MacOSX), GNU-HURD Très sécurisé Peu performant (Génération actuelles optimisées)
matériel
appli service
Arnaud Constancin14/29
Les concepts de noyaux (4/5)
Noyau extensible Linux, AIX, Solaris… Chargement dynamique de code Manque de sécurité
micronoyau
matériel
appli
service
Arnaud Constancin15/29
Les concepts de noyaux (5/5)
Exonoyau Performance Extensible Perte de contrôle des ressources par le noyau
micronoyau
matériel
appli
service
Arnaud Constancin16/29
Spécificité de l’embarqué
Processeurs Simples Pas de MMU Pas de mode d’exécution
Ressources restreintes Mémoire vitesse
THINK Is Not a Kernel
Présentation et Définitions
Canevas logiciel
Fonctionnement global
Arnaud Constancin18/29
THINK : présentation
THink Is Not a Kernel Architecture pour Exo-Noyaux Préoccupation :
Extensibilité / Flexibilité / Adaptabilité / ModularitéEfficacité / PerformanceEt tout et tout...
Projet Open Source : ObjectWeb.org
Arnaud Constancin19/29
THINK : Définitions
Composants Réifient les ressources matérielles Possèdent une Interface (ou plusieurs) Associés à un nom Utilisent les services d’un canevas pour communiquer entre
eux (liaison)
Liaisons Flexibles Canal de communication inter-composant Locales / distantes Assemblage de composants (1 ou plusieurs)
Arnaud Constancin20/29
THINK : Canevas logiciel
Canevas Logiciel Naming Context
Trader (Courtier)
Binding factory (Usine de liaisons)
NanoNoyau L'essentiel pour booter !
Arnaud Constancin21/29
Fonctionnement Globale
Matériel
Nano noyau : réifie la machine sans abstraction
Composant A Composant B
Composant C
Implémente une ou plusieurs
interfacesExporte sesInterfaces--> Nom
Se lient
utilise
Usine à liaisons
Contexte de nommage
Canevas logiciel
Courtier (Trader)
Demande une interface
Des concepts à la pratique avec Think/Tini
Prototype
Codage
Démo !!
Arnaud Constancin23/29
Think/Tini : Le prototype !
Nano noyau Boot et interruption
Canevas de base de THINK Trader / Naming Context / Binding Factory
Pilotes de périphériques Leds / Afficheur LCD / Port série
Application : Interpréteur de commande sur port série
Arnaud Constancin24/29
Think/Tini : Dépendances
<component name="serialshell" class="exec"><description>This shell is provided for components debugging purpose.</description>
<file name="serialshell.tini"/><probe value="true"/><!--optionnel-->
<produces interface="input" type="activity.input"/><consumes interface="trader"/><consumes interface="BF"/><consumes interface="display"/><consumes interface="serial"/><consumes interface="leds"/>
</component>
Arnaud Constancin25/29
Think/Tini : Composition
<component name="shelltest"><description>Shell on serial port test !</description><file name="shelltest.tini"/><needs component="boot"/><needs component="libc"/><needs component="ds80c390"/><needs component="BFlocale"/><needs component="trader"/><needs component="tutorioleds"/><needs component="serial"/><needs component="tutoriodisplay"/><needs component="serialshell"/>
</component>
Arnaud Constancin26/29
Think/Tini : Interface
Décrites en Java puis converties en C
methRéférenceD’interface
Descripteur d’interface
m1
m2
m3
Structure de méthode
de l’interface
data
Variable statiques
Arnaud Constancin27/29
Think/Tini : Interface
package appli;
public interface shell {
void start();
}
typedef struct {
struct Mappli_shell *meth;
void *selfdata;
} Rappli_shell;
/* Virtual table */
struct Mappli_shell {
void* (*cast)(void* this, const unsigned char* type) reentrant;
void (*start)(void* __this) reentrant;
};
Arnaud Constancin28/29
Think/Tini : Composant Interfaces multiples :
methRéférenceD’interface 1
Descripteur Itf1
m1
m2
m3
Structure de méthode
de l’interface
data
Variable statiques
m4methRéférenceD’interface 2
Descripteur Itf 2
data
Arnaud Constancin29/29
Think/Tini : Composant
struct serialshelldata {
Rappli_shell itf;
char in_buffer[256];
};
static void start(void* __this) reentrant{/* implementation */}
static struct Mappli_shell serialshellMeth = {
meth = &serialshellMeth
selfdata = &d;
};
Arnaud Constancin30/29
Think/Tini : Composant
void serialshellProbe(void) reentrant{
static struct serialshelldata d;
serialshellMeth.start = start;
Rthink_Name* rtn;
rtn =(Rthink_Name *) CALL1(Trader, lookupfirst, "serial");
refserial =(Rdrivers_serial *)CALL2(defaultBF, bind, rtn, 0);
/* Enregistrement aupres du trader */
Rthink_Top* itfptr = (Rthink_Top *)(&(d.itf));
rtn = CALL2(defaultNC,export,itfptr,0);
CALL2(Trader,_register,rtn,"shell");
}
Arnaud Constancin31/29
Conclusion
Relativement facile à programmer --> Enseignement
Prochaines étapes : Reconfiguration dynamique Multitâche Communication évènementielle
Arnaud Constancin32/29
Petite démo
Application : interpréteur de commande Saisie des commandes
Lecture de caractère sur le port série
Appels des jeux de test des composants Test des Leds, Affichage de message sur le LCD, Envoie de chaîne de caractères sur le port série