-
大小: 14KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-04
- 語言: C/C++
- 標(biāo)簽:
資源簡介
利用鍵盤輸入本模擬系統(tǒng)的物理塊的大小,作業(yè)的頁表中的塊號(hào);完成邏輯地址轉(zhuǎn)換成相應(yīng)的物理地址的過程。
1、建立一張位示圖,用來模擬內(nèi)存的分配情況,利用隨機(jī)數(shù)產(chǎn)生一組0和1的數(shù)對(duì)應(yīng)內(nèi)存的使用情況。
2、輸入塊(頁)的大小,通過模擬位示圖為本作業(yè)分配內(nèi)存空間建立相應(yīng)的頁表(長度不定);
3、錄入邏輯地址轉(zhuǎn)換成相應(yīng)的物理地址
4、擴(kuò)充頁表,變成請(qǐng)求式的二維頁表(增加存在位等)完成地址轉(zhuǎn)換。
5、輸入分配給本作業(yè)的塊數(shù),模擬作業(yè)執(zhí)行的邏輯地址轉(zhuǎn)換成頁面調(diào)度次序;
6、分別采用OPT、FIFO、LRU置換算法,利用堆棧結(jié)構(gòu)完成頁面置換;記錄被換出的頁面和新?lián)Q入的頁面。
代碼片段和文件信息
#include
#include
using?namespace?std;
typedef?struct?node
{
????int?name;
struct?node?*next;
}linklist;
typedef?struct?
{
????linklist?*front*rear;
}LQueue;
LQueue?*p;
LQueue?*q;
void?InitQueue(LQueue?*qu)//置空隊(duì)OK
{
????qu->front=new?linklist;
????qu->front->next=NULL;
????qu->rear=qu->front;
}
int?Empty(LQueue?*qu)//判隊(duì)空?ok
{
????if(qu->front==qu->rear)
return?1;
else?
return?0;
}
void?EnQueue(LQueue?*quint?n)//入隊(duì)
{
qu->rear->next=new?linklist;
qu->rear=qu->rear->next;
qu->rear->name=n;
qu->rear->next=NULL;
}
int?DeQueue(LQueue?*qu)//出隊(duì)
{
????linklist?*s;
if(Empty(qu))
????return?NULL;
????else???
{
?????s=qu->front;
?qu->front=qu->front->next;
?delete?s;
?return(qu->front->name);
????}
}
int?DeQueue_LRU(LQueue?*quint?xint?memoryblock_size)
{
????linklist?*s;
int?ni;
if(Empty(qu))
return?NULL;
else
{
????if(x==1)
{
????n=DeQueue(qu);
return(n);
}
else
{
s=qu->front;
for(i=0;i {
????s=s->next;
}
????????????s=s->next->next;
return(s->next->name);
}
}
}
//定義位視圖
int?system_memory[8][8];
//定義頁表
struct?pagetable_entry
{
int?memory_number;//塊號(hào)
int?memory_state;//狀態(tài)位
}page_table[20]?page_tableLRU[20];
//初始化位視圖
void?initsystem_memory()
{
int?ijk;
for(k=0;k<8;k++)
{
????system_memory[0][k]=1;
}
for(i=1;i<8;i++)
????for(j=0;j<8;j++)
???{
???system_memory[i][j]=rand()%2;
???}
/* for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
????cout< }
cout< }
*/
}
//初始化頁表
void?initpage_table()
{
int?i;
for(i=0;i<20;i++)
{
page_table[i].memory_number=-1;
page_table[i].memory_state=0;
}
}
int?saveopt[100];
struct?new_OPT
{
int?OPT_number;//塊號(hào)
int?OPT_state;//狀態(tài)位
}save_OPT[20];
void?initopt_table()
{
????int?i;
for(i=0;i<20;i++)
{
????save_OPT[i].OPT_number=-1;
save_OPT[i].OPT_state=0;
}
}
//定義存儲(chǔ)OPT時(shí)的內(nèi)存塊數(shù)組
int?OPT_memoryblock[10];
//初始化OPT_memoryblock、OPT_memoryblocksub
void?init_OPT_blocksub()
{
int?i;
for(i=0;i<10;i++)
{
OPT_memoryblock[i]?=?-1;
}
}
void?changeaddress(int?b_numint?memo_sizeint?log_add)
{
????int?abc;//頁號(hào)頁內(nèi)地址
a=log_add/memo_size;
b=log_add%memo_size;
? c=b_num*memo_size+b;
????cout<<“頁號(hào)和偏移量:“< cout<<“物理地址為:“< }
void?displaypagetabel(int?page_size)
{
int?i;
cout<<“頁號(hào)\t“<<“塊號(hào)\t“<<“標(biāo)識(shí)位“< for(i=0;i cout<}
void?displaymemory(int?memoblock_size)
{
????int?i;
cout<<“主存塊“< for(i=memoblock_size-1;i>=0;i--)
{
???cout< }
}
void?displaylesspage(int?n1int?n2int?n3)
{
??? cout<<“總訪問次數(shù):“< cout<<“缺頁次數(shù):“< double?sum;
sum=((n1+n2)*100)/(n1+n2+n3);
cout<<“缺頁率:“< }
void?main()
{
評(píng)論
共有 條評(píng)論