页面置换算法

'''
目的:
熟悉页面置换算法及其实现,引入计算机系统性能评价方法的概念。
内容:
编制页面置换算法的模拟程序。
要求:
(1)	用随机数方法产生页面走向,页面走向长度为L。
(2)	根据页面走向,分别采用FIFO和LRU算法进行页面置换,统计缺页率。
(3)	假定可用内存块和页表长度 (作业的页面数)分别为m和k,初始时,作业页面都不在内存。
'''
# write on 2019/5/6 12:49
from numpy import *
import random

class pageReplacement:
    page_length = 0    #页面长度
    available_memory_block = 0    #可用内存块
    n  = 0    #用来产生随机数的种子
    page = []    #访问的...
    memory = []    #内存
    k = 0    #缺页中断的次数
    page_fault_rate = 0.0    #缺页率 = k/page_length

    def __init__(self, page_length = 0 ,available_memory_block = 0 ,n = 0):
        self.available_memory_block = available_memory_block
        self.n = n
        self.page_length = page_length
        for i in range(available_memory_block):
            self.memory.append(None)
        for i in range(page_length):
            self.page.append(random.randint(0,n-1))

    def __FIFO__(self):
        index = 0
        for i in range(self.page_length):
            index = index % self.available_memory_block
            if self.page[i] not in self.memory  :    #如果在内存中没有,则从外存中搬到内存,且发生了缺页中断
                self.memory[index] = self.page[i]
                self.k += 1
                index += 1
        self.page_fault_rate = self.k/self.page_length

    def __LRU__(self):
        for i in range(self.page_length):
            if (self.page[i] not in self.memory) :    #如果在内存中没有,则从外存中搬到内存,且发生了缺页中断
                if None in self.memory:
                    for j in range(self.available_memory_block):
                        if self.memory[j] == None:
                            self.memory[j] = self.page[i]
                            self.k += 1
                            break
                else:
                    for j in range(self.available_memory_block-1):
                        self.memory[j] = self.memory[j+1]
                    self.memory[-1] = self.page[i]
                    self.k += 1
            else:
                if None in self.memory:
                    for j in range(self.available_memory_block):
                        #if j == self.available_memory_block -1:
                            #break
                        if self.memory[j] == self.page[i]:
                            for k in range(j,self.available_memory_block-1):
                                if self.memory[k+1] == None:
                                    self.memory[k] = self.page[i]
                                    break
                                else:
                                    self.memory[k] = self.memory[k+1]
                            break
                else:
                    for j in range(self.available_memory_block):
                        if j == self.available_memory_block - 1:
                            break
                        if self.memory[j] == self.page[i]:
                            for k in range(j,self.available_memory_block-1):
                                    self.memory[k] = self.memory[k+1]
                            self.memory[-1] = self.page[i]
                            break
        self.page_fault_rate = self.k/self.page_length

if __name__ == '__main__':
    al = pageReplacement(40,3,7)
    '''
     al.__FIFO__()
    print(al.page)
    print(al.k,al.page_length)
    print(al.page_fault_rate)
    '''
    al.__LRU__()
    print(al.page)
    print(al.k, al.page_length)
    print(al.page_fault_rate)

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugh677

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值