請求調頁儲存管理方式的模擬 python實現

2021-08-11 14:21:01 字數 4869 閱讀 8635

1實驗目的

通過對頁面、頁表、位址轉換和頁面置換過程的模擬,加深對請求調頁系統的原理和實現過程的理解。

2實驗內容

(1)假設每個頁面中可存放10條指令,分配給乙個作業的記憶體塊數為4。

(2)模擬乙個作業的執行過程。該作業共有320條指令,即它的位址空間為32頁,目前它的所有頁都還未調入記憶體。在模擬過程中,如果所訪問的指令已經在記憶體中,則顯示其實體地址,並轉下一條指令。如果所訪問的指令還未裝入記憶體,則發生缺頁,此時需記錄缺頁的次數,並將相應頁調入記憶體。如果4個記憶體塊中均已裝入該作業,則需進行頁面置換。最後顯示其實體地址,並轉下一條指令。在所有320條指令執行完畢後,請計算並顯示作業執行過程中發生的缺頁率。

(3)置換演算法:請分別考慮opt、fifo和lru演算法。

(4)作業中指令的訪問次序按下述原則生成:

•50%的指令是順序執行的。

•25%的指令是均勻分布在前位址部分。

•25%的指令時均勻分布在後位址部分。

3實驗結果(給出編寫的程式源**和執行結果的截圖)

import random

#共有4個記憶體塊,乙個記憶體塊存放乙個頁面,乙個頁面存放10條指令,共32個頁面,指令在頁面中順序存放

class block(object):

def __init__(self,numpage=-1,accessed=0):

self.numpage=numpage #頁號

self.accessed=accessed #訪問情況,數值表示多久未被訪問

size=4 #記憶體塊數目

count=0 #記錄指令的序號

n=0 #缺頁數目

block= #記憶體塊

zhilin=

def initdata(block):

for i in range(size):

a=block(numpage=-1,accessed=0)

def findpage(block,curpage): #查詢物理塊中是否有該頁面

for i in range(size):

if block[i].numpage==curpage:

return i

return -1

def findexchange(block): #查詢置換的頁號

pos=0

for i in range(size):

if block[i].accessed>block[pos].accessed:

pos=i

return pos

def display(block):

for i in range(size):

if block[i].numpage!=-1:

print block[i].numpage,

print

def randomcin(zhilin): #生成隨機指令序列

flag=0

count=raw_input()

count=int(count)

print ("生成隨機指令序列:")

for i in range(320):

if flag%2==0:

count=count+1

count=count%320

if flag==1:

count=random.randint(0,count-2)

if flag==3:

count=random.randint(count+1,319)

#count=count+1+random.randint(0,320-count-1)

flag=flag+1

flag=flag%4

print zhilin[i],

if (i+1)%10==0:

print

def findspace(block):

for i in range(size):

if block[i].numpage==-1:

return i

return -1

def pringpage(zhilin):

for i in range(320):

print zhilin[i]%10,

if i%10==0:

print

def fifo(block,n):

curpage=-1

exchange=-1

for i in range(320):

count=zhilin[i]

curpage=count/10

exsist=findpage(block,curpage)

if exsist==-1:

space=findspace(block)

if space==-1:

exchange=findexchange(block)

block[exchange].numpage=curpage

display(block)

n=n+1

block[exchange].accessed=-1

else:

block[space].numpage=curpage

display(block)

n=n+1

else:

for i in range(size):

if block[i].numpage != -1:

print block[i].numpage,

print "指令已在記憶體,頁號為",exsist

for j in range(size):

block[j].accessed+=1

print "缺頁次數為:",n

v=n/320.0*100

print "缺頁率為:",v,"%"

def lru(blcok,n):

curpage=-1

exchange=-1

for i in range(320):

count=zhilin[i]

curpage=count/10

exsist=findpage(block,curpage)

if exsist==-1:

space=findspace(block)

if space==-1:

exchange=findexchange(block)

block[exchange].numpage=curpage

display(block)

n=n+1

block[exchange].accessed=-1

else:

block[space].numpage=curpage

display(block)

n=n+1

else:

block[exsist].accessed=-1

for i in range(size):

if block[i].numpage != -1:

print block[i].numpage,

print "指令已在記憶體,頁號為", exsist

for j in range(size):

block[j].accessed += 1

print "缺頁次數為:", n

v = n / 320.0 * 100

print "缺頁率為:", v, "%"

def opt(block,n):

curpage=-1

exchange=-1

for i in range(320):

count=zhilin[i]

curpage=count/10

exsist=findpage(block,curpage)

if exsist==-1:

space=findspace(block)

if space==-1:

for h in range(size):

for k in range(i,320):

if block[h].numpage!=zhilin[k]/10:

block[h].accessed=1000

else:

block[h].accessed=k

break

exchange=findexchange(block)

block[exchange].numpage=curpage

display(block)

n=n+1

else:

block[space].numpage=curpage

display(block)

n=n+1

else:

for i in range(size):

if block[i].numpage != -1:

print block[i].numpage,

print "指令已在記憶體,頁號為", exsist

print "缺頁次數為:", n

v = n / 320.0 * 100

print "缺頁率為:", v, "%"

print "輸入第一條指令號:"

randomcin(zhilin)

initdata(block)

while 1:

print "輸入1執行fifo,輸入2執行lru,輸入3執行opt:"

a=raw_input()

a=int(a)

if a==1:

fifo(block, n)

elif a==2:

lru(block, n)

elif a==3:

opt(block,n)

請求調頁儲存管理方式的模擬

1 實驗目的 通過對頁面 頁表 位址轉換和頁面置換過程的模擬,加深對請求調頁系統 的原理和實現過程的理解。2 實驗內容 1 假設每個頁面中可存放 10 條指令,分配給一作業的記憶體塊數為 4。2 用 c 語言模擬一作業的執行過程。該作業共有 320 條指令,即它的位址空 間為 32 頁,目前它的所有...

請求分頁儲存管理方式

請求分頁系統是建立在基本分頁的基礎上的,為了能支援虛擬儲存器功能而增加了請求調頁功能和頁面置換功能。相應地,每次調入和換出的基本單位都是長度固定的頁面,這使得請求分頁系統在實現上要比請求分段系統簡單 請求分段系統在換進和 換出時是 可變長度的段 因此,請求分頁便成為目前最常用的一種實現虛擬儲存器的方...

4 6分段儲存管理方式 段頁式儲存管理方式

1.分段 3.段表與位址變換機構 段是連續存放在記憶體中。段表中針對每個 段編號 記錄 記憶體首位址 和 段長 同樣有兩次記憶體訪問問題 解決方法 設定聯想暫存器,用於儲存最近常用的段表項。位址變換機構 4.分頁和分段的主要區別 1 需求 分頁是出於系統管理的需要,是一種資訊的物理劃分單位,分段是出...