"""
opt
请计算出页面置换次数和命中次数
"""# 作业序列
data =(0,3,7,0,4,0,2,2,1,7,0,1,1,2,0,2,0,3,3,1)# data = (4, 0, 3, 0, 0, 2, 2, 1, 7, 2, 0, 1, 0, 1, 3, 0, 1, 2, 3, 7) # 页表长度
NUM =3
cur =[]# 当前页面数据
times =0# 页面置换次数# 计算从索引开始数据列表中最远的数字 在data中# i: 从哪开始 # return 最远的数字defcount_far_num(idx):global data
global cur
tmp = cur.copy()# 决赛圈for i inrange(idx,len(data)):if data[i]in tmp:
tmp.remove(data[i])iflen(tmp)<=1:breakreturn tmp[0]for i inrange(len(data)):print(cur)# 前三个数据iflen(cur)< NUM :
cur.append(data[i])else:# 新元素不在当前列表中if data[i]notin cur:
far_num = count_far_num(i)
cur[cur.index(far_num)]= data[i]
times +=1
hit =len(data)- NUM - times # 命中次数print(times)print(hit)
fifo 代码有误,期末考完重写
"""
fifo
请计算出页面置换次数和命中次数
注意:内存的页面中“最老“的页面,会被新的网页直接覆盖,
而不是“最老“的页面先出队,然后新的网页从队尾入队。
!!!这里偷懒先这么写
"""'''
# 作业序列
data = (2, 3, 0, 2, 1, 2, 1, 7, 1, 0, 7, 4, 3, 2, 1, 3, 0, 0, 0, 0)
# 页表长度
NUM = 3
cur = [] # 当前页面数据
times = 0 # 页面置换次数
for i in data:
# 前三个数据
if len(cur) < NUM :
cur.append(i)
else:
if i not in cur:
cur.pop(0)
cur.append(i)
times += 1
hit = len(data) - NUM - times # 命中次数
print(times)
print(hit)
'''
lru
"""
lru
请计算出页面置换次数和命中次数
"""# 作业序列
data =(2,1,4,1,7,0,2,1,0,0,3,0,2,7,2,3,3,0,0,1)# 页表长度
NUM =3
cur =[]# 当前页面数据
cur_t =[]# 当前页面数据在列表中存在时间
times =0# 页面置换次数for i in data:# 前三个数据iflen(cur)< NUM :
cur.append(i)
cur_t.append(-1)else:# 新元素不在当前列表中if i notin cur:
idx = cur_t.index(max(cur_t))#最大时间的索引
cur[idx]= i
cur_t[idx]=-1# 后面+1变成0
times +=1else:
idx = cur.index(i)
cur_t[idx]=-1# 后面+1变成0# 所有存在时间 + 1for j inrange(len(cur_t)):
cur_t[j]+=1
hit =len(data)- NUM - times # 命中次数print(times)print(hit)