欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    虚拟存储器管理实验报告Word格式.doc

    • 资源ID:4010875       资源大小:78.50KB        全文页数:10页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    虚拟存储器管理实验报告Word格式.doc

    1、设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。(2)用先进先出(FIFO)页面调度算法处理缺页中断。FIFO 页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。假定作业被选中时,把开始的m 个页面装入主存,则数组的元素可定为m 个。2.程序代码:(1) 模拟分页式存储管理中硬件的地址转换和产生缺页中断。#include cstring#define SizeOfPage 100

    2、#define SizeOfBlock 128#define M 4struct info/页表bool flag; /标志long block;/块号long disk;/在磁盘上的位置bool dirty;/修改标志pagelistSizeOfPage;long po;/队列标记long PM;void init_ex1()memset(pagelist,0,sizeof(pagelist);pagelist0.flag=1;pagelist0.block=5;pagelist0.disk=011;pagelist1.flag=1;pagelist1.block=8;pagelist1.d

    3、isk=012;pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=013;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex1()bool stop=0;long p,q;char s128;doprintf(请输入指令的页号和单元号:n);if (scanf(%ld%ld,&p,&q)!=2)scanf(%s,s);if (strcmp(s,exit)=0)stop=1;elseif (pagelistp.flag)绝对地址=%ldn,pagelistp.blo

    4、ck*SizeOfBlock+q);* %ldn,p);while (!stop);void init_ex2()po=0;P0=0;P1=1;P2=2;P3=3;void work_ex2()long p,q,i;char s100;请输入指令的页号、单元号,以及是否为存指令:if (s0=Y | s0=y)pagelistp.dirty=1;if (pagelistPpo.dirty)/将更新后的内容写回外存pagelistPpo.dirty=0;pagelistPpo.flag=0;out %ldn,Ppo);in %ldnpagelistp.block=pagelistPpo.bloc

    5、k;pagelistp.flag=1;Ppo=p;po=(po+1)%M;数组P 的值为:for (i=0;i iomanip.hctype.h /页表用数组模拟,在实验中页表数据结构定义为:#define N 32 /实验中假定的页表长度,页表的长度实际上是由系统按照作业长度决定的 #define M 4 /实验中用,用固定局部置换算法给每个进程分配的主存物理块数 struct int lnumber; /页号 int flag; /表示该页是否在主存,1表示在主存,0表示不在主存 int pnumber; /该页所在主存块的块号 int write; /该页是否被修改过,表示修改过,表示没

    6、有修改过 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);

    7、/输出页表和FIFO队列 main() int laddress, paddress; /逻辑地址,物理地址 int lnumber, ad, pnumber; /页号,页内地址和物理块号 initial(); /手工初始化页表 print_page_and_fifoqueue();run_first_instructon(0x0000); /运行进程的第一条指令的地址 /输入下一条指令的地址 coutladdress;while(laddress32767) /输入正确性检测 Enter ERORR! 请重新输入下一条指令的逻辑地址(032767)(-1 to end) while(ladd

    8、ress!=-1) /还有指令要执行 lnumber=laddress10; /取逻辑地址的页号lnumber if(pagelnumber.flag=1) /指令所在的页面已装入在内存中 paddress=do_mmap(laddress); /形成物理地址 paddress输出转换后的物理地址run_a_instruction(paddress); /CPU根据得到的物理地址去执行指令 此指令执行是否修改所在页面lnumber=lnumber(y/n?) ;char change;change;if(tolower(change)=) pagelnumber.write=1; /若页面要已

    9、修改,则将此页面修改位置1 else /缺页中断 输出该页的页号表示硬件产生缺页中断do_page_fault(lnumber); /直接转去缺页中断处理 continue; /本循环结束,重新执行指令 输入下一条指令的逻辑地址(032767),-1 to end.n祝贺,进程运行结束!system(PAUSE/手工初始化页表和pM队列 void initial(void) int i;for(i=0; i=31; i+) pagei.lnumber=i;if(i=M-1) /预装入算法初始化页表的前四项 输入页号为 所在内存的物理块号(预装入前四个页面):pagei.pnumber;page

    10、i.flag=1; /存在标志置1 /初始化FIFO的队列 head=0; i=M-1; i+) pi=i;/输出页表和FIFO队列 void print_page_and_fifoqueue(void) Print the page table.nsetw(10)lnumbersetw(9)flagpnumberwritednumber i=N-1;setw(7)pagei.lnumberpagei.flagpagei.pnumber pagei.writepagei.dnumberPrint the FIFO queue.nNOsetw(40)page(已在主存的页号lnumber)nhe

    11、ad=headi+) setw(15)pi/模拟地址转换 int do_mmap(int laddress) int lnumber, ad, pnumber, paddress;ad=laddress&0x3ff; /页内地址 pnumber=pagelnumber.pnumber; /从页表中取得块号pnumber paddress=pnumber10|ad;return paddress; /CPU执行一条指令,输出物理地址表示指令执行完成 void run_a_instruction(int paddress) 输出物理地址表示指令执行完成 /执行进程的第一条指令 void run_f

    12、irst_instructon(int laddress) /取逻辑地址的页号 if(pagelnumber.flag=1) /由于式预装入方式,所以第一条指令所在的页面肯定在内存中 此指令执行(0x0000)是否修改所在页面lnumber=) /若指令执行完时修改了页面,则置write标志位位1 *第一条指令执行完成(地址为0x0000)*/页面写回磁盘 void write_to_harddisk(int j) j输出已修改的淘汰的页号表示该页写回了磁盘/缺页中断处理程序 void do_page_fault(int lnumber) int j; /j是选择淘汰的页 j=phead;ph

    13、ead=lnumber; /lnumber是新装入的页号 head=(head+1)%M;/若淘汰出主存的页j已修改,则写会磁盘 if(pagej.write=1) write_to_harddisk(j); /页j写回磁盘 /修改页表 pagej.flag=0; /页表中第j页的存在标志为0 pagelnumber.flag=1; /页表第lnumber的存在标志为1 pagelnumber.write=0; /页表第lnumber的修改标志为0 pagelnumber.pnumber=pagej.pnumber; /第拉怒目布尔页的主存块号为第j页原主存块号 输出该页表示该页调入了主存按任意键将查看“页面置换”之后的页表pageN和FIFO队列信息3.实验结果输入要分配的物理块数、页面总数、页面序列号(2)FIFO算法的实现FIFO算法的实现4.实验分析 系统的不足包括健壮性尚不够好,界面比较简单,对页表的初始化需要修改程序。经验体会:注意体会算法的精神,程序前后逻辑要一致。注意测试时数据的全面性。实验总结: 编程不用太复杂,实用就行。实验地点机房305指导教师陈新房


    注意事项

    本文(虚拟存储器管理实验报告Word格式.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开