int LRU(int total_pf) { /*最近最久未使用算法(使用时钟计数器)*/ int min, minj, present_time; initialize(total_pf); present_time = 0; for (int i = 0; i < total_instruction; i++) { if (pl[page[i]].pfn == INVALID) { //页面失效,不在内存中 diseffect++; if (freepf_head == NULL) { //内存无空闲页面 min = 32767; for (int j = 0; j < total_vp; j++) { //找出内存块中time的最小值 if (min > pl[j].time && pl[j].pfn != INVALID) // 查询页表 { min = pl[j].time; minj = j; // 记下内存块号 } } freepf_head = &pfc[pl[minj].pfn]; //腾出一个单元(对应的内存块) pl[minj].pfn = INVALID; pl[minj].time = -1; freepf_head->next = NULL; } pl[page[i]].pfn = freepf_head->pfn; //有空闲页面,改为有效(内存块号) pl[page[i]].time = present_time; freepf_head = freepf_head->next; //减少一个free 页面 } else { pl[page[i]].time = present_time; //命中则设置时间 } present_time++; } printf("LRU:%6.4f\n", 1 - diseffect / 320.0); return 0; }
时间: 2024-04-07 17:28:56 浏览: 46
LRU 页面置换算法 最近最久未使用 源代码 c/c++
5星 · 资源好评率100%
这段代码是关于LRU(Least Recently Used)页面置换算法的实现。其中包含了一些变量和函数:
- `total_pf`是系统中物理页面的总数。
- `initialize(total_pf)`是一个初始化函数,用来初始化相关页面控制用数据结构。
- `pfc_type`是一个结构体类型,表示页面控制块(Page Frame Control Block),其中包含了页面号、内存块号、访问次数或作为引用位以及时间等信息。
- `freepf_head`是空闲页面队列的指针。
- `present_time`表示当前的时间。
在主函数中,对于每个需要访问的页面,如果该页表项不在内存中,则将其调入内存中,如果内存中无空闲页面,则需要进行页面置换。LRU算法采用最近最久未使用的策略,即置换最久未被使用的页面。在这个实现中,使用`time`字段记录每个页面最近被访问的时间,每次访问某个页面时,将该页面的`time`字段更新为当前时间,依此来判断哪些页面最久未被使用。当需要置换页面时,遍历内存中的所有页面,找到`time`字段最小的页面,将其置换出来。最后输出失效率(diseffect)即可。
阅读全文