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

test.c

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

Généré le Sun Sep 29 22:47:23 2002 pour KSInu par doxygen1.2.16