10#include <manux/config.h>
11#include <manux/types.h>
17#include <manux/i386.h>
41#ifndef MANUX_AFFECTATION_PAGES
42# define MANUX_AFFECTATION_PAGES 0x1000
62static uint32_t nombreDePagesAllouees = 0;
74 nombreDePagesAllouees++;
86 paniqueNoyau(
"Liberation de la page %d non allouee !\n", i);
88 nombreDePagesAllouees--;
108 uint32_t nbrePagesManuX, nbrePagesPile;
115 tailleMemoireDeBase, tailleMemoireEtendue);
121 nombrePages = (tailleMemoireDeBase + tailleMemoireEtendue) / 4;
136 for (i = 0; i < nombrePages; i++) {
165 for (i=0 ; i < nbrePagesManuX; i++) {
176 for (i=0 ; i < nbrePagesPile; i++) {
186 for (i=0 ; i < tailleProprietaire; i++){
236 void * pageAllouee =
NULL;
240 while ( (numeroPage < nombrePages)
246 if (numeroPage < nombrePages) {
247 reserverPage(numeroPage);
259 return nombreDePagesAllouees;
276 && (numeroPage + ++result < nombrePages)) {
286 void * result =
NULL;
290 while ( (numeroPage < nombrePages - nombre)
291 && (nombrePagesLibres(numeroPage) < nombre)) {
294 numeroPage += nombrePagesLibres(numeroPage) + 1;
298 if ((numeroPage < nombrePages) && (nombrePagesLibres(numeroPage) >= nombre)){
299 for (
uint32_t i = numeroPage; i < numeroPage+nombre; i++) {
308#if defined(MANUX_APPELS_SYSTEME) && defined(MANUX_PAGINATION)
Définition des opérations de synchronisation de ManuX.
#define MANUX_NOMBRE_PAGES_SYSTEME
#define MANUX_TAILLE_PAGE
Définition des fonctions de base d'accés à la console.
#define ADDR_VERS_PAGE(a)
typedef void(Handler(void))
#define DBG_KERNEL_MEMOIRE
#define paniqueNoyau(fmt, args...)
#define printk_debug(lvl, fmt, args...)
void * allouerPages(uint32_t nombre)
uint32_t _adresseDebutManuX[]
Implantation des sous-programme de manipulation de la mémoire sous ManuX. On fait pour le moment un tru...
uint32_t _adresseLimitePileManuX[]
int nombrePagesAllouees(void)
uint32_t adresseLimitePileManuX
void initialiserMemoire(uint32_t tailleMemoireDeBase, uint32_t tailleMemoireEtendue)
Initialisation de la mémoire au niveau pages.
int nombrePagesTotal(void)
uint32_t _adressePileManuX[]
uint32_t adresseDebutManuX
uint32_t _adresseFinManuX[]
TacheID * proprietairePage
uint32_t adressePileManuX
void libererPage(void *pageLiberee)
#define MANUX_BIOS_NB_PAGES
#define MANUX_ADRESSE_BIOS
#define MANUX_ADRESSE_IDT
#define MANUX_GDT_NB_PAGES
#define MANUX_ADRESSE_GDT
Tache * tacheEnCours
: L'identification de la tâche en cours
: Définition du type décrivant une tache.
#define MANUX_IDT_NB_PAGES