9#include <manux/config.h>
12#define DEBUG_MANUX_SCHEDULER
14#include <manux/errno.h>
20#if defined(MANUX_SYNCHRONISATION)
22# if defined(MANUX_EXCLUSION_MUTUELLE)
25# if defined(MANUX_CONDITION)
32#include <manux/i386.h>
33#include <manux/appelsysteme.h>
35#ifdef MANUX_DUMMY_TASK
64#if defined(MANUX_TACHES) && defined(MANUX_SYNCHRONISATION) && !defined(MANUX_REENTRANT)
106#ifdef MANUX_CONSOLES_VIRTUELLES
111 basculerVersConsoleSuivante();
184#ifdef MANUX_DUMMY_TASK
204 paniqueNoyau(
"impossible de creer la premiere tache !\n");
206#ifdef MANUX_TACHE_CONSOLE
219#if !defined(MANUX_REENTRANT) && defined(MANUX_EXCLUSION_MUTUELLE)
223 assert(tacheDansLeNoyau == 0);
227#ifdef MANUX_DUMMY_TASK
234 paniqueNoyau(
"impossible de creer la seconde tache !\n");
239#define MANUX_DUMMY_TASK_CONSOLE
240#ifdef MANUX_TACHE_CONSOLE
241#ifdef MANUX_DUMMY_TASK_CONSOLE
242 tacheSetConsole(t2, creerConsoleVirtuelle());
258#ifdef MANUX_APPELS_SYSTEME
267#ifdef MANUX_TACHE_CONSOLE
310#ifdef MANUX_TACHE_CONSOLE
326#ifdef MANUX_TACHE_CONSOLE
328# ifdef MANUX_CONSOLES_VIRTUELLES
332 console = creerConsoleVirtuelle();
337 tacheSetConsole(tache, console);
363#ifdef MANUX_TACHE_CONSOLE
389TacheID ordonnancerTache(CorpsTache corpsTache, console * cons)
393#ifdef MANUX_TACHE_CONSOLE
395# ifdef MANUX_CONSOLES_VIRTUELLES
396 if (nouvelleConsole) {
397 cons = creerConsoleVirtuelle();
409#ifdef MANUX_TACHE_CONSOLE
410 tache = creerTache(corpsTache, cons);
412 tache = creerTache(corpsTache);
Définition des opérations de synchronisation de ManuX.
Définition des exlusions mutuelles.
void exclusionMutuelleEntrer(ExclusionMutuelle *em)
Entrée en exclusion mutuelle.
Définition des fonctions de base d'accés à la console.
Console * consoleNoyau(void)
Obtention d'un pointeur sur la console par défaut.
typedef void(Handler(void))
Définition des fonctions de base d'entrée-sortie du noyau.
void insererCelluleTache(ListeTache *listeTaches, struct _Tache *tache, CelluleTache *celluleTache)
struct _Tache * extraireTache(ListeTache *listeTaches)
void initialiserListeTache(ListeTache *listeTache)
#define paniqueNoyau(fmt, args...)
#define printk_debug(lvl, fmt, args...)
Définition d'une tâche minimaliste qui est là pour afficher quelques éléments à la demande de l’utili...
void aDummyKernelTask(void)
Le corps d'une tâche à exécuter lorsqu'on n'a que ça à faire, ...
ListeTache listeTachesTerminees
: La liste des tâches achevées.
ListeTache listeToutesLesTaches
: La liste de toutes les tâches existant sur le système.
void initialiserScheduler(void)
Initialisation de l'ordonnanceur.
booleen basculerTacheDemande
TacheID numeroProchaineTache
:Le numero de la prochaine tache (WARNING : et si on cycle ?)
Atomique schedulerEnCours
ListeTache listeTachesPretes
Identifiant de la tâche actuellement en cours d'exécution dans le noyau (0 si aucune)
Tache * tacheEnCours
: La tâche en cours
booleen basculeConsoleDemandee
Temps dateDernierOrdonnancement
void ordonnanceur(void)
Le coeur de l'ordonnanceur.
TacheID ordonnanceurCreerTacheNoyau(CorpsTache corpsTache)
Création et ordonnancement d'une tâche noyau.
void ordonnanceurAddTache(Tache *tache)
Ajout d'une tâche dans l'ordonnanceur.
int sys_identifiantTache(void)
uint32_t AS_console(void)
TacheID sys_creerTache(ParametreAS as, CorpsTache corpsTache, booleen shareConsole)
int sys_basculerTache(ParametreAS as)
Définition des exclusions mutuelles.
: Définition du type décrivant une tache.
uint16_t indiceTSSDescriptor
void basculerVersTache(Tache *tache)
Tache * tacheCreer(CorpsTache corpsTache)
Création d'une nouvelle tâche.