页面置换算法LRU(python语言实现),,页面置换算法LRU(


页面置换算法LRU(python语言实现)

class Page(object):    def __init__(self, pagenum):        self.page_num = pagenum        self.page_t = 0page_list = list()       # 待访问页面号列表page_set = set()         # 页面号集合temp_set = set()page_flaglist = list()   # 页面号时间标记集合memory_list = list()     # 内存中页面列表swap_interrupt_list = list()  # 中断置换页面列表flag = 0                 # 标记当前内存块页表数lost_num = 0             # 缺页中断次数lost_rate = 0            # 缺页率set_size = 0             # 页面号标记集合大小memory_size = 0          # 内存块页表大小def page_input():    print("Please input page seq:")    data = input()    print("please input memory size:")    mem_size = input()    mem_size = int(mem_size)    return data, mem_sizedef deal_input(data):    """输入处理"""    data.strip(‘\n‘)    for num in data.split(‘ ‘):        num = int(num)        page_list.append(num)        if num not in temp_set:            page_set.add(Page(num))        temp_set.add(num)def clear_time(xx):    """时间标记清0"""    for j in range(set_size):        if page_flaglist[j].page_num is xx:            page_flaglist[j].page_t = 0def find_oldest():    """找出内存块中页表号时间标记最大的"""    page_flaglist.sort(key=lambda a: a.page_t, reverse=True)    for j in range(set_size):        if page_flaglist[j].page_num in memory_list:            max_num = page_flaglist[j].page_num            return max_numdef page_swap(oldx, newx):    """页表置换"""    for j in range(memory_size):        if memory_list[j] is oldx:            memory_list[j] = newxdef time_add():    """内存块已存在的页面号时间标记全部+1"""    for k in range(set_size):        if page_flaglist[k].page_num in memory_list:            page_flaglist[k].page_t += 1if __name__ == ‘__main__‘:    datam, memory_size = page_input()    deal_input(datam)    page_flaglist = list(page_set)    set_size = len(page_flaglist)    print("memory_list: ")    for x in page_list:        time_add()                           # 内存块已存在的页面号,时间标记全部+1        if flag < memory_size:               # 如果内存块页表数 < 最大            if x not in memory_list:         # 如果内存块中,不存在当前需要访问的页面号                memory_list.append(x)        # 当前需要访问的页面号加入内存块            else:                            # 如果内存块中,存在当前需要访问的页面号                clear_time(x)                # 访问时间标记清零            flag += 1        else:                                # 如果内存块页表数 >= 最大            if x not in memory_list:         # 如果内存块中,不存在当前需要访问的页面号                old_num = find_oldest()      # 找出内存块中页表号,时间标记最大的                swap_interrupt_list.append(old_num)  # 存储置换出的页号                page_swap(old_num, x)        # 当前页表号置换内存块时间标记最大的页表号                lost_num += 1                # 缺页中断次数增加            clear_time(x)                    # 访问时间标记清零        print(memory_list)    print("\ninterrupt swap page sequence:")    print(swap_interrupt_list)                    # 打印置换出的页号    interrupt_time = lost_num + memory_size    print("\n\nlost page interrupt nums: {}".format(interrupt_time))    print("lost page rate: {:.2f}%".format(float(interrupt_time / len(page_list) * 100)))# Test data# 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1# 3
# 运行结果Please input page seq:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1please input memory size:3memory_list: [7][7, 0][7, 0, 1][2, 0, 1][2, 0, 1][2, 0, 3][2, 0, 3][4, 0, 3][4, 0, 2][4, 3, 2][0, 3, 2][0, 3, 2][0, 3, 2][1, 3, 2][1, 3, 2][1, 0, 2][1, 0, 2][1, 0, 7][1, 0, 7][1, 0, 7]interrupt swap page sequence:[7, 1, 2, 3, 0, 4, 0, 3, 2]lost page interrupt nums: 12lost page rate: 60.00%

页面置换算法LRU(python语言实现)

评论关闭