存储管理实验报告
存储器管理实验实验报告

存储器管理实验实验报告一、实验目的存储器管理是操作系统的重要组成部分,本次实验的目的在于深入理解存储器管理的基本原理和方法,通过实际操作和观察,掌握存储器分配与回收的算法,以及页面置换算法的实现和性能评估。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验内容与步骤(一)存储器分配与回收算法实现1、首次适应算法(1)原理:从空闲分区链的首地址开始查找,找到第一个满足需求的空闲分区进行分配。
(2)实现步骤:建立空闲分区链表,每个节点包含分区的起始地址、大小和状态(已分配或空闲)。
当有分配请求时,从链表头部开始遍历,找到第一个大小满足需求的空闲分区。
将该分区进行分割,一部分分配给请求,剩余部分仍作为空闲分区留在链表中。
若找不到满足需求的空闲分区,则返回分配失败。
2、最佳适应算法(1)原理:从空闲分区链中选择与需求大小最接近的空闲分区进行分配。
(2)实现步骤:建立空闲分区链表,每个节点包含分区的起始地址、大小和状态。
当有分配请求时,遍历整个链表,计算每个空闲分区与需求大小的差值。
选择差值最小的空闲分区进行分配,若有多个差值相同且最小的分区,选择其中起始地址最小的分区。
对选中的分区进行分割和处理,与首次适应算法类似。
3、最坏适应算法(1)原理:选择空闲分区链中最大的空闲分区进行分配。
(2)实现步骤:建立空闲分区链表,每个节点包含分区的起始地址、大小和状态。
当有分配请求时,遍历链表,找到最大的空闲分区。
对该分区进行分配和处理。
(二)页面置换算法实现1、先进先出(FIFO)页面置换算法(1)原理:选择在内存中驻留时间最久的页面进行置换。
(2)实现步骤:建立页面访问序列。
为每个页面设置一个进入内存的时间戳。
当发生缺页中断时,选择时间戳最早的页面进行置换。
2、最近最久未使用(LRU)页面置换算法(1)原理:选择最近一段时间内最长时间未被访问的页面进行置换。
存储管理实验报告

存储管理实验报告存储管理实验报告引言:存储管理是计算机系统中非常重要的一部分,它负责管理计算机系统中的存储资源,包括内存和外存。
合理的存储管理能够提高计算机系统的性能和效率,保证系统的稳定运行。
本次实验旨在通过实践操作,深入了解存储管理的原理和方法,并通过实验结果分析,探讨存储管理的优化策略。
一、实验目的本次实验的主要目的是通过实践操作,深入了解存储管理的原理和方法,并通过实验结果分析,探讨存储管理的优化策略。
具体目标如下:1. 了解存储管理的基本概念和原理;2. 掌握存储管理的常用方法和技术;3. 分析实验结果,探讨存储管理的优化策略。
二、实验环境本次实验使用了一台配置较高的计算机,具备较大的内存和高速的硬盘。
实验环境如下:1. 操作系统:Windows 10;2. 内存:16GB;3. 硬盘:1TB。
三、实验过程1. 内存管理实验在内存管理实验中,我们使用了一段较大的程序代码进行测试。
首先,我们通过编程语言将程序代码写入内存中,然后通过内存管理技术将程序代码加载到内存的合适位置。
在加载过程中,我们使用了分页和分段两种常用的内存管理技术,并比较了它们的性能差异。
实验结果显示,分页技术相对来说更加高效,能够更好地利用内存资源,提高系统的运行速度。
2. 外存管理实验在外存管理实验中,我们模拟了大文件的读写操作。
首先,我们将一个较大的文件写入硬盘中,然后通过外存管理技术将文件加载到内存中进行读取。
在加载过程中,我们使用了磁盘调度算法和文件系统管理技术,并比较了它们的性能差异。
实验结果显示,磁盘调度算法的选择对系统的读写速度有较大的影响,而文件系统的合理管理能够提高文件的存取效率。
四、实验结果分析通过对实验结果的分析,我们可以得出以下结论:1. 内存管理中,分页技术相对于分段技术更加高效,能够更好地利用内存资源,提高系统的运行速度;2. 外存管理中,磁盘调度算法的选择对系统的读写速度有较大的影响,合理选择磁盘调度算法能够提高系统的性能;3. 文件系统的合理管理能够提高文件的存取效率,减少文件的碎片化,提高系统的整体性能。
存储管理 实验报告

存储管理实验报告存储管理实验报告一、引言存储管理是计算机系统中一个非常重要的组成部分,它负责管理计算机内存的分配、回收和保护。
本次实验旨在通过实际操作,深入理解存储管理的原理和技术,并探索不同的存储管理策略对系统性能的影响。
二、实验目的1. 理解存储管理的基本概念和原理;2. 掌握常见的存储管理算法和策略;3. 分析不同存储管理策略对系统性能的影响。
三、实验环境本次实验使用了一台配置较低的个人电脑,操作系统为Windows 10,内存容量为4GB。
四、实验内容1. 静态分区分配算法静态分区分配算法是最简单的存储管理算法之一。
在实验中,我们使用了最先适应算法(First Fit)和最佳适应算法(Best Fit)进行静态分区分配。
通过对比两种算法的分配效果,我们发现最佳适应算法在减少内存碎片方面表现更好。
2. 动态分区分配算法动态分区分配算法是一种更加灵活的存储管理策略。
在实验中,我们实现了首次适应算法(First Fit)和最佳适应算法(Best Fit)两种动态分区分配算法。
通过观察不同算法的分配效果,我们发现首次适应算法在处理大量小内存块时效率较高,而最佳适应算法在处理大内存块时表现更好。
3. 页面置换算法页面置换算法是虚拟内存管理中的重要组成部分。
在实验中,我们实现了最近最少使用(LRU)算法和先进先出(FIFO)算法两种页面置换算法。
通过模拟内存不足的情况,我们观察了不同算法对系统性能的影响。
结果显示,LRU算法在减少页面置换次数方面比FIFO算法更为优秀。
五、实验结果与分析通过本次实验,我们对不同的存储管理算法和策略进行了实际操作,并观察了它们对系统性能的影响。
实验结果显示,最佳适应算法在静态分区分配中表现更好,而首次适应算法在动态分区分配中效率更高。
在页面置换算法中,LRU 算法在减少页面置换次数方面更为出色。
六、实验总结本次实验通过实际操作,深入理解了存储管理的原理和技术,并探索了不同的存储管理策略对系统性能的影响。
存储管理实验报告

int m=0;//已分配作业数
int flag;//分配成功标志
int isup,isdow n; //回收区域存在上邻和下邻的标志
int is=0;
struct jcb {
char n ame[10];
char state;
int ntime; //所需时间
给作业占用;另一部分又成为一个较小的空闲区,留在空闲区表中。 为了尽量减少由于
分割造成的空闲区,尽可能分配低地址部分的空闲区,而尽量保存高地址部分有较大的
连续空闲区域,以利于大型作业的装入。 为此,在空闲区说明表中,把每个空闲区按其 地址顺序从低到高登记, 即每个后继的空闲区其起始地址总是比前者大。为了方便查找
为了说明那些分区是空闲的,可以用来装入新作业,必须有一张空闲说明表
长度——指出从起始地址开始的一个连续空闲的长度。
状态一一有两种状态,一种是 “未分配”状态,指出对应的由起址指出的某个长度的 区域是空闲区;另一种是 “空表目”状态, 表示表中对应的登记项目是空白(无效) 可用来登记新的空闲区(例如,作业完成后,它所占的区域就成了空闲区,应找一个
{
JCB *first;
if(ready==NULL) ready=p;
else{
first=ready;
while(first->li nk!=NULL)
first=first->li nk;
first->li nk=p;
p->li nk=NULL;
}
}
void sort3()/*建立对已分配作业队列的排列函数,直接插在队列之尾*/
实验三、存储管理
存储器管理实验报告

存储器管理实验报告1. 实验目的本实验旨在通过实际操作,学习和理解存储器管理的基本概念和原理,并通过编写代码来实现常见的存储器管理算法。
2. 实验背景存储器管理是计算机系统中的重要组成部分,它负责管理和分配计算机的内存资源。
在计算机系统中,内存分为多个不同的区域,每个区域用于存储不同类型的数据。
存储器管理的主要任务是有效地管理和分配这些内存资源,以满足程序的需求,并保证系统的稳定性和高效性。
3. 实验步骤本实验共分为以下几个步骤:步骤一:了解存储器管理的基本概念在开始实验之前,我们首先需要了解存储器管理的基本概念。
包括内存分区、内存分配算法、内存回收算法等。
步骤二:设计实验代码根据实验要求,我们需要编写代码来实现常见的存储器管理算法。
可以选择使用C、C++等编程语言来实现。
步骤三:实验代码测试完成代码编写后,我们需要对代码进行测试,以验证其正确性和可行性。
可以编写一些测试样例来测试不同的存储器管理算法。
步骤四:实验结果分析根据实验的结果,我们可以对不同的存储器管理算法进行比较和分析,评估其优劣和适用性。
步骤五:实验总结在实验结束后,我们可以对实验过程和结果进行总结,总结实验中所学到的知识和经验,并提出改进的建议。
4. 实验总结通过本次实验,我深入了解了存储器管理的基本概念和原理,并通过编写代码实现了常见的存储器管理算法。
实验过程中,我遇到了一些问题,但通过查阅相关文献和资料,最终解决了这些问题。
通过实验,我不仅加深了对存储器管理的理解,还提高了编程能力和问题解决能力。
5. 改进建议在实验过程中,我发现代码实现的效率还有待提高,可以进一步优化算法的设计和实现。
此外,可以扩展实验内容,研究更多的存储器管理算法,并进行比较和分析。
参考文献•[1] 《操作系统教程》•[2] 《计算机体系结构》•[3] 《操作系统原理》。
操作系统存储管理实验报告

操作系统存储管理实验报告一、实验目的本次实验的目的是通过编写一段程序,实现对内存的分配和回收操作,并验证算法的正确性和性能。
二、实验内容1.实现首次适应算法首次适应算法是一种动态分配的内存管理算法,通过从低地址往高地址内存块,找到第一个满足需求的空闲块进行分配。
具体实现过程如下:(1)初始化内存空间,设置内存块的大小和地址范围;(2)编写一个函数,实现内存的分配操作,根据需求大小找到第一个合适的空闲块,并在其前后设置相应的标志位;(3)编写一个函数,实现内存的回收操作,根据释放块的地址,将其前后的标志位进行合并;(4)模拟应用程序的运行,测试内存的分配和回收操作。
2.实现最佳适应算法最佳适应算法是一种动态分配的内存管理算法,通过整个内存空间,找到最小的满足需求的空闲块进行分配。
具体实现过程如下:(1)初始化内存空间,设置内存块的大小和地址范围;(2)编写一个函数,实现内存的分配操作,遍历整个内存空间,找到满足需求且大小最小的空闲块进行分配;(3)编写一个函数,实现内存的回收操作,根据释放块的地址,将其前后的标志位进行合并;(4)模拟应用程序的运行,测试内存的分配和回收操作。
三、实验结果1.首次适应算法经过测试,首次适应算法能够正确地进行内存的分配和回收操作,并且算法的性能良好。
尽管首次适应算法在分配过程中可能会产生碎片,但是由于它从低地址开始,可以在较短的时间内找到满足需求的空闲块。
在实际应用中,首次适应算法被广泛采用。
2.最佳适应算法经过测试,最佳适应算法能够正确地进行内存的分配和回收操作,并且算法的性能较好。
最佳适应算法会整个内存空间,找到大小最小的满足需求的空闲块。
因此,在分配过程中不会产生很多的碎片,但是算法的执行时间较长。
四、实验总结通过本次实验,我们成功地实现了首次适应算法和最佳适应算法,并对算法的正确性和性能进行了验证。
两种算法在内存的分配和回收过程中都表现出良好的性能,可广泛应用于实际场景中。
存储管理实验报告

存储管理实验报告一、实验目的1.了解存储管理的概念及作用;2.掌握存储管理的基本操作和技术;3.熟悉常见的存储管理工具和方法;4.分析存储管理对系统性能的影响。
二、实验内容1.了解存储管理的基本概念:存储管理是指对计算机中的存储器进行有效管理和利用的一种技术手段。
主要包括内存管理和外存管理两个方面。
2.学习常见的存储管理工具和方法:(1)内存管理方案:连续内存管理、非连续内存管理和虚存管理;(2)外存管理方案:磁盘存储管理、文件系统管理和缓存管理等。
3.实际操作存储管理工具:(1)使用操作系统的内存管理工具,如Windows的任务管理器和Linux的top命令等,查看内存使用情况和进程占用的内存大小;(2)使用磁盘管理工具,如Windows的磁盘管理器和Linux的fdisk命令等,查看磁盘的分区情况和使用状况;(3)使用文件系统管理工具,如Windows的资源管理器和Linux的ls命令等,查看文件和目录的存储和管理状态。
4.分析存储管理对系统性能的影响:(1)使用性能监控工具,如Windows的性能监视器和Linux的sar 命令等,实时监测系统的内存、磁盘和文件系统等性能指标;(2)对比不同存储管理方案的优缺点,分析其对系统性能的影响;(3)根据实验结果提出优化存储管理的建议。
三、实验步骤1.阅读相关文献和资料,了解存储管理的基本概念和原理;2.使用操作系统的内存管理工具,查看当前系统内存的使用情况;3.使用操作系统的磁盘管理工具,查看当前系统磁盘的分区情况;4.使用操作系统的文件系统管理工具,查看当前系统文件和目录的存储和管理状态;5.使用性能监控工具,实时监测系统的内存、磁盘和文件系统等性能指标;6.根据实验结果,分析存储管理对系统性能的影响;7.结合实验结果,提出优化存储管理的建议。
四、实验结果1.使用内存管理工具查看系统内存使用情况,发现部分进程占用内存过高,导致系统运行缓慢;2.使用磁盘管理工具查看系统磁盘分区情况,发现磁盘分区不合理,造成磁盘空间利用率较低;3.使用文件系统管理工具查看文件和目录的存储和管理状态,发现有大量重复和冗余的文件,需要进行清理和整理;4.使用性能监控工具实时监测系统的性能指标,发现内存和磁盘的利用率较高,需要优化存储管理。
操作系统存储管理实验报告

操作系统存储管理实验报告一、实验目的操作系统的存储管理是计算机系统中非常重要的组成部分,它直接影响着系统的性能和资源利用率。
本次实验的目的在于深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握存储分配、回收、地址转换等关键技术,并对不同存储管理策略的性能进行分析和比较。
二、实验环境本次实验在 Windows 10 操作系统下进行,使用 Visual Studio 2019 作为编程环境,编程语言为 C++。
三、实验内容(一)固定分区存储管理1、原理固定分区存储管理将内存空间划分为若干个固定大小的分区,每个分区只能装入一道作业。
分区的大小可以相等,也可以不等。
2、实现创建一个固定大小的内存空间数组,模拟内存分区。
为每个分区设置状态标志(已分配或空闲),并实现作业的分配和回收算法。
3、实验结果与分析通过输入不同大小的作业请求,观察内存的分配和回收情况。
分析固定分区存储管理的优缺点,如内存利用率低、存在内部碎片等。
(二)可变分区存储管理1、原理可变分区存储管理根据作业的实际需求动态地划分内存空间,分区的大小和数量是可变的。
2、实现使用链表或数组来管理内存空间,记录每个分区的起始地址、大小和状态。
实现首次适应、最佳适应和最坏适应等分配算法,以及分区的合并和回收算法。
3、实验结果与分析比较不同分配算法的性能,如分配时间、内存利用率等。
观察内存碎片的产生和处理情况,分析可变分区存储管理的优缺点。
(三)页式存储管理1、原理页式存储管理将内存空间和作业都划分为固定大小的页,通过页表将逻辑地址转换为物理地址。
2、实现设计页表结构,实现逻辑地址到物理地址的转换算法。
模拟页面的调入和调出过程,处理缺页中断。
3、实验结果与分析测量页式存储管理的页面置换算法(如先进先出、最近最少使用等)的命中率,分析其对系统性能的影响。
探讨页大小的选择对存储管理的影响。
(四)段式存储管理1、原理段式存储管理将作业按照逻辑结构划分为若干个段,每个段有自己的名字和长度。
存储管理实验报告_6

昆明理工大学信息工程与自动化学院学生实验报告(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算法。
实验四操作系统存储管理实验报告

实验四操作系统存储管理实验报告一、实验目的本次实验的主要目的是深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收、页面置换算法等关键概念,并能够分析和解决存储管理中可能出现的问题。
二、实验环境本次实验在装有 Windows 操作系统的计算机上进行,使用了 Visual Studio 等编程工具和相关的调试环境。
三、实验内容(一)内存分配与回收算法实现1、首次适应算法首次适应算法从内存的起始位置开始查找,找到第一个能够满足需求的空闲分区进行分配。
在实现过程中,我们通过建立一个空闲分区链表来管理内存空间,每次分配时从表头开始查找。
2、最佳适应算法最佳适应算法会选择能够满足需求且大小最小的空闲分区进行分配。
为了实现该算法,在空闲分区链表中,分区按照大小从小到大的顺序排列,这样在查找时能够快速找到最合适的分区。
3、最坏适应算法最坏适应算法则选择最大的空闲分区进行分配。
同样通过对空闲分区链表的排序和查找来实现。
(二)页面置换算法模拟1、先进先出(FIFO)页面置换算法FIFO 算法按照页面进入内存的先后顺序进行置换,即先进入内存的页面先被置换出去。
在模拟过程中,使用一个队列来记录页面的进入顺序。
2、最近最久未使用(LRU)页面置换算法LRU 算法根据页面最近被使用的时间来决定置换顺序,最近最久未使用的页面将被置换。
通过为每个页面设置一个时间戳来记录其最近使用的时间,从而实现置换策略。
3、时钟(Clock)页面置换算法Clock 算法使用一个环形链表来模拟内存中的页面,通过指针的移动和页面的访问标志来决定置换页面。
四、实验步骤(一)内存分配与回收算法的实现步骤1、初始化内存空间,创建空闲分区链表,并为每个分区设置起始地址、大小和状态等信息。
2、对于首次适应算法,从链表表头开始遍历,找到第一个大小满足需求的空闲分区,进行分配,并修改分区的状态和大小。
3、对于最佳适应算法,在遍历链表时,选择大小最接近需求的空闲分区进行分配,并对链表进行相应的调整。
《操作系统》存储管理实验报告

《操作系统》存储管理实验报告操作系统是计算机系统中最基础、最核心的软件之一,负责管理计算机硬件资源和提供资源的分配与调度。
而存储管理是操作系统中的重要组成部分,它负责管理计算机的内存,包括内存的分配、回收、保护等操作。
本文将针对存储管理进行实验,并撰写实验报告。
本次实验主要涉及以下内容:内存的分配与回收、内存的保护。
实验过程中,我首先根据操作系统的要求,设计了相应的算法用于内存的分配与回收。
并通过编写程序,验证了算法的正确性。
随后,我进一步研究了内存的保护机制,通过设置访问权限位和访问控制表,实现了对内存的合理保护。
在内存的分配与回收方面,我设计了一种简单的算法,首次适应算法。
具体实现如下:首先,将内存分为若干个块,每个块的大小为固定值。
当需要分配内存时,首先遍历内存块列表,找到第一个大小合适的块,将其分配给进程。
当进程终止时,将其占用的内存块回收,以便后续进程使用。
通过编写程序进行测试,结果表明该算法能够正确地进行内存的分配与回收。
在内存的保护方面,我采用了访问权限位和访问控制表的方式进行。
具体实现如下:首先,为每个进程分配一组访问权限位,记录了该进程能够访问的内存区域。
同时,设置一个访问控制表,记录了每个内存块的权限。
当进程访问一些内存块时,首先检查该进程的访问权限位,再与访问控制表中的权限进行比较,以确定该进程是否有权限访问该内存块。
通过编写程序进行测试,证明了该机制能够有效地保护内存。
总结来说,本次实验主要涉及了操作系统中的存储管理部分,包括内存的分配与回收、内存的保护。
通过设计算法和编写程序,我成功地实现了这些功能,并验证了其正确性。
通过本次实验,我进一步加深了对操作系统存储管理的理解,提高了编程和设计的能力。
存储管理实验报告总结

存储管理实验报告总结本次实验主要是针对存储管理进行的。
存储管理是操作系统中非常重要的一部分,它负责管理计算机系统的内存空间,为进程提供必要的存储资源。
通过本次实验,我对存储管理的相关概念和技术有了更加深入的了解。
在实验中,我首先学习了存储管理的基本原理。
操作系统将内存分为若干个大小相等的页框,而进程的内存空间则被划分为若干个大小相等的页。
通过页表的映射关系,操作系统可以将进程的页映射到物理内存的页框上。
这样,进程就可以方便地访问内存中的数据。
在实验中,我还学习了虚拟内存的概念和实现方法。
虚拟内存是一种扩展内存的方法,它允许进程访问超出物理内存容量的数据。
虚拟内存通过将进程的页映射到磁盘上的页面文件中,实现了内存的扩展。
当进程需要访问某个页面时,操作系统会将该页面从页面文件中加载到物理内存中,并更新页表的映射关系。
在实验中,我还学习了页面置换算法的原理和实现。
页面置换算法是虚拟内存中非常重要的一部分,它负责决定哪些页面需要被置换出去。
常见的页面置换算法有FIFO算法、LRU算法和Clock算法等。
不同的算法有着不同的性能特点和适用场景,我们需要根据具体的应用场景选择合适的页面置换算法。
在实验中,我还学习了内存分配和回收的方法。
操作系统通过内存分配算法为进程分配内存空间,而通过内存回收算法回收进程不再使用的内存空间。
内存分配算法的选择会影响到系统的性能和资源利用率,我们需要根据具体的应用场景选择合适的内存分配算法。
通过本次实验,我深入了解了存储管理的相关概念和技术。
存储管理是操作系统中非常重要的一部分,它直接影响到系统的性能和资源利用率。
合理地管理存储资源可以提高系统的运行效率和稳定性,从而提升用户的体验。
在今后的学习和工作中,我将进一步深化对存储管理的理解,不断提升自己的技术水平。
虚拟储存管理实验报告

一、实验目的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. 实验环境准备在实验开始前,我们需要准备一个模拟的操作系统环境。
为了方便起见,我们选择了一款名为"OS Simulator"的软件,它能够模拟出一个具有分区存储管理功能的操作系统。
2. 分区算法的选择在实验中,我们选择了三种常见的分区算法,包括首次适应算法、最佳适应算法和最坏适应算法。
首次适应算法会在内存中找到第一个能够容纳所需大小的空闲区域进行分配;最佳适应算法会在内存中找到能够最小程度浪费空间的空闲区域进行分配;最坏适应算法则相反,会选择能够最大程度浪费空间的空闲区域进行分配。
3. 实验设计我们设计了一系列的实验来比较不同的分区算法对系统性能的影响。
首先,我们随机生成了一批不同大小的作业,并将它们按照不同的分区算法分配到内存中。
然后,我们记录下每个作业分配的时间、分配的分区大小以及内存中的碎片情况。
4. 实验结果与分析通过对实验数据的分析,我们得出了以下结论:- 首次适应算法的优点是分配速度快,但由于它会在内存中留下许多小碎片,导致内存利用率较低。
- 最佳适应算法虽然能够尽量减少碎片,但由于需要搜索整个内存空间,分配速度较慢。
- 最坏适应算法在减少碎片方面表现较差,但它能够快速找到足够大的空闲区域进行分配。
结论:通过本次实验,我们深入了解了分区存储管理的原理和常见的分区算法。
不同的分区算法在性能上有着各自的优劣势,选择合适的算法需要根据具体的应用场景和需求来决定。
此外,我们还发现分区存储管理对于系统性能的影响十分重要,合理地管理内存空间能够提高系统的运行效率和资源利用率。
展望:虽然本实验只是对分区存储管理的一次模拟实验,但我们相信通过这次实验的学习和理解,我们能够更好地理解操作系统中的分区存储管理。
存储器管理实验报告

存储器管理实验报告存储器管理实验报告一、引言存储器管理是计算机操作系统中至关重要的一部分,它负责管理计算机的内存资源。
在本次实验中,我们将通过模拟实验来深入了解存储器管理的原理和实践操作。
二、实验目的1. 理解存储器管理的基本概念和原理;2. 学习并掌握存储器分配和回收的算法;3. 实践操作,加深对存储器管理的理解。
三、实验环境本次实验使用了一款名为“MemSim”的模拟器,它能够模拟计算机的内存分配和回收过程,并提供了一系列操作和指令供我们使用。
四、实验步骤1. 启动模拟器并加载测试程序;2. 观察内存分配过程,了解不同算法的工作原理;3. 进行内存回收操作,观察回收算法的效果;4. 分析实验结果,总结不同算法的优缺点。
五、实验结果与分析在本次实验中,我们使用了三种常见的内存分配算法:首次适应算法、最佳适应算法和最坏适应算法。
分别对应了不同的内存分配策略。
首次适应算法是最简单的一种算法,它从内存的起始位置开始查找可用的内存块,并将程序加载到第一个合适的位置。
这种算法的优点是简单易实现,但缺点是容易产生外碎片。
最佳适应算法则是从所有可用内存块中选择最小的一个来加载程序。
这样可以最大程度地减少外碎片的产生,但同时也增加了内存分配的开销。
最坏适应算法则是选择最大的可用内存块来加载程序。
这样可以减少内存碎片的产生,但会导致更多的内存浪费。
通过对比实验结果,我们可以发现不同算法在内存利用率、外碎片和内存开销等方面存在差异。
在实际应用中,我们需要根据具体情况选择合适的算法。
六、实验心得通过本次实验,我对存储器管理有了更深入的了解。
在实践操作中,我发现不同的算法在内存分配和回收过程中有不同的优缺点,需要根据具体需求进行选择。
同时,我也意识到了内存管理对计算机性能的重要性,合理的存储器管理可以提高计算机的运行效率。
在今后的学习和工作中,我将进一步深入研究存储器管理的原理和算法,并将其应用于实际项目中。
通过不断的实践和总结,我相信我能够在存储器管理方面取得更好的成果。
操作系统实验报告三存储器管理实验

操作系统实验报告三存储器管理实验操作系统实验报告三:存储器管理实验一、实验目的本次存储器管理实验的主要目的是深入理解操作系统中存储器管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收的算法,以及页面置换算法的工作过程和性能特点,从而提高对操作系统资源管理的认识和实践能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验内容1、内存分配与回收算法实现首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)2、页面置换算法模拟先进先出页面置换算法(FIFO)最近最久未使用页面置换算法(LRU)时钟页面置换算法(Clock)四、实验原理1、内存分配与回收算法首次适应算法:从内存的起始位置开始,依次查找空闲分区,将第一个能够满足需求的空闲分区分配给进程。
最佳适应算法:在所有空闲分区中,选择能够满足需求且大小最小的空闲分区进行分配。
最坏适应算法:选择空闲分区中最大的分区进行分配。
2、页面置换算法先进先出页面置换算法:选择最早进入内存的页面进行置换。
最近最久未使用页面置换算法:选择最近最长时间未被访问的页面进行置换。
时钟页面置换算法:给每个页面设置一个访问位,在页面置换时,从指针指向的页面开始扫描,选择第一个访问位为0 的页面进行置换。
五、实验步骤1、内存分配与回收算法实现定义内存分区结构体,包括分区起始地址、大小、是否已分配等信息。
实现首次适应算法、最佳适应算法和最坏适应算法的函数。
编写测试程序,创建多个进程,并使用不同的算法为其分配内存,观察内存分配情况和空闲分区的变化。
2、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。
实现先进先出页面置换算法、最近最久未使用页面置换算法和时钟页面置换算法的函数。
编写测试程序,模拟页面的调入和调出过程,计算不同算法下的缺页率,比较算法的性能。
存储过程实验报告_总结(3篇)

第1篇一、实验背景随着数据库技术的不断发展,存储过程在数据库管理中的应用越来越广泛。
存储过程是一组为了完成特定功能的SQL语句集合,它具有提高数据库性能、增强安全性、简化应用开发等优点。
为了更好地掌握存储过程的应用,我们进行了本次实验。
二、实验目的1. 理解存储过程的概念、特点和应用场景。
2. 掌握存储过程的创建、执行、修改和删除方法。
3. 学习使用存储过程实现常见的数据库操作,如数据插入、查询、更新和删除。
4. 熟悉存储过程中的流程控制语句、循环语句和游标操作。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 开发工具:MySQL Workbench四、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程5. 存储过程中的流程控制语句6. 存储过程中的循环语句7. 存储过程中的游标操作五、实验步骤1. 创建存储过程首先,我们创建一个简单的存储过程,用于查询特定部门的所有员工信息。
```sqlCREATE PROCEDURE GetEmployeeInfo(IN dept_id INT)BEGINSELECT FROM employees WHERE department_id = dept_id;END;```在此过程中,我们使用了`IN`参数,表示该参数在调用存储过程时传入。
2. 执行存储过程创建存储过程后,我们可以通过以下命令执行它:```sqlCALL GetEmployeeInfo(10);```这将查询部门ID为10的所有员工信息。
3. 修改存储过程如果需要修改存储过程,可以使用`ALTER PROCEDURE`语句。
例如,将查询条件修改为按姓名查询:```sqlALTER PROCEDURE GetEmployeeInfo(IN emp_name VARCHAR(50))BEGINSELECT FROM employees WHERE name = emp_name;END;```4. 删除存储过程删除存储过程可以使用`DROP PROCEDURE`语句。
存储器管理实验报告

一、实验目的1. 理解存储器管理的概念和作用。
2. 掌握虚拟存储器的实现原理。
3. 熟悉存储器分配策略和页面置换算法。
4. 提高动手实践能力,加深对存储器管理知识的理解。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 开发环境:GCC编译器三、实验内容1. 虚拟存储器实现原理(1)分页式存储管理:将内存划分为固定大小的页,进程的逻辑地址空间也划分为相应的页。
内存与外存之间通过页表进行映射,实现虚拟存储器。
(2)页表管理:包括页表建立、修改和删除等操作。
(3)页面置换算法:包括FIFO、LRU、LRU时钟等算法。
2. 存储器分配策略(1)固定分区分配:将内存划分为若干个固定大小的分区,每个分区只能分配给一个进程。
(2)可变分区分配:根据进程需求动态分配内存,分为首次适应、最佳适应和最坏适应等策略。
(3)分页存储管理:将内存划分为固定大小的页,进程的逻辑地址空间也划分为相应的页,通过页表进行映射。
3. 页面置换算法(1)FIFO算法:根据进程进入内存的顺序进行页面置换,最早进入内存的页面将被淘汰。
(2)LRU算法:淘汰最近最少使用的页面。
(3)LRU时钟算法:结合LRU算法和FIFO算法的优点,通过一个时钟指针实现页面置换。
四、实验步骤1. 编写程序实现虚拟存储器的基本功能,包括分页式存储管理、页表管理、页面置换算法等。
2. 编写测试程序,模拟进程在虚拟存储器中的运行过程,观察不同页面置换算法的效果。
3. 分析实验结果,比较不同页面置换算法的性能差异。
五、实验结果与分析1. 实验结果通过模拟实验,验证了虚拟存储器的基本功能,包括分页式存储管理、页表管理、页面置换算法等。
实验结果显示,不同页面置换算法对系统性能的影响较大。
2. 实验分析(1)FIFO算法:实现简单,但可能导致频繁的页面置换,影响系统性能。
(2)LRU算法:性能较好,但实现复杂,需要额外的硬件支持。
(3)LRU时钟算法:结合LRU算法和FIFO算法的优点,在性能和实现复杂度之间取得平衡。
存储管理实验报告

一、实验目的1. 理解操作系统存储管理的概念和作用。
2. 掌握存储管理的基本算法和策略。
3. 通过实验,加深对存储管理原理的理解,提高实际操作能力。
二、实验环境1. 操作系统:Windows 102. 软件环境:虚拟机软件VMware Workstation 153. 实验平台:Linux系统三、实验内容1. 存储管理概述2. 页式存储管理3. 段式存储管理4. 分段分页存储管理5. 存储管理算法四、实验步骤1. 页式存储管理实验(1)设置虚拟内存:在Linux系统中,使用`cat /proc/meminfo`命令查看内存信息,然后使用`vmstat`命令查看虚拟内存的使用情况。
(2)编写实验程序:使用C语言编写一个简单的程序,模拟页式存储管理过程。
(3)运行实验程序:编译并运行实验程序,观察程序运行过程中页面的分配、置换和回收过程。
2. 段式存储管理实验(1)设置虚拟内存:同页式存储管理实验。
(2)编写实验程序:使用C语言编写一个简单的程序,模拟段式存储管理过程。
(3)运行实验程序:编译并运行实验程序,观察程序运行过程中段页的分配、置换和回收过程。
3. 分段分页存储管理实验(1)设置虚拟内存:同页式存储管理实验。
(2)编写实验程序:使用C语言编写一个简单的程序,模拟分段分页存储管理过程。
(3)运行实验程序:编译并运行实验程序,观察程序运行过程中段页的分配、置换和回收过程。
4. 存储管理算法实验(1)编写实验程序:使用C语言编写一个简单的程序,模拟不同的存储管理算法(如FIFO、LRU、LFU等)。
(2)运行实验程序:编译并运行实验程序,观察不同算法在页面分配、置换和回收过程中的表现。
五、实验结果与分析1. 页式存储管理实验实验结果表明,页式存储管理可以将大程序离散地存储在内存中,提高内存利用率。
但页式存储管理也存在页面碎片问题,导致内存碎片化。
2. 段式存储管理实验实验结果表明,段式存储管理可以将程序按照逻辑结构划分为多个段,提高了内存的利用率。
分页存储管理实验报告

一、实验目的1. 理解分页存储管理的基本原理和方法;2. 掌握分页存储管理中的页面置换算法;3. 熟悉分页存储管理的实现过程;4. 培养动手实践能力,提高对操作系统内存管理的认识。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验原理分页存储管理是一种将内存划分为固定大小的页面,并将进程的地址空间划分为同样大小的逻辑页的内存管理方式。
分页存储管理的主要优点是消除了外部碎片,提高了内存的利用率。
以下是分页存储管理的关键概念:1. 页面:内存划分为固定大小的块,称为页面。
页面大小通常为4KB或8KB。
2. 逻辑页:进程的地址空间划分为同样大小的块,称为逻辑页。
3. 页表:用于记录逻辑页与物理页的映射关系。
四、实验内容1. 初始化内存:创建一个模拟的内存空间,用数组表示。
初始化时,内存中的一部分页面被占用,其他页面为空闲状态。
2. 进程调度:模拟进程的调度过程,包括进程的创建、销毁和页面请求。
3. 页面置换算法:实现不同的页面置换算法,如先进先出(FIFO)、最近最少使用(LRU)等。
4. 页面映射:根据进程的页面请求,查找页表,将逻辑页映射到物理页。
5. 页面回收:当进程销毁或页面不再需要时,回收对应的物理页。
五、实验步骤1. 初始化内存:创建一个大小为1024的数组,模拟内存空间。
其中,前256个元素表示被占用的页面,其余元素表示空闲页面。
2. 创建进程:模拟进程的创建过程,包括进程的编号、所需页面数和页面请求序列。
3. 页面置换算法:实现FIFO和LRU两种页面置换算法。
FIFO算法按照进程创建的顺序进行页面置换;LRU算法根据页面在内存中驻留时间的长短进行页面置换。
4. 页面映射:根据进程的页面请求,查找页表,将逻辑页映射到物理页。
如果请求的页面已在内存中,则直接返回物理页号;如果请求的页面不在内存中,则根据页面置换算法替换一个页面,并将请求的页面加载到内存中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
综合性实验报告一、实验目的通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
页面置换算法是虚拟存储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现FIFO、LRU、OPT、LFU、NUR几种经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。
二、总体设计1、编写函数计算并输出下述各种算法的命中率①OPT页面置换算法OPT所选择被淘汰的页面是已调入内存,且在以后永不使用的,或是在最长时间内不再被访问的页面。
因此如何找出这样的页面是该算法的关键。
可为每个页面设置一个步长变量,其初值为一足够大的数,对于不在内存的页面,将其值重置为零,对于位于内存的页面,其值重置为当前访问页面与之后首次出现该页面时两者之间的距离,因此该值越大表示该页是在最长时间内不再被访问的页面,可以选择其作为换出页面。
②FIFO页面置换算法FIFO总是选择最先进入内存的页面予以淘汰,因此可设置一个先进先出的忙页帧队列,新调入内存的页面挂在该队列的尾部,而当无空闲页帧时,可从该队列首部取下一个页帧作为空闲页帧,进而调入所需页面。
③LRU页面置换算法LRU是根据页面调入内存后的使用情况进行决策的,它利用“最近的过去”作为“最近的将来”的近似,选择最近最久未使用的页面予以淘汰。
该算法主要借助于页面结构中的访问时间time来实现,time记录了一个页面上次的访问时间,因此,当须淘汰一个页面时,选择处于内存的页面中其time值最小的页面,即最近最久未使用的页面予以淘汰。
④LFU页面置换算法LFU要求为每个页面配置一个计数器(即页面结构中的counter),一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访问次数最少的页面进行淘汰。
⑤NUR页面置换算法NUR要求为每个页面设置一位访问位(该访问位仍可使用页面结构中的counter表示),当某页被访问时,其访问位counter置为1。
需要进行页面置换时,置换算法从替换指针开始(初始时指向第一个页面)顺序检查处于内存中的各个页面,如果其访问位为0,就选择该页换出,否则替换指针下移继续向下查找。
如果内存中的所有页面扫描完毕未找到访问位为0的页面,则将替换指针重新指向第一个页面,同时将内存中所有页面的访问位置0,当开始下一轮扫描时,便一定能找到counter为0的页面。
2、在主函数中生成要求的指令序列,并将其转换成页地址流;在不同的内存容量下调用上述函数使其计算并输出相应的命中率。
三、实验步骤(包括主要步骤、代码分析等)主要步骤:、通过随机数产生一个指令序列,共320条指令。
其地址按下述原则生成:①50%的指令是顺序执行的;②25%的指令是均匀分布在前地址部分;③25%的指令是均匀分布在后地址部分;具体的实施方法是:A.在[0,319]的指令地址之间随机选区一起点M;B.顺序执行一条指令,即执行地址为M+1的指令;C.在前地址[0,M+1]中随机选取一条指令并执行,该指令的地址为M’;D.顺序执行一条指令,其地址为M’+1;E.在后地址[M’+2,319]中随机选取一条指令并执行;F.重复A—E,直到执行320次指令。
2、指令序列变换成页地址流,设:①页面大小为1K;②用户内存容量为4页到32页;③用户虚存容量为32K。
在用户虚存中,按每页存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:第0条~第9条指令为第0页(对应虚存地址为[0,9]);第10条~第19条指令为第1页(对应虚存地址为[10,19]);…………第310条~第319条指令为第31页(对应虚存地址为[310,319]);按以上方式,用户指令可组成32页。
3、计算并输出下述各种算法(可任选两个)在不同内存容量下的命中率。
A. FIFO先进先出置换算法;B. LRU最近最久未使用置换算法;C. OPT最佳置换算法:先淘汰最不常用的页地址;D. NUR最近未使用置换算法;E. LFU最少使用置换算法。
命中率=1-页面失效次数/页地址流长度在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
代码分析:1、主函数main.cpp的代码:#include <iostream>#include <string>#include <vector>#include <cstdlib>#include <cstdio>#include <unistd.h>using namespace std;#define INVALID -1const int TOTAL_INSTRUCTION(320);const int TOTAL_VP(32);const int CLEAR_PERIOD(50);#include "Page.h"#include "PageControl.h"#include "Memory.h"int main(){int i;CMemory a;for(i=4;i<=32;i++){cout<<i<<" page frames \t";a.OPT(i);a.FIFO(i);a.LRU(i);cout<<"\n";}return 0;}2、主函数中用到的头文件”Page.h”,”PageControl.h”,”Memory.h”的代码:Page.h:#ifndef _PAGE_H#define _PAGE_Hclass CPage//页面结构{public:int m_nPageNumber,//页面号m_nPageFaceNumber,//页帧号m_nCounter,//一个周期内访问该页面的次数m_nTime;//访问时间};#endifPageControl.h:#ifndef _PAGECONTROL_H#define _PAGECONTROL_Hclass CPageControl//页帧控制结构{public:int m_nPageNumber,m_nPageFaceNumber;class CPageControl * m_pNext;};#endifMemory.h:#ifndef _MEMORY_H#define _MEMORY_Hclass CMemory{public:CMemory();void initialize(const int nTotal_pf);void OPT(const int nTotal_pf);void FIFO(const int nTotal_pf);void LRU(const int nTotal_pf);private:vector<CPage> _vDiscPages;vector<CPageControl> _vMemoryPages;CPageControl *_pFreepf_head,*_pBusypf_head,*_pBusypf_tail;vector<int> _vMain,_vPage,_vOffset;int _nDiseffect;};CMemory::CMemory():_vDiscPages(TOTAL_VP),_vMemoryPages(TOTAL_VP),_vMain(TOTAL_INSTRUCTION),_vPage(TOTAL_INSTRUCTION),_vOffset(TOTAL_INSTRUCTION){int S,i,nRand;srand(getpid()*10);nRand=rand()%32767;S=(float)319*nRand/32767+1;for(i=0;i<TOTAL_INSTRUCTION;i+=4){_vMain[i]=S;_vMain[i+1]=_vMain[i]+1;nRand=rand()%32767;_vMain[i+2]=(float)_vMain[i]*nRand/32767;_vMain[i+3]=_vMain[i+2]+1;nRand=rand()%32767;S=(float)nRand *(318-_vMain[i+2])/32767+_vMain[i+2]+2;}for(i=0;i<TOTAL_INSTRUCTION;i++){_vPage[i]=_vMain[i]/10;_vOffset[i]=_vMain[i]%10;_vPage[i]%=32;}}void CMemory::initialize(const int nTotal_pf){int ix;_nDiseffect=0;for(ix=0;ix<_vDiscPages.size();ix++){_vDiscPages[ix].m_nPageNumber=ix;_vDiscPages[ix].m_nPageFaceNumber=INVALID;_vDiscPages[ix].m_nCounter=0;_vDiscPages[ix].m_nTime=-1;}for(ix=1;ix<nTotal_pf;ix++){_vMemoryPages[ix-1].m_pNext=&_vMemoryPages[ix];_vMemoryPages[ix-1].m_nPageFaceNumber=ix-1;}_vMemoryPages[nTotal_pf-1].m_pNext=NULL;_vMemoryPages[nTotal_pf-1].m_nPageFaceNumber=nTotal_pf-1;_pFreepf_head=&_vMemoryPages[0];}void CMemory::OPT(const int nTotal_pf) /* 最佳页面置换算法 */ {int i,j,max,maxpage,d,dist[TOTAL_VP];initialize(nTotal_pf);for(i=0;i<TOTAL_INSTRUCTION;i++){if(_vDiscPages[_vPage[i]].m_nPageFaceNumber==INVALID) /*页面失效*/{_nDiseffect++;if(_pFreepf_head==NULL) /*无空闲页面*/{for(j=0;j<TOTAL_VP;j++){if(_vDiscPages[j].m_nPageFaceNumber!=INVALID)//所有位于内存页面的距离变量赋一足够大的数dist[j]=32767;else //不在内存的页面该变量则置为0dist[j]=0;}d=1;/* 对于位于内存且在当前访问页面之后将再次被访问的页面,dist重置为当前页面与之后首次出现该页面时两者之间的距离 */for(j=i+1;j<TOTAL_INSTRUCTION;j++){if(_vDiscPages[_vPage[j]].m_nPageFaceNumber!=INVALID && dist[_vPage[j]]==32767)dist[_vPage[j]]=d;d++;}max=-1;//查找dist变量值最大的页面作为换出页面for(j=0;j<TOTAL_VP;j++){if(max<dist[j]){max=dist[j];maxpage=j;}}_pFreepf_head=&_vMemoryPages[_vDiscPages[maxpage].m_nPageFaceNumb er]; //腾出一个单元_pFreepf_head->m_pNext=NULL;_vDiscPages[maxpage].m_nPageFaceNumber=INVALID;}_vDiscPages[_vPage[i]].m_nPageFaceNumber=_pFreepf_head->m_nPageFa ceNumber; //有空闲页面,改为有效_pFreepf_head=_pFreepf_head->m_pNext; //减少一个free 页面}}cout<<"OPT: "<<1-(float)_nDiseffect/320;//printf("OPT:%6.4f ",1-(float)diseffect/320);}void CMemory::FIFO(const int nTotal_pf){int i;CPageControl *p;initialize(nTotal_pf);_pBusypf_head=_pBusypf_tail=NULL;for(i=0;i<TOTAL_INSTRUCTION;i++){if(_vDiscPages[_vPage[i]].m_nPageFaceNumber==INVALID){_nDiseffect+=1;if(_pFreepf_head==NULL) //无空闲页面{p=_pBusypf_head->m_pNext;_vDiscPages[_pBusypf_head->m_nPageNumber].m_nPageFaceNumber=INVALID;_pFreepf_head=_pBusypf_head;_pFreepf_head->m_pNext=NULL;_pBusypf_head=p;}p=_pFreepf_head->m_pNext;_pFreepf_head->m_pNext=NULL;_pFreepf_head->m_nPageNumber=_vPage[i];_vDiscPages[_vPage[i]].m_nPageFaceNumber=_pFreepf_head->m_nPageFaceNu mber;if(_pBusypf_tail==NULL)_pBusypf_head=_pBusypf_tail=_pFreepf_head;else{_pBusypf_tail->m_pNext=_pFreepf_head;_pBusypf_tail=_pFreepf_head;}_pFreepf_head=p;}}cout<<"\tFIFO: "<<1-(float)_nDiseffect/320;}void CMemory::LRU(const int nTotal_pf){int i,j,nMin,minj,nPresentTime(0);initialize(nTotal_pf);for(i=0;i<TOTAL_INSTRUCTION;i++){if(_vDiscPages[_vPage[i]].m_nPageFaceNumber==INVALID) {_nDiseffect++;if(_pFreepf_head==NULL){nMin=32767;for(j=0;j<TOTAL_VP;j++) //get the subscribe of the least used page//after the recycle iMin is the number of times//used of the least used page while minj is its subscribeif(nMin>_vDiscPages[j].m_nTime&&_vDiscPages[j].m_nPageFaceNumber! =INVALID){nMin=_vDiscPages[j].m_nTime;minj=j;}_pFreepf_head=&_vMemoryPages[_vDiscPages[minj].m_nPageFaceNumber];_vDiscPages[minj].m_nPageFaceNumber=INVALID;_vDiscPages[minj].m_nTime=-1;_pFreepf_head->m_pNext=NULL;}_vDiscPages[_vPage[i]].m_nPageFaceNumber=_pFreepf_head->m_nPageFaceNu mber;_vDiscPages[_vPage[i]].m_nTime=nPresentTime;_pFreepf_head=_pFreepf_head->m_pNext;}else_vDiscPages[_vPage[i]].m_nTime=nPresentTime;nPresentTime++;}cout<<"\tLRU: "<<1-(float)_nDiseffect/320;}#endif四、结果分析与总结实验运行结果,如图:总结:从上述结果可知,随着内存页面数的增加,三种算法的访问命中率逐渐增大。