TD3 II.3+4 stress test our implementation

This commit is contained in:
Yorick Barbanneau 2021-12-16 15:40:03 +01:00
parent dcb11cf311
commit 4a67b57492
12 changed files with 95 additions and 13 deletions

5
.gitignore vendored
View file

@ -4,6 +4,8 @@
.*.d .*.d
*.coff *.coff
code/bin/coff2noff code/bin/coff2noff
code/test/forkexec
code/test/forkexec_stress
code/test/getchar code/test/getchar
code/test/getint code/test/getint
code/test/getstring code/test/getstring
@ -17,5 +19,8 @@ code/test/putstring
code/test/shell code/test/shell
code/test/sort code/test/sort
code/test/threadcreate code/test/threadcreate
code/test/userpages0
code/test/userpages0_stress
code/test/userpages1_stress
code/threads/nachos code/threads/nachos
code/userprog/nachos code/userprog/nachos

View file

@ -41,8 +41,8 @@ CFLAGS += -fsanitize=undefined
LDFLAGS += -fsanitize=undefined LDFLAGS += -fsanitize=undefined
# décommenté TD1 - partie V # décommenté TD1 - partie V
CFLAGS += -fsanitize=address #CFLAGS += -fsanitize=address
LDFLAGS += -fsanitize=address -lpthread #LDFLAGS += -fsanitize=address -lpthread
endif endif
ifeq ($(NACHOS_SYS),MAC_OS_SYS) ifeq ($(NACHOS_SYS),MAC_OS_SYS)

View file

@ -36,7 +36,7 @@
// the disk sector size, for // the disk sector size, for
// simplicity // simplicity
#define NumPhysPages 128 // Increase this as necessary! #define NumPhysPages 1024 // Increase this as necessary!
#define MemorySize (NumPhysPages * PageSize) #define MemorySize (NumPhysPages * PageSize)
#define TLBSize 4 // if there is a TLB, make it small #define TLBSize 4 // if there is a TLB, make it small

View file

@ -3,6 +3,7 @@ main()
{ {
ForkExec("../test/userpages0"); ForkExec("../test/userpages0");
ForkExec("../test/userpages0"); ForkExec("../test/userpages0");
while(1); // while(1);
ThreadExit();
} }

View file

@ -0,0 +1,18 @@
#include "syscall.h"
const int process = 12;
main()
{
int i;
for (i=0;i<process;i++){
int c = i % 2;
if ( c==0)
ForkExec("../test/userpages0_stress");
else
ForkExec("../test/userpages1_stress");
}
ThreadExit();
// while(1);
}

View file

@ -14,11 +14,11 @@ void f(int c) {
int main(){ int main(){
int i; int i;
for (i=65; i < 98; i++){ for (i=90; i < 98; i++){
ThreadCreate(f, i); ThreadCreate(f, i);
} }
// PutString("end of main()\n"); // PutString("end of main()\n");
ThreadExit(); //ThreadExit();
//return 0; //return 0;
} }
#endif #endif

View file

@ -14,7 +14,7 @@ int main () {
void* f = output; void* f = output;
ThreadCreate(f,"a"); ThreadCreate(f,"a");
ThreadCreate(f,"b"); ThreadCreate(f,"a");
PutString("\nthis is the end of our main() in test program\n"); PutString("\nthis is the end of our main() in test program\n");
ThreadExit(); ThreadExit();
} }

View file

@ -0,0 +1,21 @@
#include "syscall.h"
const int t = 13;
void output(char* s) {
int nb = 10;
int i;
for(i=0;i<nb;i++)
PutString((char*)s);
ThreadExit();
}
int main () {
void* f = output;
int i;
for (i=0;i<t;i++){
ThreadCreate(f,"b");
}
PutString("\nthis is the end of our main() in test program\n");
ThreadExit();
}

View file

@ -0,0 +1,21 @@
#include "syscall.h"
const int t = 13;
void output(char* s) {
int nb = 10;
int i;
for(i=0;i<nb;i++)
PutString((char*)s);
ThreadExit();
}
int main () {
void* f = output;
int i;
for (i=0;i<t;i++){
ThreadCreate(f,"a");
}
PutString("\nthis is the end of our main() in test program\n");
ThreadExit();
}

View file

@ -171,7 +171,7 @@ AddrSpace::AddrSpace (OpenFile * executable)
semProcessesCounter->P(); semProcessesCounter->P();
processes++; processes++;
semProcessesCounter->V(); semProcessesCounter->V();
DEBUG('x', "Increase Process counter:%d\n", processes); DEBUG('c', "Increase Process counter:%d\n", processes);
#endif //CHANGED #endif //CHANGED
AddrSpaceList.Append(this); AddrSpaceList.Append(this);
@ -190,11 +190,10 @@ AddrSpace::~AddrSpace ()
} }
#endif #endif
DEBUG('s',"Delete Page Table\n"); DEBUG('c',"Delete Page Table\n");
delete [] pageTable; delete [] pageTable;
pageTable = NULL; pageTable = NULL;
AddrSpaceList.Remove(this);
#ifdef CHANGED #ifdef CHANGED
DEBUG('c',"Delete Semaphores, memorymap\n"); DEBUG('c',"Delete Semaphores, memorymap\n");
delete semThreadsCounter; delete semThreadsCounter;
@ -204,11 +203,12 @@ AddrSpace::~AddrSpace ()
processes--; processes--;
semProcessesCounter->V(); semProcessesCounter->V();
DEBUG('c', "Decrease Process counter:%d\n", processes); DEBUG('c', "Decrease Process counter:%d\n", processes);
#endif
if ( processes == 0 ){ if ( processes == 0 ){
DEBUG('c', "No more processes on RAM, call Exit()\n"); DEBUG('c', "No more processes on RAM, call Exit()\n");
interrupt->Powerdown(); interrupt->Powerdown();
} }
#endif
AddrSpaceList.Remove(this);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View file

@ -91,7 +91,11 @@ void do_ThreadExit(){
delete currentThread->space; delete currentThread->space;
currentThread->space = NULL; currentThread->space = NULL;
} }
DEBUG('x', "Thread killed!\n");
currentThread->Finish(); currentThread->Finish();
DEBUG('x', "Thread killed!\n");
} }
void StartUserProc( void * args ){ void StartUserProc( void * args ){

View file

@ -15,7 +15,7 @@ linkstyle: bold
## Mémoire physique ## 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. tableau de char représentant la mémoire.
## ReadAtVirtual ## 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 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. 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. 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!