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

ksinu.c

Aller à la documentation de ce fichier.
00001 /**
00002   @file ksinu.c
00003   Source contenant le main. Permet egalement l'initialisation de certaines variables.
00004 */
00005 
00006 #include "lib_ksinu.h"
00007 #include "systeme.h"
00008 
00009 
00010 int main (int argc, char *argv[]) {
00011   page_t page_mem,page_swap;
00012   mot_t mot_swap,mot_mem;
00013   int i,j;
00014   int num_page_swap,num_page_suivante;
00015   int mem_d;
00016 
00017   for (i=0 ; i<4 ; i++) {
00018     mot_mem[i] = (octet_t)0;
00019     mot_swap[i] = (octet_t)0;
00020   }
00021   // Ouverture du fichier simulant la mem secondaire
00022   if ((swap_d=open("f.swap",O_RDWR|O_CREAT|O_TRUNC,0666)) == -1) {
00023     fprintf(stderr,"Impossible d'ouvrir ou de creer le fihier swap\n");
00024     return -1;
00025   }
00026   // Creation d'un swap 'vide'
00027   // Remplissage du swap pour qu'il fasse NPPS*NMPPP*T_MOT*8 octets
00028   for (i=0 ; i<NMPPP ; i++) { // Page vide
00029     memcpy(page_swap[i], mot_swap, T_MOT);
00030   }
00031   for (i=0 ; i<NPPS ; i++) {
00032     if (write(swap_d,page_swap,T_PAGE) != T_PAGE) {
00033       fprintf(stderr,"Impossible d'initialiser le fihier swap\n");
00034       return -1;
00035     }
00036   }
00037   if (lseek(swap_d,0,SEEK_SET) == -1) {
00038     return -1;
00039   }
00040   // Creation de la table des pages libres du swap
00041   num_page_suivante = NMPPP*T_MOT - 1; // Les NMPPP*T_MOT 1eres pages sont stockees ds la mem RAM
00042   num_page_swap = num_page_suivante + 1;
00043   while (num_page_swap != NO_MORE_SWAP) {
00044     // Constitution d'une page contenant des numeros de pages libres
00045     for (i=0 ; i<NMPPP ; i++) {
00046       for (j=0 ; j<T_MOT ; j++) {
00047         if (num_page_swap >= NPPS)
00048           num_page_swap = NO_MORE_SWAP;
00049         mot_swap[j] = (octet_t)num_page_swap;
00050         if (num_page_swap != NO_MORE_SWAP)
00051           num_page_swap++;
00052       }
00053       memcpy(page_swap[i], mot_swap, T_MOT);
00054     }
00055     // Ecriture de la page
00056     if (lseek(swap_d,num_page_suivante*T_PAGE,SEEK_SET) == -1) {
00057       return -1;
00058     }
00059     if (write(swap_d,page_swap,T_PAGE) != T_PAGE) {
00060       return -1;
00061     }
00062     num_page_suivante = num_page_swap-1;
00063   }
00064   // Initialisation de la mem principale
00065   // Initialisation de la 1ere page
00066   // Le 1er mot contient le plus petit pid libre
00067   mot_mem[3] = (octet_t)DEBUT_T_PROC;
00068   memcpy(page_mem[0], mot_mem, T_MOT);
00069   // Initialisation de la table des processus
00070   for (i=1 ; i<N_MAX_PROC+1 ; i++) {
00071     mot_mem[2] = (octet_t)PP_NULL;
00072     memcpy(page_mem[i], mot_mem, T_MOT);
00073   }
00074   // Initialisation de la table des pages libres
00075   mot_mem[0] = (octet_t)2; // le plus petit num de page mem lire
00076   mot_mem[1] = (octet_t)0; // position courante ds la table des pages swap libres
00077   mot_mem[2] = (octet_t)PAGE_VIDE;
00078   mot_mem[3] = (octet_t)PAGE_VIDE;
00079   for (i=N_MAX_PROC+1 ; i<NMPPP ; i++) {
00080     if (i == N_MAX_PROC+2) {
00081       mot_mem[0] = (octet_t)PAGE_VIDE;
00082       mot_mem[1] = (octet_t)PAGE_VIDE;
00083     }
00084     memcpy(page_mem[i], mot_mem, T_MOT);
00085   }
00086   memcpy(mem[NUM_PAGE_META], page_mem, T_PAGE);
00087   // Initialisation de la 2eme page
00088   for (i=0 ; i<NMPPP ; i++) {
00089     for (j=0 ; j<T_MOT ; j++) {
00090       mot_mem[j] = (octet_t)j+i*T_MOT;
00091     }
00092     memcpy(page_mem[i], mot_mem, T_MOT);
00093   }
00094   memcpy(mem[NUM_PAGE_SWAP], page_mem, T_PAGE);
00095   // Pour le debuggage...
00096   mem_d=open("./f.mem",O_CREAT|O_TRUNC|O_RDWR,0666);
00097   write(mem_d,mem,NPP*NMPPP*T_MOT);
00098 
00099   // Initialisation de quelques variables
00100   quantum = 1;
00101   liste_init(liste_proc);
00102   liste_init(liste_pages);
00103 
00104   return 0;
00105 }

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