From 3dc844c1dfea604bc43890794a5cbc4c5fdef89d Mon Sep 17 00:00:00 2001 From: Adam NAILI Date: Mon, 2 Apr 2018 16:14:45 +0200 Subject: PageException created and LRU,Second Chance Handling --- secondchance.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 secondchance.py (limited to 'secondchance.py') diff --git a/secondchance.py b/secondchance.py new file mode 100644 index 0000000..b0fb1f9 --- /dev/null +++ b/secondchance.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +# UPEM / Programmation système / Projet : Simulation de gestion de mémoire virtuelle +# Pacien TRAN-GIRARD et Adam NAILI + +from mem import Memory +from pageexception import * + + +class SecondChancePaginator: + def __init__(self, mem): + self.mem = mem + self._check_table = [0 for _ in range(len(mem.main)+len(mem.virt))] + self._main_cursor = 0 + + def _put_main(self, page): + overwritten = self.mem.main[self._main_cursor] + while(overwritten is not None and self._check_table[overwritten] == 1): + self._main_cursor=(self._main_cursor + 1) % len(self.mem.main) + self._check_table[overwritten] = 0 + overwritten = self.mem.main[self._main_cursor] + self.mem.main[self._main_cursor] = page + self._main_cursor = (self._main_cursor + 1) % len(self.mem.main) + return overwritten + + def load(self, page): + if not self.mem.page_in_range(page): raise PageException + if page in self.mem.main: + self._check_table[page] = 1 + 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