存储管理实验报告

合集下载

存储器管理实验实验报告

存储器管理实验实验报告

存储器管理实验实验报告一、实验目的存储器管理是操作系统的重要组成部分,本次实验的目的在于深入理解存储器管理的基本原理和方法,通过实际操作和观察,掌握存储器分配与回收的算法,以及页面置换算法的实现和性能评估。

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

三、实验内容与步骤(一)存储器分配与回收算法实现1、首次适应算法(1)原理:从空闲分区链的首地址开始查找,找到第一个满足需求的空闲分区进行分配。

(2)实现步骤:建立空闲分区链表,每个节点包含分区的起始地址、大小和状态(已分配或空闲)。

当有分配请求时,从链表头部开始遍历,找到第一个大小满足需求的空闲分区。

将该分区进行分割,一部分分配给请求,剩余部分仍作为空闲分区留在链表中。

若找不到满足需求的空闲分区,则返回分配失败。

2、最佳适应算法(1)原理:从空闲分区链中选择与需求大小最接近的空闲分区进行分配。

(2)实现步骤:建立空闲分区链表,每个节点包含分区的起始地址、大小和状态。

当有分配请求时,遍历整个链表,计算每个空闲分区与需求大小的差值。

选择差值最小的空闲分区进行分配,若有多个差值相同且最小的分区,选择其中起始地址最小的分区。

对选中的分区进行分割和处理,与首次适应算法类似。

3、最坏适应算法(1)原理:选择空闲分区链中最大的空闲分区进行分配。

(2)实现步骤:建立空闲分区链表,每个节点包含分区的起始地址、大小和状态。

当有分配请求时,遍历链表,找到最大的空闲分区。

对该分区进行分配和处理。

(二)页面置换算法实现1、先进先出(FIFO)页面置换算法(1)原理:选择在内存中驻留时间最久的页面进行置换。

(2)实现步骤:建立页面访问序列。

为每个页面设置一个进入内存的时间戳。

当发生缺页中断时,选择时间戳最早的页面进行置换。

2、最近最久未使用(LRU)页面置换算法(1)原理:选择最近一段时间内最长时间未被访问的页面进行置换。

存储管理实验报告

存储管理实验报告
int num, num2; //要调度的作业数和要回收的区域数
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.熟悉常见的存储管理工具和方法;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.使用性能监控工具实时监测系统的性能指标,发现内存和磁盘的利用率较高,需要优化存储管理。

操作系统存储管理实验报告

操作系统存储管理实验报告
4 / 37
操作系统实验·报告
typedef struct pfc_struct pfc_type; (2)模块结构 (伙伴系统) # define Inital 1024 //初始时的总内存
NODE root=(memory_node *)malloc(1*sizeof(memory_node));//根节点 int chip=0; // 记录总的碎片大小
total = 256 use =127 remain_max = 0 flag = 0 pid =0
total = 256 use = 0 remain_max = 256 flag = 0 pid =-1
total = 1024 use = 0 remain_max = 512 flag = 1 pid =-1
total = 512 use = 0 remain_max = 512 flag = 0 pid =-1
total = 512 use = 267 remain_max = 0 flag = 0 pid = -1
6 / 37
操作系统实验·报告
三、实验理论分析
7 / 37
操作系统实验·报告
(伙伴算法) Buddy System 是一种经典的内存管理算法。在 Unix 和 Linux 操作系统中都有用到。其 作用是减少存储空间中的空洞、减少碎片、增加利用率。避免外碎片的方法有两种: a.利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。 b.开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的 请 求而把大块的空闲块进行分割。 基于下面三种原因,内核选择第二种避免方法: a.在某些情况下,连续的页框确实必要。 b.即使连续页框的分配不是很必要,它在保持内核页表不变方面所起的作用也是不容 忽视的。假如修改页表,则导致平均访存次数增加,从而频繁刷新 TLB。 c.通过 4M 的页可以访问大块连续的物理内存,相对于 4K 页的使用,TLB 未命中率降 低,加快平均访存速度。 Buddy 算法将所有空闲页框分组为 10 个块链表,每个块链表分别包含 1,2,4,8,16,32,64,128,256,512 个连续的页框,每个块的第一个页框的物理地址是该块 大小的整数倍。如,大小为 16 个页框的块,其起始地址是 16*2^12 的倍数。 例,假设要请求一个 128 个页框的块,算法先检查 128 个页框的链表是否有空闲块, 如果没有则查 256 个页框的链表,有则将 256 个页框的块分裂两份,一 份使用,一份 插入 128 个页框的链表。如果还没有,就查 512 个页框的链表,有的话就分裂为 128, 128,256,一个 128 使用,剩余两个插入对应链 表。如果在 512 还没查到,则返回 出错信号。 回收过程相反,内核试图把大小为 b 的空闲伙伴合并为一个大小为 2b 的单独块,满足 以下条件的两个块称为伙伴: a.两个块具有相同的大小,记做 b。 b.它们的物理地址是连续的。 c.第一个块的第一个页框的物理地址是 2*b*2^12 的倍数。 该算法迭代,如果成功合并所释放的块,会试图合并 2b 的块来形成更大的块。 为了模拟 Buddy System 算法,我采用了数的数据结构,并使用了结构体,来记录各项 数据与标记,虽然不是真正的操作系统使用的方法,但成功模拟了插入和回收的过程。 在回收时我采用物理上的合并——即删除实际的物理节点,释放空间。然而实际中可 能根据需要仅仅是删除了标记项,使之标记成没用过的,从而避免了合并,会提高下 一次的插入操作。 碎片百分比 = 碎片总大小/总内存大小 (置换算法)

操作系统存储管理实验报告

操作系统存储管理实验报告

操作系统存储管理实验报告一、实验目的操作系统的存储管理是计算机系统中非常重要的组成部分,它直接影响着系统的性能和资源利用率。

本次实验的目的在于深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握存储分配、回收、地址转换等关键技术,并对不同存储管理策略的性能进行分析和比较。

二、实验环境本次实验在 Windows 10 操作系统下进行,使用 Visual Studio 2019 作为编程环境,编程语言为 C++。

三、实验内容(一)固定分区存储管理1、原理固定分区存储管理将内存空间划分为若干个固定大小的分区,每个分区只能装入一道作业。

分区的大小可以相等,也可以不等。

2、实现创建一个固定大小的内存空间数组,模拟内存分区。

为每个分区设置状态标志(已分配或空闲),并实现作业的分配和回收算法。

3、实验结果与分析通过输入不同大小的作业请求,观察内存的分配和回收情况。

分析固定分区存储管理的优缺点,如内存利用率低、存在内部碎片等。

(二)可变分区存储管理1、原理可变分区存储管理根据作业的实际需求动态地划分内存空间,分区的大小和数量是可变的。

2、实现使用链表或数组来管理内存空间,记录每个分区的起始地址、大小和状态。

实现首次适应、最佳适应和最坏适应等分配算法,以及分区的合并和回收算法。

3、实验结果与分析比较不同分配算法的性能,如分配时间、内存利用率等。

观察内存碎片的产生和处理情况,分析可变分区存储管理的优缺点。

(三)页式存储管理1、原理页式存储管理将内存空间和作业都划分为固定大小的页,通过页表将逻辑地址转换为物理地址。

2、实现设计页表结构,实现逻辑地址到物理地址的转换算法。

模拟页面的调入和调出过程,处理缺页中断。

3、实验结果与分析测量页式存储管理的页面置换算法(如先进先出、最近最少使用等)的命中率,分析其对系统性能的影响。

探讨页大小的选择对存储管理的影响。

(四)段式存储管理1、原理段式存储管理将作业按照逻辑结构划分为若干个段,每个段有自己的名字和长度。

存储管理实验报告_6

存储管理实验报告_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算法。

存储管理实验报告总结

存储管理实验报告总结

存储管理实验报告总结本次实验主要是针对存储管理进行的。

存储管理是操作系统中非常重要的一部分,它负责管理计算机系统的内存空间,为进程提供必要的存储资源。

通过本次实验,我对存储管理的相关概念和技术有了更加深入的了解。

在实验中,我首先学习了存储管理的基本原理。

操作系统将内存分为若干个大小相等的页框,而进程的内存空间则被划分为若干个大小相等的页。

通过页表的映射关系,操作系统可以将进程的页映射到物理内存的页框上。

这样,进程就可以方便地访问内存中的数据。

在实验中,我还学习了虚拟内存的概念和实现方法。

虚拟内存是一种扩展内存的方法,它允许进程访问超出物理内存容量的数据。

虚拟内存通过将进程的页映射到磁盘上的页面文件中,实现了内存的扩展。

当进程需要访问某个页面时,操作系统会将该页面从页面文件中加载到物理内存中,并更新页表的映射关系。

在实验中,我还学习了页面置换算法的原理和实现。

页面置换算法是虚拟内存中非常重要的一部分,它负责决定哪些页面需要被置换出去。

常见的页面置换算法有FIFO算法、LRU算法和Clock算法等。

不同的算法有着不同的性能特点和适用场景,我们需要根据具体的应用场景选择合适的页面置换算法。

在实验中,我还学习了内存分配和回收的方法。

操作系统通过内存分配算法为进程分配内存空间,而通过内存回收算法回收进程不再使用的内存空间。

内存分配算法的选择会影响到系统的性能和资源利用率,我们需要根据具体的应用场景选择合适的内存分配算法。

通过本次实验,我深入了解了存储管理的相关概念和技术。

存储管理是操作系统中非常重要的一部分,它直接影响到系统的性能和资源利用率。

合理地管理存储资源可以提高系统的运行效率和稳定性,从而提升用户的体验。

在今后的学习和工作中,我将进一步深化对存储管理的理解,不断提升自己的技术水平。

分区存储管理实验报告

分区存储管理实验报告

分区存储管理实验报告分区存储管理实验报告一、引言分区存储管理是计算机操作系统中的重要概念之一,它的目的是将计算机的内存划分为若干个不同的区域,以便更有效地管理和利用内存资源。

本实验旨在通过实际操作,深入理解分区存储管理的原理和实现方式。

二、实验目的1. 掌握分区存储管理的基本原理;2. 熟悉分区存储管理的实现方式;3. 了解分区存储管理的优缺点。

三、实验方法本实验采用了虚拟机技术,在虚拟机上搭建了一个简单的操作系统环境。

通过操作系统提供的命令和工具,对内存进行分区存储管理的相关操作和观察。

四、实验过程1. 创建分区在操作系统中,我们可以使用命令或工具来创建分区。

通过指定分区的大小和位置,将内存划分为不同的区域。

这些区域可以用来存储不同的程序和数据。

2. 分配内存一旦分区创建完成,我们可以使用操作系统提供的命令或API来分配内存。

分配内存时,需要指定所需内存的大小和分区的位置。

操作系统会检查分区的空闲情况,并将所需内存分配给请求的进程。

3. 回收内存当进程不再使用分配给它的内存时,操作系统可以回收这部分内存,并将其标记为空闲状态。

这样,其他进程可以再次申请并使用这部分内存。

4. 碎片整理在长时间运行的系统中,由于内存的分配和回收,可能会产生内存碎片。

内存碎片是指内存中存在的一些不连续且无法利用的小块空闲内存。

为了更有效地利用内存资源,操作系统可以定期进行碎片整理,将相邻的小块空闲内存合并成较大的连续空闲内存。

五、实验结果通过实验,我们成功地创建了多个分区,并成功地分配了内存给不同的进程。

我们观察到,在内存分配过程中,操作系统会根据分区的空闲情况选择最合适的分区进行分配。

同时,我们还发现了内存碎片的存在,并通过碎片整理操作将碎片合并成更大的连续空闲内存。

六、实验总结分区存储管理是一种有效的内存管理方式,它可以提高内存的利用率,减少内存碎片的产生。

然而,分区存储管理也存在一些缺点。

例如,分区的大小和数量需要提前规划,不够灵活。

虚拟储存管理实验报告

虚拟储存管理实验报告

一、实验目的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. 通过本次实验,加深了对虚拟存储管理的基本概念和原理的理解。

页式存储管理实验报告

页式存储管理实验报告

页式存储管理一、实验目的:掌握分页式存储管理的基本概念和实现方法。

要求编写一个模拟的分页式管理程序,并能对分页式存储的页面置换算法进行编写和计算各个算法的缺页率。

二、程序设计:首先创建页面链指针数据结构,并设计页面映像表,采用数组的方法给定页面映像。

申请缓冲区,将一个进程的逻辑地址空间划分成若干个大小相等的部分,每一部分称做页面或页。

每页都有一个编号,叫做页号,页号从0开始依次编排,如0,1,2……。

设置等大小的内存块。

初始状态:将数据文件的第一个页面装入到该缓冲区的第0块。

设计页面置换算法,这里分别采用最佳页面置换算法OPT和最近最久未使用置换算法LRU,并分别计算它们的缺页率,以比较它们的优劣。

三、算法说明:执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1个空闲块以便存放新调入的页面。

淘汰哪个页面的首要问题是选择何种置换算法。

该程序采用人工的方法选择,依置换策略选择一个可置换的页,并计算它们的缺页率以便比较。

/*分页式管理实验-源程序*/#include"stdio.h"#define N 16#define num 5 /*进程分配物理块数目*/int A[N]={1,2,3,4,5,6,7,8,5,2,3,2,7,8,1,4}; /*页表映像*/typedef struct page{ int address; /*页面地址*/struct page *next;}page;struct page *head,*run,*rear;void jccreat() /*进程分配物理块*/{ int i=1;page *p,*q;head=(page *)malloc(sizeof(page)); p=head;for(i=1;i<=num;i++) { q=(page *)malloc(sizeof(page));p->next=q; q->address=0; q->next=NULL; p=q; }rear=p;}int search(int n){page *p;int i=0;p=head;while(p->next){if(p->next->address==n){printf("Get it at the page %d\n",i+1);run=p;return 1;}p=p->next;i++;}return 0;}void changeOPT(int n,int position){int i;int total=0;int flag=1;int distance[num];int MAX;int order=0;page *p,*q;p=head->next;q=head->next;for(i=0;i<num;i++)distance[i]=100;i=0;while(p){if(p->address==0){flag=0;break;}p=p->next;i++;}if(!flag){p->address=n;printf("Change the page %d\n",i+1);}else{while(q){for(i=position;i<N;i++){if(q->address==A[i])distance[total]=i-position;}total++;q=q->next;}MAX=distance[0];for(i=0;i<num;i++){if(distance[i]>MAX){MAX=distance[i];order=i;}}printf("Change the page %d\n",order+1);i=0;while(p){if(i==order)p->address=n;i++;p=p->next;}}}void changeLRU(int n){int i=0;int flag=1;page *p,*delect;p=head->next;while(p){if(p->address==0){flag=0;p->address=n;printf("Change the page %d\n",i+1);break;}p=p->next;i++;}if(flag){delect=head->next;head->next=delect->next;printf("Delect from the head, and add new to the end.\n");delect->address=n;rear->next=delect;rear=delect;rear->next=NULL;}}float OPT(){int i;int lose=0;float losef;float percent;for(i=0;i<N;i++){if(search(A[i])==0){lose++;changeOPT(A[i],i);}}losef=lose;percent=1-(losef/N);return percent;}float LRU(){int i;int lose=0;float losef;float percent;page *p;for(i=0;i<N;i++){if(search(A[i])==0){lose++;changeLRU(A[i]);}else{p=run->next;run->next=p->next;rear->next=p;rear=p;rear->next=NULL;printf("Move it to end of queue.\n");}}losef=lose;percent=1-(losef/N);return percent;}main() /*主函数部分*/{float percent;int choice;printf("Select the arithmetic:\n(1)OPT\n(2)LRU\nyour choice is:"); scanf("%d",&choice);/*选择页面置换算法*/jccreat(); /*创建进程*/if(choice==1) /*采用OPT算法置换*/{percent=OPT(); /*计算OPT时的缺页率*/ printf("The percent of OPT is %f",percent);}else if(choice==2) /*采用LRU算法置换*/ {percent=LRU(); /*计算LRU时的缺页率*/ printf("The percent of OPT is %f",percent);}else printf("Your choice is invalid.");getch();}四.运行结果:最佳(Optimal)置换算法:最近最久未使用(LRU)置换算法:五、心得体会掌握分页式存储管理的基本概念和实现方法。

存储器管理实验报告

存储器管理实验报告

存储器管理实验报告存储器管理实验报告一、引言存储器管理是计算机操作系统中至关重要的一部分,它负责管理计算机的内存资源。

在本次实验中,我们将通过模拟实验来深入了解存储器管理的原理和实践操作。

二、实验目的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、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。

实现先进先出页面置换算法、最近最久未使用页面置换算法和时钟页面置换算法的函数。

编写测试程序,模拟页面的调入和调出过程,计算不同算法下的缺页率,比较算法的性能。

存储器管理实验实验报告

存储器管理实验实验报告
硬盘7200转320G,光驱16X DVD
软件环境:Windows XP SP SP3, Visual C++ 6.0
三、实验内容及步骤
1、对已给出的实验内容,要求读懂程序、理解算法。
2、绘制程序流程图。
3、要求对程序算法进行改进,并把改进内容记录下来。
四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图)
五、实验总结(对本实验结果进行分析,学生软件开发能力和软件的调试技术。
4、培养学生开发大型程序的方法和相互合作的精神。
5、通过本实验的练习,理解内存的分配及回收。
6、培养学生的算法设计和算法分析能力。
7、培养学生对问题进行文字论述和文字表达的能力。
二、实验环境(本实验所使用的硬件设备和相关软件)
硬件环境:CPU Intel(R) G630 @2.70GHz,内存4GB,
实验报告
课程名称
操作系统
实验日期
实验项目名称
存储器管理实验
实验地点
实验类型
√验证型 □设计型
□综合型
学 时
2
一、实验目的及要求(本实验所涉及并要求掌握的知识点)
1、内存管理是计算机操作系统的一大功能,任何作业的运行都需要装入内存。加深对操作系统存储管理概念的理解,通过编程了解存储器的管理。
2、培养学生能够独立进行知识综合,独立开发较大程序的能力。

存储管理系统实验报告材料

存储管理系统实验报告材料

综合性实验报告一、实验目的通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。

页面置换算法是虚拟存储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现FIFO、LRU、OPT、LFU、NUR几种经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。

二、总体设计1、编写函数计算并输出下述各种算法的命中率①OPT页面置换算法OPT所选择被淘汰的页面是已调入内存,且在以后永不使用的,或是在最长时间内不再被访问的页面。

因此如何找出这样的页面是该算法的关键。

可为每个页面设置一个步长变量,其初值为一足够大的数,对于不在内存的页面,将其值重置为零,对于位于内存的页面,其值重置为当前访问页面与之后首次出现该页面时两者之间的距离,因此该值越大表示该页是在最长时间内不再被访问的页面,可以选择其作为换出页面。

②FIFO页面置换算法FIFO总是选择最先进入内存的页面予以淘汰,因此可设置一个先进先出的忙页帧队列,新调入内存的页面挂在该队列的尾部,而当无空闲页帧时,可从该队列首部取下一个页帧作为空闲页帧,进而调入所需页面。

③LRU页面置换算法LRU是根据页面调入内存后的使用情况进行决策的,它利用“最近的过去”作为“最近的将来”的近似,选择最近最久未使用的页面予以淘汰。

该算法主要借助于页面结构中的访问时间time来实现,time记录了一个页面上次的访问时间,因此,当须淘汰一个页面时,选择处于内存的页面中其time值最小的页面,即最近最久未使用的页面予以淘汰。

④LFU页面置换算法LFU要求为每个页面配置一个计数器(即页面结构中的counter),一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访问次数最少的页面进行淘汰。

⑤NUR页面置换算法NUR要求为每个页面设置一位访问位(该访问位仍可使用页面结构中的counter表示),当某页被访问时,其访问位counter置为1。

存储过程实验报告_总结(3篇)

存储过程实验报告_总结(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`语句。

可变分区存储管理+实验报告+程序+设计思路和感悟

可变分区存储管理+实验报告+程序+设计思路和感悟

实验题目:可变分区存储管理一、实验目的可变分区存储管理方式是操作系统中存储管理的重要方式,其主要思想是用户作业进行连续存储,每次按照用户的请求,如果内存中有能满足用户作业大小的空闲区,就采用不同的算法分配给用户,否则,不分配,可变分区容易产生外零头。

分区分配算法包括最佳适应算法、最坏适应算法、首次适应算法等。

通过本实验可加深学生对存储器管理方式的把握以及分配算法的理解,并提高程序设计的能力。

二、实验环境个人PC机WindowsXP操作系统I5-2400CPU 3.10Ghz 2GB内存C-Free C语言程序设计软件三、实验的重点和难点可变分区的的收回四、实验内容利用C语言或C++语言或Java语言实现可变分区存储管理,具体要求如下:1. 以一个一维数组模拟内存,数组类型为整型,共计1000个元素;2. 用一个单链表表示可变分区空闲表,链表每个结点表示一个空闲区,每个结点信息包括起始地址、大小。

3. 分区分配算法采用最佳适应算法、首次适应算法,并将算法用函数实现。

4. 自己假设几个作业,包括作业的名称、大小,进入系统的顺序。

5. 初始内存中没有任何作业,随着用户输入的每一个作业的到来,动态为其分配内存。

6. 使用的算法用户要能够随时更换。

五、实验结果或实验代码(1) 可变式分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需要,并且分区个数可以调整。

当要装入一个作业时,根据作业需要的内存量,查看是否有足够的空闲空间,若有,则按需求量分割一部分给作业;若没有,则作业等待。

随着作业的装入、完成,内存空间被分割成许多大大小小的分区。

有的分区被作业占用,有的分区空闲。

例如,某时刻内存空间占用情况如图1所示。

为了说明那些分区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,如表1所示。

表1 空闲区说明表图1 内存空间占用情况62241其中,起始地址指出个空闲区的内存起始地址,长度指出空闲区的大小。

分页存储管理实验报告

分页存储管理实验报告

分页存储管理实验报告分页存储管理实验报告引言在计算机科学领域,存储管理是一个重要的课题。

随着计算机应用的不断发展,对存储管理的要求也越来越高。

本实验旨在通过实践,深入了解分页存储管理的原理和实现方式,以及其在计算机系统中的应用。

一、实验目的本实验的主要目的是通过实践,加深对分页存储管理的理解。

具体目标如下:1. 理解分页存储管理的原理和概念;2. 掌握分页存储管理的实现方式;3. 熟悉分页存储管理在计算机系统中的应用。

二、实验原理分页存储管理是一种将物理内存划分为固定大小的页框,并将逻辑地址空间划分为相同大小的页的存储管理方式。

其主要原理如下:1. 将逻辑地址划分为页号和页内偏移两部分;2. 通过页表将逻辑地址映射到物理地址;3. 利用页表中的页表项实现地址映射。

三、实验过程1. 初始化页表:根据系统的物理内存大小和页框大小,计算出页表的大小,并进行初始化。

2. 地址映射:根据逻辑地址的页号,查找页表中对应的页表项,获取物理页框号,并将页内偏移与物理页框号组合得到物理地址。

3. 存储管理:根据物理地址,将数据存储到物理内存中的相应位置,或从物理内存中读取数据。

4. 内存分配:根据应用程序的需要,分配合适大小的物理内存页框,并更新页表。

四、实验结果通过实验,我们成功实现了分页存储管理,并进行了一系列测试。

实验结果表明,分页存储管理具有以下优点:1. 提高了内存利用率:通过将逻辑地址划分为固定大小的页,可以更好地利用物理内存空间。

2. 简化了内存管理:通过页表的使用,可以方便地进行地址映射和内存分配。

3. 提高了系统的稳定性:分页存储管理可以有效隔离不同进程之间的内存空间,提高了系统的稳定性和安全性。

五、实验总结本实验通过实践,深入了解了分页存储管理的原理和实现方式,并通过一系列测试验证了其在计算机系统中的应用效果。

实验结果表明,分页存储管理是一种高效、稳定的内存管理方式,可以提高系统的性能和稳定性。

存储器管理实验报告

存储器管理实验报告

一、实验目的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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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四、结果分析与总结实验运行结果,如图:总结:从上述结果可知,随着内存页面数的增加,三种算法的访问命中率逐渐增大。

相关文档
最新文档