Page principale   Liste par ordre alphabétique   Liste des composants   Liste des fichiers   Composants   Déclarations  

lib_ksinu.h

Aller à la documentation de ce fichier.
00001 /**
00002  * @file lib_ksinu.h
00003  * Bibliotheque standard pour le projet KSInu. Definit des constantes, structures
00004  * et types pour gerer :
00005  * - la memoire principale et secondaire
00006  * - les processus
00007  */
00008 
00009 #ifndef LIB_KSINU_H
00010 #define LIB_KSINU_H
00011 
00012 #include <stdlib.h>
00013 #include <stdio.h>
00014 #include <sys/types.h>
00015 #include <sys/stat.h>
00016 #include <fcntl.h>
00017 #include <unistd.h>
00018 
00019 
00020 /***************************************************
00021  Definition de la memoire pour la machine virtuelle
00022 ***************************************************/
00023 
00024 // Definition de la memoire
00025 #define T_MOT 4             // Taille en octets d'un mot
00026 #define NPP 16              // Nb de pages physiques en memoire
00027 #define NMPPP 32            // Nb max de mot dans une page
00028 #define NPPS 255            // Nb de pages physiques dans le swap
00029 #define T_PAGE NMPPP*T_MOT  // Taille en octets d'une page
00030 
00031 // Type pour manipuler la memoire
00032 typedef unsigned char octet_t; // octet_t est un octet non signe
00033 typedef octet_t mot_t[T_MOT];  // mot_t represente un mot mem ie une instruction
00034 typedef mot_t page_t[NMPPP];   // page_t represente un page physique
00035 
00036 // Organisation de la zone memoire d'un processus
00037 #define T_MAX_CODE 8     // Taille max (en mots) de la zone de code 
00038 #define T_MAX_DONNEES 8  // Taille max (en mots) de la zone de donnees
00039 #define T_MAX_PILE 8     // Taille max (en mots) de la zone de pile
00040 
00041 // Variables globales simulant les memoires
00042 page_t mem[NPP]; // Tableau simulant la memoire principale (RAM)
00043 int swap_d;      // Descripteur du fichier simulant la memoire secondaire (swap)
00044 
00045 
00046 
00047 /***************************************************
00048  Definition pour la table des processus
00049 ***************************************************/
00050 
00051 // Constantes de la table des processus
00052 #define N_MAX_PROC (NMPPP-NPP/T_MOT-1) // Taille de la table des processus
00053 #define DEBUT_T_PAGES (N_MAX_PROC+1)   // Debut de la table des pages ds la page des meta-info
00054 #define DEBUT_T_PROC 1   // Debut de la table des processus ds la page des meta-info
00055 #define NUM_PAGE_META 0  // Numero de la page des meta-inof contenant notamment la table des processus
00056 #define NUM_PAGE_SWAP 1  // Num de la page mem contenant la 1ere page de la liste des pages swap libres
00057 #define PAGE_VIDE 0      // Indique que l'emplacement (numero de pp) dans la memoire est libre
00058 #define NO_MORE_PID 0    // Plus d'emplacement libre ds la table des proc
00059 #define NO_MORE_PAGE 0   // Plus de page physique libre en memoire
00060 #define NO_MORE_SWAP 255 // Plus de page physique libre ds le swap
00061 
00062 // Constantes indiquant le type de la page physique
00063 #define PP_RAM 1   // RAM
00064 #define PP_SWAP 2  // Swap
00065 #define PP_NULL 0  // Inutilise par le processus
00066 
00067 // Constantes indiquant les droits d'acces a une page
00068 #define D_RD 1
00069 #define D_RDWR 2
00070 
00071 
00072 
00073 /************************************************
00074  Implementation d'une pile fifo
00075 ************************************************/
00076 
00077 /// Structure d'une cellule de la pile.
00078 struct cellule {
00079   // Champ propre a la cellule
00080   struct cellule *suivant; ///< Cellule suivante ds la pile.
00081   // Champs pour les processus
00082   int pid;                 ///< Numero du processus en cours d'execution
00083   int temps;               ///< Nb de fois consecutives que le proc a ete appele.
00084   // Champ pour les pages
00085   int page;                ///< Numero d'une page physique de la memoire principale
00086 };
00087 
00088 /// Le type pile fifo.
00089 typedef struct {
00090   struct cellule *tete;
00091 } l_fifo;
00092 
00093 
00094 /***************************************************
00095  Execution des processus
00096 ***************************************************/
00097 
00098 /// Nb d'instructions executees a la suite par un processus av de rendre la main a un autre proc
00099 int quantum;
00100 
00101 /// Ordonnancement des processus
00102 l_fifo liste_proc;
00103 
00104 
00105 /***************************************************
00106  Execution des processus
00107 ***************************************************/
00108 
00109 /// Gestion de la memoire principale
00110 l_fifo liste_pages;
00111 
00112 #endif

Généré le Fri Jun 7 09:49:32 2002 pour KSInu par doxygen1.2.16