我试图在python中进行LRU分页算法使用模拟。作为来自bash的参数,我们采用2个参数,帧数和页数。我相信实现是正常的,程序正在运行,但是写出结果会有问题。我不是那么流利的python所以也许我做错了什么或者有什么东西我不见了? 没有语法错误,这是合乎逻辑的,所以如果有人可以帮助我,这对我来说很重要。 Help.PLS。
但是这里是代码:
#!/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()
应如何打印结果! How it should be
这是现在打印的方式: