00001
00002
00003
00004
00005
00006
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
00022
00023
00024
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 #define T_MAX_TAMPON (NMPPP*T_MOT) // Taille max d'un tampon (en octet)
00031
00032
00033 typedef unsigned char octet_t;
00034 typedef octet_t mot_t[T_MOT];
00035 typedef mot_t page_t[NMPPP];
00036
00037
00038 #define T_MAX_ZONES 8 // Taille max (en mots) des zones de code, donnees et pile
00039 #define NUM_MOT_IN (T_MAX_ZONES*3) // Num du mot pointant sur le tampon d'entree
00040 #define NUM_MOT_OUT (T_MAX_ZONES*3+2) // Num du mot pointant sur le tampon de sortie
00041 #define NUM_MOT_ESP (T_MAX_ZONES*3+4) // Num du mot contenant la hauteur de la pile
00042 #define SP_MAX (T_MAX_ZONES*NMPPP) // Hauteur maximale de la pile
00043 #define NUM_MOT_PPID (T_MAX_ZONES*3+5) // Num du mot contenant le ppid du processus
00044 #define NO_PERE 0 // ppid d'un processus orphelin (qui n'a pas de pere)
00045 #define NUM_MOT_EXIT (T_MAX_ZONES*3+6) // Num du mot contenant la valeur de retour du proc
00046
00047
00048 #define F_UNLOCK 0
00049 #define F_LOCK 1
00050
00051
00052 page_t mem[NPP];
00053 int swap_d;
00054
00055
00056
00057
00058
00059
00060
00061
00062 #define N_MAX_PROC (NMPPP-NPP/T_MOT-1) // Taille de la table des processus
00063 #define DEBUT_T_PAGES (N_MAX_PROC+1) // Debut de la table des pages ds la page des meta-info
00064 #define DEBUT_T_PROC 1 // Debut de la table des processus ds la page des meta-info
00065 #define NUM_PAGE_META 0 // Numero de la page des meta-inof contenant notamment la table des processus
00066 #define NUM_PAGE_SWAP 1 // Num de la page mem contenant la 1ere page de la liste des pages swap libres
00067 #define PAGE_VIDE 0 // Indique que l'emplacement (numero de pp) dans la memoire est libre
00068 #define NO_MORE_PID 0 // Plus d'emplacement libre ds la table des proc
00069 #define NO_MORE_PAGE 0 // Plus de page physique libre en memoire
00070 #define NO_MORE_SWAP 255 // Plus de page physique libre ds le swap
00071
00072
00073 #define PP_RAM 1 // RAM
00074 #define PP_SWAP 2 // Swap
00075 #define PP_NULL 0 // Inutilise par le processus
00076
00077
00078 #define E_MORT 0 // Processus mort
00079 #define E_ELIGIBLE 1 // Processus eligible
00080 #define E_ZOMBI 2 // Processus zombi
00081 #define E_SUSP 3 // Processus suspendu
00082 #define E_ATT_FILS 4 // Processus attendant la mort d'un fils
00083 #define E_ATT_LECT 5 // Processus attendant de pouvoir lire son entree standard
00084 #define E_ATT_ECRIT 6 // Processus attendant de pouvoir ecrire sur sa sortie standard
00085
00086
00087 #define C_VRAI 1 // La condition est vraie
00088 #define C_FAUX 0 // La condition est fausse
00089
00090
00091 #define M_NU 0 // Mot non utilise (par ex ceux qui se trouvent apres le haut de la pile)
00092 #define M_UT 1 // Mot utilise
00093
00094
00095
00096
00097
00098
00099
00100
00101 #define S_NULL 0 // Aucun signal
00102 #define S_KILL 1 // Arme fatale
00103 #define S_MEM 2 // Violation de memoire
00104 #define S_SUSP 4 // Suspension
00105 #define S_REP 8 // Reprise
00106 #define S_USR1 16 // Non definie 1
00107 #define S_USR2 32 // Non definie 2
00108 #define S_INSTI 64 // Instruction illegale
00109
00110
00111
00112 #define SIFUNSIG(octet) ((int)octet == S_NULL)
00113
00114 #define SIFKILL(octet) ((octet & S_KILL) == S_KILL)
00115
00116 #define SIFMEM(octet) ((octet & S_MEM) == S_MEM)
00117
00118 #define SIFSUSP(octet) ((octet & S_SUSP) == S_SUSP)
00119
00120 #define SIFREP(octet) ((octet & S_REP) == S_REP)
00121
00122 #define SIFUSR1(octet) ((octet & S_USR1) == S_USR1)
00123
00124 #define SIFUSR2(octet) ((octet & S_USR2) == S_USR2)
00125
00126 #define SIFINSTI(octet) ((octet & S_INSTI) == S_INSTI)
00127
00128
00129 typedef struct signal {
00130 int signal;
00131 int cp;
00132 struct signal *next;
00133 } signal_t;
00134
00135
00136 signal_t* table_capture[N_MAX_PROC];
00137
00138
00139
00140
00141
00142
00143
00144 struct cellule {
00145
00146 struct cellule *suivant;
00147
00148 int pid;
00149 int temps;
00150
00151 int page;
00152 };
00153
00154
00155 typedef struct {
00156 struct cellule *tete;
00157 } l_fifo;
00158
00159
00160
00161
00162
00163
00164
00165 int quantum;
00166
00167
00168 l_fifo* liste_proc;
00169
00170
00171 l_fifo* liste_pages;
00172
00173 #endif