当前位置:文档之家› 虚拟存储器管理实验报告

虚拟存储器管理实验报告

防灾科技学院实验报告实验记录实验目的: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<M;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();initial(); II 手工初始化页表prin t_page_a nd_fifoqueue(); IIrun_first_i nstructon(0x0000); II运行进程的第一条指令的地址II 输入下一条指令的地址 cout<<"输入下一条指令的逻辑地址(0~32767)(-1 to en d)"<<e ndl;cin> >laddress;while(laddress>32767){ II 请重新输入下一条指令的逻辑地址 (0~32767)(-1 toen d)"<<e ndl;cin> >laddress;void run_a_in structi on (int); //CPU执行一条指令 void prin t_page_and_fifoqueue(void); //输出页表和FIFO 队列main()in t laddress, paddress; II 逻辑地址,物理地址 int lnumber, ad,pnumber; // 页号, 页内地址和物理块号 输出页表和FIFO 队列输入正确性检测cout<<"E nter ERORR! while(laddress!=-1){ II 还有指令要执行 Inu mber=laddress>>10; II 取逻辑地址的页号Inu mberif(page[l nu mber].flag==1){ II指令所在的页面已装入在内存中}cout<<"祝贺,进程运行结束!"<<e ndl;system("PAUSE");return 0;}//手工初始化页表和p[M]队列void in itial(void){int i;for(i=0; i=31; i++){page[i].l nu mber=i;if(i=M-1){ // 预装入算法初始化页表的前四项(预装入前四个页面): cout<<"输入页号为"<<i<<" 所在内存的物理块号cin> >page[i].p nu mber;page[i].flag=1; // 存在标志置 1}}//初始化FIFO的队列head=0;for(i=0; i=M-1; i++)p[i]=i;//输出页表和FIFO队列void prin t_page_a nd_fifoqueue(void){int i;cout<<"Pri nt the page table.' n";cout<<setw(10)<<"l nu mber"<<setw(9)<<"flag"<<setw(10)<<"p number"<<setw(10)<<"write"<<setw(10)<<"d number"<<e ndl;for(i=0; i=N-1; i++)cout<<setw(7)<<page[i].l nu mber<<setw(10)<<page[i].flag<<setw(10)<<page[i]. pnu mber<<setw(10)<<page[i].write<<setw(10)<<page[i].d nu mber<<e ndl;cout<<"Pri nt the FIFO queue.' n";cout<<setw(10)<<"NO"<<setw(40)<<"page( 已在主存的页号 Inu mber)\n"; cout<<"head="<<head<<e ndl;for(i=0; i=M-1;i++)cout<<setw(10)<<i<<setw(15)<<p[i]<<e ndl;}//模拟地址转换int do_mmap(i nt laddress){int Inumber, ad, pnumber, paddress;In umber=laddress>>10; // 取逻辑地址的页号 In umberad=laddress&0 x3ff; // 页内地址pnu mber=page[l nu mber].p nu mber; //从页表中取得块号pnu mberpaddress=p nu mber<<10|ad;retur n paddress;}//CPU执行一条指令,输出物理地址表示指令执行完成void run_a_in structi on (i nt paddress){cout<<paddress<<" 输出物理地址-------- 表示指令执行完成"<<e ndl;} //执行进程的第一条指令void run_first_in struct on (i nt laddress){int lnumber, ad, pnumber, paddress;Inu mber=laddress>>10; // 取逻辑地址的页号if(page[l nu mber].flag==1)// 由于式预装入方式,所以第一条指令所在的页面肯定在内存中paddress=do_mmap(laddress); // 形成物理地址cout<<paddress<<" 输出转换后的物理地址 "<<e ndl;run_a_in structi on( paddress);cout<<"此指令执行(0x0000)是否修改所在页面 Inumber="<<lnumber<<"(y/n?)";char change;cin> >cha nge;if(tolower(change)=='y'){ // 若指令执行完时修改了页面,则置write标志位位1 page[l nu mber].write=1;prin t_page_a nd_fifoqueue();}cout<<"******** 第一条指令执行完成(地址为 0x0000)***********"<<endl;}//页面写回磁盘void write_to_harddisk(i nt j){cout<<j<<" 输出已修改的淘汰的页号——表示该页写回了磁盘"<<e ndl;}//缺页中断处理程序void do_page_fault(i nt Inu mber){int j; 〃j是选择淘汰的页j=p[head];p[head]=lnu mber; //Inu mber 是新装入的页号head=(head+1)%M;//若淘汰出主存的页j已修改,则写会磁盘if(page[j].write==1)page[l nu mber].write=O; // 页表第 In umber 的修改标志为 0page[lnumber].pnumber=page[j].pnumber; // 第拉怒目布尔页的主存块号为第j页原主存块号cout<<l nu mber<<" 输出该页--- 表示该页调入了主存"<<e ndl;cout<<"按任意键将查看“页面置换”之后的页表page[N]和FIFO队列信息"<<endl; system("PAUSE");prin t_page_a nd_fifoqueue();}3.实验结果(1 )模拟分页式存储管理中硬件的地址转换和产生缺页中断。

相关主题