操作系统实验五虚拟存储器管理
- 格式:docx
- 大小:238.93 KB
- 文档页数:17
实习五虚拟存储器实验报告一、实验目的本次虚拟存储器实验旨在深入理解计算机系统中虚拟存储器的工作原理和机制,通过实际操作和观察,掌握虚拟存储器的相关概念和技术,包括页式存储管理、地址转换、页面置换算法等。
同时,培养我们的实践能力和问题解决能力,为今后学习和工作中涉及到的计算机系统相关知识打下坚实的基础。
二、实验环境本次实验使用的操作系统为 Windows 10,开发工具为 Visual Studio 2019,编程语言为 C++。
三、实验原理1、虚拟存储器的概念虚拟存储器是一种利用硬盘等辅助存储器来扩充主存容量的技术。
它将程序和数据按照一定的页面大小划分,并在需要时将页面从硬盘调入主存,从而实现了使用有限的主存空间运行较大规模的程序。
2、页式存储管理页式存储管理将主存和辅存空间都划分为固定大小的页面。
程序的地址空间被分成若干页,主存也被分成相同大小的页框。
通过页表来记录页面和页框的对应关系,实现地址转换。
3、地址转换当 CPU 执行指令时,给出的是逻辑地址。
通过页表将逻辑地址转换为物理地址,才能在主存中访问相应的数据。
4、页面置换算法当主存空间不足时,需要选择一个页面换出到硬盘,以腾出空间调入新的页面。
常见的页面置换算法有先进先出(FIFO)算法、最近最少使用(LRU)算法等。
四、实验内容与步骤1、设计并实现一个简单的页式存储管理系统定义页面大小和主存、辅存的容量。
实现页表的数据结构,用于记录页面和页框的对应关系。
编写地址转换函数,将逻辑地址转换为物理地址。
2、实现页面置换算法分别实现 FIFO 和 LRU 页面置换算法。
在页面调入和调出时,根据相应的算法选择置换的页面。
3、测试和分析实验结果生成一系列的访问序列,模拟程序的运行。
统计不同页面置换算法下的缺页次数和命中率。
分析实验结果,比较不同算法的性能。
五、实验过程与结果1、页式存储管理系统的实现我们将页面大小设置为 4KB,主存容量为 16MB,辅存容量为 1GB。
计算机操作系统第五章-虚拟存储器分解第五章虚拟存储器第一节虚拟存储器的基本概念一、虚拟存储器的引入在前面介绍的各种存储管理方式中,用户作业一旦被装入内存,就会一直驻留其中,直到进程运行结束(驻留性)。
有些存储管理方式还存在一次性。
因此,用户作业要最终运行完毕,系统必须给它提供不短于作业长度的存储空间。
于是就出现了两种问题:长作业无法运行大量作业无法同时运行程序运行的局部性原理:在一段时间内一个程序的执行往往呈现出高度的局部性。
前期讨论:P112-113;局部性还表现在两方面:(1) 一条指令被执行,则不久以后该指令很可能再次执行;某个数据被访问,则不久以后该数据附近的数据很可能被访问。
产生这类局部性的典型原因,是由于在程序中存在着大量的循环操作。
(2) 程序在一段时间内所访问的地址,可能集中在一定的范围之内。
若某一存储单元被使用,则在一定时间内,与该存储单元相邻的单元很可能被使用。
其典型情况便是程序的顺序执行、数组的处理等。
局部性原理是在存储分配时克服驻留性、实现虚拟存储的依据。
二、虚拟存储器的定义定义:具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
其访问速度接近于内存,而其容量和每位的成本却又接近于外存。
特性:虚拟存储器连续性离散性一次性多次性驻留性交换性虚拟性对用户而言,它访问特性和内存一样;它以CPU时间和外存空间换取宝贵内存空间,是操作系统中的一种资源转换技术。
容量:一个虚拟存储器的最大容量是由计算机的地址结构确定的。
如:若CPU的有效地址宽度为32位,则程序可以寻址范围是0~232-1 ,即虚存容量可达4GB。
虚拟存储器的容量与主存的实际大小没有直接的关系,而是在主存与辅存的容量之和的范围内。
三、虚拟存储技术基本原理:P115把内存与外存有机地结合起来使用,从而得到一个容量很大的“内存”。
当进程开始运行时,先将它的一部分内容装入内存,另一部分暂时留在外存。
在运行过程中,当要访问的指令/数据不在内存时,由OS 自动将内存中的一些内容调到外存,藤出空间,再将马上要访问的内容从外存调入内存。
沈阳工程学院学生实验报告(课程名称:操作系统)实验题目:虚拟存储器管理班级计算机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.要求:本实验要求使用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%。
淮海工学院计算机工程学院实验报告书课程名:《操作系统原理》题目:虚拟存储器班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日一、目的与要求(一)目的由于超大规模集成电器电路(VLSI)技术的发展,使存贮器的容量不断扩大,价格大幅度下降。
但从应用角度看,存贮器的容量和成本总会受到一定的限制。
所以,提高存贮器的使用效率始终是操作系统研究的重要课题之一,虚拟存贮器技术是用来扩大主存容量的一种重要的方法。
本实习要求学生独立地用高级语言编写几个常用的存贮器分配算法,并能设计一个存贮管理的模拟程序,能对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。
(二)要求为了比较真实地模拟存贮器管理,可预先生成一个大致符合实际情况的指令地址流。
然后,通过模拟这样一种指令序列的执行来计算和分析比较各种算法的访问命中率。
二、示例1.题目本示例给出采用页式分配存贮器管理方案,并通过分析、计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣,另外也考虑改变页面尺寸大小和实际存贮器容量对计算结果的影响,从而可为选择好的算法、合适的页面尺寸和存贮器实际容量提供依据。
本程序是按下述原则生成指令序列的:(1)50%的指令是顺序执行的。
(2)25%的指令是均匀分布在前地址部分。
(3)25%的指令是均匀分布在后地址部分。
示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。
公式为:页面失败次数命中率=1-───────页地址流长度假定虚拟存贮容量为32K,页面尺寸从1K到8K,实存容量从4页到32页。
2.算法与框图(1)最佳淘汰算法(OPT)。
这是一种理想的算法,可用来作为衡量其他算法优劣的依据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。
由于本示例中已生成了全部地址流,故可计算最佳命中率。
该算法的准则是淘汰已满页表中以后不再访问或是最迟访问的页。
这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不再访问此页,则把此页淘汰,不然得找出后继指令中最迟访问的页面予以淘汰。
操作系统管理-虚拟存储器-实验报告-代码7页一、实验目的学习操作系统中虚拟存储器的概念,掌握虚拟存储器的实现思路和方式。
二、实验要求在C语言环境下,实现基于分页机制的虚拟存储和页表管理。
三、实验内容1.实现一个虚拟存储器,其中分页大小为4KB,虚拟地址空间大小为4GB(每个进程可以使用的虚拟地址空间)。
物理内存大小为512MB,即实际内存中有128个物理页面。
2.实现页表管理,将虚拟地址映射到物理地址。
3.实现页面替换算法,当物理内存不足时,需要将某些页面从内存中置换出来。
4.实现程序的运行,能够根据页面缺失率输出性能参数。
四、实验步骤1.确定程序设计思路和数据结构。
2.实现虚拟存储器和页表管理。
3.实现页面替换算法。
五、实验代码及解析对于程序设计思路,首先需要确定虚拟存储器和物理内存的大小,以及页面大小。
虚拟存储器大小默认为4GB,物理内存大小为512MB,页面大小为4KB。
其次,需要设计页表数据结构。
页表可以使用一个二维数组表示,其中第一维表示页表项,第二维表示页内地址。
页表项有四个字段,分别为标志位(是否在内存中)、页框号(页面所在的物理页框号)、保护(页面的读写权限)、计数(页面使用情况的计数器)。
第三,需要设计页面替换算法。
本程序采用最近最少使用算法(LRU)作为页面替换算法,当物理内存不足时,选择使用最近最少使用的页面进行替换。
#define PAGE_SIZE 4096 // 页面大小#define VIRTUAL_MEM_SIZE 4 * 1024 * 1024 * 1024 // 虚拟存储器大小#define PHYSICAL_MEM_SIZE 512 * 1024 * 1024 // 物理内存大小#define PAGE_NUM (VIRTUAL_MEM_SIZE / PAGE_SIZE) // 页面总数#define PHYSICAL_PAGE_NUM (PHYSICAL_MEM_SIZE / PAGE_SIZE) // 物理页面数struct page_table_entry {int present; // 是否在内存中(1为在,0为不在)int page_frame; // 页面所在的物理页框号int protect; // 页面的读写权限int count; // 页面使用情况的计数器}struct page_table_entry page_table[PAGE_NUM][PAGE_SIZE]; // 页表虚拟存储器和页表管理需要掌握的是页表的相关数据结构,还有一个重要的点,就是如何将虚拟地址映射到物理地址。
虚拟存储管理实验总结虚拟存储是一种计算机操作系统的存储管理技术。
通过虚拟存储技术,操作系统能够把正在运行的程序看成是存储在主存储器中的一部分。
当程序需要的数据暂时不存在于主存储器时,操作系统会自动把暂时不用的程序或数据存放在磁盘上,并在需要时再自动调入主存储器中,从而以较小的主存储器容量来运行大程序。
在本次虚拟存储管理实验中,我们学习了虚拟存储管理技术的实现原理以及相关算法。
通过该实验,我们深入理解了进程运行时的存储管理过程,并通过实际操作和调试,进一步巩固了对操作系统的理论知识和实践应用的掌握。
一、实验环境本次实验主要在Linux操作系统上进行。
Linux内核由于其源代码公开、开放平台、代码规范等优点,成为了广大计算机科学爱好者学习操作系统的首选。
我们还需要安装实验所需的MAM分配器和SSTF调度器等辅助工具。
二、实验过程实验的主要步骤包括:1.分配器的实现。
我们需要实现MAM分配器,该分配器要求能够自动将进程使用的内存块分配出去,且在进程退出时自动释放所使用的内存块。
2.虚拟地址转换实现。
实验中,我们需要使用页表来管理虚拟地址。
通过页表,可以将虚拟地址转换为物理地址,从而操作系统可以向硬盘中读写数据。
3.页面置换算法实现。
当内存不足时,虚拟存储会通过一些页面置换算法将部分进程在内存中的页面清除,以留下新的内存页面。
我们需要实现SSTF算法,即使用磁盘上最近访问时间最短的页面作为置换页面。
4.进程初始化和各种信号灯的设置。
进程初始化时,需要使用fork函数创建子进程并将进程挂入等待队列中,以等待分配内存同步完成。
信号灯的设置则是为了保证操作的原子性和同步性。
实验中,我们首先实现了MAM分配器,通过实现内存块分配和释放函数,它可以很好地帮助我们管理分配出去的内存块。
接着,我们着手实现虚拟地址转换功能,需要对物理内存和虚拟内存进行管理。
由于高速缓存可以从磁盘中不用重复读取数据,所以我们还需要实现页面管理算法,以保证内存的有效利用。
操作系统实验实验五虚拟存储器管理学号 1115102015 姓名方茹班级 11电子A 华侨大学电子工程系实验五虚拟存储器管理实验目的1、理解虚拟存储器概念。
2、掌握分页式存储管理地址转换盒缺页中断。
实验内容与基本要求1、模拟分页式存储管理中硬件的地址转换和产生缺页中断。
分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。
作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。
如果块长为2 的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
设计一个“地址转换”程序来模拟硬件的地址转换工作。
当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。
2、用先进先出页面调度算法处理缺页中断。
FIFO 页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。
假定作业被选中时,把开始的m 个页面装入主存,则数组的元素可定为m 个。
实验报告内容1、分页式存储管理和先进先出页面调度算法原理。
分页式存储管理的基本思想是把内存空间分成大小相等、位置固定的若干个小分区,每个小分区称为一个存储块,简称块,并依次编号为0,1,2,3,……,n块,每个存储块的大小由不同的系统决定,一般为2的n次幂,如1KB,2 KB,4 KB等,一般不超过4 KB。
第5章存储器管理习题与解答5.2 例题解析例5.2.1 为什么要引入逻辑地址?解引入逻辑地址有如下原因:(1) 物理地址的程序只有装入程序所规定的内存空间上才能正确执行,如果程序所规定内存空间不空闲或不存在,程序都无法执行;(2) 使用物理地址编程意味着由程序员分配内存空间,这在多道程序系统中,势必造成程序所占内存空间的相互冲突;(3) 在多道程序系统中,程序员门无法事先协商每个程序所应占的内存空间的位置,系统也无法保证程序执行时,它所需的内存空间都空闲。
(4) 基于上述原因,必须引入一个统一的、在编程时使用的地址,它能够在程序执行时根据所分配的内存空间将其转换为对应的物理地址,这个地址就是逻辑地址。
(5) 逻辑地址的引入为内存的共享、保护和扩充提供方便。
例5.2.2 静态重定位的特点有哪些?(1) 实现容易,无需增加硬件地址变换机构;(2) 一般要求为每个程序分配一个连续的存储区;(3) 在重定位过程中,装入内存的代码发生了改变;(4) 在程序执行期间不在发生地址的变换;(5) 在程序执行期间不能移动,且难以做到程序和数据的共享,其内存利用率低。
例5.2.3 动态重定位的特点有哪些?(1) 动态重定位的实现要依靠硬件地址变换机构,且存储管理的软件算法比较复杂;(2) 程序代码是按原样装入内存的,在重定位的过程中也不发生变化,重定位产生的物理地址存放在内存地址寄存器中,因此不会改变代码;(3) 同一代码中的同一逻辑地址,每执行一次都需要重位一次;(4) 只要改变基地址,就可以很容易地实现代码在内存中的移动;(5) 动态重定位可以将程序分配到不连续的存储区中;(6) 实现虚拟存储器需要动态重定位技术的支持;尽管动态重定位需要硬件支持,但他支持程序浮动,便于利用零散的内存空间,利于实现信息共享和虚拟存储,所以现代计算机大都采用动态重定位。
例5.2.4 装入时动态链接的优点有哪些?(1)便于软件版本的修改和更新在采用装入时动态链接方式时,要修改或更新各个目标模块,是件非常容易的事,但对于经静态链接以装配在一起的装入模块,如果要修改或更新其中的某个目标模块时,则要求重新打开装入模块,这不仅是低效的,而且对于普通用户是不可能的。
佛山科学技术学院实验报告课程名称操作系统原理实验实验项目虚拟存储器专业班级姓名学号指导教师成绩日期一、实验目的1、了解虚拟存储器的基本原理和实现方法。
2、掌握几种页面置换算法。
二、实验内容设计模拟实现采用不同内外存调度算法进行页面置换,并计算缺页率。
三、实验原理内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。
为了解决这个问题,Window中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。
虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
它是采用一定的方法将一定的外存容量模拟成内存,同时对程序进出内存的方式进行管理,从而得到一个比实际内存容量大得多的内存空间,使得程序的运行不受内存大小的限制。
虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
虚拟内存的设置主要有两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。
(一)页式虚拟存储器在页式虚拟存储系统中,将程序按统一的大小划分成多个页,同时也将虚拟存储器划分为同样大小的页,其中虚拟空间的页称为虚页(逻辑页),而主存空间的页称为实页(物理页),并对这些页按地址从低到高的顺序编号。
在编程时,程序的虚地址由高位字段的虚页号和低位字段的页内地址两部分组成,虚页号标识页。
虚地址到实地址之间的变换是由页表来实现的。
页表是一张存放在主存中的虚页号和实页号的对照表,记录着程序的虚页调入主存时被安排在主存中的位置。
若计算机采用多道程序工作方式,则可为每个用户作业建立一个页表,硬件中设置一个页表基址寄存器,存放当前所运行程序的页表的起始地址。
页表中的每一行记录了与某个虚页对应的若干信息,包括虚页号、装入位和实页号等。
实验五虚拟存储器管理学号 1415251011 姓名黄天班级 14集成1班华侨大学电子工程系设计目的1、理解虚拟存储器概念。
2、掌握分页式存储管理地址转换和缺页中断。
设计内容与基本要求1、模拟分页式存储管理中硬件的地址转换和产生缺页中断。
2、用先进先出页面调度算法处理缺页中断。
设计报告内容1、分页式存储管理和先进先出页面调度算法原理。
1).分页式存储管理原理在存储器管理中,连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。
如果允许将一个进程直接分散地装入到许多不相邻的分区中,则无须再进行“紧凑”。
基于这一思想而产生了离散分配方式。
如果离散分配的基本单位是页,则称为分页存储管理方式。
在分页存储管理方式中,如果不具备页面对换功能,则称为基本分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。
请求式分页系统是建立在基本分页基础上的,为了能支持虚拟存储器功能,而增加了请求调页功能和页面置换功能。
2).先进先出页面调度算法原理优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。
该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。
但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。
2、程序流程图LAB5_HT_14152510113、程序及注释。
#include<cstdio>#include<cstring>#define SizeOfPage 100 //定义页面#define SizeOfBlock 128#define M 4struct info//页表信息结构体{bool flag; //页标志,1表示该页已在主存,0表示该页不在主存long block;//块号4、运行结果以及结论。
虚拟存储器实验报告一、实验目的本次虚拟存储器实验的目的在于深入理解虚拟存储器的工作原理,掌握其基本概念和关键技术,通过实际操作和观察,分析虚拟存储器对系统性能的影响,并能够运用所学知识解决在实验过程中遇到的问题。
二、实验环境本次实验使用的操作系统为 Windows 10,开发工具为 Visual Studio 2019,编程语言为 C++。
实验所使用的计算机配置为:Intel Core i7 处理器,16GB 内存,512GB 固态硬盘。
三、实验原理虚拟存储器是一种利用硬盘等辅助存储器来扩充主存容量的技术。
它将程序的逻辑地址空间与物理地址空间分开,使得程序可以使用比实际物理内存更大的地址空间。
当程序访问的地址不在物理内存中时,系统会通过页面置换算法将暂时不用的页面换出到硬盘,将需要的页面换入到物理内存中。
虚拟存储器的实现主要依赖于页式存储管理和地址转换机制。
页式存储管理将逻辑地址空间划分为固定大小的页面,物理地址空间也划分为相同大小的页框。
地址转换通过页表来完成,页表记录了逻辑页面与物理页框的对应关系。
四、实验内容1、页面置换算法的实现首先实现了先进先出(FIFO)页面置换算法。
创建一个固定大小的物理内存页框数组,模拟物理内存。
当需要装入新页面时,如果物理内存已满,按照先进入的页面先被置换的原则选择置换页面。
接着实现了最近最少使用(LRU)页面置换算法。
为每个页面设置一个访问时间戳,当需要置换页面时,选择访问时间最久远的页面进行置换。
2、虚拟地址到物理地址的转换设计了一个简单的页表结构,包括逻辑页号、物理页框号和有效位等字段。
输入一个虚拟地址,通过查找页表将其转换为物理地址。
如果页面不在物理内存中,触发页面置换算法进行页面调入。
3、性能分析对不同大小的程序和不同的页面置换算法,测量其页面缺失率和执行时间。
分析页面大小、物理内存大小等因素对虚拟存储器性能的影响。
五、实验步骤1、初始化实验环境设定物理内存大小、页面大小等参数。
虚拟存储管理实验报告实验概述虚拟存储管理实验是操作系统课程中的一项重要实验,旨在通过模拟内存管理中的分页机制和页面置换算法,深入理解操作系统中的虚拟内存管理技术。
本实验主要包括以下几个关键点:- 模拟内存的分页机制- 实现页面置换算法- 分析不同页面置换算法的性能指标实验环境本次实验基于C语言和Linux操作系统进行实现,使用gcc编译器进行编译和调试。
实验过程及实现细节在本次实验中,我们实现了一个简单的虚拟内存系统,主要包括以下几个模块:页面管理、页面分配、页面置换和性能分析。
下面对每个模块的实现细节进行详细描述。
页面管理页面管理模块主要负责管理虚拟内存和物理内存之间的映射关系。
我们采用了分页机制进行管理,将虚拟内存和物理内存划分为固定大小的页面。
页面的大小由实验设置为4KB。
页面分配页面分配模块负责分配物理内存空间给进程使用。
我们使用一个位图作为物理内存管理的数据结构,记录每个页面的使用情况。
在每次页面分配时,我们会查找位图中第一个空闲的页面,并将其分配给进程。
页面置换页面置换模块是虚拟存储管理中的核心算法,主要用于解决内存中页面不足时的页面置换问题。
本次实验中我们实现了两种常用的页面置换算法:FIFO(先进先出)和LRU(最近最少使用)算法。
FIFO算法是一种简单的页面置换算法,它总是选择最早被加载到物理内存的页面进行置换。
LRU算法是一种基于页面访问历史的算法,它总是选择最长时间未被访问的页面进行置换。
性能分析性能分析模块主要用于评估不同的页面置换算法的性能指标。
我们使用了缺页率(Page Fault Rate)和命中率(Hit Rate)作为评价指标。
缺页率表示物理内存中的页面不能满足进程请求的比例,命中率表示进程请求的页面已经在物理内存中的比例。
实验结果为了评估不同的页面置换算法的性能,在实验过程中,我们通过模拟进程的页面访问序列,统计页面置换次数、缺页率和命中率等指标。
以一个包含100个页面访问请求的序列为例,我们分别使用FIFO算法和LRU 算法进行页面置换。
作业系统试验五虚拟储存器管理作业系统课程报告虚拟储存器管理学号姓名班级老师华侨高校电子工程系设计目的1、理解虚拟储存器概念。
2、把握分页式储存管理地址转换和缺页中断。
设计内容与基本要求1、模拟分页式储存管理中硬体的地址转换和产生缺页中断。
2、用先进先出页面排程演算法处理缺页中断。
设计报告内容1、分页式储存管理和先进先出页面排程演算法原理。
在储存器管理中,连续支配方式会形成很多“碎片”,虽然可通过“紧凑”方法将很多碎片拼接成可用的大块空间,但须为之付出很大开销。
假如允许将一个程序直接分散地装入到很多不相邻的分割槽中,则无须再进行“紧凑”。
基于这一思想而产生了离散支配方式。
假如离散支配的基本单位是页,则称为分页储存管理方式。
在分页储存管理方式中,假如不具备页面对换功能,则称为基本分页储存管理方式,或称为纯分页储存管理方式,它不具有支援实现虚拟储存器的功能,它要求把每个作业全部装入记忆体后方能执行。
先进先出排程演算法依据页面进入记忆体的时间先后选择淘汰页面,先进入记忆体的页面先淘汰,后进入记忆体的后淘汰。
本演算法实现时需要将页面按进入记忆体的时间先后组成一个伫列,每次排程队首页面予以淘汰。
这种排程演算法总是淘汰最先进入记忆体的那一页,fifo演算法简洁,实现简洁。
一种实现方法是把装入记忆体的那些页的页号按进入的先后次序排成伫列,用指标k指示当前调入新页时应淘汰的页在伫列中的位置。
每当调入一个新页后,在指标指示的位置上填上新页号,然后指标k加1,指向下一次应淘汰的页。
2、程式流程图3、程式及注释#include "iostreamiostream是c++中用于资料的输入与输出的标头档案,定义了包括cout(标準输出)、cin(标準输入)、cerr、clog的4个io物件#include "stdio.h"#include "stdlib.h"using namespace std;#define max 30巨集定义max等于30,作为允许调入记忆体的最大页面数#define size 10巨集定义size等于10,作为记忆体可使用的最大物理块数子函式:物理块初始化void init(int block,int m)}子函式:输入页面号引用串void creat(int page,int n)}子函式:先进先出页面排程演算法void fifo(int page,int block,int n,int m)for(i=0;ifor(j=0;jif(block[j]==page[i]) //各物理块中若有现有页面与欲调入的页面相同的,则令flag==j,j为相等的那个物理块编号flag=j;break;}for(j=0;jif(flag==-1若不存在哪个物理块现有页面与欲调入的页面相同if(get!=-1若存在物理块为空block[get]=page[i]; //将欲调入页面调入空的那个物理块time[get]=0将新调入页面的物理块已执行时间清零for(j=0;jm若nm,则中断次数为count+mcount=count+m;elsecount=n;cout<<"缺页中断次数为:"<}子函式:使用者操作提示页面void menu()主函式void main()}}4、执行结果以及结论。
操作系统实验实验五虚拟存储器管理学号**********姓名方茹班级11 电子A华侨大学电子工程系实验五虚拟存储器管理实验目的1、理解虚拟存储器概念。
2、掌握分页式存储管理地址转换盒缺页中断。
实验内容与基本要求1、模拟分页式存储管理中硬件的地址转换和产生缺页中断。
分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。
作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“ 1”,则表示该页已在主存,这时根据关系式“绝对地址 =块号×块长 +单元号”计算出欲访问的主存单元地址。
如果块长为 2 的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“ 0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
设计一个“地址转换”程序来模拟硬件的地址转换工作。
当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“ * 该页页号”,表示产生了一次缺页中断。
2、用先进先出页面调度算法处理缺页中断。
FIFO 页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。
假定作业被选中时,把开始的 m 个页面装入主存,则数组的元素可定为m 个。
实验报告内容1、分页式存储管理和先进先出页面调度算法原理。
分页式存储管理的基本思想是把内存空间分成大小相等、位置固定的若干个小分区,每个小分区称为一个存储块,简称块,并依次编号为0,1,2,3,,, ,n 块,每个存储块的大小由不同的系统决定,一般为2 的 n 次幂,如 1KB ,2 KB ,4 KB 等,一般不超过 4 KB 。
而把用户的逻辑地址空间分成与存储块大小相等的若干页,依次为 0,1,2,3,,, ,m页。
当作业提出存储分配请求时,系统首先根据存储块大小把作业分成若干页。
每一页可存储在内存的任意一个空白块内。
此时,只要建立起程序的逻辑页和内存的存储块之间的对应关系,借助动态地址重定位技术,原本连续的用户作业在分散的不连续存储块中,就能够正常投入运行。
先进先出页面调度算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。
本算法实现时需要将页面按进入内存的时间先后组成一个队列,每次调度队首页面予以淘汰。
程序流程图。
1、地址转换程序流程图开始取一条指令取指令中访问的页号查页表Y N该页标志 =1?形成绝对地址输出“ * ”页号表示发生缺页中断输出绝对地址Y有后续指令?取下一条指令N结束2、FIFO页面置换算法程序流程图开始取一条指令取指令中访问的页号查页表Y N(产生缺页中断)该页标志 =1 ?形成绝对地址Y是内存指令?置该页修改标志为 1 N 模拟硬件地址输出绝对地址转换N有后继指令?N 当前页是否被更新?Y结束取下一条指令Y将该页更新标志置为模拟FIFO页面调置换出当前页度输出被置换出去的页面显示被调入的页面修改页表设置被调入页面的相关属性程序及其注释#include<cstdio>#include<cstring>#define SizeOfPage 100#define SizeOfBlock 128#define M 4// 主存中放 4 个页面struct info// 页表信息结构体{bool flag;// 页标志, 1 表示该页已在主存,0 表示该页不在主存long block;// 块号long disk;// 在磁盘上的位置bool dirty;// 更新标志}pagelist[SizeOfPage];long po;// 队列标记long P[M];// 假设内存中最多允许M 个页面void init_ex1(){memset(pagelist,0,sizeof(pagelist));// 内存空间初始化/* 分页式虚拟存储系统初始化*/pagelist[0].flag=1;pagelist[0].block=5;pagelist[0].disk=011;pagelist[1].flag=1;pagelist[1].block=8;pagelist[1].disk=012;pagelist[2].flag=1;pagelist[2].block=9;pagelist[2].disk=013;pagelist[3].flag=1;pagelist[3].block=1;pagelist[3].disk=021;}void work_ex1()// 模拟分页式存储管理中硬件的地址转换和产生缺页中断过程{bool stop=0;long p,q;// 页号,单元号char s[128];// 初始定义块长do{printf(" 请输入指令的页号和单元号:\n");if(scanf("%ld%ld",&p,&q)!=2){scanf("%s",s);if(strcmp(s,"exit")==0)// 如果输入的为“exit ”那么就退出,进入重选页面{stop=1;}}else{if(pagelist[p]. flag)// 如果该页标志flag为 1,说明该页已在主存中{址,绝对地址printf(" 绝对地址=块号 x 块长(默认}else{=%ld\n",pagelist[p].block*SizeOfBlock+q);// 128)+单元号计算出绝对地printf("*%ld\n" ,p);// 如果该页标志flag为0,说明该页不在主存,则产生了一次缺页中断}}}while(!stop);}void init_ex2(){/* 以下部分为先进先出( FIFO)页面调度算法处理缺页中断的初始化,其中也包含了对于当前的存储器内容的初始化 */po=0;P[0]=0;P[1]=1;P[2]=2;P[3]=3;// 对内存中的 4 个页面进行初始化,并且使目前排在第一位的为 0memset(pagelist,0,sizeof(pagelist));// 内存空间初始化pagelist[0].flag=1;pagelist[0].block=5;pagelist[0].disk=011;pagelist[1].flag=1;pagelist[1].block=8;pagelist[1].disk=012;pagelist[2].flag=1;pagelist[2].block=9;pagelist[2].disk=013;pagelist[3].flag=1;pagelist[3].block=1;pagelist[3].disk=021;}void work_ex2()// 模拟 FIFO 算法的工作过程{long p,q,i;char s[100]; bool stop=0;do{printf(" 请输入指令的页号、单元号,以及是否为内存指令:\n");if(scanf("%ld%ld",&p,&q)!=2){scanf("%s",s);if(strcmp(s,"exit")==0)// 如果输入的为“exit ”就退出,进入重选界面{stop=1;}}else{scanf("%s",s);if(pagelist[p]. flag)// 如果该页标志flag为1,说明该页已在主存中{print f(" 绝对地址=%ld\n",pagelist[p].block*SizeOfBlock+q);//计算绝对地址if(s[0]=='Y'||s[0]=='y')// 内存指令{pagelist[p].dirty=1;// 修改标志为 1}}else{if(pagelist[P[po]].dirty)// 当前的页面被更新过,需把更新后的内容写回外存{pagelist[P[po]].dirty=0; }pagelist[P[po]].flag=0;// 将 flag 置 0,表明当前页面已被置换出去printf("out%ld\n",P[po]);// 显示根据FIFO 算法被置换出去的页面printf("in%ld\n",p);// 显示根据FIFO 算法被调入的页面pagelist[p].block=pagelist[P[po]].block;// 块号相同pagelist[p].flag=1;// 将当前页面 flag 置 1,表明已在主存中P[po]=p;// 保存当前页面所在的位置po=(po+1)%M;}}}while(!stop);printf(" 数组 P 的值为 :\n");for(i=0;i<M;i++)// 循环输入当前数组的数值,即当前在内存中的页面{printf("P[%ld]=%ld\n",i,P[i]);}}void select()// 选择哪种方法进行{long se;char s[128];do{printf(" 请选择题号 (1/2):");if(scanf("%ld",&se)!=1){scanf("%s",&s);if(strcmp(s,"exit")==0)// 如果输入为exit 则退出整个程序{return;}}else{if(se==1)// 如果 se=1 说明选择的模拟分页式存储管理中硬件的地址转换和产生缺页中断{init_ex1();//初始化work_ex1();//进行模拟}if(se==2 )// 如果se=2 说明选择的是FIFO 算法来实现页面的置换{init_ex2();//初始化work_ex2();//进行模拟}}}while(1);}int main(){select();//选择题号return 0;}程序运行结果及结论通过这次虚拟存储器管理的实验,我基本的了解了分页式存储管理和先进先出页面调度算法原理,和操作的方法,还有许多方面不足,有待改进!。