From ae5823f486af88b8ad8d0dd3258d205a284e9833 Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 5 Apr 2018 04:09:15 +0200 Subject: Add random paginator --- myMemory.py | 5 ++++- randomp.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 randomp.py diff --git a/myMemory.py b/myMemory.py index 6e1014a..f3da2a0 100755 --- a/myMemory.py +++ b/myMemory.py @@ -8,10 +8,13 @@ from pageexception import * from fifo import FifoPaginator from lru import LruPaginator from secondchance import SecondChancePaginator +from randomp import RandomPaginator + paginators = { 'fifo': FifoPaginator, 'lru': LruPaginator, - 'secondchance': SecondChancePaginator + 'secondchance': SecondChancePaginator, + 'random': RandomPaginator } 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