大作业4_用先进先出(FIFO)页面调度算法处理缺页中断
- 格式:doc
- 大小:357.00 KB
- 文档页数:5
实验四 用先进先出(FIFO )页面调度算法处理缺页中断1.实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。
2.实验预备知识页式存储管理中的地址转换的方法;页式虚拟存储的缺页中断处理方法。
3.实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所作工作进程测试。
假定主存64KB ,每个主存块1024字节,作业最大支持到64KB ,系统中每个作业分得主存块4块。
4.提示与讲解页式存储管理中地址转换过程很简单,假定主存块的大小为2n 字节,主存大小为2m'字节和逻辑地址m 位,则进行地址转换时,首先从逻辑地址中的高m-n 位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n 位,最后从逻辑地址中取得低n 位放入物理地址的低n 位就得到了物理地址,过程如图1所示。
图1 页式存储管理系统地址转换示意图地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程图如图2所示(实验中假定主存64KB ,每个主存块1024字节,逻辑地址即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位、页内地址10位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
第1章一、填空1.计算机由硬件系统和软件系统两个部分组成,它们构成了一个完整的计算机系统。
2.按功能划分,软件可分为系统软件和应用软件两种。
3.操作系统是在裸机上加载的第一层软件,是对计算机硬件系统功能的首次扩充。
4.操作系统的基本功能是处理机(包含作业)管理、存储管理、设备管理和文件管理。
5.在分时和批处理系统结合的操作系统中引入“前台”和“后台”作业的概念,其目的是改善系统功能,提高处理能力。
6.分时系统的主要特征为多路性、交互性、独立性和及时性。
7.实时系统与分时以及批处理系统的主要区别是高及时性和高可靠性。
8.若一个操作系统具有很强的交互性,可同时供多个用户使用,则是分时操作系统。
9.如果一个操作系统在用户提交作业后,不提供交互能力,只追求计算机资源的利用率、大吞吐量和作业流程的自动化,则属于批处理操作系统。
10.采用多道程序设计技术,能充分发挥CPU 和外部设备并行工作的能力。
二、选择1.操作系统是一种B 。
A.通用软件B.系统软件C.应用软件D.软件包2.操作系统是对C 进行管理的软件。
A系统软件B.系统硬件C.计算机资源D.应用程序3.操作系统中采用多道程序设计技术,以提高CPU和外部设备的A 。
A.利用率B.可靠性C.稳定性D.兼容性4.计算机系统中配置操作系统的目的是提高计算机的B 和方便用户使用。
A.速度B.利用率C.灵活性D.兼容性5.C 操作系统允许多个用户在其终端上同时交互地使用计算机。
A.批处理B.实时C.分时D.多道批处理6.如果分时系统的时间片一定,那么D ,响应时间越长。
A.用户数越少B.内存越少C.内存越多D.用户数越多三、问答1.什么是“多道程序设计”技术?它对操作系统的形成起到什么作用?答:所谓“多道程序设计”技术,即是通过软件的手段,允许在计算机内存中同时存放几道相互独立的作业程序,让它们对系统中的资源进行“共享”和“竞争”,以使系统中的各种资源尽可能地满负荷工作,从而提高整个计算机系统的使用效率。
操作系统第二次作业一、选择题1.虚拟存储器的容量是由计算机的地址结构决定的,若CPU有32位地址,则它的虚拟地址空间为【A】。
A.4G B.2G C.64K D.100K2.在请求分页存储管理方案中,若某用户空间为3个页面,页长1KB,现有页表如下,则逻辑地址1800。
A.1052 B.3124 C.1076 D.58963.【 A】用于管理各种不同的真实文件系统,是真实文件系统与服务之间的接口。
A.VFSB.Ext2C. vfatD.JFS4.用磁带作为文件存贮介质时,文件只能组织成【 A】A.顺序文件B.链接文件C.索引文件D.目录文件5.按数据组织分类,【 B】是以字节为单位直接读写的设备。
A.块设备B.字符设备C.网络设备 D.虚拟设备6.在现代操作系统中采用缓冲技术的主要目的是【 C】。
A.改善用户编程环境 B.提高CPU的处理速度C.提高CPU和设备之间的并行程度 D.实现与设备无关性7.【 D】是将大量计算机通过网络连接在一起,以获得极高的运算能力和数据共享的系统。
A. 实时系统B.分时系统C. 网络系统D.分布系统式8.若一个文件的访问控制权限值为0754,请问同组用户对该文件具有【 C】权限。
A. 可读B.可读可写C. 可读可执行D.没有权限9.操作系统的安全问题中【 D】是绕过安全性控制、获取对程序或系统访问权的程序方法。
A.木马B.病毒C.蠕虫D.后门10.虚拟存储器的最大容量是由【B】决定的。
A.页表长度B.计算机系统的地址结构和外存空间C.内存空间D.逻辑空间11.在请求分页存储管理方案中,若某用户空间为3个页面,页长1KB,现有页表如下,则逻辑地址2100。
A.1052 B.3124 C.1076 D.529612.下面的【 B】不是文件的物理存储结构。
A. 索引文件B.记录式文件C. 顺序文件D.链接文件13.从用户的角度看,引入文件系统的主要目的是【C】。
A. 实现虚拟存储B.保存文件系统C. 实现对文件的按名存取D.保存用户和系统的文档14.使用SPOOLing系统的目的是为了提高【D】的使用效率。
“计算机操作系统”课程设计大作业页面置换算法模拟实验(含完整资料,可直接提交)一、题目: 页面置换算法模拟实验二、目的分别采用最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最少使用(LRU)置换算法对用户输入的页面号请求序列进行淘汰和置换,从而加深对页面置换算法的理解。
三、内容和要求请用C/C++语言编一个页面置换算法模拟程序。
用户通过键盘输入分配的物理内存总块数,再输入用户逻辑页面号请求序列,然后分别采用最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最少使用(LRU)置换算法三种算法对页面请求序列进行转换,最后按照课本P150页图4-26的置换图格式输出每次页面请求后各物理块内存放的虚页号,并算出总的缺页率(缺页次数/总的请求次数)。
最后三种页面置换算法的优缺点。
三种页面置换算法的思想可参考教材P149-P152页。
假设页面号请求序列为4、3、2、1、4、3、5、4、3、2、1、5,当分配给某进程的物理块数分别为3块和4块时,试用自己编写的模拟程序进行页面转换并输出置换图和缺页次数、缺页率。
四、提交内容本大作业每个人必须单独完成。
最后需提交的内容包括:源程序(关键代码需要注释说明)、可运行程序、运行结果、算法思路及流程图、心得体会。
大作业严禁抄袭。
发现抄袭一律以不及格论。
请大家严格按照大作业题目来编写程序,不要上交以前布置的大作业。
如果提交的大作业题目与本文档要求不符,成绩一律为及格。
目录摘要 (2)正文 (2)1、设计思路 (3)2、各模块的伪码算法 (6)3、函数的调用关系图 (8)4、测试 (13)设计总结 (15)参考文献 (16)致谢 (17)附录:部分源程序代码 (18)摘要UNIX中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行;还支持请求调页的存储管理方式。
作业调度:从输入井中选中后备作业装入主存储器的过程,称为作业调度进程调度:从就绪队列中选中一个进程占用处理器运行作业调度的必要条件:系统现有尚未分配的资源可以满足被选中作业的资源要求。
作业调度算法的原则:公平性、平衡资源使用、极大的流量作业调度算法1、先来先服务算法按照作业进入输入井的先后次序来挑选作业,进入的作业优先被选中。
但是要注意,不是先进入的一定被选中,只有满足“必要条件”的作业才可能被选中。
一个先进入的作业,如果它所需要的资源或其中一部分资源已被在它先前的作业占用且尚未归还,那么这个作业将被推迟,而去选择在它之后进入的资源能满足的作业。
一旦有作业执行结束归还了资源后,作业调度再次选择作业时,仍要按照进入输入井的次序去挑选,刚刚被推迟的作业有可能被优先选中。
例子:假设用户使用的主存空间为100KB,作业调度和进程调度均采用先来先服务算法,进入输入井时间如下表:当作业调度是,A,B作业首先依次被选中装入主存,但作业C到达输入井后,由于不能满足它对主存量的要求,只能让它在输入井中等待,对随后到达输入井的作业D和E,作业D的主存需求可以得到满足,于是选中D装入主存。
于是A,B,C 总共占用85KB主存,还剩余15KB的空闲区,不够装入作业E,因此C,E均被推迟,在输入井中等待。
随后A被执行完,释放了15KB的主存,目前存储器有两个15KB的空闲区,仍不能装入C或E。
随后在11.3刻时间,B执行完,释放60K 的主存空间和A作业释放的15KB合并后成75KB的空闲区。
满足C和E的需求,因此C,E在11.3刻同时被装入主存。
优点:算法简单容易实现,具有一定的公平性缺点计算时间短的作业可能周转时间很长,从而增加了系统平均周转时间,降低了系统的吞吐率2、计算时间短的作业优先算法作业调度根据在输入井中的作业提出的计算时间为标准,优先选择计算时间短且资源能得到满足的作业。
由于作业是依次进入输入井的,所以该算法仍将像先来先服务算法一样,会依次把作业A,B,D先装入主存,调度进程按装入的次序让他们依次占用处理器。
实验六虚拟存储器一、实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。
二、实验目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。
用这种办法扩充的主存储器称为虚拟存储器。
通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。
三、实验题目本实验有三道题目,其中第一题必做,第二,三题中可任选一个。
第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。
[提示](1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。
主存块号----用来表示已经装入主存的页所占的块号。
在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。
(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号×块长+单元号计算出欲访问的主存单元地址。
如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。
当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。
操作系统计算题答案1.设某进程所需要的服务时间t=k ⨯q,k 为时间的个数,q 为时间长度且为常数.当t 为一定值时,令q →0,则有k →∞.从而服务时间为t 的进程的响应时间T 是t 的连续函数.对应于时间片调度方式RR,先来先服务方式FCFS 和线性优先级调度方式SRR,其响应时间函数分别为:T rr(t)=()λμμ-⨯t T fc(t)=()λμ-1 T sr (t)=()()()'11λμμλμ-⨯---t 其中'λ=()λ⨯-a b 1=r λ⨯ 取(μλ,)=(50,100),分别改变r 的值,计算T rr (t),T fc (t)和T sr(t),并画出其时间变化图.2.对实时系统的频率单调调度算法,对于由3个周期组成的实时任务序列,设每个周期为T i(i=1,2,3),其相应任务的执行时间为C i(i=1,2,3).计算说明当进程执行时间与周期比之和为0.7时,能否保证用户所要求的时限(32=1.266).3.有5个批处理作业(A,B,C,D,E)几乎同时到达一个计算中心,估计运行时间分别为2,4,6,8,10分钟,它们的优先数分别为1,2,3,4,5(数值小的优先级低),在使用最高优先级优先调度算法时,计算作业的平均周转时间.解答:1.对(,λμ)=(50,100) T rr (t)=t,T fc (t)=1/50,T sr (t)=1/50-(1-100t)/(100-50t)0r →时,T sr (t)→1/100+t1r →时, T sr (t)→2t 图象如下: ysr (t) 0 x 0 x 0 x 只有T sr (t)受r 值影响,且r 值增大,T sr (t)的斜率增大,y 截距由1/100趋向0,服务时间也增加。
题目:4.假定某页式管理系统,主存为64KB,分成16块,块号为0,1,2,3,4,K K ,15,设某作业有4页,其页号为0,1,2,3,被分别装入主存的2,4,1,6块,试问:(1)该作业的总长度是多少字节?(按十进)(2)写出该作业每一页在主存中的起始地址.(3)若给出逻辑地址[0,100],[1,50],[2,0],[3,60],请计算出相应的内存地址.(方括号内的第一个元素为页号,第二个元素为页内地址).5.有一个虚存系统,某进程内存占了3页,开始时内存为空, 执行如下访问页号顺序后:1,2,3,4,1,2,5,1,2,3,4,5.(1).采用先进先出(FIFO)淘汰算法,缺页次数是多少?(2).采用最近最少使用(LRU)淘汰算法,缺页次数是多少?6.有一只铁笼子,每次只能放入一只动物,猎人向笼中放入老虎,农民向笼中放入羊,野生动物园等待取笼中的老虎,饭店等待取笼中的羊,试用P.V操作写出能同步执行的程序.解答:4.解:(1)每块长度=64KB/16=4KB于是由题目可知,每页也是4KB。
//页面调度算法(FIFO)#include<stdio.h>#define TRUE 1#define FALSE 0#define MAX 7 // 页的最大数#define IN 4 // 在主存中的页数#define count 13 // 指令数量int P[IN]; // 表示已在主存中的页面int k; // 表示P数组中最先进入内存的页的位置typedef struct{int num; // 页号bool pre; // 标志int random; // 主存块号bool revise; // 修改标志int location; // 在磁盘上的位置}Page_Item;Page_Item Page_Record[MAX];// 指令数据结构typedef struct{char oper; // 操作符int Page_Num; // 页号int Unit_Num; // 单元号}Instruction;Instruction IC[count];// 初始化指令和页表void Init(){k=0; // 指向最先进入内存的页// 初始化页表Page_Record[0].num=0;Page_Record[0].pre=TRUE;Page_Record[0].random=5;Page_Record[0].revise=FALSE;Page_Record[0].location=011;Page_Record[1].num=1;Page_Record[1].pre=TRUE;Page_Record[1].random=8;Page_Record[1].revise=FALSE;Page_Record[1].location=012; Page_Record[2].num=2;Page_Record[2].pre=TRUE; Page_Record[2].random=9; Page_Record[2].revise=FALSE; Page_Record[2].location=013;Page_Record[3].num=3;Page_Record[3].pre=TRUE; Page_Record[3].random=1; Page_Record[3].revise=FALSE; Page_Record[3].location=021;Page_Record[4].num=4;Page_Record[4].pre=FALSE; Page_Record[4].random=0; Page_Record[4].revise=FALSE; Page_Record[4].location=022;Page_Record[5].num=5;Page_Record[5].pre=FALSE; Page_Record[5].random=0; Page_Record[5].revise=FALSE; Page_Record[5].location=023;Page_Record[6].num=6;Page_Record[6].pre=FALSE; Page_Record[6].random=0; Page_Record[6].revise=FALSE; Page_Record[6].location=121;// 初始化指令序列IC[0].oper='+';IC[0].Page_Num=0;IC[0].Unit_Num=70;IC[1].oper='+';IC[1].Page_Num=1;IC[1].Unit_Num=50;IC[2].oper='*';IC[2].Page_Num=2;IC[2].Unit_Num=15;IC[3].oper='w';IC[3].Page_Num=3;IC[3].Unit_Num=21;IC[4].oper='r';IC[4].Page_Num=0;IC[4].Unit_Num=56;IC[5].oper='-';IC[5].Page_Num=6;IC[5].Unit_Num=40;IC[6].oper='>';IC[6].Page_Num=4;IC[6].Unit_Num=53;IC[7].oper='+';IC[7].Page_Num=5;IC[7].Unit_Num=23;IC[8].oper='w';IC[8].Page_Num=1;IC[8].Unit_Num=37;IC[9].oper='r';IC[9].Page_Num=2;IC[9].Unit_Num=78;IC[10].oper='+';IC[10].Page_Num=4;IC[10].Unit_Num=1;IC[11].oper='r';IC[11].Page_Num=6;IC[11].Unit_Num=84;IC[12].oper='#';IC[12].Page_Num=0;IC[12].Unit_Num=0;}// 根据FIFO算法替换页,所需要的参数是被调入页的页结构体void replace(Page_Item page){// 被替换的页已经修改了if(TRUE==Page_Record[P[k]].revise){// 修改被调出页的存在标志Page_Record[P[k]].pre=FALSE;// 修改被调出页的修改标志Page_Record[P[k]].revise=FALSE;printf("调出%d页\n",P[k]);}// 将调入页的存在标志修改为TRUEpage.pre=TRUE;// 将被调出页的主存块号赋给调入页的主存块号page.random=Page_Record[P[k]].random;// 将调入页的页号赋给P[k]P[k]=page.num;printf("调入%d页\n",page.num);// 修改k指针k=(k+1)%IN;}// 指令执行过程void excute(){int i=0; // 指向当前正在执行的指令while('#'!=IC[i].oper){printf("执行%c指令,需%d页\n",IC[i].oper,IC[i].Page_Num);// 若正在执行的指令所需的页不在内存中if(FALSE==Page_Record[IC[i].Page_Num].pre){printf("该页不在内存中,请求调入.........\n");// 调用替换函数,调入所需的页replace(Page_Record[IC[i].Page_Num]);}// 修改指令对该页的操作if('+'==IC[i].oper||'*'==IC[i].oper||'-'==IC[i].oper||'>'==IC[i].oper){printf("%c指令修改了%d页\n",IC[i].oper,IC[i].Page_Num);// 修改该页的修改标志Page_Record[IC[i].Page_Num].revise=TRUE;}i++; // 指向下一条指令}for(i=0;i<IN;i++){if(TRUE==Page_Record[P[i]].revise){printf("%d页写回外存!\n",P[i]);}}}void main(){Init();excute();}。
计算机操作系统上机教案学院名称:河北政法职业学院系部名称:计算机系课程名称:计算机操作系统任课教师:张敏丽授课题目:操作系统实训1 授课序号:12 授课班级:司法信息2003级教学方法:讲授,实训课时:2学时教学目的:通过这一章的学习,使学生掌握该计算机系统的使用方法。
教学重点:界面的使用。
教学难点:熟悉该系统的操作命令。
作业布置:教学内容:一、实习内容选择一个计算机系统,熟悉该系统的操作命令,且掌握该计算机系统的使用方法。
二、实习目的配合操作系统课程的学习,模拟实现操作系统的功能,有助于对操作系统的理解。
操作系统功能的模拟实现可以在计算机系统的终端上进行,也可以在一台微型计算机上进行。
根据您的学习条件,选择一个计算机系统,熟悉对该系统的使用,那么您可以顺利地完成本课程的实习。
为了尽快地熟悉计算机系统,可编辑一个源程序,且对编辑好的源程序编译、运行、显示/打印运行结果等。
三、实习题目1打开:"开始"-"程序"-"附件"-"系统工具",①进行磁盘清理,②进行磁盘碎片整理,③进行磁盘扫描,④进行磁盘维护向导的操作,⑤进行"系统信息"中启动过程的设置.2浏览"控制面板"-"系统"---"设备管理器"信息的查看及"控制面板"-"网络"-的配置信息的作用.在"控制面板"-"电源管理"-中修改电源管理选项和,在"控制面板"-"日期/时间"-中修改日期和时间.2 按大纲模式建立一"培训练习"文档,文档内容为本本书目录的前三章,每章节只取两个标题,然后在普通视图下输入每节的前两行文字,并在页面视图下排版出满意的文档,最后存于"Word文档练习"中.4 根据"简历向导"建立一个人建立资料,用文件名"简历"存于"Word文档练习"文件夹中.授课题目:操作系统实训2 授课序号:14 授课班级:司法信息2003级教学方法:讲授,实训课时:2学时教学目的:通过这一章的学习,使学生掌握处理机的调度方法。
题目:页面置换算法FIFO算法1.谈谈你对本课程学习过程中的心得体会与建议?转眼间,学习了一个学期的计算机操作系统课程即将结束。
在这个学期中,通过老师的悉心教导,让我深切地体会到了计算机操作系统的一些原理和具体操作过程。
在学习操作系统之前,我只是很肤浅地认为操作系统只是单纯地讲一些关于计算机方面的操作应用,并不了解其中的具体操作过程和实用性。
通过这一学期的学习,我才知道操作系统(OperatingSystem,简称 OS)是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。
经过一个学期的学习,我也知道了计算机操作系统是铺设在计算机硬件上的多层系统软件,不仅增强了系统的功能,而且还隐藏了对硬件操作的细节,由它实现了对计算机硬件操作的多层次的抽象。
总而言之,操作系统的一些原理在生活中都可以找到相应的例子。
结合生活中的例子,可以化抽象为具体,我们会更加清楚地了解到其原理与操作过程。
我觉得通过我们的不断学习,结合生活中的实际问题,我们就会把操作系统学得更好。
2.《操作系统》课程设计,从以下5个题目中任选其一作答。
题目一:页面置换算法FIFO算法页面置换算法FIFO算法在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。
当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。
而用来选择淘汰哪一页的规则叫做页面置换算法。
在请求分页存储器管理系统中,我们需要一个页面置换算法,而先进先出算法就是最早出现的一种算法,利用该算法可以实现页面的置换,实现内存的充分利用,使进程可以执行。
先进先出置换算法(FIFO)最简单的页面置换算法是先入先出(FIFO)法。
这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。
最佳页面置换算法(Optimal)(非常专业)评价一个算法的优劣,可通过在一个特定的存储访问序列(页面走向)上运行它,并计算缺页数量来实现。
1 先入先出法(FIFO)最简单的页面置换算法是先入先出(FIFO)法。
这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。
理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。
建立一个FIFO队列,收容所有在内存中的页。
被置换页面总是在队列头上进行。
当一个页面被放入内存时,就把它插在队尾上。
这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。
因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。
FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。
当然,导致这种异常现象的页面走向实际上是很少见的。
现在来看下4块的情况:0 1 2 3 2 1 3 2 5 2 3 6 2 1 4 2【解答】刚开始内存并没有这个作业,所以发生缺页中断一次。
作业的0号页进入内存。
(1次缺页中断)而页1又不在内存,又发生缺页中断一次。
作业页1进入内存。
(2次缺页中断) 页2不在内存,发生缺页中断。
页2进入内存。
(3次缺页中断)页3不在内存,发生缺页中断。
页3进入内存。
(4次缺页中断)接下来调入页2,页1,页3,页2。
由于都在内存中,并不发生缺页中断。
页5不在内存,发生缺页中断。
页5进入内存,页5置换页0。
(5次缺页中断) 接下来调入页2,页3。
由于都在内存中,并不发生缺页中断。
页6不在内存,发生缺页中断。
页6进入内存。
页6置换页1。
(6次缺页中断) 页2在内存,不发生缺页中断。
页1不在内存(在发生第6次缺页中断时被置换了),发生缺页中断。
页1进入内存,页2被置换。
(7次缺页中断)页4置换页3,页4进入内存。
(8次缺页中断)现在调入页2,但页2在发生第7次缺页中断时被置换掉了。
【例2】对一个将页表存放在内存中的分页系统:(1)如访问内存需要0.2μs,有效访问时间为多少(2)如果加一快表,且假定在快表中找到页表项的机率高达90%,则有效访问时间又是多少(假定查快表需花的时间为0)答:(1)有效访问时间为:2×0.2=0.4μs(2)有效访问时间为:0.9×0.2+(1—0.9)×2×0.2=0.22 ps。
【例3】某系统采用页式存储管理策略,拥有逻辑空间32页,每页2K,拥有物理空间1M。
(1)写出逻辑地址的格式。
(2)若不考虑访问权限等,进程的页表有多少项每项至少有多少位(3)如果物理空间减少一半,页表结构应相应作怎样的改变答:(1)该系统拥有逻辑空间32页,故逻辑地址中页号必须用5位来描述:而每页为2K,因此,页内地址必须用11位来描述,这样可得到它的逻辑地址格式如下:等,则页表项中只需给出页所对应的物理块块号,1M的物理空间可分成29个内存块,故每个页表项至少有9位(3)如果物理空间减少一半,则页表中页表项数仍不变,但每项的长度可减少1位。
【例4】已知某分页系统,主存容量为64K,页面大小为1K,对一个4页大的作业,其0、l、2、3页分别被分配到主存的2、4、6、7块中。
(1)将十进制的逻辑地址1023、2500、3500、4500转换成物理地址。
(2)以十进制的逻辑地址1023为例画出地址变换过程图。
答:(1)对上述逻辑地址,可先计算出它们的页号和页内地址(逻辑地址除以页面大小,得到的商为页号,余数为页内地址),然后通过页表转换成对应的物理地址。
①逻辑地址1023:1023/1K,得到页号为0,页内地址为1023,查页表找到对应的物理块号为2,故物理地址为2×1K+1023=3071。
②逻辑地址2500:2500/1K,得到页号为2,页内地址为452,查页表找到对应的物理块号为6,故物理地址为6×IK+452=6596。
计算机科学与技术系实验报告专业名称网络工程课程名称操作系统原理项目名称FIFO页面调度算法处理缺页中断班级 12网络工程(1)班学号 1204031030姓名方彬同组人员朱佳宝、王卫、凌含涛、胡星瑞实验日期 2014.12.02一、实验目的与要求:(1)熟悉、掌握先进先出FIFO算法,并实现用先进先出FIFO算法页面调度算法处理缺页中断.(2)理解基于先进先出FIFO的内存管理调度算法,更好的掌握算法的思想,结合实验理解算法更直观,深刻具体。
通过对先进先出FIFO的调度算法的模拟实验可以清楚的了解内存管理是如何调度的,以及加深对内存管理的了解。
二、实验内容1)任务分析:以无歧义的陈述说明实验任务,并明确规定:(a)输入的形式和输入值的范围;在输入文本框中输入,输入值的范围在0~6之间(b) 输出的形式;输出为缺页序列的表格(c) 程序所能达到的功能;输入页号,输出缺页序列,实现先进先出算法的模拟(d) 测试数据:包括正确的输入及其输出结果和错误的输入及其输出结果。
①输入值为空:②输入值越界:③正确的输入值:2)概要设计:说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
本程序中定义了一个数组int[] mainstore = {3,2,1,0 };用于模拟主存存放页;此外还定义了一个数组int[] flag = {0,0,0,0,0,0,0 };用于表明页号的修改标志位,便于之后的操作。
该程序的只要流程如下:3)详细设计:实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。
using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using lru;using change;namespace 操作系统{public partial class Form1 : Form{public Form1(){InitializeComponent();}//定义一个窗口类,在类里面定义一个窗口int[] mainstore = {3,2,1,0 };//定义数组用于存放页int[] flag = {0,0,0,0,0,0,0 };//定义修改标志位的数组int blo = 0;//用来控制在表格的哪一列输出页号序列private void button1_Click(object sender, EventArgs e)//定义一个事件响应,即对输入进行操作{if (string.IsNullOrEmpty(txt.Text))MessageBox.Show("请输入页号!");else if (int.Parse(txt.Text) > 6 || int.Parse(txt.Text) < 0)MessageBox.Show("输入页号不合法,请重新输入!");//判断输入是否合法else{int page = int.Parse(txt.Text);int i=0;if (page != mainstore[0] && page != mainstore[1] && page != mainstore[2] && page != mainstore[3])//插入页内存中不存在,进行FIFO算法{int lll;lll = mainstore[0];if (flag[mainstore[0]] == 0)//修改标志位为0,直接覆盖{mainstore[0] = page;flag[lll] = 1;}Else//修改标志位为1,数组执行FIFO{for (i = 0; i < 3; i++)mainstore[i] = mainstore[i + 1];mainstore[3] = page;}MessageBox.Show("当前调走页号"+lll.ToString ()+"\n存入页号为"+page.ToString ());l0.Text = "0";l1.Text = "0";l2.Text = "0";l3.Text = "0";l4.Text = "0";l5.Text = "0";l6.Text = "0";//标志位初始化;for (int j = 0; j < 4; j++){if (mainstore[j] == 0)l0.Text = "1";if (mainstore[j] == 1)l1.Text = "1";if (mainstore[j] == 2)l2.Text = "1";if (mainstore[j] == 3)l3.Text = "1";if (mainstore[j] == 4)l4.Text = "1";if (mainstore[j] == 5)l5.Text = "1";if (mainstore[j] == 6)l6.Text = "1";}//根据插入页号,将标志位置1for (int k = 0;k < 7; k++){if (lll == 0)ll0.Text = "1";if (lll == 1)ll1.Text = "1";if (lll == 2)ll2.Text = "1";if (lll == 3)ll3.Text = "1";if (lll == 4)ll4.Text = "1";if (lll == 5)ll5.Text = "1";if (lll == 6)ll6.Text = "1";}//根据情况,将修改标志位置1}else{MessageBox.Show("该页已在主存中!" );}blo++;if(blo==1){txt10.Text = mainstore[0].ToString();txt11.Text = mainstore[1].ToString();txt12.Text = mainstore[2].ToString();txt13.Text = mainstore[3].ToString();}else if(blo==2){txt20.Text = mainstore[0].ToString();txt21.Text = mainstore[1].ToString();txt22.Text = mainstore[2].ToString();txt23.Text = mainstore[3].ToString();}else if(blo==3){txt30.Text = mainstore[0].ToString();txt31.Text = mainstore[1].ToString();txt32.Text = mainstore[2].ToString();txt33.Text = mainstore[3].ToString();}else if(blo==4){txt40.Text = mainstore[0].ToString();txt41.Text = mainstore[1].ToString();txt42.Text = mainstore[2].ToString();txt43.Text = mainstore[3].ToString();}else if(blo==5){txt50.Text = mainstore[0].ToString();txt51.Text = mainstore[1].ToString();txt52.Text = mainstore[2].ToString();txt53.Text = mainstore[3].ToString();}else if(blo==6){txt60.Text = mainstore[0].ToString();txt61.Text = mainstore[1].ToString();txt62.Text = mainstore[2].ToString();txt63.Text = mainstore[3].ToString();}else if(blo==7){txt70.Text = mainstore[0].ToString();txt71.Text = mainstore[1].ToString();txt72.Text = mainstore[2].ToString();txt73.Text = mainstore[3].ToString();}else if(blo==8){txt80.Text = mainstore[0].ToString();txt81.Text = mainstore[1].ToString();txt82.Text = mainstore[2].ToString();txt83.Text = mainstore[3].ToString();}//根据插入数量,决定在输出表的指定列输出}}private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e){Form1 the_new = new Form1();the_new.Show();}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){this.Close();}4)调试分析:(a)调试过程中遇到哪些问题,是如何解决的;Q1:一开始的程序只能输入9个页号序列,超过之后就不能够再显示新的页号序列;(定义了一个变量BLO,用于记录输入页号数量,做求模运算mod 9,这样当超过九个之后又会从第一列开始覆盖)Q2:考虑到程序的用户友好性,增加了序列刷新功能,刷新输出区域;(定义了一个button,点击后将输出区域初始化)Q3:开始没有理解修改标志位的作用,所以功能没有实现;(经过与同学的讨论,定义了一个数组flag[],将页号作为flag[]的下标选择置1或置0)(b) 算法的时空分析:算法的时间复杂度和空间复杂度分析;5)测试结果:包括输入和输出,测试数据应该完整和严格。
第4章存储器管理4.1 典型例题解析【例1】某系统采用动态分区分配方式管理内存,内存空间为640K,高端40K用来存放操作系统。
在内存分配时,系统优先使用空闲区低端的空间。
对下列的请求序列:作业1申请130K、作业2申请60K、作业3申请100K、作业2释放60K、作业4申请200K、作业3释放100K、作业1释放130K、作业5申请140K、作业6申请60K、作业7申请50K、作业6释放60K,请分别画图表示出使用首次适应算法和最佳适应算法进行内存分配和回收后内存的实际使用情况。
答:使用首次适应算法和最佳适应算法进行上述内存的分配和回收后,内存的实际使用情况分别如图(a)和(b)所示。
(a )(b) 【例2】对一个将页表存放在内存中的分页系统:(1)如访问内存需要0.2μs ,有效访问时间为多少?(2)如果加一快表,且假定在快表中找到页表项的机率高达90%,则有效访问时间又是多少(假定查快表需花的时间为0)? 答:(1)有效访问时间为:2×0.2=0.4μs (2)有效访问时间为:0.9×0.2+(1—0.9)×2×0.2=0.22 ps 。
【例3】某系统采用页式存储管理策略,拥有逻辑空间32页,每页2K ,拥有物理空间1M 。
(1)写出逻辑地址的格式。
(2)若不考虑访问权限等,进程的页表有多少项?每项至少有多少位? (3)如果物理空间减少一半,页表结构应相应作怎样的改变? 答:(1)该系统拥有逻辑空间32页,故逻辑地址中页号必须用5位来描述:而每页为 2K ,因此,页内地址必须用11位来描述,这样可得到它的逻辑地址格式如下: 等,则页表项中只需给出页所对应的物理块块号,1M 的物理空间可分成29个内存块,故每个页表项至少有9位(3)如果物理空间减少一半,则页表中页表项数仍不变,但每项的长度可减少1位。
【例4】已知某分页系统,主存容量为64K ,页面大小为1K ,对一个4页大的作业,其0、l 、2、3页分别被分配到主存的2、4、6、7块中。
习题四存储管理一、单项选择题1、存储管理的目的是()。
A.方便用户B.提高内存利用率C.方便用户和提高内存利用率D.增加内存实际容量2、外存(如磁盘)上存放的程序和数据()。
A.可由CPU直接访问B.必须在CPU访问之前移入内存C.是必须由文件系统管理的D.必须由进程调度程序管理3、当程序经过编译或者汇编以后,形成了一种由机器指令组成的集合,被称为()。
A.源程序B.目标程序C.可执行程序D.非执行程序4、固定分区存储管理一般采用( )进行主存空间的分配。
A.最先适应分配算法B.最优适应分配算法C.最坏适应分配算法D.顺序分配算法5、经过(),目标程序可以不经过任何改动而装入物理内存单元。
A.静态重定位B.动态重定位C.编译或汇编D.存储扩充6、若处理器有32位地址,则它的虚拟地址空间为()字节。
A.2GBB.4GBC.100KBD.640KB7、首次适应算法的空闲区是()。
A.按地址递增顺序连在一起B.始端指针表指向最大空闲区C.按大小递增顺序连在一起D.寻找从最大空闲区开始8、()是指将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据。
A.覆盖技术B.对换技术C.虚拟技术D.物理扩充9、虚拟存储技术是()。
A.补充内存物理空间的技术B.补充相对地址空间的技术C.扩充外存空间的技术D.扩充输入输出缓冲区的技术10、虚拟存储技术与()不能配合使用。
A.分区管理B.动态分页管理C.段式管理D.段页式管理11、以下存储管理技术中,支持虚拟存储器的技术是()。
A.动态分区法B.可重定位分区法C.请求分页技术D.对换技术12、在请求页式存储管理中,若所需页面不在内存中,则会引起()。
A.输入输出中断B. 时钟中断C.越界中断D. 缺页中断13、采用段式存储管理的系统中,若地址用24位表示,其中8位表示段号,则允许每段的最大长度是()。
A.224 B.216 C.28 D.23214、在固定分区分配中,每个分区的大小是_______。
四、计算题1、某虚拟存储器的用户编程空间共32个页面,每页为1KB ,内存为16KB 。
假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:则逻辑地址0A5C(H)所对应的物理地址是什么?要求:写出主要计算过程。
1.解:页式存储管理的逻辑地址分为两部分:页号和页内地址。
由已知条件“用户编程空间共32个页面”,可知页号部分占5位;由“每页为1KB”,1K=210,可知内页地址占10位。
由“内存为16KB”,可知有16块,块号为4位。
逻辑地址0A5C (H )所对应的二进制表示形式是:000 1010 0101 1100,根据上面的分析,下划线部分为页内地址,编码 “000 10” 为页号,表示该逻辑地址对应的页号为2。
查页表,得到物理块号是11(十进制),即物理块地址为:10 11,拼接块内地址10 0101 1100,得10 1110 0101 1100,即2E5C (H )。
2、对于如下的页面访问序列:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5当内存块数量为3时,试问:使用FIFO 、LRU 置换算法产生的缺页中断是多少?写出依次产生缺页中断后应淘汰的页。
(所有内存开始时都是空的,凡第一次用到的页面都产生一次缺页中断。
要求写出计算步骤。
) 2.解:采用先进先出(FIFO )调度算法,页面调度过程如下:页面次序主存 页面 情况共产生缺页中断9次。
依次淘汰的页是1、2、3、4、1、2。
采用最近最少使用(LRU )调度算法,页面调度过程如下: 共产生缺页中断10次。
依次淘汰的页是1、2、3、4、5、1、2。
3、下表给出了某系统中的空闲分区表,系统采用可变式分区存储管理策略。
现有以下作业序列:96K 、20K 、200K 。
若用首次适应算法和最佳适应算法来处理这些作业序列,试问哪一种算法可以满足该作业序列的请求,为什么?空闲分区表页面次序1 2 3 4 1 2 5 1 2 3 4 5 主存 页面 情况3.解:若采用最佳适应算法,在申请96K 存储区时,选中的是5号分区,5号分区大小 与申请空间大d,-致,应从空闲分区表中删去该表项;接着申请20K 时,选中1号分区,分配后1号分区还剩下12K ;最后申请200K ,选中4号分区,分配后剩下18K 。
实验四 用先进先出(FIFO )页面调度算法处理缺页中断
1.实验目的
深入了解页式存储管理如何实现地址转换;
进一步认识页式虚拟存储管理中如何处理缺页中断。
2.实验预备知识
页式存储管理中的地址转换的方法;
页式虚拟存储的缺页中断处理方法。
3.实验内容
编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所作工作进程测试。
假定主存64KB ,每个主存块1024字节,作业最大支持到64KB ,系统中每个作业分得主存块4块。
4.提示与讲解
页式存储管理中地址转换过程很简单,假定主存块的大小为2n 字节,主存大小为2m'字节和逻辑地址m 位,则进行地址转换时,首先从逻辑地址中的高m-n 位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n 位,最后从逻辑地址中取得低n 位放入物理地址的低n 位就得到了物理地址,过程如图1所示。
图1 页式存储管理系统地址转换示意图
地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程图如图2所示(实验中假定主存64KB ,每个主存块1024字节,即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB ,即m=16,逻辑地址中页号6位、页内地址10位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,
逻辑地址
由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
这样,在实验中页表格式如图2所示。
页表用数组模拟,在实验中页表数据结构定义为(同学们可自行定义其它功能等价的结构):
define n 32 /*实验中假定的页表长度,页表的长度实际上是由系统按照作业长度决定的*/
struct
{int lnumber; /*页号*/
int flag; /*表示该页是否在主存,“1”表示在主存,“0”表示不在主存*/
int pnumber; /*该页所在主存块的块号*/
int write; /*该页是否被修改过,“1”表示修改过,“0”表示没有修改过*/
int dnumber; /*该页存放在磁盘上的位置,即磁盘块号*/ }page[n]; /*页表定义*/
图2 模拟地址转换的流程图
缺页处理过程简单阐述如下:
①根据当前执行指令中逻辑地址中的页号查页表,判断该页是否在主存储器中,若该页标志为“0”,形成缺页中断。
中断装置通过交换PSW让操作系统的
中断处理程序占用处理器;
②操作系统处理缺页中断的方法就是查主存分配表,找一个空闲主存块;若无空闲块,查页表,选择一个已在主存的页面,把它暂时调出主存。
若在执行过程中该页被修改过,则需将该页信息写回磁盘,否则不必写回;
③找出该页的磁盘位置,启动磁盘读出该页信息,把磁盘上读出的信息装入第2步找到的主存块,修改页表中该页的标志为“1”;
④由于产生缺页中断的那条指令没有执行完,所以页面装入后应重新执行被中断的指令。
当重新执行该指令时,由于要访问的页面已在主存中,所以可正常执行。
关于第②步的查找装入新页面的主存块的处理方式,不同系统采用的策略可能有所不同,这里采用局部置换算法,就是每个作业分得一定的主存块,只能在分得的主存块内查找空闲块,若无空闲主存块,则从该作业中选择一个页面淘汰出主存。
实验中使用局部置换算法。
使用局部置换算法时,存在这样一个问题:就是在分配给作业主存空间时,装入哪些页?有的系统采取不装入任何一页,当执行过程中需要时才将其调入。
有的系统采用页面预置的方法,就是估计可能某些页面会先用到,在分配主存块后将这些页面装入。
实验中,采用第二种方法,分配主存空间时将前几页调入主存,假定系统中每个作业分得主存块m(m=4)块,则将第0~m-1页装入主存。
因为是模拟硬件工作,所以实验中如果访问的页不在主存时,则输出该页页号,表示硬件产生缺页中断,然后直接转去缺页中断处理;由于采用页面预置方法,在给定的主存块中一定无空闲块,只能淘汰已在主存的一页;没有启动磁盘的工作,淘汰的页需要写回磁盘时,用输出页号表示,调入新的一页时,将该页在页表中的存在标志置为“1”,输出页号表示将该页调入主存。
图3 采用先进先出页面置换算法的缺页中断流程图
主存中无空闲块时,为装入一个页面,必须按某种算法从已在主存的页中选择一页,将它暂时调出主存,让出主存空间,用来存放需装入的页面,这个工作称为“页面调度”。
如何选择调出的页是很重要的,常用的页面调度算法有先进先出算法、最近最少用算法和最近最不常用算法。
实验中使用先进先出调度算法。
先进先出调度算法总是选择驻留在主存时间最长的一页调出。
先进先出算法简单,易实现。
可以把在主存储器的页的页号按进入主存的先后次序排成队列,每次总是调出队首的页,当装入一个新页后,把新页的页号排入队尾。
实验中,用一个数组存放页号的队列。
假定分配给作业的主存块数为m,数组可由m个元素组成,p[0],p[1]……p[m-1];队首指针head;采用页面预置的方法,页号队列的长度总是m,tail等于(head+1)%m。
因此可以使用一个指针,只用head即可。
在装入一个新的页时,装入页和淘汰页同时执行,当装入一个新的页时,将其页号存入数组:
淘汰页的页号=p[head];
p[head]=新装入页的页号;
head=(head+1)%m;
实验中,采用先进先出页面置换算法的缺页中断流程图如图3所示。
图4一条指令执行的模拟流程图
实验执行一条指令时,不模拟指令的执行,只是考虑指令执行是否修改页面,若修改页面,则将该页的页表中修改标志为置“1”,然后输出转换后的物理地址,并输出物理地址来表示一条指令执行完成;如果访问的页不在主存时,则产生缺页中断,然后直接转去缺页中断处理,最后模拟中断返回,就是返回重新进行地址转换。
一条指令执行的模拟流程图如图4所示。
因为没有实际主存,所以在模拟程序中首先手工输入页表信息,创建该作业的页表;然后循环执行假定的指令,观察地址转换情况。
5. 实验报告的内容
(1)实验题目。
(2)程序中使用的数据结构及符号说明。
(3)编写一份源程序并附上注释。
(4)打印显示初始页表,每次调出(要调出一页时)和装入的页号以及执行最后一条指令后在主存中的页面号(即数组的值)。