请求分页存储管理(虚拟存储)
- 格式:docx
- 大小:88.26 KB
- 文档页数:12
内存管理练习试卷共有7大题,100小题,总计158分一、是非题(共23小题,共计23分)是非题得分:判断正确得计分,判断错误不得分。
1、(1分)请求分页存储管理中,为进程分配固定大小的内存的方式可以和调页时页面的全局置换方式结合使用。
2、(1分)虚拟存储器不需要在外存中设置一个对换区。
3、(1分)工作集指的是在一小段时间内,进程所访问的不同页面的集合。
4、(1分)在虚拟存储管理中,一般而言,在运行时,进程程序只有一部分被装入进内存。
5、(1分)段页式存储管理中,每个进程有一张段表和一张页表。
6、(1分)分段式存储管理中,段表中的内容是内存存储块的块号。
7、(1分)分段式存储管理中,如果用了快表,可以不要段表。
8、(1分)分页存储中,快表中存放的是页表的部分内容。
9、(1分)分页管理中,如果使用快表,快表的命中率一般达不到100%。
10、(1分)分页管理中,如果使用快表,快表必须和页表一样大小。
11、(1分)页表中的项数可以和进程程序分配到的页面数不一致12、(1分)页表或者段表是作为进程程序的一部分在内存中存放的。
13、(1分)分段存储管理中,每个进程有一张段表。
14、(1分)分页存储管理中,每个进程有一张页表。
15、(1分)内存管理中,动态地址重定位的一个好处是便于离散内存分配。
16、(1分)引入虚拟存储器的目的是为了在逻辑上扩充内存。
17、(1分)在分页存储管理中,使用联想寄存器或快表不改变访问页表的次数。
18、(1分)虚拟存储器是由操作系统提供的一个假想的特大存储器,它并不是实际的内存,其大小可比内存空间大得多。
19、(1分)段页式存储管理汲取了页式管理和段式管理的长处,其实现原理结合了页式和段式管理的基本思想,即用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间。
20、(1分)在分页存储管理中,页表用来将物理块号转换成逻辑页号。
21、(1分)引入虚拟存储器的目的是为了在物理上扩充内存。
CH4 应用题参考答案1 在一个请求分页虚拟存储管理系统中,一个程序运行的页面走向是:1 、2 、3 、4 、2 、1 、5 、6 、2 、1 、2 、3 、7 、6 、3 、2 、1 、2 、3 、6 。
分别用FIFO 、OPT 和LRU 算法,对分配给程序3 个页框、4 个页框、5 个页框和6 个页框的情况下,分别求出缺页中断次数和缺页中断率。
答:只要把表中缺页中断次数除以20,便得到缺页中断率。
2 在一个请求分页虚拟存储管理系统中,一个作业共有5 页,执行时其访问页面次序为:( 1 ) 1 、4 、3 、1 、2 、5 、1 、4 、2 、1 、4 、5( 2 ) 3 、2 、1 、4 、4 、5 、5 、3 、4、3、2、1、5若分配给该作业三个页框,分别采用FIFO和LRU 面替换算法,求出各自的缺页中断次数和缺页中断率。
答:( 1 )采用FIFO 为9 次,9 / 12 = 75 %。
采用LRU 为8 次,8 / 12 = 67 %。
( 2 )采用FIFO 和LRU 均为9 次,9 / 13 = 69 %。
3 一个页式存储管理系统使用FIFO 、OPT 和LRU 页面替换算法,如果一个作业的页面走向为:( l ) 2 、3 、2 、l 、5 、2 、4 、5 、3 、2 、5 、2 。
( 2 ) 4 、3 、2 、l 、4 、3 、5 、4 、3 、2 、l 、5 。
( 3 ) 1 、2 、3 、4 、1 、2 、5 、l 、2 、3 、4 、5 。
当分配给该作业的物理块数分别为3 和4 时,试计算访问过程中发生的缺页中断次数和缺页中断率。
答:( l )作业的物理块数为3 块,使用FIFO 为9 次,9 / 12 = 75 %。
使用LRU 为7 次,7 / 12 = 58 %。
使用OPT 为6 次,6 / 12 = = 50 %。
作业的物理块数为4 块,使用FIFO 为6 次,6 / 12 = 50 %。
昆明理工大学信息工程与自动化学院学生实验报告(2012 —2013 学年第二学期)一、实验目的存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
通过本次实验, 要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解, 通过请求页式存储管理中页面置换算法模拟设计, 了解虚拟存储技术的特点, 掌握请求页式存储管理的页面置换算法。
二、实验原理及基本技术路线图(方框原理图)用C或C++语言模拟实现请求式分页管理。
要求实现: 页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。
int subareaSize[num]={8,12,16,32,24,16,64,128,40,64};//分区大小Process *pro=NULL;//保持进程信息int ProcessNum=0;//进程数目int applyProcessNum=0;//每次申请进程数目int maxApplyNum=0;//最大可申请数目int *applyIndex=NULL;//申请进程队列int totalApplyNum=0;//申请总数int *assignPointer=NULL;//已分配内存的进程队列int assignFlag=0;//分配索引, 表示已申请队列已分配的进程数int exeIndex;//执行的进程号Node *subareaNode=new Node[3];//分区回收时, 进程所在分区及其前, 后分区信息LinkList createLinkList(int n );//建立空闲分区链Node firstFit(LinkList &head,Process pro);//首次适应算法Node nestFit(LinkList &head,Process pro,Node flag);//循环适应算法Node bestFit(LinkList &head,Process pro);//最佳适应算法Node worstFit(LinkList &head,Process pro);//最坏适应算法Node assign(LinkList &head,int orderIndex,int index,Node flagNode);//一次分区分配int assignMemory(LinkList &head);//内存分配void insertNode(LinkList &head,Node q,int index);//插入节点Node deleteNode(LinkList &head,int index);//删除节点int display(LinkList &head);//打印分区分配情况int lowAttemper(int *excursionPointer);//低级调度int findSubarea(LinkList &head,int index);//回收内存int creatProcess();//创建进程Process* randomCreatPro(int n);//随机产生进程下面是各种方法简述:(1) 最优替换算法, 即OPT算法。
实验六:请求分页存储管理一.实验目的深入理解请求页式存储管理的基本概念和实现方法,重点认识其中的地址变换、缺页中断、置换算法等实现思想。
二.实验属性该实验为综合性、设计性实验。
三.实验仪器设备及器材普通PC386以上微机四.实验要求本实验要求2学时完成。
本实验要求完成如下任务:(1)建立相关的数据结构:页表、页表寄存器、存储块表等;(2)指定分配给进程的内存物理块数,设定进程的页面访问顺序;(3)设计页面置换算法,可以选择OPT、FIFO、LRU等,并计算相应的缺页率,以比较它们的优劣;(4)编写地址转换函数,实现通过查找页表完成逻辑地址到物理地址的转换;若发生缺页则选择某种置换算法(OPT、FIFO、LRU等)完成页面的交换;(5)将整个过程可视化显示出来。
实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。
实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。
三、设计过程3.1算法原理分析OPT算法是未来最远出现,当当前内存中没有正要访问的页面时,置换出当前页面中在未来的访问页中最远出现的页面或再也不出现的页面。
FIFO算法是先进先出,当当前内存中没有正要访问的页面时,置换出最先进来的页面。
LRU算法是最近最久未使用,当当前内存中没有正要访问的页面时,置换出在当前页面中最近最久没有使用的页面。
3.2数据定义int length,num_page,count,seed; //length记录访问串的长度,num_page页面数,count记录缺页次数int result[20][30],order[30],a[10]; //result记录结果,order存储访问串,a存储当前页面中的值int pos1,flag1,flag2,flag3; //pos1位置变量,flag1等为标志变量 char result1[30]; //记录缺页数组 void opt() //最佳void fifo() //先进先出bool search(int n) //查找当前内存中是否已存在该页3.3流程图与运行截图图6.1 FIFO ()函数流程图;否是 是否 开始得到执行的指令指令是否在内存中最先存入指令被淘汰下面是否还有指令 结束得出命中率图2.2 OPT算法流程图四、小结本次课程设计目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
第五章虚拟存储器一、单项选择题1、以下存储管理技术中,支持虚拟存储器的技术是()。
A.动态分区分配B.可重定位分区分配C.请求分页存储管理D.基本分页存储管理2、请求分页存储管理中,若把页面尺寸增加一倍,在程序顺序执行时,则一般缺页中断次数会()。
A.增加B.减少C.不变D.可能增加也可能减少3、虚拟存储管理策略可以()。
A.扩大物理内存容量B.扩大物理外存容量C.扩大逻辑内存容量D.扩大逻辑外存容量4、下列那一条()不是影响缺页率的主要因素。
A.缺页中断服务速度B.分配给作业的物理块数C.系统规定页面的大小D.页面调度算法二、填空题1、在虚拟存储机制中,进程的一部分装入内存,一部分保留在硬盘上。
当发现某条指令不在内存中时,发生__________。
1、虚拟存储器的特征有__________,__________和__________。
2、在请求分页存储管理中,每当要访问的页面不在内存时,会产生__________。
3、在请求分段存储管理中,当运行进程要访问的段尚未调入内存时,会产生__________。
5、在请求分页存储管理中,进程的某页可能会重复地被换出和换入内存,发生多次的缺页中断,影响程序执行的性能,这种现象称为__________。
6、某虚拟存储器的用户空间共有32个页面,每页1KB,主存16KB。
假定某时刻系统为用户的第0,1,2,3页分别分配的物理块号为5,10,4,7,虚拟地址065C和0D3C变换为物理地址后分别是__________和__________。
(十六进制)7、在一个请求分页存储管理系统中,采用先进先出页面置换算法时,假如一个作业的页面走向为1,3,2,4,2,3,5,4,3,1,2,5。
当分配给该作业的物理块数M分别为3和4时,访问过程中发生的缺页次数为__________和__________。
(假定开始时,物理块中为空)8、在一个请求分页存储管理系统中,某程序的页面走向为:2,3,2,1,5,2,4,5,3,2,5,2。
第5章虚拟存储器-题库及参考答案第5章虚拟存储器-选择题参考答案⼀、单项选择题1.【2012统考真题】下列关于虚拟存储器的叙述中,正确的是()A.虚拟存储只能基于连续分配技术B.虚拟存储只能基于⾮连续分配技术C.虚拟存储容量只受外存容量的限制D.虚拟存储容量只受内存容量的眼制2.请求分页存储管理中,若把页⾯尺⼨增⼤⼀倍⽽且可客纳的最⼤页数不变则在程序顺序执⾏时缺页中断次数会()A.增加B.减少C.不变D.可能增加也可能减少3.进程在执⾏中发⽣了缺页中断,经操作系统处理后,应让其执⾏()指令A.被中断的前⼀条B.被中断的那⼀条C.被中断的后⼀条D.启动时的第⼀条4.【2011统考真题】在缺页处理过程中,操作系统执⾏的操作可能是()Ⅰ.修改页表Ⅱ.磁盘1O Ⅲ.分配页框A.仅Ⅰ、ⅡB.仅ⅡC.仅ⅢD.Ⅰ、Ⅱ和Ⅲ5.【2013统考真题】若⽤户进程访问内存时产⽣缺页,则下列选项中,操作系回统可能执⾏的操作是()Ⅰ.处理越界错Ⅱ.置换页Ⅲ.分配内存A.仅Ⅰ、ⅡB.仅Ⅱ、ⅢC.仅Ⅰ、ⅢD.Ⅰ、Ⅱ和Ⅲ6.虚拟存储技术是()A.补充内存物理空间的技术B.补充内存逻辑空间的技术C.补充外存空间的技术D.扩充输⼊/输出缓冲区的技术7.以下不属于虚拟内存特征的是()A.⼀次性B.多次性C.对换性D.离散性8.为使虚存系统有效地发挥其预期的作⽤,所运⾏的程序应具有的特性是()A.该程序不应含有过多的O操作B.该程序的⼤⼩不应超过实际的内存容量C.该程序应具有较好的局部性D.该程序的指令相关性不应过多9.()是请求分页存储管理⽅式和基本分页存储管理⽅式的区别A.地址重定向B.不必将作业全部装⼊内存C.采⽤快表技术D.不必将作业装⼊连续区城10.下⾯关于请求页式系统的页⾯调度算法中,说法错误的是()A.⼀个好的页⾯调度算法应减少和迎免抖动现象B.FIFO算法实现简单,选择最先进⼊主存储器的页⾯调出C.LRU算法基于局部性原理,⾸先调出最近⼀段时间内最长时间未被访问过的页⾯D. CLOCK算法⾸先调出⼀段时间内被访问次数多的页⾯11考虑页⾯置换算法,系统有m个物理块供调度,初始时全空,页⾯引⽤串长度为P,包含了n个不同的页号,⽆论⽤什么算法,缺页次数不会少于()A.mB.pC.nD. min(n, n)12.在请求分页存储管理中,若采⽤FFO页⾯淘汰算法,则当可供分配的页数增加时,缺页中断的次数()A.减少B.增加C.⽆影响D.可能増加也可能减少13.设主存容量为IMB,外存容量为400MB,计算机系统的地址寄存器有32位,那么虚拟存储器的最⼤容量是()A. IMBB. 401MBC. IMB+232MBD.232B14.虚拟存储器的最⼤容量()A.为内外存容量之和B.由计算机的地址结构决定C.是任意的D.由作业的地址空间决定15.某虚拟存储器系统采⽤页式内存管理,使⽤LRU页⾯替換算法,考虑页⾯回访问地址序列18178272183821317137.假定内存容量为4个页⾯,开给时是空的,则页⾯失效次数是()A.4B.5C.6D.716.导致LRU算法实现起来耗费⾼的原因是()A.需要硬件的特殊⽀持B.需要特珠的中断处理程序C.需要在页表中标明特殊的页类型D.需要对所有的页进⾏排序17.在虚拟存储器系统的页表项中,决定是否会发⽣页故障的是()A.合法位B.修改C.页类型D.保护码18.在页⾯置换策略中,()策略可能引起抖动A. FIFOB. LRUC.没有⼀种D.所有19.虚拟存储管理系统的基础是程序的()理论A.动态性B.虚拟性C.局部性D.全局性20.⽤()⽅法可以实现虚拟存储A.分区合并B.覆盖、交换C.快表D.段合并21.请求分页存储管理的主要特点是()A.消除了页内零头B.扩充了内存C.便于动态链接D.便于信息共享22.在请求分页存储管理的页表中增加了若千项信息,其中修改位和访问位供()参考A.分配页⾯B.调⼊页⾯C.置换算法D.程序访问23.产⽣内存抖动的主要原因是()A.内存空间太⼩B.CPU运⾏速度太慢C.CPU调度算法不合理D.页⾯置换算法不合理24.在页⾯置換算法中,存在 Belady现象的算法是()A.最佳页⾯置换算法(OPT)B.先进先出置换算法(FIFO)C.最近最久未使⽤算法(LRU)D.最近未使⽤算法(NRU)25.页式虚拟存储管理的主要特点是()A.不要求将作业装⼊主存的连续区域B.不要求将作业同时全部装⼊主存的连续区域C.不要求进⾏缺页中断处理D.不要求进⾏页⾯置换26.提供虚拟存储技术的存储管理⽅法有()A.动态分区存储管理B.页式存储管理C.请求段式存储管理D.存储覆盖技术27.在计算机系统中,快表⽤于()A.存储⽂件信息B.与主存交换信息C.地址变换D.存储通道程序28.在虚拟分页存储管理系统中,若进程访问的页⾯不在主存中,且主存中没有可⽤的空闲帧时,系统正确的处理顺序为()A.决定淘汰页→页⾯调出⼀缺页中断⼀页⾯调⼊B.决定淘汰页→页⾯调⼊⼀缺页中断⼀页⾯调出C.缺页中断→决定淘汰页⼀页⾯调出⼀页⾯调⼊D.缺页中断→决定淘汰页→页⾯调⼊→页⾯调出29.已知系统为32位实地址,采⽤48位虚拟地址,页⾯⼤⼩为4KB,页表项⼤⼩为8B,假设系统使⽤纯页式存储,则要采⽤()级页表,页内偏移()位A.3,12B.3,14C.4,12D.4,1430.下列说法中,正确的是()Ⅰ.先进先出(FIFO)页⾯置換算法会产⽣ Belady现象Ⅱ.最近最少使⽤(LRU)页⾯置換算法会产⽣ Belady现象Ⅲ.在进程运⾏时,若其⼯作集页⾯都在虚拟存储器内,则能够使该进程有效地运⾏否则会出现频繁的页⾯调⼊/调出现象IV.在进程运⾏时,若其⼯作集页⾯都在主存储器内,则能够使该进程有效地运⾏则会出现频繁的页⾯调⼊/调出现象A.Ⅰ、ⅢB.Ⅰ、ⅣC.Ⅱ、ⅢD.Ⅱ、Ⅳ31.测得某个采⽤接需调页策略的计算机系统的部分状态数据为:CPU利⽤率为20%,⽤于交换空间的磁盘利⽤率为97.7%,其他设备的利⽤率为5%由此判断系统出现异常,这种情况下()能提⾼系统性能A.安装⼀个更快的硬盘 C.增加运⾏进程数B.通过扩⼤硬盘容量增加交换空间 D.加内存条来增加物理空间容量32.假定有⼀个请求分页存储管理系统,测得系统各相关设备的利⽤率为:CPU的利⽤率为10%,磁盘交换区的利⽤率为99.7%,其他1O设备的利⽤率为5%,下⾯()措施将可能改进CPU的利⽤率Ⅰ.增⼤内存的容量Ⅱ.增⼤磁盘交换区的容量Ⅲ.减少多道程序的度数IV.增加多道程序的度数 V.使⽤更快速的磁盘交换区 VI.使⽤更快速的CPUA.Ⅰ、Ⅱ、Ⅲ、IVB.Ⅰ、ⅢC.Ⅱ、Ⅲ、VD.Ⅱ、Ⅵ33.【2011统考真题】当系统发⽣抖动时,可以采取的有效措施是()Ⅰ.撤销部分进程Ⅱ.增加磁盘交换区的容量Ⅲ.提⾼⽤户进程的优先级A.仅ⅠB.仅ⅡC.仅ⅢD.仅Ⅰ、Ⅱ34.【2014统考真题】下列措施中,能加快虚实地址转换的是()Ⅰ.增⼤快表(TLB)容量Ⅱ.让页表常驻内存Ⅲ.增⼤交换区(swap)A.仅ⅠB.仅ⅡC.仅Ⅰ、ⅡD.仅Ⅱ、Ⅲ35.[2014统考真题】在页式虚拟存管理系统中,采⽤某些页⾯置換算法会出回现 Belady异常现象,即进程的缺页次数会随着分配给该进程的页柜个数的增加⽽增加。
1.什么是操作系统其主要功能是什么操作系统是控制和管理计算机系统内各种硬件和软件资源有效组织多道程序运行的系统软件(或程序集合),是用户和计算机直接的程序接口.2.在某个计算机系统中,有一台输入机和一台打印机,现有两道程序投入运行,程序A、B 同时运行,A略早于B。
A的运行轨迹为:计算50ms、打印100ms、再计算50ms、打印100ms,结束。
B的运行轨迹为:计算50ms、输入80ms、再计算100ms,结束。
试说明:(1)两道程序运行时,CPU是否空闲等待若是,在那段时间段等待(2)程序A、B是否有等待CPU的情况若有,指出发生等待的时刻。
0 50 100 150 200 250 300⑴cpu有空闲等待,在100ms~150ms的时候.⑵ 程序A没有等待cpu,程序B发生等待的时间是180ms~200ms.1.设公共汽车上,司机和售票员的活动如下:司机的活动:启动车辆;正常行车;到站停车。
售票员的活动:关车门;售票;开车门。
在汽车不断的到站、停车、行驶过程中,用信号量和P、V操作实现这两个活动的同步关系。
semaphore s1,s2;s1=0;s2=0;cobegin司机();售票员();coendprocess 司机(){while(true)(P(s1) ;启动车辆;正常行车;到站停车;V(s2);)}process售票员()(while(true)(关车门;V(s1);隹票•口xK;P(s2);开车门;上下乘客;))2.设有三个进程P、Q、R共享一个缓冲区,该缓冲区一次只能存放一个数据,P进程负责循环地从磁带机读入数据并放入缓冲区,Q进程负责循环地从缓冲区取出P进程放入的数据进行加工处理,并把结果放入缓冲区,R进程负责循环地从缓冲区读出Q进程放入的数据并在打印机上打印。
请用信号量和P、V操作,写出能够正确执行的程序。
semaphore sp,sq,sr;int buf;sp=1;sq=0;sr=0;cobeginprocess P()(while(true)(从磁带读入数据;P(sp);Buf=data;V(sq);))process Q()(while(true)(P(sq);data=buf;力口工data;buf=data;V(sr);))process R()(while(true)(P(sr);data=buf;V(sp);打印数据;coend.3.简述计数信号量的值与资源使用情况的关系。
第十八讲存储器管理之请求分段存储管理方式1引言概述:请求分段存储管理系统也与请求分页存储管理系统一样,为用户提供了一个比内存空间大得多的虚拟存储器。
虚拟存储器的实际容量由运算机的地址结构肯定。
思想:在请求分段存储管理系统中,作业运行之前,只要求将当前需要的若干个分段装入内存,即可启动作业运行。
在作业运行进程中,若是要访问的分段不在内存中,则通过调段功能将其调入,同时还能够通过置换功能将暂时不用的分段换出到外存,以便腾出内存空间。
2请求分段中的硬件支持请求分段需要的硬件支持有:段表机制、缺页中断机构、地址变换机构。
2.1段名段长段的基址存取方式访问字段A修改位M存在位P增补位外存始址说明:存取方式:存取属性(执行、只读、允许读/写)访问字段A:记录该段被访问的频繁程度修改位M:表示该段在进入内存后,是不是被修悔改。
存在位P:表示该段是不是在内存中。
增补位:表示在运行进程中,该段是不是做过动态增加。
外存地址:表示该段在外存中的起始地址。
2.2缺段中断机构当被访问的段不在内存中时,将产生一缺段中断信号。
其缺段中断的处置进程如图:2.3地址变换机构3 分段的共享和保护为了实现分段共享,设置一个数据结构——共享段表,和对共享段进行操作的进程。
3.1 共享段表说明:所有的共享段都在共享段表中对应一个表项。
其中:共享进程计数器count :记录有多少个进程需要共享该分段,设置一个整型变量count 。
存取控制字段:设定存取权限。
段号:对于一个共享段,不同的进程能够各用不同的段号去共享该段。
3.2 共享段的分派和回收 3.2.1 共享段的分派大体进程:在为共享段分派内存时,对第一个请求利用该共享段的进程,由系统为该共享段分派一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把count 置为1;以后,当又有其它进程需段名段长内存始址状态外存始址共享进程计数count 状态进程名进程号段号存取控制………………要挪用该共享段时,由于该共享段已被调入内存,故现在不必再为该段分派内存,而只需在挪用进程的段表中,增加一表项,填写该共享段的物理地址;在共享段的段表中,填上挪用进程的进程名、存取控制等,再执行count∶=count+1操作,以表明有两个进程共享该段。
存储管理的页面置换算法存储管理的页面置换算法在考试中常常会考到,操作系统教材中主要介绍了3种常用的页面置换算法,分别是:先进先出法(FIFO)、最佳置换法(OPT)和最近最少使用置换法(LRU)。
大家要理解3种置换算法的含义,然后能熟练地运用在具体的练习中就可以了。
1.为什么要进行页面置换在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入。
这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断。
操作系统在处理缺页中断时,要把所需页面从外存调入到内存中。
如果这时内存中有空闲块,就可以直接调入该页面;如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换。
有助于理解的关键词有:请求分页、虚拟存储、缺页中断、页面置换。
2.常用的页面置换算法教材中介绍的常用页面置换算法有:先进先出法(FIFO)、最佳置换法(OPT)和最近最少使用置换法(LRU)。
(1)先进先出法(FIFO)算法描述:由于认为最早调入内存的页不再被使用的可能性要大于刚调入内存的页,因此,先进先出法总是淘汰在内存中停留时间最长的一页,即先进入内存的页,先被换出。
先进先出法把一个进程所有在内存中的页按进入内存的次序排队,淘汰页面总是在队首进行。
如果一个页面刚被放入内存,就把它插在队尾。
【例1】教材第4章课后习题。
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。
当内存块数量分别为3,5时,试问先进先出置换算法(FIFO)的缺页次数是多少?(注意,所有内存块最初都是空的,凡第一次用到的页面都产生一次缺页。
)解打叉的表示发生了缺页,共缺页16次。
提示:当FIFO算法执行到蓝色的4号页面时,这时内存中有三个页面,分别是1,2,3。
按照FIFO算法,在内存中停留时间最长的页面被淘汰。
操作系统概论大工14秋《操作系统概论》在线测试3一,单选题1. 以下()属于常见的危险密码?A. 跟用户名相同的密码B. 使用生日作为密码C. 空密码D. 以上都对?正确答案:D2. 在页式存储管理方案中,建立()为地址转换提供依据。
A. 页表B. 段表C. 段表和页表D. 空闲区表?正确答案:A3. 下列算法中可用于磁盘移臂调度算法的是()。
A. LRU算法B. 电梯调度算法C. 时间片轮转法D. 响应比高者优先算法?正确答案:B4. 在可变分区存储管理中,为了实现主存的空间分配,应设置()来进行管理。
A. 页表B. 段表C. 段页表D. 空闲分区?正确答案:D5. 在请求分页虚拟存储管理系统中,LRU算法是指()。
A. 最早进入内存的页先淘汰B. 近期最长时间以来没被访问的页先淘汰C. 近期被访问次数最多的页先淘汰D. 以后再也不用的页先淘汰?正确答案:B6. 在磁盘调度策略中有可能使某些I/O请求无限期等待的调度算法是()。
A. 先进先出B. 最短寻道时间优先C. 循环扫描D. 以上都不对?正确答案:B7. 由于操作系统无法预先知道一个作业未来访问页面的情况,所以()在实际上是无法实现的。
A. 先进先出置换算法B. 最佳置换算法C. 最近最少使用置换算法D. 最近未使用置换算法?正确答案:B8. 在可变式分区存储管理中,某作业完成后要收回其主存空间,该空间可能与相邻空闲区合并,在修改空闲区表时使空闲区数不变且空闲区起始地址不变的情况是()。
A. 无上邻空闲区也无下邻空闲区B. 有上邻空闲区但无下邻空闲区C. 无上邻空闲区但有下邻空闲区D. 有上邻空闲区也有下邻空闲区?正确答案:B9. 在以下的存储管理方案中,能扩充主存容量的是()。
A. 固定式分区管理B. 可变式分区管理C. 页式存储管理D. 分页虚拟存储管理?正确答案:D10. ()是指与操作系统内核本身有关的一些信息(程序或数据)所组成的文件。
任务四、请求分页存储管理(虚拟存储)一、实验目的通过请求分页存储管理的设计,让学生了解虚拟存储器的概念和实现方法。
进行运行时不需要将所有的页面都调入内存,只需将部分调入内存,即可运行,在运行的过程中若要访问的页面不在内存时,则需求有请求调入的功能将其调入。
假如此时若内存没有空白物理块,则通过页面置换的功能将一个老的不用的页面淘汰出来,其中淘汰的算法有多种。
二、实验内容模拟仿真请求分页调度算法,其中淘汰的算法可选下列其一1、先进先出算法2、最近最久算法3、CLOCK算法三、实验代码#include<iostream>#include<vector>using namespace std;int n;typedef struct Queue{int time;int data;struct Queue *next;}Queue,*QueuePtr;typedef struct {QueuePtr front;QueuePtr rear;}LinkQueue;//fifo=======================================void InitQueue(LinkQueue &Q);void FiFoEnQueueRear(LinkQueue &Q,int e,vector<int> &v);void FiFoDeQueueFront(LinkQueue &Q);inline void PrintQueue(LinkQueue &Q);void FiFoFiFoDoQueueEarly(LinkQueue &Q,int a,vector<int> &v);void FiFoDoQueue(LinkQueue &Q,int a,vector<int> &v);inline int PanDuan(LinkQueue &Q,int a);inline int YeMianCount(LinkQueue &Q);void fifo();//lru=============================================void InitQueue(LinkQueue &Q);void EnQueueMid(LinkQueue &Q,int e,QueuePtr p,vector<int> &v);void EnQueueTheFist(LinkQueue &Q,int e);void PrintQueue(LinkQueue &Q);//void ZhiZhenInit(int n);void DoQueueEarly(LinkQueue &Q,int e,vector<int> &v);void EnQueueRear(LinkQueue &Q,int e,QueuePtr p,vector<int> &v);//void DeQueueFront(LinkQueue &Q);QueuePtr ZhiZhen(LinkQueue &Q,int e);void EnQueue(LinkQueue &Q,int e,vector<int> &v);//void DeQueue(LinkQueue &Q,QueuePtr p);int PanDuan(LinkQueue &Q,int a);int YeMianCount(LinkQueue &Q);void lru();QueuePtr OptimalZhiZhen(LinkQueue &Q,int e);//求出需要置换的页面的上一个页面的位置void EnQueue(LinkQueue &Q,int e,vector<int> &v,int i,vector<int> &vc);inline int YeMianCount(LinkQueue &Q);//使用内敛函数,提高性能inline int Destance(vector<int> &v,int i);inline void SubbDestance(LinkQueue &Q);//=================================================int main(){int k;for(;;){cout<<"请选择!"<<endl;cout<<"1——FiFo算法"<<endl;cout<<"2——LRU算法"<<endl;cout<<"0——退出"<<endl;cin>>k;if(k==0)break;else{switch(k){case 1:fifo();break;case 2:lru();break;default:cout<<" 请从以上的选择中选择一个选项!!"<<endl;}}}}//fifo========================================void InitQueue(LinkQueue &Q){Q.front=Q.rear=(QueuePtr)malloc(sizeof(Queue));if(!Q.front)cout<<"initqueue worng!"<<endl;Q.front->next=NULL;//return OK;}void FiFoEnQueueRear(LinkQueue &Q,int e,vector<int> &v){ QueuePtr p;p=(QueuePtr)malloc(sizeof(Queue));if(!p)cout<<"cannot malloc EnQueue of the p"<<endl;p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;v.push_back(e);//cout<<p->data;//return OK;}void FiFoDeQueueFront(LinkQueue &Q){QueuePtr p;if(Q.front==Q.rear)cout<<"the Queue is empty,cannot delete !!"<<endl;p=Q.front->next;Q.front->next=p->next;free(p);if(Q.rear==p)Q.rear=Q.front;//return OK}void PrintQueue(LinkQueue &Q){QueuePtr p;if(Q.front==Q.rear)cout<<"the Queue is empty,cannot print!"<<endl;p=Q.front;for(p=Q.front;p->next!=NULL;p=p->next){cout<<p->next->data<<" ";}cout<<endl;//retrun OK;}void FiFoFiFoDoQueueEarly(LinkQueue &Q,int a,vector<int> &v){ QueuePtr p;int count=0;//设置标志位,记录重复的个数。
假如COUNT为0,表示没有重复int b,c;b=a;c=PanDuan(Q,b);//p=Q.front;if(c==1){FiFoEnQueueRear(Q,b,v);PrintQueue(Q);if(v[v.size()-1]!=a)v.push_back(a);}else{cout<<endl;};//v.push_back(a);//cout<<a<<""<<endl;}void FiFoDoQueue(LinkQueue &Q,int a,vector<int> &v){ QueuePtr p;int count=1;//p=Q.front;int b,c;b=a;c=PanDuan(Q,b);//p=Q.front;if(c==1){FiFoEnQueueRear(Q,b,v);FiFoDeQueueFront(Q);PrintQueue(Q);}else{cout<<endl;};//return OK;}int PanDuan(LinkQueue &Q,int a){QueuePtr p;for(p=Q.front;p->next!=Q.rear->next;p=p->next){if(p->next->data!=a){}elsereturn 0;}return 1;}int YeMianCount(LinkQueue &Q){QueuePtr p;int count=0;for(p=Q.front;p->next!=Q.rear->next;p=p->next) count+=1;return count;}void fifo(){vector<int> a;vector<int> v;LinkQueue Q;int m,n,b,c;InitQueue(Q);m=n=b=c=0;cout<<"请输入页块数"<<endl;cin>>n;cout<<"请输入序列的个数"<<endl;cin>>m;cout<<"请输入序列"<<endl;for(int i=0;i<m;++i){cin>>c;a.push_back(c);//cout<<a[i]<<" ";}cout<<"开始页面置换"<<endl;b=a[0];//cout<<b;FiFoEnQueueRear(Q,b,v);PrintQueue(Q);//cout<<"#"<<endl;for(i=1;i<n;i++){b=a[i];//cout<<b<<endl;FiFoFiFoDoQueueEarly(Q,b,v);//PrintQueue(Q);//cout<<endl;}for(i=n;i<m;++i){b=a[i];c=YeMianCount(Q);if(c<n){FiFoFiFoDoQueueEarly(Q,b,v);//PrintQueue(Q);}else{FiFoDoQueue(Q,b,v)//PrintQueue(Q);}//cout<<endl;}cout<<"缺叶顺序为:"<<endl;for(i=0;i<m;++i)cout<<v[i]<<" ";cout<<endl;cout<<"缺叶率为:"<<float(v.size())/float(a.size())<<endl; }//lru=============================================== QueuePtr ZhiZhen(LinkQueue &Q,int e){QueuePtr p,q;//int a;q=Q.front;for(p=Q.front;p->next!=Q.rear->next;p=p->next){if(q->next->time<p->next->time)q=p;else{};}return q;//返回的是需要调换的上一个页面节点}void DoQueueEarly(LinkQueue &Q,int e,vector<int> &v){ QueuePtr q;int b;b=PanDuan(Q,e);if(b==1){EnQueueTheFist(Q,e);v.push_back(e);//PrintQueue(Q);else{q=ZhiZhen(Q,e);if(Q.front->next==Q.rear){EnQueueRear(Q,e,q,v);v.push_back(e);//PrintQueue(Q);}else{EnQueueMid(Q,e,q,v);v.push_back(e);//PrintQueue(Q); }}}void EnQueueMid(LinkQueue &Q,int e,QueuePtr p,vector<int> &v){ QueuePtr q;QueuePtr newq;int a;q=p;//================//a=PanDuan(Q,e);newq=(QueuePtr)malloc(sizeof(Queue));if(!newq)cout<<" connot malloc newq in the EnQueueMid"<<endl;//if(a==1)//没有次页面存在,进行页面置换//{if(q!=Q.front){QueuePtr q1=q->next;newq->data=e;newq->next=q->next->next;q->next=newq;q->next->time=0;free(q1);}Elseif(q==Q.front){QueuePtr q1=q->next;newq->data=e;newq->next=q->next->next;q->next=newq;Q.front->next=newq;q->next->time=0;free(q1);}//v.push_back(e);//else//{};for(p=Q.front;p->next!=Q.rear->next;p=p->next)p->next->time+=1;}void EnQueueRear(LinkQueue &Q,int e,QueuePtr p,vector<int> &v){ QueuePtr q;QueuePtr newq;int a;q=p;//===================a=PanDuan(Q,e);newq=(QueuePtr)malloc(sizeof(Queue));//if(a==1)//没有次页面存在,进行页面置换//{newq->data=e;Q.rear=newq;q->next=newq;Q.rear->next=NULL;q->next->time=0;//v.push_back(e);//}//else//{};for(p=Q.front;p->next!=Q.rear->next;p=p->next)p->next->time+=1;}void EnQueue(LinkQueue &Q,int e,vector<int> &v){QueuePtr p;int a;a=PanDuan(Q,e);if(a==1){ p=ZhiZhen(Q,e);if(p->next!=Q.rear)EnQueueMid(Q,e,p,v);//PrintQueue(Q);v.push_back(e);}else{ EnQueueRear(Q,e,p,v); //PrintQueue(Q);v.push_back(e);}}else{cout<<"不置换"<<endl;};}void EnQueueTheFist(LinkQueue &Q,int e){QueuePtr p;p=(QueuePtr)malloc(sizeof(Queue));if(!p)cout<<"cannot malloc EnQueue of the p"<<endl;p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;p->time=0;for(p=Q.front;p->next!=Q.rear->next;p=p->next)p->next->time+=1;//for(p=Q.front;p->next!=Q.rear->next;p=p->next)//cout<<p->next->time<<" the frist time "<<endl;//cout<<"===================================="<<endl; }void lru(){vector<int> a;vector<int> v;LinkQueue Q;int m,n,b,c;InitQueue(Q);m=n=b=c=0;cout<<"请输入页块数"<<endl;cin>>n;cout<<"请输入序列的个数"<<endl;cin>>m;cout<<"请输入序列"<<endl;for(int i=0;i<m;++i){cin>>c;a.push_back(c);}cout<<"你输入的序列号是: "<<endl;for(i=0;i<m;++i)cout<<a[i]<<" ";cout<<"开始页面置换"<<endl;i=0;b=a[i];EnQueueTheFist(Q,b);v.push_back(a[i]);PrintQueue(Q);for(i=1;i<n;++i){b=a[i];DoQueueEarly(Q,b,v);PrintQueue(Q);/*if(v[v.size()-1]!=a[i])PrintQueue(Q);else{cout<<"不置换"<<endl;}//*/}for(i=n;i<m;++i){ c=YeMianCount(Q);if(c<n){b=a[i];DoQueueEarly(Q,b,v);PrintQueue(Q);}elseb=a[i];EnQueue(Q,b,v);PrintQueue(Q);}}cout<<"页面置换的顺序为:"<<endl;for(i=0;i<v.size();++i)cout<<v[i]<<" ";cout<<endl;cout<<"页面置换率为:"<<float(v.size())/float(a.size())<<endl;//* }图4-1 先进先出算法图4-2 最近最久算法。