LRU OPT FIFO
def fifo(frames):
ram = []
pageFault = 0
for i in data:
# print(i)
if i in ram:
continue #在内存中不替换
elif len(ram) < frames: # 仍然有空闲的区域可以放页
ram.append(i)
else: # 页面置换
ram.pop(0) # 弹出头部元素
ram.append(i) # 将当前页面载入内存
pageFault += 1
return pageFault
def opt(frames):
ram = set() # create a set as memory
flag = []
pageFault = 0
for i in range(len(data)):
# print(data[i])
if(data[i] in ram):
continue
elif len(ram) < frames:
ram.add(data[i])
else:
# 找到将来最晚使用的
j = i
while(j<len(data)):
if j not in flag:
flag.append(data[j]) # flag中保存了页面的出现顺序
j += 1
for j in flag[::-1]: # 逆序遍历flag
if j in ram:
ram.remove(j) # 如果存在则从内存中删除
break
ram.add(data[i])
pageFault += 1
return pageFault
def lru(frames):
pageFault = 0
ram=set()
pageAge = np.zeros(10)
for page in data:
# print(page)
if page in ram:
pass
elif len(ram) < frames:
ram.add(page)
pageAge[page] = 1
else :
# LRU替换策略
pageFault += 1
oldest = np.argmax(pageAge)
# print("oldest page ===>", oldest)
ram.remove(oldest)
pageAge[oldest] = 0
ram.add(page)
"更新页面的年龄"
for i in ram: # 在内存中的页面要变老
pageAge[i] = pageAge[i] + 1
pageAge[page] = 1 # 进入内存则设置为1
return pageFault