00001 /** 00002 \file interpreteur.h 00003 \brief Entete de interpreteur.c 00004 */ 00005 00006 #ifndef INTERPRETEUR_H 00007 #define INTERPRETEUR_H 00008 00009 #include "lib_ksinu.h" 00010 #include "fifo.h" 00011 00012 00013 /************************************************************************************** 00014 Entierement fait par Martin Ludovic 00015 **************************************************************************************/ 00016 00017 00018 /******************************************************************************* 00019 Gestion (liberation / reservation) des num de processus et des pages physiques 00020 ********************************************************************************/ 00021 00022 /// Fonction permettant de liberer un num de processus 00023 int liberer_pid (int pid); 00024 00025 /// Fonction retournant un num de processus libre 00026 int pid_libre(); 00027 00028 /// Fonction permettant de liberer un num de page physique ds la memoire 00029 int liberer_page (int page); 00030 00031 /// Fonction retournant un num de page physique libre ds la memoire 00032 int page_libre (int pid); 00033 00034 /// Fonction retournant un num de page physique en memoire en l'ayant eventuellement liberee de force 00035 int page_forcee (int pid); 00036 00037 /// Fonction permettant de liberer un num de page physique ds le swap 00038 int liberer_page_swap (int page); 00039 00040 /// Fonction retournant un num de page physique libre ds le swap 00041 int page_swap_libre(); 00042 00043 00044 /************************************************************** 00045 Interaction entre memoire principale et secondaire 00046 **************************************************************/ 00047 00048 /// Fonction permettant de mettre en mem principale une page se trouvant ds le swap 00049 int rapatrier_page_swap (int pid, int page); 00050 00051 /// Fonction permettant de copier une page du swap ds la mem princale 00052 int page_swap2mem (int num_page_swap, int num_page_mem); 00053 00054 /// Fonction permettant de copier une page de la mem princale ds le swap 00055 int page_mem2swap (int num_page_mem, int num_page_swap); 00056 00057 00058 /*************************************************************** 00059 Gestion de la table des pages des processus 00060 ****************************************************************/ 00061 00062 // Constantes indiquant la zone de la memoire du precessus 00063 #define Z_CODE 0 // Zone de code 00064 #define Z_DONNEES 1 // Zone de donnees 00065 #define Z_PILE 2 // Zone de pile 00066 00067 /// Structure definissant une adresse virtuelle 00068 typedef struct { 00069 int zone; ///< Zone mémoire du processus (code, pile ou donnees) 00070 int num; ///< Numero du mot ds la zone 00071 } vad_t; 00072 00073 /// Structure definissant un mot physique 00074 typedef struct { 00075 int type; ///< Type de la mem ou se trouve la page (RAM ou swap) 00076 int page; ///< Numero de la page 00077 int mot; ///< Numero du mot 00078 } info_mot_t; 00079 00080 /// Fonction retournant le num de page (ds la mem ou le swap) d'une adresse virtuelle 00081 int adresse_phys (int pid, vad_t ad_v, info_mot_t *info); 00082 00083 /// Fonction permettant d'ajouter une page a la table des pages d'un processus 00084 int page_add2proc (int pid, int zone, int page); 00085 00086 /// Fonction pour supprimer la derniere page d'une zone de la table des pages d'un proc 00087 int page_supp2proc (int pid, int zone); 00088 00089 /// Fonction permettant de modifier le pid du processus pere 00090 int changer_ppid (int pid, int ppid); 00091 00092 /// Fonction permettant de lire le pid du processus pere 00093 int lire_ppid (int pid); 00094 00095 /// Modifie la hauteur de la pile 00096 int changer_esp (int pid, int op); 00097 00098 /// Retourne la hauteur de la pile 00099 int lire_esp (int pid); 00100 00101 00102 /********************************************************************** 00103 Acces (lecture / ecriture) a la memoire (principale et secondaire) 00104 ***********************************************************************/ 00105 00106 /// Fonction permettant de lire un mot se trouvant ds la mem principale 00107 int lire_mot_mem (int num_mot, int num_pp, mot_t mot); 00108 00109 /// Fonction permettant d'ecrire un mot se trouvant ds la mem principale 00110 int ecrire_mot_mem (int num_mot, int num_pp, mot_t mot); 00111 00112 /// Fonction permettant de lire un mot a partir d'une adresse virtuelle 00113 int lire_mot (int pid, vad_t ad_v, mot_t mot); 00114 00115 /// Fonction qui ecrit un mot a partir d'une adresse virtuelle 00116 int ecrire_mot (int pid, vad_t ad_v, mot_t mot); 00117 00118 /// Fonction permettant d'ecrire une page dans la mem swap 00119 int ecrire_page_swap (page_t page, int num_page); 00120 00121 00122 /************************************************************** 00123 Interpretation d'une entree de la table des processus 00124 **************************************************************/ 00125 00126 /// Fonction qui permet de changer l'etat d'un processus 00127 int changer_etat(int etat, mot_t mot); 00128 00129 /// Fonction qui permet de lire l'etat d'un processus 00130 int lire_etat(mot_t mot); 00131 00132 /// Fonction qui permet de changer le type de la table des pages d'un processus 00133 int changer_type_pp(int type, mot_t mot); 00134 00135 /// Fonction qui permet de lire le type de la table des pages d'un processus 00136 int lire_type_pp(mot_t mot); 00137 00138 00139 /************************************************************** 00140 Acces au tampons d'entrees / sorties d'un processus 00141 **************************************************************/ 00142 00143 /// Verrouille un tampon 00144 int verrouiller_tampon (int pid, int num_tampon); 00145 00146 /// Deverrouille un tampon 00147 int deverrouiller_tampon (int pid, int num_tampon); 00148 00149 /// Fonction qui ecrit un caractere dans le tampon d'entree d'un processus 00150 int ecrire_stdin (int pid, char c); 00151 00152 /// Fonction qui lit un caractere dans le tampon d'entree d'un processus 00153 int lire_stdin (int pid, char* c); 00154 00155 /// Fonction qui ecrit un caractere dans le tampon de sortie d'un processus 00156 int ecrire_stdout (int pid, char c); 00157 00158 /// Fonction qui lit un caractere dans le tampon de sortie d'un processus 00159 int lire_stdout (int pid, char* c); 00160 00161 00162 /************************************************************** 00163 Interpretation d'une instruction 00164 **************************************************************/ 00165 00166 // Code des instructions 00167 #define I_AFFECT 1 00168 #define I_AFFECTP 2 00169 #define I_SI 3 00170 #define I_SAUT 4 00171 #define I_CPILE 5 00172 #define I_DPILE 6 00173 #define I_APPEL 7 00174 #define I_RETOUR 8 00175 #define I_TEST 9 00176 #define I_TRAPPE 10 00177 #define I_AFFECTSP 11 00178 #define I_DONNEES 255 00179 00180 // Code des trappes 00181 #define T_CLONE 1 00182 #define T_RECOUVRE 2 00183 #define T_ATTENDS 3 00184 #define T_FIN 4 00185 #define T_CAPTURE 5 00186 #define T_EMETS 6 00187 #define T_ID 7 00188 #define T_IDP 8 00189 #define T_LIT 9 00190 #define T_ECRIT 10 00191 00192 /// Fonction qui execute l'instruction courante du processus donne 00193 void next_inst (int pid); 00194 00195 /// Fonction qui interprete les signaux pendant d'un processus 00196 void interprete_signaux (int pid); 00197 00198 /// Fonction qui cree un fichier contenant l'image du proc a un instant donne 00199 void creer_immage_mem (int pid); 00200 00201 /// Fonction qui cree un fichier contenant l'image de toute la mem du sys 00202 void creer_image_totale (int pid); 00203 00204 #endif