diff options
-rwxr-xr-x | myMemory.py | 5 | ||||
-rw-r--r-- | randomp.py | 35 |
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 * | |||
8 | from fifo import FifoPaginator | 8 | from fifo import FifoPaginator |
9 | from lru import LruPaginator | 9 | from lru import LruPaginator |
10 | from secondchance import SecondChancePaginator | 10 | from secondchance import SecondChancePaginator |
11 | from randomp import RandomPaginator | ||
12 | |||
11 | paginators = { | 13 | paginators = { |
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 | |||
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 | |||