虚拟存储器管理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 指令所在的页面已装入在内存中