




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
佛山科学技术学院实 验 报 告课程名称 操作系统原理实验 实验项目 虚拟存储器 专业班级 姓 名 学 号 指导教师 成 绩 日 期 一、实验目的1、了解虚拟存储器的基本原理和实现方法。2、掌握几种页面置换算法。二、实验内容设计模拟实现采用不同内外存调度算法进行页面置换,并计算缺页率。三、实验原理内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Window中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。它是采用一定的方法将一定的外存容量模拟成内存,同时对程序进出内存的方式进行管理,从而得到一个比实际内存容量大得多的内存空间,使得程序的运行不受内存大小的限制。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。虚拟内存的设置主要有两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。(一)页式虚拟存储器在页式虚拟存储系统中,将程序按统一的大小划分成多个页,同时也将虚拟存储器划分为同样大小的页,其中虚拟空间的页称为虚页(逻辑页),而主存空间的页称为实页(物理页),并对这些页按地址从低到高的顺序编号。在编程时,程序的虚地址由高位字段的虚页号和低位字段的页内地址两部分组成,虚页号标识页。虚地址到实地址之间的变换是由页表来实现的。页表是一张存放在主存中的虚页号和实页号的对照表,记录着程序的虚页调入主存时被安排在主存中的位置。若计算机采用多道程序工作方式,则可为每个用户作业建立一个页表,硬件中设置一个页表基址寄存器,存放当前所运行程序的页表的起始地址。页表中的每一行记录了与某个虚页对应的若干信息,包括虚页号、装入位和实页号等。页表基址寄存器和虚页号拼接成页表索引地址。根据这个索引地址可读到一个页表信息字,然后检测页表信息字中装入位的状态。若装入位为1,表示该页面已在主存中,将对应的实页号与虚地址中的页内地址相拼接就得到了完整的实地址;若装入位为0,表示该页面不在主存中,于是要启动I/O系统,把该页从辅存中调入主存后再供CPU使用,若主存已满,还需要使用替换算法替换页。(二)页面置换算法在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。几中常见的页面置换方法如下:1. 最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。2. 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。3. 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存4. 时钟置换算法Clock :为进入内存的页面设置一个访问位,当内存中某页被访问,访问位置一,算法在选择一页淘汰时,只需检查访问位,若为0,则直接换出,若为1,置该访问位为0,检测内存中的下一个页面的访问位。5. 最少使用置换算法(LFU):在内存中为每个页面设置一个移位寄存器,用来记录该页面被访问的频率。选择在最近时期使用最少的页面作为淘汰页6. 随机置换算法(S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。四、实验步骤1定义页表的存储结构,设置作业进程所占内存空间为640K,页面大小为1K/2K/4K/8K,随机生成100个页面,用于分配页面大小的内存总空间为32K。2初始化进程的页面引用序列。3选择下列六种置换算法中的三种编写程序,进行页面置换,并计算缺页次数和缺页率。 (1)最佳置换算法(OPT) (2)先进先出置换算法(FIFO): (3)最近最久未使用算法(LRU) (4)时钟置换算法(CLOCK) (5)最少使用置换算法(LFU) (6)随机置换算法(S)4. 使用菜单形式,选择不同的置换方法,显示换页过程、缺页次数及缺页率。五、实验代码#include#include#include#define M 3 /内存页数#define N 20 /页面引用序列数#define Myprintf printf(-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-n) /*表格控制*/ /定义页面的存储结构typedef struct pageint num; /记录页面号int time; /记录调入内存时间int visitBit; /访问位Page;Page PM; /内存单元数int cMN; /暂保存内存当前的状态int queueM=-1,-1,-1; /记录调入内存的页面int front=0; /队列头指针int current=0;/初始化内存单元、缓冲区void Init(Page *p,int cMN) int i,j; for(i=0;iM;i+) pi.num=-1; pi.time=N-i-1; pi.visitBit=0; for(i=0;iM;i+) for(j=0;jN;j+) cij=-1; /判断页面是否已在内存中int Equation(int fold,Page *p) int i; for(i=0;iM;i+) if (fold=pi.num) return i; return -1; /先进先出页面置换算法,加载的页面已在内存中,则/返回0。否则置换出最先调入内存的页,并返回1int FIFO(int fold,Page *p)int i,y;int val=Equation(fold,p);if(val0) /请求页面不在内存y=queuefront; /最先调入内存的页出队queuefront=fold; /加入队尾front=(front+1)%M;for(i=0;iM;i+)if(y=pi.num)pi.num=fold; /页面置换break;return 1;return 0;/LRU置换算法/取得在内存中停留最久的页面,默认状态下为最早调入的页面int GetMax(Page *p) int i; int max=-1; int tag=0; for(i=0;imax) max=pi.time;tag=i; return tag; /LRU核心部分int LRU(int fold,Page *p) int i; int a; a=Equation(fold,p); if (a=0) pa.time=0; for(i=0;iM;i+) if (i!=a) pi.time+;return 0; else a=GetMax(p); pa.num=fold; pa.time=0; for(i=0;iM;i+) if (i!=a) pi.time+;return 1; /时钟置换算法/取的内存中访问位为0的淘汰页面int GetClockPage(Page *p)int i;for(i=0;iM;i+)if(0=pcurrent.visitBit)return current;elsepcurrent.visitBit=0;current=(current+1)%M;return current;int Clock(int fold,Page *p)int val;val=Equation(fold,p);if(val0) val=GetClockPage(p);pval.num=fold;pval.visitBit=1;return 1;return 0;/显示换页过程void Printf(int a,int q,int k)int i,j;printf(显示换页过程:n);Myprintf;for(j=0;jN;j+) printf(%2d |,aj);Myprintf; for(i=0;iM;i+) for(j=0;jN;j+) if(cij=-1) printf(%2c |,32); else printf(%2d |,cij); Myprintf;printf(n调入队列为:); for(i=0;ik+1;i+) printf(%3d,qi); printf(n缺页次数为:%6dn缺页率:%16.6fn,k+1,(float)(k+1)/N);printf(n);int Menu()int i;printf(tt*页面置换算法* n); printf(t 1.先进先出置换算法(FIFO) n);printf(t 2.最近最久未使用算法(LRU) n); printf(t 3.时钟置换算法(CLOCK) n);printf(t 4.退出 n);printf(tt*请输入您的选择*n);scanf(%d,&i);getchar();return i;/主函数void main()int i,j,flag;int q100; /记录调入队列int k ; /调入队列计数变量int aN=7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1;while(1)flag=Menu();switch(flag)case 1: /先进先出置换算法(FIFO)Init(P,c);k=-1;for(i=0;iN;i+)if(FIFO(ai,P)q+k=ai; /记录调入页面c0i=ai;for(j=0;jM;j+) cji=Pj.num;Printf(a,q,k);break;case 2: /最近最久未使用算法(LRU)Init(P,c);k=-1;for(i=0;iN;i+)if(LRU(ai,P)q+k=ai; /记录调入页面for(j=0;jM;j+) cji=Pj.num;Printf(a,q,k);break;case 3: /时钟置换算法(CLOCK)Init(P,c);k=-1;for(i=0;iN;i+)if(Clock(ai,P)q+k=ai; /记录调入页面else /访问页已在内存,访问位置1for(j=0;jM;j+)if(ai=Pi.num)Pi.visitBit=1;current=(current+1)%M;for(j=0;jM;j+) cji=Pj.num;Printf(a,q,k);break;case 4:printf(欢迎使用!n);exit(1);break;六、实验结果及分析1先进先出置换算法2.最近最久未使用算法3.时钟置换算法4.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑工程师岗位面试要点及常见问题解答
- 2025年焊接工艺考试热点钎焊操作规范及安全注意事项
- 2025年水利专业求职者必看初级灌区管理工面试攻略与模拟题解析
- 2025年特岗教师招聘考试指南初中语文教学法
- 2025年旅游策划与管理专业面试预测题及解析
- 2025年信息技术员招聘考试热点解析及模拟题
- 电力交易员基础知识培训课件
- 电刀使用课件
- 电冰箱基础知识培训教材课件
- 2025年特岗教师招聘初中数学面试技巧与预测题解析
- 玉兰花的栽培与管理方法
- 早期子宫内膜癌患者保留生育功能治疗专家共识
- (完整)中医症候积分量表
- 移动电子商务技术基础及应用
- 混凝土裂缝控制技术
- 《文化研究导论》课件
- 公共管理研究方法 课件 第11、12章 定性比较分析、写作
- 融资入股合作协议
- 上门按摩项目创业计划书
- 模块三 环境感知技术
- 基本无害的计量经济学:实证研究者指南
评论
0/150
提交评论