My Project
Chargement...
Recherche...
Aucune correspondance
main-verrou-noyau.c
Aller à la documentation de ce fichier.
1
9#undef MANUX_RAMDISK
10
11#include <manux/config.h>
12#include <manux/bootloader.h>
13#include <manux/errno.h>
14#include <manux/console.h>
15#include <manux/clavier.h>
16#include <manux/tache.h>
17#include <manux/horloge.h> // initialiserHorloge
18#include <manux/scheduler.h>
19#include <manux/interruptions.h>
20#include <manux/io.h>
21#include <manux/segment.h>
22#include <manux/memoire.h>
23#include <manux/atomique.h>
24#include <manux/appelsysteme.h>
25#include <manux/printk.h>
26#include <manux/debug.h>
27#include <manux/segment.h>
28#include <manux/pagination.h>
29#include <manux/exclusion-mutuelle.h> // Pour le verrou général
30
31extern void init(); // Faire un init.h
32
36INoeud iNoeudConsole; // Le INoeud qui décrit la console
37
39{
40 // Récupération des informations depuis le bootloader
42
45
46 // Initialisation de la console noyau
48
49 /* Initilisation des descripteurs de segments */
50 printk_debug(DBG_KERNEL_START, "Initialisation de la GDT ...\n");
52
53 /* Initialisation de la table des interruptions */
55
56 // Le clavier nous permettra de basculer entre consoles
57 printk_debug(DBG_KERNEL_START, "Initialisation du clavier ...\n");
59
60 // On va utiliser des appels systèmes
61 printk_debug(DBG_KERNEL_START, "Initialisation des AS ...\n");
63
64 // Initialisation de la gestion des processus
65 printk_debug(DBG_KERNEL_START, "Initialisation du scheduler ...\n");
67
68 // On a besoin de l'horloge pour l'ordonnanceur
69 printk_debug(DBG_KERNEL_START, "Initialisation de l'horloge...\n");
71
72 // Avant de passer la main à init, on relâche le verrou global. On
73 // n'a donc plus accès au noyau, il faudra passer par des appels
74 // systèmes
75
76#if defined(MANUX_TACHES)
77# if defined(MANUX_REENTRANT)
78 printk_debug(DBG_KERNEL_START, "Noyau reentrant ...\n");
79# else
80 tacheDansLeNoyau = 0;
81 exclusionMutuelleSortir(&verrouGeneralDuNoyau);
82 printk_debug(DBG_KERNEL_START, "Noyau NON reentrant ...\n");
83# endif
84#endif
85
86 // On va maintenant faire de la tâche en cours une tâche "banale"
87 //tacheSetConsole(tacheEnCours, creerConsoleVirtuelle());
88
89 printk_debug(DBG_KERNEL_START, "On passe en usr ...\n");
90
91 init();
92} /* startManuX */
93
94
Définition des opérations de synchronisation de ManuX.
Définition des exlusions mutuelles.
void exclusionMutuelleSortir(ExclusionMutuelle *em)
void initialiserHorloge(void)
Initialisation du système d'horloge.
Definition horloge.c:95
void initialiserAppelsSysteme(void)
Définition des fonctions de base d'accés à la console.
int consoleInitialisation(void)
Initialisation du système de console sans notion de fichier.
Definition console.c:869
void initialiserMemoire(uint32_t tailleMemoireDeBase, uint32_t tailleMemoireEtendue)
Initialisation de la mémoire au niveau pages.
Definition memoire.c:103
Définition des fonctions de base d'entrée-sortie du noyau.
void initialiserIDT(void)
! Initialiser l'IDT (Interrupt Description Table)
void init()
void startManuX()
INoeud iNoeudConsole
Interfaçage avec les bootloader.
InfoSysteme infoSysteme
Stockage des informations décrivant le système fournies par le bootloader.
Definition bootloader.c:29
void bootloaderInitialiser(void)
Lecture des informations fournies par le bootloader.
Definition bootloader.c:46
void initialiserClavier(void)
Definition clavier.c:28
#define DBG_KERNEL_START
Definition debug.h:22
#define printk_debug(lvl, fmt, args...)
Definition debug.h:86
void initialiserScheduler(void)
Identifiant de la tâche actuellement en cours d'exécution dans le noyau (0 si aucune)
Definition scheduler.c:181
void initialiserGDT(void)
Definition segment.c:156
: Un INoeud représente un fichier, d'un point de vue statique Il s'agit donc de la description d'un f...
Definition inoeud.h:27
uint32_t memoireDeBase
Definition bootloader.h:43
uint32_t memoireEtendue
Definition bootloader.h:44