8#include <manux/stddef.h>
12#if defined(MANUX_EXCLUSION_MUTUELLE_AUDIT)
18typedef struct _CelluleExclusionMutuelle {
20 struct _CelluleExclusionMutuelle * suivant;
21} CelluleExclusionMutuelle;
23typedef struct _ListeExclusionsMutuelles {
24 CelluleExclusionMutuelle * tete;
25 CelluleExclusionMutuelle * queue;
26} ListeExclusionsMutuelles;
32ListeExclusionsMutuelles * listeExclusionsMutuellesCreer(
void)
34 ListeExclusionsMutuelles * result;
36 result = (ListeExclusionsMutuelles *)
kmalloc(
sizeof(ListeExclusionsMutuelles));
52void listeExclusionsMutuellesInserer(ListeExclusionsMutuelles * l,
ExclusionMutuelle *
c)
54 CelluleExclusionMutuelle * cell = (CelluleExclusionMutuelle *)
kmalloc(
sizeof(CelluleExclusionMutuelle));
60 cell->exclusionMutuelle =
c;
62 if (l->queue !=
NULL) {
63 l->queue->suivant = cell;
66 if (l->tete ==
NULL) {
75static ListeExclusionsMutuelles * listeExclusionsMutuelles =
NULL;
80void exclusionsMutuellesAfficherEtat(
void)
82 CelluleExclusionMutuelle * cell;
85 printk(
"\nEtat des variables d'exclusion mutuelle sur le systeme :\n\n");
86 printk(
"Excl M | en | so | Attente\n");
87 printk(
"--------+------+------+--------\n");
88 if (listeExclusionsMutuelles !=
NULL) {
89 for (cell = listeExclusionsMutuelles->tete; cell !=
NULL; cell = cell->suivant){
90 printk(
"0x%x | %4d | %4d | ",
91 cell->exclusionMutuelle,
92 cell->exclusionMutuelle->nbEntrees,
93 cell->exclusionMutuelle->nbSorties);
94 for (cellT = cell->exclusionMutuelle->tachesEnAttente.tete ;
101 printk(
"--------+------+------+--------\n");
114#if defined(MANUX_EXCLUSION_MUTUELLE_AUDIT)
118 if (listeExclusionsMutuelles ==
NULL) {
119 listeExclusionsMutuelles = listeExclusionsMutuellesCreer();
121 if (listeExclusionsMutuelles !=
NULL) {
122 listeExclusionsMutuellesInserer(listeExclusionsMutuelles, em);
156#if defined(MANUX_EXCLUSION_MUTUELLE_AUDIT)
175#if defined(MANUX_EXCLUSION_MUTUELLE_AUDIT)
#define atomiqueInit(atom, val)
#define tacheEnCoursAutoriserPreemption()
Autoriser la préemption pour la tâche en cours.
#define tacheEnCoursInterdirePreemption()
Empêcher la préemption pour la tâche en cours.
void exclusionMutuelleEntrer(ExclusionMutuelle *em)
Entrée en exclusion mutuelle.
void exclusionMutuelleInitialiser(ExclusionMutuelle *em)
Initialisation d'une exclusion mutuelle.
void exclusionMutuelleSortir(ExclusionMutuelle *em)
Définition des exlusions mutuelles.
void printk(char *format,...)
Fonction principale d'affichage dans le noyau.
void * kmalloc(size_t n)
Allocation d'une zone de n octets.
void insererCelluleTache(ListeTache *listeTaches, struct _Tache *tache, CelluleTache *celluleTache)
struct _Tache * extraireTache(ListeTache *listeTaches)
void initialiserListeTache(ListeTache *listeTache)
#define paniqueNoyau(fmt, args...)
ListeTache listeTachesPretes
: La liste des tâches prêtes sur le système
Tache * tacheEnCours
: L'identification de la tâche en cours
void ordonnanceur(void)
Basculer vers la prochaine tache à exécuter.
struct _CelluleTache * suivant
Définition des exclusions mutuelles.
ListeTache tachesEnAttente
: Définition du type décrivant une tache.