from collections import OrderedDict
def lru_simulation(num_blocks, page_sequence):
# 初始化LRU缓存
cache = OrderedDict()
# 缺页计数器
page_faults = 0
# 遍历访问页面序列
for page in page_sequence:
# 检查页面是否已在缓存中
if page in cache:
# 移动页面至缓存末尾,表示它是最新的访问页面
cache.move_to_end(page)
else:
# 如果缓存已满且当前页面不在缓存中
if len(cache) == num_blocks:
# 弹出最近最少使用的页面(即第一个插入的页面)
cache.popitem(last=False)
# 添加新的页面至缓存末尾
cache[page] = True
# 缺页次数加1
page_faults += 1
# 输出缺页次数
return page_faults
# 输入部分
num_blocks = int(input("请输入进程获得使用权的主存块数量n:"))
page_sequence_str = input("请输入进程访问页面的次序,各数据之间以空格为间隔:")
page_sequence = list(map(int, page_sequence_str.split()))
3
# 运行LRU模拟
result = lru_simulation(num_blocks, page_sequence)
# 输出结果
print("采用LRU算法时的缺页次数为:", result)
# 测试样例
# 输入样例
# num_blocks = 3
# page_sequence = [1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5]
# 输出样例
# 采用LRU算法时的缺页次数为: 7