aboutsummaryrefslogtreecommitdiff
path: root/randomp.py
diff options
context:
space:
mode:
authorpacien2018-04-05 04:09:15 +0200
committerpacien2018-04-05 04:09:15 +0200
commitae5823f486af88b8ad8d0dd3258d205a284e9833 (patch)
tree760b8791b73ea923e929e23c9489c517dc99e0d5 /randomp.py
parentca754eef8a27e7484f61413ee34d3220495a70e0 (diff)
downloadmempager-simulator-ae5823f486af88b8ad8d0dd3258d205a284e9833.tar.gz
Add random paginator
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