实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本7107.pdf

上传人:得** 文档编号:79409660 上传时间:2023-03-21 格式:PDF 页数:21 大小:961.14KB
返回 下载 相关 举报
实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本7107.pdf_第1页
第1页 / 共21页
实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本7107.pdf_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本7107.pdf》由会员分享,可在线阅读,更多相关《实验四页式虚拟存储管理中地址转换和页式中断FIFOLRUOPTC++版本7107.pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.实验四 页式虚拟存储管理中地址转换和页式中断 FIFO 一、实验目的 深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断以及页面置换算法。二、实验主要容 编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。实验具体容包括:首先对给定的地址进展转换工作,假设发现缺页则先进展缺页中断处理,然后再进展地址转换;最后编写主函数对所做工作进展测试。假定主存 64KB,每个主存块 1024 字节,作业最大支持到 64KB,系统中每个作业分得主存块 4 块。三、实验原理 1地址转换过程:首先从逻辑地址中的高位取得页号,然后根据页号查页表,得到块号;然后从逻辑地址

2、中的低位取得页地址,将块号和页地址合并即得到物理地址。2缺页中断处理 根据页号查找页表,判断该页是否在主存储器中,假设该页标志位0,形成缺页中断。操作系统让调出中断处理程序处理中断。四、实验方法与步骤 实现地址转换与缺页中断处理,主要考虑三个问题:第一,设计页式虚拟存储管理方式中页表的数据构造;第二,地址转换算法的实现;第三,缺页中断处理算法的实现。.1)设计页表的数据构造 页式虚拟存储管理方式中页表除了页号和该页对应的主存块号外,至少还要包括存在标志该页是否在主存,磁盘位置该页的副本在磁盘上的位置和修改标志该页是否修改正。在实验中页表用数组模拟,其数据构造定义如下:struct int ln

3、umber;/页号 int flag;/表示页是否在主存中,1表示在,0表示不在 int pnumber;/该页所在主存块的块号 int write;/该页是否被修改正,1表示修改正,0表示没有修改正 int dnumber;/该页存放在磁盘上的位置,即磁盘块号 pagen;/页表定义 2地址转换算法的实现 地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程。在实验中,每个主存块 1024 字节,则块地址占 10 位;主存 64KB,则主存共 64 块,即块号占 6 位;物理地址共占 16 位;作业最大 64KB,则作业最大占 64 块,即页号占 6位,逻辑地址共占 16 位。用主存的

4、大小计算物理地址位数,用最大作业大小计算逻辑地址位数。在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的局部页面装入主存储器,作业执行时假设的页面在主存中,则进展地址转换,假设的页面不在主存中,则产生一个缺页中断,由操作系统把当前所需要的页面装入主存储器后,再次执行时才可以按上述方法进展地址转换。.模拟地址转换流程度 3缺页中断处理算法的实现 缺页处理过程简单阐述如下:a)根据当前执行指令中逻辑地址的页号查找页表,判断该页是否在主存储器中,假设该页标志为0,形成缺页中断。中断装置通过交换 PSW 让操作系统的中断处理程序占用处理器。b)操作系统处理缺页中断的方法及时

5、查主存分配表,找一个空闲主存块;假设无空闲块,查页表,选择一个已在主存的页面,把它暂时调出主存。假设在执行过程中该页被修改正,则需将该页信息写回磁盘,否则不比写回;c)找出该页的位置,启动磁盘读出该页的信息,把磁盘上读出的信息装入第 2 不找到的主存块,修改页表中该页的标志为 1;d)由于产生缺页中断的那条指令还没有执行完,所以页面装入后应该重新执行被中断的指令。当重新执行该指令时,由于要的页面已在主存中,所以可以正常执行。关于第二步的查找装入新页面的主存块处理方式,不同系统采用的策略可能有所不同,这里采用局部置换算法,就是每个作业分得一定的主存块,只能在分得的主存块查找空闲块,假设无空闲主存

6、块,则从该作业中选择一个页面淘汰出主存。实验中采用局部置换算法。使用局部置换算法时,存在这样一个问题:就是在分配给作业主存空间时,装入哪些页?有的系统采取不装入任何一页,当执行过程中需要时才将其调入。有点系统采用页面预置的方法,事先估计可能*些页面会先用到,在分配主存块 .后将这些页面装入。在本实验中采用第二种方法,分配主存空间时将前几页调入主存,假定系统中每个作业分得主存块 m 块,则将第 0m-1 页装入主存。因为是模拟硬件工作,所有在实验中如果的页不再主存中时,则输入该页页号,表示硬件产生缺页中断,然后直接转去缺页中断处理;由于采用页面预置方法,在给定的主存块中一定无空闲块,只能淘汰已在

7、主存的一页;没有启动磁盘的工作,淘汰的页面需要写回磁盘时,用输入页号表示,调入新的一页时,将该页在页表中的存在标志置为1,输出页号表示将该页调入主存。当主存中无空闲块时,为装入一个页面,必须按照*种算法从已在主存的页中选择一页,将它暂时调出主存,让出主存空间,用来存放装入的页面,这个工作称为页面调度。常用的页面调度算法有:先进现出、最近最少用算法、和最近最不常用算法。在本实验中采用先进现出调度算法。先进现出算法总是选择驻留在主存时间最长的一页调出。实验中把主存储器的页的页号按照进入主存的先后次序拍成队列,每次总是调出对首的页,当装入一个新页后,把新页的页号排入对尾。实验中,用一个数组存放页号的

8、队列。假定分配给作业的主存块数为m,数组可由 m 个元素组成,p0,p1,p2 pm-1;对首指针 head;采用页面预置的方法,页号队列的长度总是 m,tail 等于(head+1)%m。因此可以使用一个指针,只用 head 即可。在装入一个新的页时,装入页和淘汰页同时执行,当装入一个新的页时,将其页号存入数组:淘汰页的页号phead;phead=新装入页的页号;head=(head+1)%m;.实验执行一条指令时,不模拟指令的执行,只是考虑指令执行是否修改页面,假设修改页面,则将该页的页表中的修改标志位置1,然后输出转换后的物理地址,并输出物理地址来表示一条指令执行完成;如果的页不在主存时

9、,则产生缺页中断,然后直接转去缺页中断处理,最后模拟中断返回,就是返回冲进进展地址转换。因为没有实际主存,所有在模拟程序中首先手工输入页表信息,创立该作业的页表;然后循环执行假定的指令,观察地址转换情况。五、练习题 采用 LRU 页面调度算法编程实现上述虚拟页式存储管理的地址转换。源代码#include#define n 64 /页表的最大长度#define length 4 /系统为每个作业分配的主存块数 struct int lnumber;/页号 int flag;/表示页是否在主存中,1表示在,0表示不在 int pnumber;/该页所在主存块的块号 int write;/该页是否被

10、修改正,1表示修改正,0表示没有修改正 int dnumber;/该页存放在磁盘上的位置,即磁盘块号 pagen;/页表定义 int m;int page_length;/页表的实际长度.int plength;/用向量模拟主存 int head;void page_interrupt(int);/缺页中断处理函数 void mand(unsigned,int);/命令处理函数 void main()int lnumber,pnumber,write,dnumber;unsigned laddress;int i;cout输入页表的信息,创立页表页号从 0 开场,假设页号为1,则完毕输入n;c

11、outlnumberdnumber;cin.ignore();i=0;while(lnumber!=-1)pagei.lnumber=lnumber;pagei.flag=0;pagei.write=0;pagei.dnumber=dnumber;i+;.coutlnumberdnumber;/预先将输入的页调入主存块中 page_length=i;cout输入主存块号(输入少于或者等于ipnumber;cin.ignore();m=0;head=0;while(mlength&pnumber!=-1)if(mi)pagem.pnumber=pnumber;pagem.flag=1;/调入主存

12、后,标志为置 1 pm=m;/记录主存中的页号 m+;cout输入主存块号(输入少于或者等于i cinpnumber;cin.ignore();/while cout输入指令性质1修改,0不需要,其他完毕程序运行和逻辑地址n 逻辑地址最大能支持 2 的 16 次方165535。n;coutwrite;cin.ignore();coutladdress;cin.ignore();while(write=0|write=1)mand(laddress,write);/将输入的逻辑地址转换成物理地址 coutwrite;cin.ignore();if(write!=0&write!=1)break;

13、coutladdress;cin.ignore();./while/main/*中断处理函数,采用先进先出的页面调度算法*/void page_interrupt(int lnumber)int j;cout发生缺页中断lnumberendl;j=phead;phead=lnumber;head=(head+1)%m;if(pagej.write=1)cout将页 j 写回磁盘第 pagej.dnumber 块!n;pagej.flag=0;pagelnumber.pnumber=pagej.pnumber;pagelnumber.flag=1;pagelnumber.write=0;cout

14、淘汰主存块 pagej.pnumber 中的页 j,从磁盘第 pagelnumber.dnumber 块中调入页 lnumber unsigned paddress,ad,pnumber;int lnumber;kk:lnumber=laddress10;/取逻辑地址高 6 位,页号 ad=laddress&0*3ff;/页地址 cout该逻辑地址的页号为:lnumber 页地址为:ad=page_length)/页号大于页表的长度,则无效页号 cout该页不存在!n;return;if(pagelnumber.flag=1)/页号为 lnumber 在存当中 pnumber=pagelnum

15、ber.pnumber;paddress=pnumber10|ad;cout逻辑地址是:laddress 对应物理地址是:paddress page_interrupt(lnumber);goto kk;/mand 页式存储管理 OPT,LRU 实验报告 一、实验目的:掌握分页式存储管理的根本概念和实现方法。要求编写一个模拟的分页式管理程序,并能对分页式存储的页面置换算法进展编写和计算各个算法的缺页率。二、程序设计:首先创立页面链指针数据构造,并设计页面映像表,采用数组的方法给定页面映像。申请缓冲区,将一个进程的逻辑地址空间划分成假设干个大小相等的局部,每一局部称做页面或页。每页都有一个,叫做

16、页号,页号从0 开场依次编排,如 0,1,2。设置等大小的存块。初始状态:将数据文件的第一个页面装入到该缓冲区的第 0 块。设计页面置换算法,这里分别采用最正确页面置换算法 OPT 和最近最久未使用置换算法 LRU,并分别计算它们的缺页率,以比拟它们的优劣。三、算法说明:执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1 个空闲块以便存放新调入的页面。淘汰哪个页面的首要问题是选择何种置换算法。该程序采用人工的方法选择,依置换策略选择一个可置换的页,并计算它们的缺页率以便比拟。./*分页式管理实验-源程序*/#include#include#include#include#d

17、efine N 16#define num 5 /*进程分配物理块数目*/int AN=1,2,3,4,5,6,7,8,5,2,3,2,7,8,1,4;/*页表映像*/typedef struct page int address;/*页面地址*/struct page*ne*t;page;struct page*head,*run,*rear;void jccreat()/*进程分配物理块*/int i=1;page*p,*q;head=(page*)malloc(sizeof(page);p=head;for(i=1;i q=(page*)malloc(sizeof(page);p-ne*

18、t=q;q-address=0;q-ne*t=NULL;p=q;rear=p;int search(int n)page*p;int i=0;p=head;while(p-ne*t)if(p-ne*t-address=n)printf(Get it at the page%dn,i+1);run=p;return 1;p=p-ne*t;.i+;return 0;void changeOPT(int n,int position)int i;int total=0;int flag=1;int distancenum;int MA*;int order=0;page*p,*q;p=head-ne

19、*t;q=head-ne*t;for(i=0;iaddress=0).flag=0;break;p=p-ne*t;i+;if(!flag)p-address=n;printf(Change the page%dn,i+1);else while(q)for(i=position;iaddress=Ai)distancetotal=i-position;total+;q=q-ne*t;MA*=distance0;.for(i=0;iMA*)MA*=distancei;order=i;printf(Change the page%dn,order+1);i=0;while(p)if(i=order

20、)p-address=n;i+;p=p-ne*t;void changeLRU(int n)int i=0;.int flag=1;page*p,*delect;p=head-ne*t;while(p)if(p-address=0)flag=0;p-address=n;printf(Change the page%dn,i+1);break;p=p-ne*t;i+;if(flag)delect=head-ne*t;head-ne*t=delect-ne*t;printf(Delect from the head,and add new to the end.n);delect-address=

21、n;rear-ne*t=delect;.rear=delect;rear-ne*t=NULL;float OPT()int i;int lose=0;float losef;float percent;for(i=0;i float LRU()int i;int lose=0;float losef;float percent;page*p;for(i=0;ine*t;run-ne*t=p-ne*t;rear-ne*t=p;rear=p;rear-ne*t=NULL;printf(Move it to end of queue.n);.losef=lose;percent=1-(losef/N

22、);return percent;void main()/*主函数局部*/float percent;int choice;printf(Select the arithmetic:n(1)OPTn(2)LRUnyour choice is:);scanf(%d,&choice);/*选择页面置换算法*/jccreat();/*创立进程*/if(choice=1)/*采用 OPT 算法置换*/percent=OPT();/*计算 OPT 时的缺页率*/printf(The percent of OPT is%f,percent);else if(choice=2)/*采用 LRU 算法置换*/percent=LRU();/*计算 LRU 时的缺页率*/printf(The percent of OPT is%f,percent);.else printf(Your choice is invalid.);getch();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁