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))
posted @ 2024-06-19 17:39  孙锺鸣  阅读(1)  评论(0编辑  收藏  举报