diff --git a/.gitignore b/.gitignore index d30b159..3378431 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ .*.d *.coff code/bin/coff2noff +code/test/forkexec +code/test/forkexec_stress code/test/getchar code/test/getint code/test/getstring @@ -17,5 +19,8 @@ code/test/putstring code/test/shell code/test/sort code/test/threadcreate +code/test/userpages0 +code/test/userpages0_stress +code/test/userpages1_stress code/threads/nachos code/userprog/nachos diff --git a/code/Makefile.dep b/code/Makefile.dep index 1678db3..e42a43b 100644 --- a/code/Makefile.dep +++ b/code/Makefile.dep @@ -41,8 +41,8 @@ CFLAGS += -fsanitize=undefined LDFLAGS += -fsanitize=undefined # décommenté TD1 - partie V -CFLAGS += -fsanitize=address -LDFLAGS += -fsanitize=address -lpthread +#CFLAGS += -fsanitize=address +#LDFLAGS += -fsanitize=address -lpthread endif ifeq ($(NACHOS_SYS),MAC_OS_SYS) diff --git a/code/machine/machine.h b/code/machine/machine.h index f58b667..9d6fd32 100644 --- a/code/machine/machine.h +++ b/code/machine/machine.h @@ -36,7 +36,7 @@ // the disk sector size, for // simplicity -#define NumPhysPages 128 // Increase this as necessary! +#define NumPhysPages 1024 // Increase this as necessary! #define MemorySize (NumPhysPages * PageSize) #define TLBSize 4 // if there is a TLB, make it small diff --git a/code/test/forkexec.c b/code/test/forkexec.c index 084606b..ba49f0a 100644 --- a/code/test/forkexec.c +++ b/code/test/forkexec.c @@ -3,6 +3,7 @@ main() { ForkExec("../test/userpages0"); ForkExec("../test/userpages0"); - while(1); + // while(1); + ThreadExit(); } diff --git a/code/test/forkexec_stress.c b/code/test/forkexec_stress.c new file mode 100644 index 0000000..7823824 --- /dev/null +++ b/code/test/forkexec_stress.c @@ -0,0 +1,18 @@ +#include "syscall.h" + +const int process = 12; + +main() +{ + int i; + for (i=0;iP(); processes++; semProcessesCounter->V(); - DEBUG('x', "Increase Process counter:%d\n", processes); + DEBUG('c', "Increase Process counter:%d\n", processes); #endif //CHANGED AddrSpaceList.Append(this); @@ -190,11 +190,10 @@ AddrSpace::~AddrSpace () } #endif - DEBUG('s',"Delete Page Table\n"); + DEBUG('c',"Delete Page Table\n"); delete [] pageTable; pageTable = NULL; - AddrSpaceList.Remove(this); #ifdef CHANGED DEBUG('c',"Delete Semaphores, memorymap\n"); delete semThreadsCounter; @@ -204,11 +203,12 @@ AddrSpace::~AddrSpace () processes--; semProcessesCounter->V(); DEBUG('c', "Decrease Process counter:%d\n", processes); - #endif if ( processes == 0 ){ DEBUG('c', "No more processes on RAM, call Exit()\n"); interrupt->Powerdown(); } + #endif + AddrSpaceList.Remove(this); } //---------------------------------------------------------------------- diff --git a/code/userprog/userthread.cc b/code/userprog/userthread.cc index 6f9c99b..2dc3b92 100644 --- a/code/userprog/userthread.cc +++ b/code/userprog/userthread.cc @@ -91,7 +91,11 @@ void do_ThreadExit(){ delete currentThread->space; currentThread->space = NULL; } + + DEBUG('x', "Thread killed!\n"); currentThread->Finish(); + + DEBUG('x', "Thread killed!\n"); } void StartUserProc( void * args ){ diff --git a/rapports/td3/rapport.md b/rapports/td3/rapport.md index 22f1a64..9a3c5db 100644 --- a/rapports/td3/rapport.md +++ b/rapports/td3/rapport.md @@ -15,7 +15,7 @@ linkstyle: bold ## Mémoire physique -Notre fonction écris directement dans `machine->mainMemory`. Ceci pointer ver un +Notre fonction écris directement dans `machine->mainMemory`. Il pointe vers un tableau de char représentant la mémoire. ## ReadAtVirtual @@ -24,6 +24,18 @@ tableau de char représentant la mémoire. Cette classe gère l'allocation de page mémoire, il n'en faut qu'une seule instance de cette classe car nous devons gérer la mémoire que d'un seul endroit. -DEux instance de cette classe entrainerai des collisions : deux objets +Dux instance de cette classe entrainerai des collisions : deux objets pourraient allouer la même page. +## ForkExec + +Nous avons choisis de déclarer les vasiables pour gérer le compteur de processus +dans `threads/system.{h,cc}` et des les utiliser dans `userprog/addrspace.cc`. +Un processus, de notre point de vue est avant tout un espace d'adressage, il nous +parait plus opportun de gérer le nombre des processus avec le contruscteur et le +destructeur de la classe addrspace. + +## stress Test + +Nous n'avons pas assez de pages, la mémoire est pleine! +