next up previous contents
suivant: Les services présents dans monter: Les services précédent: Définition   Table des matières

Fonctionnement

Dans KoinKoin OS, tous les services fonctionnent de façon similaire, et il est par conséquent très simple d'en créer un. En effet les étapes sont les suivantes:

  1. chaque fonction main d'un service commence par initialiser les structures propres au service, comme décrit par la suite. KoinKoin met désormais à disposition des tâches utilisateur un gestionnaire d'ensembles ou set, particulièrement adapté aux structures de gestion des services. Les ensembles devraient être fortement appréciés par les développeurs de services.
  2. Puis le service se met en attente de requêtes en provenance de tâches du même niveau ou inférieur, par un appel à la fonction wait_msg de la libc.
  3. Une fois le message reçu par le service, il est parsé par une routine du service, chaque service pouvant utiliser la syntaxe de son choix pour les données du message. Généralement cela se traduit par un switch sur le premier octet du message, contenant le code identifiant la requête.
  4. La requête étant identifiée, le service effectue le traitement associé, ou commande, en lisant les arguments dans le message si nécessaire. Liberté est laissée au développeur du service de déléguer le traitement à un autre thread, obtenu par un appel à la fonction de la librairie C utilisateur (niveau 3):

        int launch_local_thread(void *function, t_thrid *thrid);
    

    Cette fonction est mise à disposition par la librairie C utilisateur spécifique de KoinKoin, fournit par le header koinstd.h. Il s'agit d'une abstaction des appels systèmes, simplifiant la création d'un thread local. Elle se charge en effet de la création du thread, de son attachement à la tâche locale, de la réservation de la pile (taille par défaut : 1 page, soit 4Ko) et de l'initialisation de son contexte d'exécution, avec comme point d'entrée la routine function passée en paramètre.

    Ainsi il suffira au développeur d'un service de créer une fonction par fonctionnalités du service, qui sera appelée par un thread dédié à réception de la requête correspondante. Le message reçu sera passé en paramètre du thread, le passage d'argument au thread sera en effet bientôt ajouté à launch_local_thread().

Petit rappel : n'oubliez pas, dans KoinKoin OS les drivers sont avant tout des services, donc ce modèle de développement s'applique également à eux.


next up previous contents
suivant: Les services présents dans monter: Les services précédent: Définition   Table des matières
nicolas 2006-07-30