aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpacien2018-04-05 04:09:15 +0200
committerpacien2018-04-05 04:09:15 +0200
commitae5823f486af88b8ad8d0dd3258d205a284e9833 (patch)
tree760b8791b73ea923e929e23c9489c517dc99e0d5
parentca754eef8a27e7484f61413ee34d3220495a70e0 (diff)
downloadmempager-simulator-ae5823f486af88b8ad8d0dd3258d205a284e9833.tar.gz
Add random paginator
-rwxr-xr-xmyMemory.py5
-rw-r--r--randomp.py35
2 files changed, 39 insertions, 1 deletions
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 *
8from fifo import FifoPaginator 8from fifo import FifoPaginator
9from lru import LruPaginator 9from lru import LruPaginator
10from secondchance import SecondChancePaginator 10from secondchance import SecondChancePaginator
11from randomp import RandomPaginator
12
11paginators = { 13paginators = {
12 'fifo': FifoPaginator, 14 'fifo': FifoPaginator,
13 'lru': LruPaginator, 15 'lru': LruPaginator,
14 'secondchance': SecondChancePaginator 16 'secondchance': SecondChancePaginator,
17 'random': RandomPaginator
15} 18}
16 19
17 20
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