




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科实验报告课程名称: 操作系统B 实验项目: 存储管理程序设计 实验地点: 专业班级: 学号: 学生姓名: 指导教师: 2011年 11月 目录存储管理程序设计一、实验目的和要求1二、实验内容及原理1三、实验仪器及设备3四、操作方法与实验步骤3五、实验数据记录和处理3六、实验结果分析8七、实验感想99实验三 存储管理程序设计一、实验目的和要求(一) 目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二) 要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容及原理(1) 为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。表3-1 页表格式 页 号 标 志 主存块号 修改标志 磁盘上的位置(2) 设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“*该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3) 编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P0,P1,Pm-1它们的初值为P0=0,P1=1,Pm-1= m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。 j= Pkj页的修改标志=1? 输出“OUTj” Pk=L k=(k+1) mod m 修改页表 输出“IN L” 取一条指令 开始 页标志=1? 输出绝对地址取一条指令输出“页号” 取指令中访问的页号L 查页表 形成绝对地址 置L页修改标志”1” 结束 是”存”指令?有后继指令?否(产生缺页中断)是否否否是是模拟硬件地址转换模拟FIFO页面调度是 图3-1 地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择Pk所指出的页面调出,然后执行Pk=要装入的新页页号k=(k+1)mod m在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。(4) 假定主存的每块长度为1024个字节,现有一个共7页的作业,其副本已在磁盘上。系统为该作业分配了4块主存块,且该作业的第0页至第3页已经装入主存,其余3页尚未装入主存,该作业的页表见表3-2所示。表3-2 作业的页表 页号 标志 主存块号 修改标志 在磁盘上的位置 0 1 5 0 011 1 1 8 0 012 2 1 9 0 013 3 1 1 0 021 4 0 0 022 5 0 0 023 6 0 0 121如果该作业依次执行的指令序列如表3-3所示。表3-3 作业依次执行的指令序列 操作 页号 页内地址 操作 页号 页内地址 + 0 070 移位 4 053 + 1 050 + 5 023 2 015 存 1 037 存 3 021 取 2 078 取 0 056 + 4 001 - 6 040 存 6 084依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5) 为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、实验仪器及设备 计算机一台、c+6.0编程软件四、操作方法与实验步骤 1编写源程序 2. 编译运行五、实验数据记录和处理 源程序:#include #include #include #include #define N 6/实验中假定的页表长度#define M 4/主存物理块数structint lnumber; /页号 int flag; /表示该页是否在主存,1表示在主存,0表示不在主存 int pnumber; /该页所在主存块的块号 int write; /该页是否被修改过,1表示修改过,0表示没有修改过 int dnumber; /该页存放在磁盘上的位置,即磁盘块号pageN; /页表定义int pM;/用数组模拟FIFO算法中的队列(使用循环队列)int head;void initial(void);int do_mmap(int);/模拟地址转换void do_page_fault(int);/缺页中断处理程序void run_first_instructon(int);/执行进程的第一条指令void run_a_instruction(int);/CPU执行一条指令void print_page_and_fifoqueue(void);/输出页表和FIFO队列main()int laddress, paddress;/逻辑地址,物理地址int lnumber, ad, pnumber;/页号,页内地址和物理块号initial();print_page_and_fifoqueue();/输出页表和FIFO队列run_first_instructon(0x0000);/运行进程的第一条指令的地址cout输入下一条指令的逻辑地址(032767)(-1 to end)laddress;while(laddress32767)cout输入错误! 请重新输入下一条指令的逻辑地址(032767)(-1 to end)laddress;while(laddress!=-1)lnumber=laddress10;/取逻辑地址的页号lnumberif(pagelnumber.flag=1)/指令所在的页面已装入在内存中paddress=do_mmap(laddress);/形成物理地址coutpaddress输出转换后的物理地址endl;run_a_instruction(paddress);cout此指令执行是否修改所在页lnumber=lnumberchange;if(tolower(change)=y)pagelnumber.write=1;print_page_and_fifoqueue();else/缺页中断coutlnumber输出该页的页号表示硬件产生缺页中断endl;do_page_fault(lnumber);/直接转去缺页中断处理continue;/本循环结束,重新执行指令 coutladdress;while(laddress32767)/输入正确性检测cout输入错误! 请重新输入下一条指令的逻辑地址(032767)(-1 to end)laddress;cout进程运行结束!endl;system(PAUSE);return 0; /手工初始化页表和pM队列void initial(void)int i;for(i=0; i=5; i+)pagei.lnumber=i;if(i=M-1)/预装入算法初始化页表的前四项cout输入页号为 ipagei.pnumber;pagei.flag=1;/存在标志置1/初始化FIFO的队列head=0;for(i=0; i=M-1; i+)pi=i;/输出页表和FIFO队列void print_page_and_fifoqueue(void)int i;cout输出页表!n;coutsetw(10)lnumbersetw(9)flagsetw(10)pnumbersetw(10)writesetw(10)dnumberendl;for(i=0; i=N-1; i+)coutsetw(7)pagei.lnumbersetw(10)pagei.flagsetw(10)pagei.pnumbersetw(10)pagei.writesetw(10)pagei.dnumberendl;cout输出FIFO对列:n;coutsetw(10)NOsetw(40)page(已在主存的页号lnumber)n;couthead=headendl;for(i=0; i=M-1;i+)coutsetw(10)isetw(15)pi10;/取逻辑地址的页号lnumberad=laddress&0x3ff;/页内地址pnumber=pagelnumber.pnumber;/从页表中取得块号pnumberpaddress=pnumber10|ad;return paddress;/CPU执行一条指令,输出物理地址表示指令执行完成void run_a_instruction(int paddress)coutpaddress 输出物理地址表示指令执行完成10;/取逻辑地址的页号if(pagelnumber.flag=1)paddress=do_mmap(laddress);/形成物理地址coutpaddress输出转换后的物理地址endl;run_a_instruction(paddress);cout此指令执行(0x0000)是否修改所在页面lnumber=lnumberchange;if(tolower(change)=y)/若指令执行完时修改了页面,则置write标志位位1pagelnumber.write=1;print_page_and_fifoqueue();cout*第一条指令执行完成(地址为0x0000)*endl;/页面写回磁盘void write_to_harddisk(int j)coutj输出已修改的淘汰的页号表示该页写回了磁盘endl;/缺页中断处理程序void do_page_fault(int lnumber)int j;/j是选择淘汰的页j=phead;phead=lnumber;/lnumber是新装入的页号head=(head+1)%M;/若淘汰出主存的页j已修改,则写会磁盘if(pagej.write=1)write_to_harddisk(j);/页j写回磁盘/修改页表pagej.flag=0;/页表中第j页的存在标志为0pagelnumber.flag=1;/页表第lnumber的存在标志为1pagelnumber.write=0;/页表第lnumber的修改标志为0pagelnumber.pnumber=pagej.pnumber;/第拉怒目布尔页的主存块号为第j页原主存块号coutlnumber输出该页表示该页调入了主存endl;cout按任意键将查看“页面置换”之后的页表pageN和FIFO队列信息endl;system(PAUSE);print_page_and_fifoqueue();六、实验结果分析七、实验感想本实验是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理页面置换算法。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。先进先出算法总是最先淘汰最先进入内存的页面,比较简单,容易理解,即选择在内存中驻留时间最久的页面予以淘汰。该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-广西-广西理疗技术员二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西机械热加工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西农业技术员二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西中式面点师三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东水土保持工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽计算机操作员四级(中级工)历年参考题库典型考点含答案解析
- 2025年计算机技术与软考-计算机技术与软考(初级)-信息处理技术员历年参考题库含答案解析(5套)
- 2025年职业技能鉴定-铁路职业技能鉴定-铁路职业技能鉴定(轨道车司机)高级历年参考题库含答案解析(5套)
- 2025年职业技能鉴定-热工职业-热工仪表检修职业技能鉴定(技师)历年参考题库含答案解析(5套)
- 2025年综合评标专家-辽宁-辽宁综合评标专家(咨询类)历年参考题库含答案解析(5套)
- 浪潮在线测评题答案大全
- 统编版二年级上册语文《 妈妈睡了》 课件完整版
- 人教版小学一年级上册写字教案
- XX村集体经济发展章程
- 高尿酸血症营养和运动指导
- 2021国家职业技能认定(初级茶艺师)理论内容细目表
- 2024年国药控股股份有限公司招聘笔试冲刺题(带答案解析)
- 【长期护理险制度运行中的问题及优化建议分析13000字】
- 葡萄糖耐量试验课件
- 应用文写作全套教学课件
- 密闭式静脉输血技术操作评分标准
评论
0/150
提交评论