TD3 II.3+4 stress test our implementation
This commit is contained in:
parent
dcb11cf311
commit
4a67b57492
12 changed files with 95 additions and 13 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ main()
|
||||||
{
|
{
|
||||||
ForkExec("../test/userpages0");
|
ForkExec("../test/userpages0");
|
||||||
ForkExec("../test/userpages0");
|
ForkExec("../test/userpages0");
|
||||||
while(1);
|
// while(1);
|
||||||
|
ThreadExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
code/test/forkexec_stress.c
Normal file
18
code/test/forkexec_stress.c
Normal 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);
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
21
code/test/userpages0_stress.c
Normal file
21
code/test/userpages0_stress.c
Normal 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();
|
||||||
|
}
|
21
code/test/userpages1_stress.c
Normal file
21
code/test/userpages1_stress.c
Normal 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();
|
||||||
|
}
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -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 ){
|
||||||
|
|
|
@ -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!
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue