1
1
/* *
2
- * Assignment 5: Page replacement algorithms
2
+ * Assignment 5: Page replacement algorithms
3
3
* @file lru_replacement.cpp
4
- * @author ??? (TODO: your name)
4
+ * @author Caden Jamason and Adrian Reyes
5
5
* @brief A class implementing the LRU page replacement algorithms
6
6
* @version 0.1
7
7
*/
8
- // You must complete the all parts marked as "TODO". Delete "TODO" after you are done.
9
- // Remember to add sufficient and clear comments to your code
10
8
11
9
#include " lru_replacement.h"
12
10
13
- // TODO: Add your implementation here
14
11
LRUReplacement::LRUReplacement (int num_pages, int num_frames)
15
- : Replacement(num_pages, num_frames)
16
- {
17
- // TODO: Complete this constructor
18
- }
12
+ : Replacement(num_pages, num_frames) {}
19
13
20
- // TODO: Add your implementations for desctructor, touch_page, load_page, replace_page here
21
- LRUReplacement::~LRUReplacement ()
22
- {
23
- // TODO: Add necessary code here
24
- }
14
+ LRUReplacement::~LRUReplacement () {}
25
15
26
- // Accesss a page alreay in physical memory
27
- void LRUReplacement::touch_page (int page_num)
28
- {
29
- // TODO: Update your data structure LRU replacement
16
+ void LRUReplacement::touch_page (int page_num) {
17
+ // Move accessed page to front of list
18
+ lru_list.erase (page_map[page_num]);
19
+ lru_list.push_front (page_num);
20
+ page_map[page_num] = lru_list.begin ();
30
21
}
31
22
32
- // Access an invalid page, but free frames are available
33
23
void LRUReplacement::load_page (int page_num) {
34
- // TODO: Update your data structure LRU replacement and pagetable
24
+ // Calculate frame number for new page
25
+ int frame_num = total_frames - free_frames;
26
+
27
+ // Update page table with frame number and mark page as valid
28
+ page_table[page_num].frame_num = frame_num;
29
+ page_table[page_num].valid = true ;
30
+
31
+ // Move new page to front of list
32
+ lru_list.push_front (page_num);
33
+ page_map[page_num] = lru_list.begin ();
35
34
}
36
35
37
- // Access an invalid page and no free frames are available
38
36
int LRUReplacement::replace_page (int page_num) {
39
- // TODO: Update your data structure LRU replacement and pagetable
40
- return 0 ;
41
- }
37
+ // Least recently used page is at the back of the list
38
+ int victim_page = lru_list.back ();
39
+ lru_list.pop_back ();
40
+
41
+ // Update page table for victim page
42
+ page_table[victim_page].valid = false ;
43
+
44
+ // Use the frame of the victim page for the new page
45
+ page_table[page_num].frame_num = page_table[victim_page].frame_num ;
46
+
47
+ // Update page table for new page
48
+ page_table[page_num].valid = true ;
49
+
50
+ // Move new page to front of list
51
+ lru_list.push_front (page_num);
52
+ page_map[page_num] = lru_list.begin ();
53
+
54
+ // Remove victim page from map
55
+ page_map.erase (victim_page);
56
+
57
+ // Return victim page number
58
+ return victim_page;
59
+ }
0 commit comments