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
*.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

View file

@ -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)

View file

@ -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

View file

@ -3,6 +3,7 @@ main()
{
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 i;
for (i=65; i < 98; i++){
for (i=90; i < 98; i++){
ThreadCreate(f, i);
}
// PutString("end of main()\n");
ThreadExit();
//ThreadExit();
//return 0;
}
#endif

View file

@ -14,7 +14,7 @@ int main () {
void* f = output;
ThreadCreate(f,"a");
ThreadCreate(f,"b");
ThreadCreate(f,"a");
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,"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();
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);
}
//----------------------------------------------------------------------

View file

@ -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 ){

View file

@ -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!