From ae5823f486af88b8ad8d0dd3258d205a284e9833 Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 5 Apr 2018 04:09:15 +0200 Subject: Add random paginator --- randomp.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 randomp.py (limited to 'randomp.py') diff --git a/randomp.py b/randomp.py new file mode 100644 index 0000000..48e9abf --- /dev/null +++ b/randomp.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +# UPEM / Programmation système / Projet : Simulation de gestion de mémoire virtuelle +# Pacien TRAN-GIRARD et Adam NAILI + +from random import randint +from mem import Memory +from pageexception import PageException + + +class RandomPaginator: + def __init__(self, mem): + self.mem = mem + self._main_occupancy = 0 + + def _random_page(self): + if self._main_occupancy < len(self.mem.main): + return self._main_occupancy + else: + return randint(0, len(self.mem.main) - 1) + + def _put_main(self, page): + index = self._random_page() + overwritten = self.mem.main[index] + self.mem.main[index] = page + self._main_occupancy += 1 + return overwritten + + def load(self, page): + if not self.mem.page_in_range(page): raise PageException + if page in self.mem.main: return + if page in self.mem.virt: self.mem.remove_virt(page) + overwritten = self._put_main(page) + if overwritten is not None: self.mem.put_virt(overwritten) + -- cgit v1.2.3