def lru(): print("LRU算法:") n = 0 #n为计算缺页次数的变量 stor = len(pages) * [num * [' ']] x = 0 ui = [] for i in range(len(pages)): if pages[i] not in stor[i]: # 待访问页,不在内存中的页面。 if len(ui) < num: ui.append(pages[i]) else: ##待访问页面在内存 ui.remove(pages[i]) # 移除第一个,['', '',''] ui.append(pages[i]) if len(pages) > i + 1: # 页面在内存不置换的时候,复制前面一列的。 stor[i + 1] = stor[i].copy() print(*pages, sep=' ') #输出pages,间隔为" " print() for i in range(num): for j in range(len(pages)): print(stor[j][i], end=' ') print() print("缺页中断率为:{}".format(n / len(pages))) if __name__=='__main__': print("内存块个数为:",end='') num = int(input()) ##读入分配的内存块数 print("请输入页面串(按空格分隔):",end='') pages = input().split(" ") ##读入需调入的页面号 # pagesMatrix = len(pages)*[num*[' ']] ##[[' ',' ',' '],[' ',' ',' '],[' ',' ',' '],....] # storOPT = pagesMatrix.copy() # storPages = pagesMatrix.copy() ##已在内存中的页,输入的块数为一组 lru() 帮我修改这个代码,并补全
时间: 2023-12-21 10:06:56 浏览: 144
这段代码实现了LRU算法,但是有几个问题:
1. 在计算缺页中断率时,变量n没有被更新,所以无论页面是否缺页,缺页中断率始终为0。
2. 存储页面的stor列表中,每个元素都是长度为num的列表,这样会浪费空间。因为实际上只需要存储num个页面即可,每次替换时只需要更新对应位置的页面即可。
以下是修改后的代码:
```python
def lru():
print("LRU算法:")
n = 0 #缺页次数
stor = num * [' '] #存储页面的列表
ui = [] #记录页面的访问顺序
for i in range(len(pages)):
if pages[i] not in stor: #页面不在内存中,缺页
n += 1
if len(ui) < num: #内存未满,直接加入
ui.append(pages[i])
stor[ui.index(pages[i])] = pages[i]
else: #内存已满,替换最久未使用的页面
oldest = ui.pop(0)
ui.append(pages[i])
stor[stor.index(oldest)] = pages[i]
else: #页面已在内存中
ui.remove(pages[i]) #先将该页面从ui中删除
ui.append(pages[i]) #再将该页面加入ui的末尾
print(*pages, sep=' ') #输出输入的页面序列
print()
for i in range(num):
for j in range(len(pages)):
if stor[i] == pages[j]:
print(stor[i], end=' ')
else:
print(' ', end=' ')
print()
print("缺页中断率为:{}".format(n / len(pages)))
if __name__=='__main__':
print("内存块个数为:",end='')
num = int(input()) #读入分配的内存块数
print("请输入页面串(按空格分隔):",end='')
pages = input().split(" ") #读入需调入的页面号
lru()
```
修改后,stor列表只存储num个页面,每次替换时只需要更新对应位置的页面即可。在页面不在内存中时,先判断内存是否已满,如果未满,则直接将页面加入ui和stor中;如果已满,则弹出ui的最久未使用页面,并将新页面加入ui和stor中。在页面已在内存中时,先将该页面从ui中删除,再将该页面加入ui的末尾。这样可以保证ui中的页面顺序始终表示最近访问的页面在前面。最后输出缺页中断率。
阅读全文