7#include <manux/config.h>
23#ifdef MANUX_CLAVIER_CONSOLE
27# include <manux/appelsysteme.h>
29#ifdef MANUX_KMALLOC_STAT
32#ifdef MANUX_VIRTIO_CONSOLE
35#ifdef MANUX_VIRTIO_NET
38#if defined(MANUX_EXCLUSION_MUTUELLE)
41#if defined(MANUX_CONDITION)
44#if defined(MANUX_RESEAU)
55#ifdef MANUX_CLAVIER_CONSOLE
57#ifdef MANUX_DEBUGMASK_VAR
58char * debugFlagNames[32] = {
77#define MIN(a, b) (((a)<(b))?(a):(b))
78#define MAX(a, b) (((a)>(b))?(a):(b))
81void debugMasqueAfficherFlag(
int n)
86 if (f & masqueDebugageConsoleSave) {
101void debugMasqueAfficher(
void)
112 for (n = 0 ; n < 15 ; n++) {
113 debugMasqueAfficherFlag(n);
116 printkc(
"masqueDebugageConsole = 0x%x\n", masqueDebugageConsoleSave);
122 printkc(
"%c[24;0Hi = Haut / k = bas / j = Console / l = fichier / espace = fin ",
ASCII_ESC);
138 masqueDebugageConsoleSave = masqueDebugageConsoleSave ^(1 << i);
139 debugMasqueAfficherFlag(i);
141 printkc(
"masqueDebugageConsole = 0x%x\n", masqueDebugageConsoleSave);
146 debugMasqueAfficherFlag(i);
148 printkc(
"masqueDebugageConsole = 0x%x\n", masqueDebugageConsoleSave);
159void debugMasqueModifier(
void)
161 printkc(
"masqueDebugageConsole : ");
164 printkc(
"masqueDebugageFichier : ");
176void appelsSystemeAfficher(
void)
180 printkc(
"\nTache | Appels Systeme (num:in/out)\n");
181 printkc(
"-------+----------------------------------------\n");
183 celluleTache !=
NULL;
184 celluleTache = celluleTache->
suivant){
188 if (celluleTache->
tache->nbAppelsSystemeIn[i]) {
190 celluleTache->
tache->nbAppelsSystemeIn[i],
191 celluleTache->
tache->nbAppelsSystemeOut[i]);
199#ifdef MANUX_INT_AUDIT
207void interruptionAfficher(
void)
214 printkc(
" [ %3x : %5d ]", i, nbItRecues[i]);
222 printkc(
" [ %3x : %5d ]", i, nbItRecues[i]);
230 printkc(
" [ %3x : %5d ]", i, nbItRecues[i]);
237#if defined(MANUX_TACHES) \
238 && defined(MANUX_SYNCHRONISATION) \
239 && defined(MANUX_EXCLUSION_MUTUELLE) \
240 && !defined(MANUX_REENTRANT)
244void afficherEtatMutex()
246 printkc(
"\n-- Tache dans le noyau : %d \n-- Taches en attente : ", tacheDansLeNoyau);
247 for (
CelluleTache * celluleTache = verrouGeneralDuNoyau.tachesEnAttente.tete;
248 celluleTache !=
NULL;
249 celluleTache = celluleTache->
suivant){
252#ifdef MANUX_EXCLUSION_MUTUELLE_AUDIT
253 printkc(
"\n-- %d ent / %d sor\n", verrouGeneralDuNoyau.nbEntrees, verrouGeneralDuNoyau.nbSorties);
261static void dummyMessageAide(
void);
262static void dummyCopieEcran(
void);
264typedef struct _MenuDebogage {
273MenuDebogage menuDebogage[] = {
274 {
'h', dummyMessageAide,
"Afficher ce menu d'aide"},
275#ifdef MANUX_DEBUGMASK_VAR
276 {
'd', debugMasqueAfficher,
"Editer les masques de debug"},
278#ifdef MANUX_APPELS_SYSTEME
279 {
'a', appelsSystemeAfficher,
"Voir le decompte des appels systeme"},
281 {
'i', interruptionAfficher,
"Voir le decompte des interruptions"},
283#ifdef MANUX_KMALLOC_STAT
286#if defined(MANUX_BUFFER_RESEAU)
296static void dummyMessageAide(
void)
300 printkc(
"%c[2JBienvenue dans la tache d'observation/debogage\n",
ASCII_ESC);
302 printkc(
"Vous pouvez utiliser les touches suivantes :\n");
305 for (i = 0; menuDebogage[i].touche != 0; i++){
306 printkc(
" [%c] %s\n", menuDebogage[i].touche, menuDebogage[i].aide);
313#define TAILLE_ECRAN (MANUX_CON_LIGNES*MANUX_CON_COLONNES)
315static void dummyCopieEcran(
void)
317 int s = TAILLE_ECRAN - 1 - 80;
322 char * buffer =
kmalloc(TAILLE_ECRAN);
324 char buffer[TAILLE_ECRAN];
331 for (; ((s >=0) && (ecran[2*s] ==
' ')); s--) {}
337 buffer[
d--] = ecran[2*s];
350static void afficherMenuActif(
void)
353 menuDebogage[menuActif].action();
366static void dummyTraiterClavier(
void)
373 while (cons->nbCarAttente) {
374 consoleLire(cons, &
c, 1);
375 for (i = 0; menuDebogage[i].touche != 0; i++){
376 if (
c == menuDebogage[i].touche) {
379 }
else if (
c ==
' ') {
381 }
else if (
c ==
'!') {
398#ifdef MANUX_CLAVIER_CONSOLE
403#if defined(MANUX_EXCLUSION_MUTUELLE) && !defined(MANUX_REENTRANT)
407 assert(tacheDansLeNoyau == 0);
413#ifdef MANUX_CLAVIER_CONSOLE
414 dummyTraiterClavier();
417#if defined(MANUX_EXCLUSION_MUTUELLE) && !defined(MANUX_REENTRANT)
420 tacheDansLeNoyau = 0;
Définition des codes ASCII (C) Manu Chaput 2026-2026.
void aDummyKernelTask(void)
Le corps d'une tâche à exécuter lorsqu'on n'a que ça à faire, ...
Définition des caractéristiques de base de l'écran.
#define MANUX_CON_COLONNES
Définition des exlusions mutuelles.
void exclusionMutuelleEntrer(ExclusionMutuelle *em)
Entrée en exclusion mutuelle.
void exclusionMutuelleSortir(ExclusionMutuelle *em)
#define NB_MAX_APPELS_SYSTEME
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 printk(char *format,...)
Fonction principale d'affichage dans le noyau.
#define printkc
Une version de printk qui écrit dans la console de la tâche en cours.
void kmallocAfficherStatistiques(void)
void * kmalloc(size_t n)
Allocation d'une zone de n octets.
void kfree(void *p)
Libération d'une zone mémoire allouée.
#define masqueDebugageFichier
#define masqueDebugageConsole
#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 reseauAfficherListeReception(void)
Affichage de la liste de buffers de réception.
#define MANUX_NB_INTERRUPTIONS
#define MANUX_NB_EXCEPTIONS
ListeTache listeToutesLesTaches
: La liste de toutes les tâches existant 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
void afficherEtatTaches(void)
Affichage des tâches.
Définition des éléments de base des consoles virtio.