diff options
author | pacien | 2018-04-05 04:09:15 +0200 |
---|---|---|
committer | pacien | 2018-04-05 04:09:15 +0200 |
commit | ae5823f486af88b8ad8d0dd3258d205a284e9833 (patch) | |
tree | 760b8791b73ea923e929e23c9489c517dc99e0d5 /randomp.py | |
parent | ca754eef8a27e7484f61413ee34d3220495a70e0 (diff) | |
download | mempager-simulator-ae5823f486af88b8ad8d0dd3258d205a284e9833.tar.gz |
Add random paginator
Diffstat (limited to 'randomp.py')
-rw-r--r-- | randomp.py | 35 |
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 | |||
6 | from random import randint | ||
7 | from mem import Memory | ||
8 | from pageexception import PageException | ||
9 | |||
10 | |||
11 | class 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 | |||