diff --git a/Makefile b/Makefile index 4d4c843..0264925 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ kernel.o: src/kernel.c config.h mmu.o: src/mmu.c gcc $(CCFLAGS) -c -o mmu.o src/mmu.c -process.o: src/process.c +process.o: src/process.c config.h gcc $(CCFLAGS) -c -o process.o src/process.c random.o: src/random.c diff --git a/config.h b/config.h index 95a4f1a..cfb50ef 100644 --- a/config.h +++ b/config.h @@ -3,3 +3,5 @@ #define WSCLOCK_TIME_WINDOW 1500 #define VERBOSE_SANITY_CHECK 0 + +#define WS_CHANGE_INVERSE_CHANCE 1000 diff --git a/src/process.c b/src/process.c index 6dcc00d..e0b3b68 100644 --- a/src/process.c +++ b/src/process.c @@ -5,6 +5,8 @@ #include "mmu.h" #include "random.h" +#include "config.h" + struct Process * Process(size_t proc_id, size_t max_accesses, size_t total_pages_owned, size_t ws_size) { @@ -27,7 +29,8 @@ Process(size_t proc_id, size_t max_accesses, size_t total_pages_owned, size_t ws return p; } -size_t PROCESS_run_for(struct Process *p, size_t time_bits) +size_t +PROCESS_run_for(struct Process *p, size_t time_bits) { if (!p) { printf("[process ?] p == NULL, something is very wrong\n"); @@ -49,7 +52,19 @@ size_t PROCESS_run_for(struct Process *p, size_t time_bits) printf("[process %d] Reading from page #%d\n", p->id, accessed_page_no); MMU_read(p->pt, accessed_page_no); } + + if (!randint(WS_CHANGE_INVERSE_CHANCE)) + PROCESS_change_working_set(p); } return p->pages_accessed >= p->max_accesses; } + +void +PROCESS_change_working_set(struct Process *p) +{ + printf("[process %d] Changing working set after %d accesses\n", p->id, p->pages_accessed); + + for (size_t i = 0; i < p->ws_size; i++) + p->ws[i] = randint(p->total_pages_owned); +}