spz-lab3/src/process.c

44 lines
1.1 KiB
C
Raw Normal View History

2025-03-06 21:50:29 +02:00
#include <stdlib.h>
#include <stdio.h>
#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) {
2025-03-06 23:05:21 +02:00
printf("[process %d] Writing to page #%d\n", p->id, accessed_page_no);
2025-03-06 21:50:29 +02:00
MMU_write(p->pt, accessed_page_no);
} else {
2025-03-06 23:05:21 +02:00
printf("[process %d] Reading from page #%d\n", p->id, accessed_page_no);
2025-03-06 21:50:29 +02:00
MMU_read(p->pt, accessed_page_no);
}
}
return p->pages_accessed >= p->max_accesses;
}