虚拟存储器管理实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

防灾科技学院实验报告

实验记录

实验目的:

1理解虚拟存储器的概念

2掌握分页式存储管理地址转换和缺页中断

实验环境:

Win dows XP VC++6.0

实验内容:

1模拟分页式存储管理中硬件的地址转换和产生缺页中断

2用先进先出页面调度算法处理缺页中断

实验过程:

1.实验设计

(1 )模拟分页式存储管理中硬件的地址转换和产生缺页中断。

分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业 的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,

系别 学生姓名

课程名称

灾害信息工程 郑平贞 计算机操作系 专业班 实验日

实验题

0950412 2011-12-8 学号 成绩

095041219 虚拟存储器管理

,则表示该页已

bool flag; // 标志

long block;// 块号

long disk;//在磁盘上的位置

bool dirty;// 修改标志

}pagelist[SizeOfPage];

long po;//队列标记

long P[M];

void ini t_ex1()

{ memset(pagelist,0,sizeof(pagelist)); pagelist[0].flag=1; pagelist[0].block=5;

pagelist[0].disk=011;

pagelist[1].flag=1;

pagelist[1].block=8; pagelist[1].disk=012;

pagelist[2].flag=1; pagelist[2].block=9; pagelist[2].disk=013; pagelist[3].flag=1;

pagelist[3].disk=021;

}

void work_ex1()

{

bool stop=0;

long p,q;

char s[128];

do

{

\n"); printf("请输入指令的页号和单元号:

if (sca nf("%ld%ld",&p,&q)!=2)

{

sca nf("%s",s);

if (strcmp(s,"exit")==0)

{

stop=1;

}

}

else

{

{

pagelist[2].disk=013;

P[po]=p; po=(po+1)%M;

}

}

}while (!stop);

printf(”数组P的值为:\n");

for (i=0;i

{

prin tf("P[%ld]=%ld\n",i,P[i]); }

}

void select()

{

long se;

char s[128];

do

{

printf("请选择题号(1/2):");

if (sca nf("%ld",&se)!=1)

{

sca nf("%s",s);

return;

}

}

else

{

if (se==1)

{

ini t_ex1(); work_ex1(); }

if (se==2)

{

ini t_ex2(); work_ex2(); }

}

}while (1);

}

int main()

{

select();

ini

tial(); II 手工初始化页表

prin t_page_a nd_fifoqueue(); II

run_first_i nstructo

n(0x0000); II

运行进程的第一条指令的地址

II 输入下一条指令的地址 cout<<"输入下一条指令的逻辑地址(0~32767)(-1 to en d)"<

cin> >laddress;

while(laddress>32767){ II 请重新输入下一条指令的逻辑地址 (0~32767)(-1 to

en d)"<

cin> >laddress;

void run_a_in structi on (i

nt); //CPU

执行一条指令 void prin t_page_a

nd_fifoqueue(void); //

输出页表和FIFO 队列

mai

n()

in t laddress, paddress; II 逻辑地

址,

物理地址 int lnumber, ad,

pnumber; // 页号, 页内地址和物理块号 输出页表和FIFO 队列

输入正确性检测

cout<<"E nter ERORR! while(laddress!=-1){ II 还有指令要执行 Inu mber=laddress>>10; II 取逻辑地址的页号Inu mber

if(page[l nu mber].flag==1){ II

指令所在的页面已装入在内存中

相关文档
最新文档