aboutsummaryrefslogtreecommitdiff
path: root/randomp.py
diff options
context:
space:
mode:
Diffstat (limited to 'randomp.py')
-rw-r--r--randomp.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/randomp.py b/randomp.py
new file mode 100644
index 0000000..48e9abf
--- /dev/null
+++ b/randomp.py
@@ -0,0 +1,35 @@
1#!/usr/bin/env python3
2
3# UPEM / Programmation système / Projet : Simulation de gestion de mémoire virtuelle
4# Pacien TRAN-GIRARD et Adam NAILI
5
6from random import randint
7from mem import Memory
8from pageexception import PageException
9
10
11class RandomPaginator:
12 def __init__(self, mem):
13 self.mem = mem
14 self._main_occupancy = 0
15
16 def _random_page(self):
17 if self._main_occupancy < len(self.mem.main):
18 return self._main_occupancy
19 else:
20 return randint(0, len(self.mem.main) - 1)
21
22 def _put_main(self, page):
23 index = self._random_page()
24 overwritten = self.mem.main[index]
25 self.mem.main[index] = page
26 self._main_occupancy += 1
27 return overwritten
28
29 def load(self, page):
30 if not self.mem.page_in_range(page): raise PageException
31 if page in self.mem.main: return
32 if page in self.mem.virt: self.mem.remove_virt(page)
33 overwritten = self._put_main(page)
34 if overwritten is not None: self.mem.put_virt(overwritten)
35