3.28
时长:一个小时
题目:
8-4 【Python0005】模拟页面调度LRU算法
分数 10
作者 doublebest
单位 石家庄铁道大学
【题目描述】所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。
问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】在第一行中输入进程获得使用权的主存块数量n。
在第二行中输入进程访问页面的次序,各数据之间以空格为间隔。
【输出格式】输出对于给定的n和进程访问页面的次序,输出采用LRU算法时的缺页次数。
【输入样例】3
1 2 3 4 1 2 5 1 2 3 4 5
【输出样例】7
代码量:
from collections import OrderedDict
def lru_page_faults(page_sequence, memory_size):
# 初始化一个OrderedDict来存储当前在内存中的页面及其访问时间(这里用索引表示时间)
memory = OrderedDict()
# 缺页计数器
page_faults = 0
for page in page_sequence:
# 如果页面已经在内存中,更新其访问时间(移到末尾)
if page in memory:
del memory[page] # 移除旧记录,以便重新插入时放于末尾
else:
# 如果内存已满,移除最久未使用的页面(即最前面的页面)
if len(memory) == memory_size:
memory.popitem(last=False) # 移除最早访问的页面
page_faults += 1 # 发生缺页
else:
page_faults += 1 # 新的页面访问,且内存未满,也计为缺页
# 将当前页面加入到内存中(表示最近访问)
memory[page] = None
return page_faults
# 示例
page_sequence = [1, 2, 3, 4, 2, 1, 5, 6, 2, 3]
memory_size = int(input("请输入主存块数量n(n>1):"))
print("缺页次数:", lru_page_faults(page_sequence, memory_size))