OS实验指导四——虚拟存储器管理

合集下载

实习五 虚拟存储器实验报告

实习五 虚拟存储器实验报告

实习五虚拟存储器实验报告一、实验目的本次虚拟存储器实验旨在深入理解计算机系统中虚拟存储器的工作原理和机制,通过实际操作和观察,掌握虚拟存储器的相关概念和技术,包括页式存储管理、地址转换、页面置换算法等。

同时,培养我们的实践能力和问题解决能力,为今后学习和工作中涉及到的计算机系统相关知识打下坚实的基础。

二、实验环境本次实验使用的操作系统为 Windows 10,开发工具为 Visual Studio 2019,编程语言为 C++。

三、实验原理1、虚拟存储器的概念虚拟存储器是一种利用硬盘等辅助存储器来扩充主存容量的技术。

它将程序和数据按照一定的页面大小划分,并在需要时将页面从硬盘调入主存,从而实现了使用有限的主存空间运行较大规模的程序。

2、页式存储管理页式存储管理将主存和辅存空间都划分为固定大小的页面。

程序的地址空间被分成若干页,主存也被分成相同大小的页框。

通过页表来记录页面和页框的对应关系,实现地址转换。

3、地址转换当 CPU 执行指令时,给出的是逻辑地址。

通过页表将逻辑地址转换为物理地址,才能在主存中访问相应的数据。

4、页面置换算法当主存空间不足时,需要选择一个页面换出到硬盘,以腾出空间调入新的页面。

常见的页面置换算法有先进先出(FIFO)算法、最近最少使用(LRU)算法等。

四、实验内容与步骤1、设计并实现一个简单的页式存储管理系统定义页面大小和主存、辅存的容量。

实现页表的数据结构,用于记录页面和页框的对应关系。

编写地址转换函数,将逻辑地址转换为物理地址。

2、实现页面置换算法分别实现 FIFO 和 LRU 页面置换算法。

在页面调入和调出时,根据相应的算法选择置换的页面。

3、测试和分析实验结果生成一系列的访问序列,模拟程序的运行。

统计不同页面置换算法下的缺页次数和命中率。

分析实验结果,比较不同算法的性能。

五、实验过程与结果1、页式存储管理系统的实现我们将页面大小设置为 4KB,主存容量为 16MB,辅存容量为 1GB。

虚拟存储器管理实验报告

虚拟存储器管理实验报告

淮海工学院计算机科学系实验报告书课程名:《操作系统》题目:虚拟存储器管理页面置换算法模拟实验班级:学号:姓名:一、实验目的与要求1.目的:请求页式虚存管理是常用的虚拟存储管理方案之一。

通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。

2.要求:本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。

其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。

要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。

程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。

二、实验说明1.设计中虚页和实页的表示本设计利用C语言的结构体来描述虚页和实页的结构。

在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。

pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。

time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。

在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。

pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。

next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。

2.关于缺页次数的统计为计算命中率,需要统计在20次的虚页访问中命中的次数。

为此,程序应设置一个计数器count,来统计虚页命中发生的次数。

每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内,此虚页被命中,count加1。

最终命中率=count/20*100%。

操作系统---虚拟存储器管理

操作系统---虚拟存储器管理

作业1
空闲区 作业1 运行 进驻内存 空闲区
作业2
作业1被系统调 空闲区 出,进入外存, 作业2调入内存 运行 作业3 作业2 空闲区
出 , 调 入 作 业 3 运 行 将 作 业 2 的 部 分 内 容 换
作业1 作业3 作业3 作业2 作业1运行完毕, 将作业3的换出 部分重新装入 空闲区 将作业3的部分 内容换出,再 次调入作业1 运行
24
请求分页存储管理的实现
问题一:如何知道作业中的某一部分所在的位置?
【解答】 修改数据结构——页表。 需要在页表中添加相应的字段: 若页面在内存:给出物理块号; 若页面在外存:应给出在外存中的位臵; 为每个作业设臵新的页表,记录作业中的某一页在 虚拟存储空间的位臵。如图所示: 页号 号 物理块号 状态位 访问字段 修改位 外存地址
5
内存扩充技术
授课内容:
覆盖技术
对换技术
虚拟存储技术
6
教学目的和要求
通过本讲的学习,学生将能够:
了解内存扩充技术 描述常规存储管理方式的特征和程序局部性原理 给出虚拟存储器的定义,并理解虚拟存储器的特征 了解请求分页存储管理方式及实现 了解请求分段存储管理方式及实现 了解请求段页存储管理方式及实现 了解LINUX系统的存储器管理策略
14
课堂练习:对换
15
一、选择题
1. 对外存对换区的管理应以(A)为主要目标;对外存 文件区的管理应以(B)为主要目标。
A,B:(1)提高系统吞吐量;(2)提高存储空间 的利用率;(3)降低存储费用;(4)提高换入换出速度; 二、问答题 1. 在系统中引入对换会带来哪些好处?
2. 为实现对换,系统应具备哪几方面的功能?

虚拟存储管理实验报告

虚拟存储管理实验报告

虚拟存储管理实验报告实验概述虚拟存储管理实验是操作系统课程中的一项重要实验,旨在通过模拟内存管理中的分页机制和页面置换算法,深入理解操作系统中的虚拟内存管理技术。

本实验主要包括以下几个关键点:- 模拟内存的分页机制- 实现页面置换算法- 分析不同页面置换算法的性能指标实验环境本次实验基于C语言和Linux操作系统进行实现,使用gcc编译器进行编译和调试。

实验过程及实现细节在本次实验中,我们实现了一个简单的虚拟内存系统,主要包括以下几个模块:页面管理、页面分配、页面置换和性能分析。

下面对每个模块的实现细节进行详细描述。

页面管理页面管理模块主要负责管理虚拟内存和物理内存之间的映射关系。

我们采用了分页机制进行管理,将虚拟内存和物理内存划分为固定大小的页面。

页面的大小由实验设置为4KB。

页面分配页面分配模块负责分配物理内存空间给进程使用。

我们使用一个位图作为物理内存管理的数据结构,记录每个页面的使用情况。

在每次页面分配时,我们会查找位图中第一个空闲的页面,并将其分配给进程。

页面置换页面置换模块是虚拟存储管理中的核心算法,主要用于解决内存中页面不足时的页面置换问题。

本次实验中我们实现了两种常用的页面置换算法:FIFO(先进先出)和LRU(最近最少使用)算法。

FIFO算法是一种简单的页面置换算法,它总是选择最早被加载到物理内存的页面进行置换。

LRU算法是一种基于页面访问历史的算法,它总是选择最长时间未被访问的页面进行置换。

性能分析性能分析模块主要用于评估不同的页面置换算法的性能指标。

我们使用了缺页率(Page Fault Rate)和命中率(Hit Rate)作为评价指标。

缺页率表示物理内存中的页面不能满足进程请求的比例,命中率表示进程请求的页面已经在物理内存中的比例。

实验结果为了评估不同的页面置换算法的性能,在实验过程中,我们通过模拟进程的页面访问序列,统计页面置换次数、缺页率和命中率等指标。

以一个包含100个页面访问请求的序列为例,我们分别使用FIFO算法和LRU 算法进行页面置换。

虚拟存储器管理

虚拟存储器管理

沈阳工程学院学生实验报告(课程名称:操作系统)实验题目:虚拟存储器管理班级计算机131 学号2013414126 姓名杨光成地点实训F608 指导教师吕海华王黎明实验日期: 2015 年 5 月26 日一、实验题目模拟分页式虚拟存储管理实验。

二、实验要求编写一段程序来模拟页面置换算法。

要求能分别显示最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法的置换过程。

三、实验目的通过本实验帮助学生理解虚拟存储器的工作方法。

了解分页式存储管理里中各页面置换算法是怎样实现的,各算法有怎样的优缺点。

四、实验原理分析⑴页面置换算法是在分页存储管理方式中为了合理的将进程运行所需的页面调入内存而产生的算法。

一个好的页面转换算法,应具有较低的页面更换频率。

最常见的页面置换算法有最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法。

⑵算法的说明最佳置换算法:选择以后永不使用或是在最长时间内不再被访问的页面作为被淘汰的页面。

这种算法通常可保证获得最低的缺页率,但因为内存中哪个页面是以后永不使用的是无法预知的,所以该算法是无法实现的。

先进先出页面置换算法:选择内存中驻留时间最长的页面作为被淘汰的页面。

该算法实现简单,只需将调入内存中的页面链成一个队列,并设置一个指针指向最老的页面即可。

最近最久未使用置换算法:选择最近最久未使用的页面作为被淘汰的页面。

该算法需要为每个页面设置一个访问字段用来记录页面上次被访问的时间,通过这个时间来决定淘汰哪一个页面。

⑶主要变量及函数说明如表1所示表1 主要变量及函数说明表PRA(void) 初始化int findSpace(void) 查找是否有空闲内存int findExist(int curpage) 查找内存中是否有该页面int findReplace(void) 查找应予置换的页面void display(void) 显示void FIFO(void) FIFO算法void LRU(void) LRU算法void Optimal(void) OPTIMAL算法void BlockClear(void) BLOCK恢复struct pageInfor * block 物理块struct pageInfor * page 页面号串五、实验代码清单1、主函数(如图1)int main(){int c;int m=0,t=0;float n=0;Pro p[L];m=Input(m,p);//调用input函数,返回m值cout<<"请输入可用内存页面数m(3~5): ";do{cin>>M;if(M>5||M<3)cout<<"内存块m须在3~5之间,请重新输入m: ";else break;}while(1);Pro *page=new Pro[M];do{for(int i=0;i<M;i++)//初试化页面基本情况{page[i].num=0;page[i].time=m-1-i;}i=0;cout<<"1:FIFO"<<endl;cout<<"2:LRU"<<endl;cout<<"3:OPT"<<endl;cout<<"按其它键结束程序;"<<endl; cin>>c;return 0;}图1 2、FIFO页面置换(如图2)if(c==1)//FIFO页面置换{n=0;cout<<" ****************************************** "<<endl;cout<<endl;cout<<" FIFO算法情况如下: "<<endl;cout<<endl;cout<<" ****************************************** "<<endl;while(i<m){if(Search(p[i].num,page)>=0)//当前页面在内存中{ cout<<p[i].num<<" ";//输出当前页p[i].numcout<<"不缺页"<<endl;i++;//i加1}else //当前页不在内存中{if(t==M)t=0;else{n++;//缺页次数加1page[t].num=p[i].num;//把当前页面放入内存中cout<<p[i].num<<" ";print(page);//打印当前页面t++;//下一个内存块i++;//指向下一个页面}}}cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;}图23、LRU页面置换(如图3)if(c==2)//LRU页面置换{n=0;cout<<" ****************************************** "<<endl;cout<<endl;cout<<" LRU算法情况如下: "<<endl;cout<<endl;cout<<" ****************************************** "<<endl; while(i<m){int a;t=Search(p[i].num,page);if(t>=0)//如果已在内存块中{page[t].time=0;//把与它相同的内存块的时间置0for(a=0;a<M;a++)if(a!=t)page[a].time++;//其它的时间加1cout<<p[i].num<<" ";cout<<"不缺页"<<endl;}else//如果不在内存块中{n++; //缺页次数加1t=Max(page);//返回最近最久未使用的块号赋值给tpage[t].num=p[i].num;//进行替换page[t].time=0;//替换后时间置为0cout<<p[i].num<<" ";print(page);for(a=0;a<M;a++)if(a!=t)page[a].time++;//其它的时间加1}i++;}cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;}图34、OPT页面置换(如图4)if(c==3)//OPT页面置换{n=0;cout<<" ****************************************** "<<endl;cout<<endl;cout<<" OPT算法情况如下:"<<endl;cout<<endl;cout<<" ****************************************** "<<endl;while(i<m){if(Search(p[i].num,page)>=0)//如果已在内存块中{cout<<p[i].num<<" ";cout<<"不缺页"<<endl;i++;}else//如果不在内存块中{int a=0;for(t=0;t<M;t++)if(page[t].num==0)a++;//记录空的内存块数if(a!=0)//有空内存块{int q=M;for(t=0;t<M;t++)if(page[t].num==0&&q>t)q=t;//把空内存块中块号最小的找出来page[q].num=p[i].num;n++;cout<<p[i].num<<" ";print(page);i++;}else{int temp=0,s;for(t=0;t<M;t++)//寻找内存块中下次使用离现在最久的页面if(temp<Count(page,i,t,p)){temp=Count(page,i,t,p);s=t;}//把找到的块号赋给spage[s].num=p[i].num;n++;cout<<p[i].num<<" ";print(page);i++;}}}cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;}图4五、成绩评定优良中及格不及格出勤内容格式分析总评指导教师:年月日。

操作系统原理虚拟存储器管理资料

操作系统原理虚拟存储器管理资料

光存储技术
通过垂直堆叠存储单元,提供更 高的存储密度和更低的延迟,有 望改变虚拟存储器的架构和设计。
利用激光在介质上刻写数据,具 有极高的存储密度和长达数百年 的数据保存期限,为虚拟存储器 提供了前所未有的容量和可靠性。
云计算与虚拟存储器的关系
云计算资源池化
分布式存储系统
云原生技术
云计算通过虚拟化技术将物理资源抽 象成逻辑资源,实现资源的动态分配 和共享,虚拟存储器是云计算资源池 化的重要组成部分。
物理地址空间
实际内存中的地址空间,与逻辑地址空间不一定连续。物理地址是内存单元的 实际地址,由硬件直接访问。
地址映射机制
1 2
动态重定位
程序执行时,将逻辑地址转换为物理地址的过程。 通过查页表或段表实现地址映射。
请求调页/请求分段
当所需页面/段不在内存中时,发出缺页/缺段中 断,将所需页面/段调入内存。
05
虚拟存储器与操作系统的关系
虚拟存储器对操作系统的影响
扩大内存容量
虚拟存储器通过内外存交换技术, 使得程序可以使用比实际内存更 大的容量。
内存保护
每个程序都在自己的虚拟地址空 间中运行,互不干扰,提高了系 统的安全性。
内存管理灵活
虚拟存储器实现了内存的逻辑扩 充,使得内存管理更加灵活,方 便用户和程序员使用。
03
内存回收策略
当进程不再需要某些内存空间时,操 作系统需要将这些空间回收并重新利 用。常见的内存回收策略包括引用计 数法、标记清除法和复制法等。
缓存技术
要点一
缓存命中与缺失
当CPU访问数据时,如果数据已经在 缓存中,则称为缓存命中;否则需要 从主存中读取数据到缓存中,称为缓 存缺失。

操作系统原理虚拟存储器管理

操作系统原理虚拟存储器管理

总结词
将内存划分为大小不等的段,每段存放 一个程序的段,以段为单位进行交换。
VS
详细描述
段式存储管理将内存空间划分为大小不等 的段框,每个段框可以存放一个程序的段 。程序被划分为多个段,每个段可以有不 同的长度。在进行段交换时,以段为单位 进行数据的存取和替换。
段页式存储管理
总结词
结合段式和页式存储管理的特点,将内存划分为固定大小的页框,程序分割为多个段,每段再分割为 固定大小的页。
虚拟存储器提供了一个统一的地址空间,使得应用程序可以 像访问内存一样访问硬盘上的数据,从而提高了程序的运行 效率。
虚拟存储器的实现方式
内存管理单元(MMU)
负责将虚拟地址转换为物理地址,实现虚拟存储器到物理存储器的 映射。
交换区
当物理内存不足时,操作系统会将部分内存数据交换到硬盘的交换 区中,以释放物理内存空间。
实现进程隔离
通过虚拟内存技术,每个进程都有独 立的内存空间,实现进程间的隔离, 防止数据冲突和相互干扰。
支持大内存程序
通过将内存分为物理内存和虚拟内存, 支持大内存程序的运行,满足不断增 长的程序需求。
02
虚拟存储器的基本概念
虚拟存储器的定义
虚拟存储器是一种将物理内存与硬盘存储相结合的技术,通 过将部分硬盘空间映射到物理内存中,实现内存的扩展。
操作系统原理虚拟存储器管 理
• 引言 • 虚拟存储器的基本概念 • 虚拟存储器的原理 • 虚拟存储器的管理策略 • 虚拟存储器的实现技术 • 虚拟存储器的性能优化
01
引言
主题简介
虚拟存储器是操作系统中用于管理物 理内存和磁盘存储的技术,通过将内 存分为物理内存和虚拟内存,实现进 程间的隔离和内存的动态分配。

虚拟储存管理实验报告

虚拟储存管理实验报告

一、实验目的1. 理解虚拟存储管理的基本概念和原理。

2. 掌握分页式虚拟存储管理的地址转换和缺页中断处理过程。

3. 学习并分析几种常见的页面置换算法,如FIFO、LRU、OPT等。

4. 比较不同页面置换算法的性能,提高对虚拟存储管理的认识。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 虚拟存储器模拟工具:虚拟机(VirtualBox)三、实验内容1. 模拟分页式虚拟存储器(1)定义分页式虚拟存储器的参数,如页大小、内存大小、虚拟地址空间大小等。

(2)创建页表,记录每个页在内存中的位置和是否已加载。

(3)模拟进程的指令序列,生成虚拟地址。

(4)根据虚拟地址进行地址转换,得到物理地址。

(5)处理缺页中断,选择合适的页面置换算法。

2. 页面置换算法模拟(1)实现FIFO(先进先出)页面置换算法。

(2)实现LRU(最近最少使用)页面置换算法。

(3)实现OPT(最优页面置换)算法。

3. 比较不同页面置换算法的性能(1)设置不同的页面置换算法,模拟进程运行。

(2)记录每次缺页中断时的页面命中率。

(3)比较不同页面置换算法的页面命中率,分析其性能。

四、实验结果与分析1. 分页式虚拟存储器模拟(1)通过模拟,成功实现了分页式虚拟存储器的地址转换和缺页中断处理过程。

(2)实验结果表明,分页式虚拟存储器能够有效地提高内存利用率,减少内存碎片。

2. 页面置换算法模拟(1)实现了FIFO、LRU和OPT三种页面置换算法。

(2)通过模拟,比较了三种算法在不同进程下的页面命中率。

3. 页面置换算法性能比较(1)FIFO算法的页面命中率较低,适用于进程较稳定的情况。

(2)LRU算法的页面命中率较高,适用于进程频繁访问同一页面的情况。

(3)OPT算法的页面命中率最高,但实现复杂度较高,适用于进程访问序列可预测的情况。

五、实验结论1. 通过本次实验,加深了对虚拟存储管理的基本概念和原理的理解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OS实验指导四——虚拟存储器管理————————————————————————————————作者:————————————————————————————————日期:2《操作系统》实验指导四开课实验室:A207、A209 2015/11/23 、2015/11/24实验类型设计实验项目(四)虚拟存储器管理实验实验学时 4一、实验目的设计一个请求页式存储管理方案,并编写模拟程序实现。

二、设备与环境1. 硬件设备:PC机一台2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。

三、实验要求1) 上机前认真复习页面置换算法,熟悉FIFO算法和LRU页面分配和置换算法的过程;2) 上机时独立编程、调试程序;3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。

四、实验内容1、问题描述:设计程序模拟FIFO和LRU页面置换算法的工作过程。

假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,并计算每种算法缺页次数和缺页率。

2、程序具体要求如下:编写程序用来模拟虚拟页式存储管理中的页面置换要求:1)快表页面固定为4块2)从键盘输入N个页面号3)输出每次物理块中的页面号和缺页次数,缺页率4)实现算法选择3、程序流程图3、源程序参考:(1)FIFO 算法部分#include "stdio.h"#define n 12#define m 4void main(){int ym[n],i,j,q,mem[m]={0},table[m][n];char flag,f[n];printf("请输入页面访问序列\n ");for(i =0;i <n;i ++) scanf("%d ",&ym[i]);printf("\n ");for(i =0;i <n;i ++) //查页表,看是否缺页{输入页面取访问查是否是置缺页标按不同算调入所访否q=0;while((ym[i]!=mem[q])&&(q!=m)) q++;if(q==m) flag='*'; //缺页,则置标志flag为‘*’else flag='';if(flag=='*'){for(j=m-1;j>0;j--) //淘汰最先调入的页面调入当前访问的mem[j]=mem[j-1];mem[0]=ym[i];}for(j=0;j<m;j++)table[j][i]=mem[j];f[i]=flag;}printf("输出结果为下表(0代表为空,*代表有缺页):\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%3d",table[i][j]);printf("\n");}for(i=0;i<n;i++)printf("%3c",f[i]);}(2)LRU算法#include "stdio.h"#define n 12#define m 4void main(){int ym[n],i,j,q,mem[m]={0},table[m][n];char flag,f[n];printf("请输入页面访问序列\n");for(i=0;i<n;i++)scanf("%d",&ym[i]);printf("\n");for(i=0;i<n;i++) //查页表,看是否缺页{q=0;while((ym[i]!=mem[q])&&(q!=m)) q++;if(q==m) flag='*'; //缺页,则置标志flag为‘*’else flag=' ';for(j=q;j>0;j--)mem[j]=mem[j-1];mem[0]=ym[i];for(j=0;j<m;j++)table[j][i]=mem[j];f[i]=flag;}printf("输出结果为下表(0代表为空,*代表有缺页):\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%3d",table[i][j]);printf("\n");}for(i=0;i<n;i++)printf("%3c",f[i]);}4.测试用例:见第四章课后习题第26题(P159),(注意用比较的方式对程序的运行结果加以分析,比如令M=3或M=4时,结果各有什么不同。

并注意FIFO算法实现时是否有抖动现象。

)同时要求输出物理块中的页面号和算法执行后的缺页次数和缺页率,页面置换次数和页面置换率。

五、思考提高(1)设计友好的界面,将两种算法集成在一个程序中。

(2)考虑不限定m值,而改由在程序执行时界面输入确定,页面引用序列采用随机函数产生。

#include "stdio.h"#define n 12#define m 4void FIFO(){int ym[n],i,j,q,mem[m]={0},table[m][n];char flag,f[n];printf("请输入页面访问序列\n");for(i=0;i<n;i++)scanf("%d",&ym[i]);printf("\n");for(i=0;i<n;i++) //查页表,看是否缺页{q=0;while((ym[i]!=mem[q])&&(q!=m)) q++;if(q==m) flag='*'; //缺页,则置标志flag为'*' else flag=' ';if(flag=='*'){for(j=m-1;j>0;j--) //淘汰最先调入的页面调入当前访问的mem[j]=mem[j-1];mem[0]=ym[i];}for(j=0;j<m;j++)table[j][i]=mem[j];f[i]=flag;}printf("输出结果为下表(0代表为空,*代表有缺页):\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%3d",table[i][j]);printf("\n");}for(i=0;i<n;i++)printf("%3c",f[i]);}//(2)LRU算法void LRU(){int ym[n],i,j,q,mem[m]={0},table[m][n];char flag,f[n];printf("请输入页面访问序列\n");for(i=0;i<n;i++)scanf("%d",&ym[i]);printf("\n");for(i=0;i<n;i++) //查页表,看是否缺页{q=0;while((ym[i]!=mem[q])&&(q!=m)) q++;if(q==m) flag='*'; //缺页,则置标志flag为'*' else flag=' ';for(j=q;j>0;j--)mem[j]=mem[j-1];mem[0]=ym[i];for(j=0;j<m;j++)table[j][i]=mem[j];f[i]=flag;}printf("输出结果为下表(0代表为空,*代表有缺页):\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%3d",table[i][j]);printf("\n");}for(i=0;i<n;i++)printf("%3c",f[i]);}int main(){int x;printf("1:FIFO算法,2:LRU算法");scanf("%d",&x);switch(x){case 1:FIFO();break;case 2:LRU();break;}return 0;}。

相关文档
最新文档