问题描述:一个进程刚刚获得三个主内存块的使用权,如果进程访问页面的顺序是1、2、3、4、1、2,5,1,2,3,4,5.当使用LRU算法时,缺页次数是多少?提示:LRU(LeastRecentlyUsed)表示最近最少使用。该算法常用于页面替换算法。当我们要访问的页面不在主存中时,将最近最少使用的页面从主存中移除,新的页面存入主存。可以用一个队列来模拟这个算法:当前访问的网页在队列的尾部,最近最少访问的网页在队列的头部。如果队列中有新访问的网页,则将该页面移到队列末尾,依次移动其他页面。如果新访问的网页不在队列中,则将队头出队,其他页面前移,新访问的页面进入队列。所谓pagefault就是主存中没有需要访问的页面。用python模拟LRU算法:List=[1,2,3,4,1,2,5,1,2,3,4,5]#这个列表存放的是要访问的页面a_list=[]#这个list用来模拟LRU算法中的主存最多可以存储3个数count=0#记录缺页数tag=1#标记是否缺页foriinList:#循环要访问的list元素ifinotina_list:#如果要访问的元素不在a_list中则为缺页count+=1tag=1iflen(a_list)<3:#如果a_list未满a_list[len(a_list)::]=[i]#相当于a_list。append(i)将元素i添加到a_listtailelse:#如果列表已满a_list[:2:]=a_list[1::]#使用切片,用最后两个元素替换前两个元素,函数firstelementofthelistoutoflista_list[2::]=[i]#移动后将第i个元素放入列表中***else:#i元素在列表中tag=0a_list[a_list.index(i)::]=a_list[a_list.index(i)+1::]#用后面的元素替换i开头和元素后面的元素第i个元素a_list[len(a_list)::]=[i]#在移动后的列表后面插入第i个元素print(a_list,"缺页"iftag==1else"无缺页")print("缺页数pagesis:",count)运算结果:
