?? vmm.cpp
字號:
//
//程序名稱:請求分頁存儲管理
//程序作者:張煥人
//作者郵箱: renwairen369@yahoo.com.cn
// renwairen369@hotmail.com
//作者QQ:27949278
//
//
//
#define MAXP 6 //頁表的最大長度
#define MAXB 3 //內存中最多的物理塊數
#include <stdio.h>
#include <iostream.h>
typedef struct pa //頁表項的數據結構
{
int pn; //頁號
int bn; //物理塊號
bool s; //狀態位
int ad; //外存地址
} pageitem;
typedef struct p //頁標置換的FIFO鏈表
{
int num; //記錄頁號
struct p *next;
} flink;
pageitem page[MAXP];
init()
{
int i;
for(i=0;i<MAXP;i++) //頁表初始化
{
page[i].pn=i;
page[i].s=false;
page[i].bn= i*800 / 17;
page[i].ad=20000+i*1024;
}
}
main()
{ int i;
int cmda,pn;
int bn=0; //當前內存中已存入的頁面數
flink *p,*h,*r;
h=r=new flink;
h->num=0; //頭節點記錄鏈表中節點個數
init();
cout<<"\t 歡迎使用請求分頁存儲管理方式模擬程序\n ";
cout<<"\n請輸入一個指令地址(0000~6144): ";
cin>>cmda;
while(cmda>=6144)
{
cout<<"\n請輸入一個指令地址(0000~6144): ";
cin>>cmda;
}
while(cmda>0)
{
pn=cmda/1024;
cout<<"\t此指令頁號為"<<pn;
if(page[pn].s==true)
cout<<" 此頁面已在內存中"<<endl;
else
{
if(h->num<MAXB) //內存中還能存入新頁面
{
h->num++;
cout<<"\t此頁面已調入內存"<<endl;
}
else //內存中不能再存入新頁面
{
p=h->next;
page[p->num].s=false;
cout<<"\t此頁面已調入內存,頁號為"<<p->num<<"的頁面被置換出來"<<endl;
h->next=p->next;
delete p; //將第一個頁表置換出來
}
page[pn].s=true; //將當前需要的頁讀入內存
p=new flink;
p->num=pn;
r->next=p;
r=p; //將讀入內存的頁插入到FIFO隊列尾部
}
cout<<"\n當前內存中物理塊的情況"<<endl;
cout<<" 頁號\t"<<"物理塊號\t"<<"狀態位\t"<<"外存地址"<<endl;
for(i=0;i<MAXP;i++)
{
if(page[i].s)
cout<<" "<<page[i].pn<<"\t"<<page[i].bn<<"\t\t"<<page[i].s<<"\t"<<page[i].ad<<endl;
}
cout<<"\n\n請輸入一個指令地址(0000~6144): ";
cin>>cmda;
while(cmda>=6144)
{
cout<<"\n\n請輸入一個指令地址(0000~6144): ";
cin>>cmda;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -