Python 实现页面置换FIFO LRU算法

def FIFO(pages,cap):
    frame=[]
    p=0
    c=0
    for page in pages:
        if page not in frame:
            if len(frame) <cap:
                print("主页号"+str(frame))
                frame.append(page)
                c+=1
            else:
                frame[p%cap]=page
                print("主存业号"+str(frame)+"   淘汰"+str(frame[p%cap]))
                p+=1
                c+=1
        else:
            print("主存业号" + str(frame) )
    print("缺页中断率为"+str(c/len(pages)))
def LRU(pages,cap):
    frame=[]
    dp=0
    c=0
    for page in pages:
        if page not in frame:
            if len(frame)<cap:
                frame.append(page)
                frame.reverse()
                print("主存业号"+str(frame))
                frame.reverse()
                c+=1
            else:
                dp = frame[0]
                del(frame[0])
                frame.append(page)
                frame.reverse()
                print("主存业号" + str(frame)+"    淘汰  "+str(dp))
                frame.reverse()
                c+=1
        else:
            frame.remove(page)
            frame.append(page)
            frame.reverse()
            print("主存业号" + str(frame))
            frame.reverse()
    print("缺页中断率"+str(c/len(pages)))

if __name__ == '__main__':
    pages1=[7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1]
    cap=4
    # FIFO(pages1,cap)
    LRU(pages1,cap)

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,请求分页存储管理是指将一个进程所需的所有页面分为若干个固定大小的块,每个块称为一页,再将这些页调入内存中,以满足进程运行的需要。当内存中的页不足时,需要进行页面置换算法。 常用的页面置换算法有Optimal、FIFOLRU三种。 下面是这三种算法的简单实现: 1. Optimal算法 Optimal算法是一种理论上最优秀的页面置换算法,它选择在未来最长时间内不再被访问的页面进行置换实现思路: (1)对于每个内存块,预测它在未来的访问情况。 (2)选择未来最长时间内不再被访问的页面进行置换。 代码实现: ```python def optimal(pages, frames): page_faults = 0 page_frames = [None] * frames next_use = [0] * frames for i in range(len(pages)): if pages[i] not in page_frames: if None in page_frames: page_frames[page_frames.index(None)] = pages[i] else: farthest = max(j for j in range(len(page_frames)), key=lambda k: next_use[k]) page_frames[farthest] = pages[i] page_faults += 1 next_use[page_frames.index(pages[i])] = max(j for j in range(i, len(pages)) if pages[j] == pages[i]) if pages[i] in pages[i+1:] else len(pages) else: next_use[page_frames.index(pages[i])] = max(j for j in range(i, len(pages)) if pages[j] == pages[i]) if pages[i] in pages[i+1:] else len(pages) return page_faults ``` 2. FIFO算法 FIFO算法选择最先进入内存的页面进行置换实现思路: (1)使用一个队列来保存进入内存的页面,队首是最先进入的页面。 (2)当需要进行页面置换时,选择队首的页面进行置换。 代码实现: ```python def fifo(pages, frames): page_faults = 0 page_frames = [None] * frames queue = [] for i in range(len(pages)): if pages[i] not in page_frames: if None in page_frames: page_frames[page_frames.index(None)] = pages[i] queue.append(pages[i]) else: page_frames[page_frames.index(queue.pop(0))] = pages[i] queue.append(pages[i]) page_faults += 1 return page_faults ``` 3. LRU算法 LRU算法选择最近最少使用的页面进行置换实现思路: (1)使用一个列表来保存进入内存的页面,列表末尾是最近使用的页面。 (2)当需要进行页面置换时,选择列表头部的页面进行置换。 代码实现: ```python def lru(pages, frames): page_faults = 0 page_frames = [None] * frames for i in range(len(pages)): if pages[i] not in page_frames: if None in page_frames: page_frames[page_frames.index(None)] = pages[i] else: farthest = max(j for j in range(len(page_frames)), key=lambda k: pages[i-1::-1].index(page_frames[k]) if page_frames[k] in pages[i-1::-1] else -1) page_frames[farthest] = pages[i] page_faults += 1 return page_faults ``` 以上是Optimal、FIFOLRU三种页面置换算法的简单实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值