python中的LRU模拟逻辑用法
我试图用python模拟分页算法的使用情况。作为bash的参数,我们采用了两个参数:帧数和页面数。我相信实现是可以的,程序也在运行,但写出来的结果也有问题。我的python不是很流利,所以可能我做错了什么,或者我遗漏了什么? 没有语法错误,这是合乎逻辑的,所以如果有人能帮我,这对我来说将是巨大的。 请帮忙 但代码如下:python中的LRU模拟逻辑用法,python,algorithm,python-2.7,simulation,lru,Python,Algorithm,Python 2.7,Simulation,Lru,我试图用python模拟分页算法的使用情况。作为bash的参数,我们采用了两个参数:帧数和页面数。我相信实现是可以的,程序也在运行,但写出来的结果也有问题。我的python不是很流利,所以可能我做错了什么,或者我遗漏了什么? 没有语法错误,这是合乎逻辑的,所以如果有人能帮我,这对我来说将是巨大的。 请帮忙 但代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # # os5_lru.py # import sys import str
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# os5_lru.py
#
import sys
import string
import random
import numpy as np
from time import sleep
class p_okvira_zastavica:
def __init__(self):
O = 0
Z = 0
#HEADER
def header():
print '#N\t',
for i in range (0,okviri):
print i+1,
print '\t',
print
print '----------' * okviri
return 0
#ISPIS
def ispisi(polje_okvira_zastavica,zahtjev,pogodak):
print " ", #prints #N
print zahtjev,
print " ",
for k in range (0,okviri+1):
if(polje_okvira_zastavica[k].O == zahtjev):
if(pogodak):
if 0 :
print "[", #current inserting element
print polje_okvira_zastavica[k].O,
print "]",
break
if 1:
print "(", #if hits
print polje_okvira_zastavica[k].O,
print ")",
break
else :
print " ",
if polje_okvira_zastavica[k].O!=0 : print polje_okvira_zastavica[k].O ,
else: print "-",
print " ",
if pogodak == 1:
print "#Pogodak ",
print
#popunjavamo i sve
def add_vrijednosti(polje_okvira_zastavica,zahtjevi,pokazivac):
for k in range (0,okviri+1):
if( zahtjevi == polje_okvira_zastavica[k].O ):
polje_okvira_zastavica[k].Z = 1
ispisi(polje_okvira_zastavica,zahtjevi,1)
return
while(True):
if polje_okvira_zastavica[pokazivac].Z == 1:
polje_okvira_zastavica[pokazivac].Z=0
pokazivac = (pokazivac+1)%okviri
else :
polje_okvira_zastavica[pokazivac].O = zahtjevi
polje_okvira_zastavica[pokazivac].Z = 1
ispisi(polje_okvira_zastavica,zahtjevi,0)
break
#MAIN
def main():
global pokazivac
pokazivac = 0
global ulaz,okviri,stranice
ulaz = list(sys.argv)
okviri = int(ulaz[1])
stranice = int(ulaz[2])
if (okviri < 4 or okviri > 10 ) : print "Error ! Neodgovarajuci broj okvira "; exit(1)
if (stranice < 10 or stranice > 100 ) : print "Error ! Neodgovarajuci broj stranica"; exit(1)
global zahtjevi
zahtjevi = []
for i in range (0,stranice):
zahtjevi.append(random.randint(1,8))
random.shuffle(zahtjevi)
print
print "Zahtjevi :",
for i in range (0,stranice):
print zahtjevi[i],
if (i==stranice-1): break
print ",",
print
global vrijednosti
vrijednosti= [[0 for x in range(okviri+1)] for x in range(stranice)]
print
polje_okvira_zastavica = [p_okvira_zastavica() for k in range (0,okviri+1)] #array of structures
for k in range (0,okviri+1):
polje_okvira_zastavica[k].O = 0
polje_okvira_zastavica[k].Z = 0
print "\n\n #N",
for k in range (0,okviri):
print "\t ",
print k+1 ,
print
print "----------" * okviri
pom = stranice
k = 0
while(pom!=0):
add_vrijednosti(polje_okvira_zastavica,zahtjevi[k],pokazivac)
k+=1
pom-=1
return 0
#main program
if __name__ == '__main__':
main()
#/usr/bin/env python
#-*-编码:utf-8-*-
#
#os5_lru.py
#
导入系统
导入字符串
随机输入
将numpy作为np导入
从时间上导入睡眠
p_okvira_zastavica类:
定义初始化(自):
O=0
Z=0
#标题
def标头():
打印“#N\t”,
对于范围内的i(0,okviri):
打印i+1,
打印“\t”,
印刷品
打印'-------------'*okviri
返回0
#ISPIS
定义ispisi(polje_okvira_zastavica、zahtjev、pogodak):
打印“”。\N
打印zahtjev,
打印“”,
对于范围(0,okviri+1)内的k:
如果(polje_okvira_zastavica[k].O==zahtjev):
如果(pogodak):
如果0:
打印“[”,#当前插入元素
打印polje_okvira_zastavica[k].O,
打印“]”,
打破
如果1:
打印“(”,#如果命中
打印polje_okvira_zastavica[k].O,
",,
打破
其他:
打印“”,
如果polje_okvira_zastavica[k].O=0:print polje_okvira_zastavica[k].O,
其他:打印“-”,
打印“”,
如果pogodak==1:
打印“#Pogodak”,
印刷品
#波本加瓦莫一世
def add_vrijednosti(polje_okvira_zastavica、zahtjevi、pokazivac):
对于范围(0,okviri+1)内的k:
如果(zahtjevi==polje_okvira_zastavica[k].O):
polje_okvira_zastavica[k].Z=1
ispisi(polje_okvira_zastavica,zahtjevi,1)
返回
虽然(正确):
如果polje_okvira_zastavica[pokazivac].Z==1:
polje_okvira_zastavica[pokazivac].Z=0
pokazivac=(pokazivac+1)%okviri
其他:
polje_okvira_zastavica[pokazivac].O=zahtjevi
polje_okvira_zastavica[pokazivac].Z=1
ispisi(polje_okvira_zastavica,zahtjevi,0)
打破
#主要
def main():
全球博卡齐瓦茨酒店
pokazivac=0
全球乌拉兹、奥克维里、斯特兰尼斯
ulaz=列表(sys.argv)
okviri=int(ulaz[1])
stranice=int(ulaz[2])
如果(okviri<4或okviri>10):打印“错误!Neodgovarajuci broj okvira”;出口(1)
如果(stranice<10或stranice>100):打印“错误!Neodgovarajuci broj stranica”;出口(1)
全球扎赫特耶维
zahtjevi=[]
对于范围内的i(0,stranice):
zahtjevi.append(random.randint(1,8))
随机。洗牌(扎赫特耶维)
打印
打印“Zahtjevi:”,
对于范围内的i(0,stranice):
打印zahtjevi[i],
如果(i==stranice-1):中断
打印“,”,
印刷品
全球vrijednosti
vrijednosti=[[0表示范围内的x(okviri+1)]表示范围内的x(stranice)]
印刷品
polje_okvira_zastavica=[p_okvira_zastavica()表示范围(0,okviri+1)内的k]#结构数组
对于范围(0,okviri+1)内的k:
polje_okvira_zastavica[k].O=0
polje_okvira_zastavica[k].Z=0
打印“\n\n\n”,
对于范围内的k(0,okviri):
打印“\t”,
打印k+1,
打印
打印“------------”*okviri
pom=绞线
k=0
而(pom!=0):
添加vrijednosti(polje_okvira_zastavica,zahtjevi[k],pokazivac)
k+=1
pom-=1
返回0
#主程序
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
它应该如何打印结果!
这就是现在打印的方式: