diff options
-rw-r--r-- | fifo.py | 10 | ||||
-rw-r--r-- | mem.py | 17 | ||||
-rw-r--r-- | myMemory.1 | 8 | ||||
-rwxr-xr-x | myMemory.py | 2 |
4 files changed, 24 insertions, 13 deletions
@@ -10,7 +10,6 @@ class FifoPaginator: | |||
10 | def __init__(self, mem): | 10 | def __init__(self, mem): |
11 | self.mem = mem | 11 | self.mem = mem |
12 | self._main_cursor = 0 | 12 | self._main_cursor = 0 |
13 | self._virt_cursor = 0 | ||
14 | 13 | ||
15 | def _put_main(self, page): | 14 | def _put_main(self, page): |
16 | overwritten = self.mem.main[self._main_cursor] | 15 | overwritten = self.mem.main[self._main_cursor] |
@@ -18,13 +17,10 @@ class FifoPaginator: | |||
18 | self._main_cursor = (self._main_cursor + 1) % len(self.mem.main) | 17 | self._main_cursor = (self._main_cursor + 1) % len(self.mem.main) |
19 | return overwritten | 18 | return overwritten |
20 | 19 | ||
21 | def _put_virt(self, page): | ||
22 | self.mem.virt[self._virt_cursor] = page | ||
23 | self._virt_cursor += 1 | ||
24 | |||
25 | def load(self, page): | 20 | def load(self, page): |
26 | if not self.mem.has_page(page): raise IndexError | 21 | if not self.mem.page_in_range(page): raise IndexError |
27 | if page in self.mem.main: return | 22 | if page in self.mem.main: return |
23 | if page in self.mem.virt: self.mem.remove_virt(page) | ||
28 | overwritten = self._put_main(page) | 24 | overwritten = self._put_main(page) |
29 | if overwritten not in self.mem.virt: self._put_virt(overwritten) | 25 | if overwritten is not None: self.mem.put_virt(overwritten) |
30 | 26 | ||
@@ -8,6 +8,7 @@ class Memory: | |||
8 | def __init__(self, main_size, virt_size): | 8 | def __init__(self, main_size, virt_size): |
9 | self.main = [None] * main_size | 9 | self.main = [None] * main_size |
10 | self.virt = [None] * virt_size | 10 | self.virt = [None] * virt_size |
11 | self._virt_cursor = 0 | ||
11 | 12 | ||
12 | def _mem_to_string(self, mem): | 13 | def _mem_to_string(self, mem): |
13 | return ''.join(['%d' % n if n is not None else 'x' for n in mem]) | 14 | return ''.join(['%d' % n if n is not None else 'x' for n in mem]) |
@@ -18,6 +19,18 @@ class Memory: | |||
18 | def dump_virt(self): | 19 | def dump_virt(self): |
19 | return self._mem_to_string(self.virt) | 20 | return self._mem_to_string(self.virt) |
20 | 21 | ||
21 | def has_page(self, page): | 22 | def page_in_range(self, page): |
22 | return 0 <= page < len(self.virt) | 23 | return 0 <= page < len(self.main + self.virt) |
24 | |||
25 | def put_virt(self, page): | ||
26 | self.virt[self._virt_cursor] = page | ||
27 | self._virt_cursor += 1 | ||
28 | |||
29 | def remove_virt(self, page): | ||
30 | for i in range(len(self.virt)): | ||
31 | if self.virt[i] == page: | ||
32 | self._virt_cursor -= 1 | ||
33 | self.virt[i] = self.virt[self._virt_cursor] | ||
34 | self.virt[self._virt_cursor] = None | ||
35 | break | ||
23 | 36 | ||
@@ -62,18 +62,20 @@ can only handle new style baz segments. COBOL | |||
62 | object libraries are not supported in this version. | 62 | object libraries are not supported in this version. |
63 | .SH EXAMPLE | 63 | .SH EXAMPLE |
64 | .nf | 64 | .nf |
65 | % ./myMemory.py -s 3 -v 8 -a fifo | 65 | % ./myMemory.py -s 3 -v 5 -a fifo |
66 | > 7 7xx | 66 | > 7 7xx |
67 | > 0 70x | 67 | > 0 70x |
68 | > 1 701 | 68 | > 1 701 |
69 | > 2 201 | 69 | > 2 201 |
70 | > p 201 7xxxx | ||
70 | > 0 201 | 71 | > 0 201 |
71 | > 3 231 | 72 | > 3 231 |
72 | > p 231 70xxxxxx | 73 | > p 231 70xxx |
73 | > 0 230 | 74 | > 0 230 |
75 | > p 230 71xxx | ||
74 | > 4 430 | 76 | > 4 430 |
75 | > 2 420 | 77 | > 2 420 |
76 | > p 420 70123xxx | 78 | > p 420 713xx |
77 | > x | 79 | > x |
78 | .fi | 80 | .fi |
79 | .SH AUTHORS | 81 | .SH AUTHORS |
diff --git a/myMemory.py b/myMemory.py index dd2aaa6..2439aae 100755 --- a/myMemory.py +++ b/myMemory.py | |||
@@ -25,7 +25,7 @@ def main(main_size, virt_size, paginator): | |||
25 | try: | 25 | try: |
26 | pag.load(int(cmd)) | 26 | pag.load(int(cmd)) |
27 | output(cmd, mem.dump_main()) | 27 | output(cmd, mem.dump_main()) |
28 | except: | 28 | except IndexError: |
29 | output(cmd, "Error: invalid page.") | 29 | output(cmd, "Error: invalid page.") |
30 | elif cmd == 'p': | 30 | elif cmd == 'p': |
31 | output(cmd, mem.dump_main() + '\t' + mem.dump_virt()) | 31 | output(cmd, mem.dump_main() + '\t' + mem.dump_virt()) |