#include #include #include "process.h" #include "mmu.h" #include "random.h" struct Process * Process(size_t proc_id, size_t max_accesses, size_t total_pages_owned) { struct Process *p = malloc(sizeof(struct Process)); p->id = proc_id; p->max_accesses = max_accesses; p->pages_accessed = 0; p->total_pages_owned = total_pages_owned; p->pt = malloc(sizeof(struct PageTableEntry) * total_pages_owned); for (size_t i = 0; i < p->total_pages_owned; i++) p->pt[i].p = 0; return p; } size_t PROCESS_run_for(struct Process *p, size_t time_bits) { for (size_t i = 0; (i < time_bits) && (p->pages_accessed < p->max_accesses); i++, p->pages_accessed++) { // no working set yet int accessed_page_no = randint(p->total_pages_owned); if (randint(10) > 7) { printf("[process] Writing to page #%d\n", accessed_page_no); MMU_write(p->pt, accessed_page_no); } else { printf("[process] Reading from page #%d\n", accessed_page_no); MMU_read(p->pt, accessed_page_no); } } return p->pages_accessed >= p->max_accesses; }