Extension d'un noyau de processus légers

 
 

Etape 2 - Comptes a rebours

1. Que veut-on fournir

 On souhaite enrichir le noyau en ajoutant des fonctions de base de gestion du temps. Plus précisément, on veut réaliser : Le principe est d'utiliser un dispositif assimilé à un quartz, pouvant engendrer périodiquement une interruption (tick horloge).

2. Interface à réaliser

Les interfaces qui devront être fournies sont les suivantes. Ces interfaces sont bien entendu données à titre indicatif.

Interface du module Quartz

Interface du module TimeService  

3. Controle des compteurs à rebours

Les compteurs à rebours ont un fonctionnement qui respecte un automate d'état. Il est tres important de tenir compte de cette contrainte dans le code source des fonctions fournies par le module TimeService, et donc de vérifier que la pré-condition d'exécution associée à toute fonction est bien respectée.

L' automate possede deux états dénommés COUNT (compteur actif) et NO_COUNT (compteur inactif). Le comportement de cet automate est défini comme suit.

       Lancement :
              Traitant : vide
              Décompte : 0
              Etat : NO_COUNT
       NO_COUNT :
              <AttachHandlerToCounter(c, h)>
                    Traitant : h
                    Etat : NO_COUNT
              <StartCountDown(c, v)>
                    Décompte : v avec v > 0
                    Etat : COUNT
              <autre>
                    Erreur
 
       COUNT:
       <StopCountDown>
              Etat : NO_COUNT
       <Tick>
              Décompte -=1
              Si décompte == 0 alors exécuter Traitant
              Etat : NO_COUNT
       <autre>
              Erreur
 

4. Principes de mise en oeuvre

Sont ci-apres brievement décrits les principes de mise en oeuvre des modules Quartz et TimeService.
4.1 Dates
4.2 Compteur à rebours
Pour ces deux fonctionnalités, on a besoin d'effectuer un traitement particulier a chaque tick horloge (incrémentation de la date, décrémentation des compteurs, etc). Le quartz sera simulé en utilisant le Timer virtuel d'Unix (qu'utilise la version initiale du noyau pour gérer le quantum de temps-partagé).
Pour comprendre les principes d'utilisation du timer virtuel d'Unix, on pourra regarder la maniere dont est géré le temps partagé dans la version initiale du noyau fourni.

Etant donné que le timer virtuel d'Unix est maintenant utilisé pour gérer la date et les comptes à rebours, il ne peut plus servir a gérer le temps partagé comme dans la version initiale du noyau. Le temps partagé doit alors être pris en charge par un compteur à rebours particulier.

Contraintes relatives à la synchronisation
On prendra soin de rendre les fonctions atomiques des lors que celles-ci manipulent des structures de données critiques du noyau.
 
 
 

 5. Travail demandé

Il est demandé de :