答案实验四 存储管理
- 格式:doc
- 大小:57.00 KB
- 文档页数:3
实验四页式虚拟存储管理中地址转换和缺页中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。
二、实验预备知识页式存储管理中地址转换的方法;页式虚拟存储的缺页中断处理方法。
三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。
假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。
四、提示与讲解页式存储管理中地址转换过程很简单,假定主存块的大小为2n字节,主存大小为2m'字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,过程如图6所示。
逻辑地址图6 页式存储管理系统地址转换示意图地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程如图7所示(实验中假定主存64KB,每个主存块1024字节,即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位、页内地址10位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
第四章存储器管理习题分析一、判断改错题(判断叙述是否正确,正确的打√,错误的打×并改正。
)1.进行程序的相对地址到物理地址的转换,就是地址重定位。
()2.在分页管理中所产生的内存碎片,最多小于帧的大小。
()3.段页式存储管理是通过请求调入和替换功能,对内外存进行统一管理,为用户提供了比实际内存容量大的多的物理存储空间。
()4.请求页式存贮管理中,若一个作业要求的全部存贮需求不能满足,该作业只能等待。
( )5.碎片的总容量如果超过某个作业申请的容量,就可以将其再次分配给该作业。
()6.最佳适应法将能满足作业需求量的最小空闲区分配给作业。
( )7.相对于简单分页管理来说,请求页式管理是“用时间换取了空间”,这是该种管理方式的一个缺点。
()8.段式管理便于处理动态变化的数据结构,便于动态链接,便于分段共享。
()9.请求分页管理过程中,作业地址空间同样受到内存容量大小的限制。
()10.分区管理取消了存储分配连续性要求,使一个作业的地址空间在内存中可以是若干个不一定连续的区域。
()11.静态分配是指在目标程序运行之前完成的存储分配。
例如分区管理和分页管理。
()12.分页管理中,作业地址空间是一维的,页的长度是等长的。
()习题解答:13.对;14.对;15.错;应为:段页式存储管理是段式和页式管理方法的结合,两者优势互补。
16.错;应为:……若一个作业所要求的全部存储不能满足,该作业也可运行。
17.错;应为:……,经拼接后就可以将其分配给该作业。
18.对;19.对;20.对;21.错;应为:请求分页管理过程中,作业地址空间不受内存容量大小的限制。
22.错;应为:分页管理取消了存储分配继续性要求,使一个作业的地址空间在内存中可以是若干个不一定连续的区域。
23.错;应为:……。
例如分区管理和简单分页管理。
24.对;二、填空题25.源程序经过产生相对目标程序,运行时,必须经过将相对目标程序装入内存,并实现相对地址到的转换。
第五章存储管理一、选择题:1. 将作业地址空间中的逻辑地址转换为内存中的物理地址的过程称为()。
A. 重定位B. 逻辑变换C. 地址交换D. 进程创建2. 虚存的基础是()。
A. 局部性理论B. 程序执行时对内存访问不均匀C. 指令局部性D. 变量的连续访问3. 实现虚拟存储器的目的是()。
A. 实现存储保护B. 实现信息共享C. 扩充辅存容量D. 扩充主存容量4. 在地址映射方式中,静态重定位具有的特点是()。
A. 可以把一个作业分配在一个不连续的存储区域中B. 可以实现不同作业主存信息的共享C. 要求把一个作业分配在一个连续的存储区域中D. 很容易实现主存的扩充5. 在地址映射方式中,动态重定位具有的特点是()。
A. 很难实现主存的扩充,可采用覆盖技术来实现B. 地址在执行过程中是可以改变的C. 很难实现不同作业主存信息的共享D. 非常简单,任何计算机,任何操作系统都可以实现6. 可重定位内存分区分配目的为()。
A. 解决碎片问题B. 便于多作业共享内存C. 回收空白区方便D. 摆脱用户干预7. 实现虚存最主要的技术是()。
A. 整体覆盖B. 整体对换C. 部分对换D. 多道程序设计8. 动态重定位是在作业的()中进行的。
A. 编译过程B. 装入过程C. 修改过程D. 执行过程9. 在下面关于虚拟存储器的叙述中,正确的是()。
A. 要求程序运行前必须全部装入内存且在运行过程中一直驻留在内存B. 要求程序运行前不必全部装入内存且在运行过程中不必一直驻留在内存C. 要求程序运行前不必全部装入内存且在运行过程中必须一直驻留在内存D. 要求程序运行前必须全部装入内存且在运行过程中不必一直驻留在内存10. 虚存的可行性的基础是()A. 程序执行的离散性B. 程序执行的顺序性C. 程序执行的局部性D. 程序执行的并发性11. 在存储管理中,采用覆盖与交换技术的目的是()。
A. 减少程序占用的主存空间B. 物理上扩充主存容量C. 提高CPU 效率D. 代码在主存中共享12 在内存分配的“最佳适应法”中,空闲块是按()。
师学院计算机系实验报告(2014—2015学年第二学期)课程名称操作系统实验名称实验四存储管理专业计算机科学与技术(非师)年级2012级学号B2012102147 姓名秋指导教师远帆实验日期2015-05-20图1 word运行情况“存使用”列显示了该应用程序的一个实例正在使用的存数量。
5) 启动应用程序的另一个实例并观察它的存需求。
请描述使用第二个实例占用的存与使用第一个实例时的存对比情况:第二个实例占用存22772K,比第一个实例占用的存大很多4:未分页合并存。
估算未分页合并存大小的最简单法是使用“任务管理器”。
未分页合并存的估计值显示在“任务管理器”的“性能”选项卡的“核心存”部分。
总数(K) :________220___________分页数:_____________________未分页(K) :_________34__________图2核心存C 简单基本NTFS 30G 良好(系统)D 简单基本NTFS 90G 良好E 简单基本NTFS 90G 良好F 简单基本NTFS 88G 良好图3磁盘情况6:计算分页文件的大小。
要想更改分页文件的位置或大小配置参数,可按以下步骤进行:1) 右键单击桌面上的“我的电脑”图标并选定“属性”。
2) 在“高级”选项卡上单击“性能选项”按钮。
3) 单击对话框中的“虚拟存”区域中的“更改”按钮。
请记录:所选驱动器的页面文件大小:驱动器:______________F_____________________可用空间:___________9825_____________________ MB初始大小(MB) :_____ 2048______________________最大值(MB) :________4092_____________________所有驱动器页面文件大小的总数:允的最小值:________16____________________ MB注:1、报告的项目或设置,可根据实际情况加以补充和调整2、教师批改学生实验报告应在学生提交实验报告10日。
第四章存储管理1. ______ C ______ 存储管理支持多道程序设计,算法简单,但存储碎片多。
A.段式C.固定分区2.虚拟存储技术是B 。
B.D.页式段页式A.补充内存物理空间的技术B. 补充相对地址空间的技术C.扩充外存空间的技术D. 扩充输入输出缓冲区的技术3.虚拟内存的容量只受 D 的限制。
A.物理内存的大小B. 磁盘空间的大小C.数据存放的实际地址D. 计算机地址位数4.动态页式管理中的 C 是:当内存中没有空闲页时,如何将已占据的页释放。
A.调入策略B. 地址变换C.替换策略D. 调度算法5.多重分区管理要求对每一'个作业都分配 B 的内存单兀。
A.地址连续B. 若干地址不连续C.若干连续的帧D. 若干不连续的帧6.段页式管理每取一数据,要访问 C 次内存。
A. 1B. 2C. 3D. 47.分段管理提供 B 维的地址结构。
A. 1B. 2C. 3D. 48.系统抖动是指 _______ B _______ 。
A.使用计算机时,屏幕闪烁的现象B.刚被调出内存的页又立刻被调入所形成的频繁调入调出的现象C.系统盘不干净,操作系统不稳定的现象D.由于内存分配不当,造成内存不够的现象9.在 ____ A _______ 中,不可能产生系统抖动现象。
A.静态分区管理B.请求分页式管理C.段式存储管理D.段页式存储管理10.在分段管理中 _______ A ______ 。
A.以段为单元分配,每段是一个连续存储区B.段与段之间必定不连续C.段与段之间必定连续D.每段是等长的11.请求分页式管理常用的替换策略之一有 _____________ A _。
A.LRUB. BFC. SCBFD. FPF12.可由CPU调用执行的程序所对应的地址空间为—DA.名称空间B.虚拟地址空间C.相对地址空间D.物理地址空间13.______ C _存储管理方式提供二维地址结构。
A.固定分区B.分页C.分段D.物理地址空间14.当程序经过编译或者汇编以后,形成了一种由机器指令组成的集合,被称为B 。
实验四存储管理背景知识耗尽内存是Windows 2000/XP系统中最常见的问题之一。
当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量。
随后,Windows 2000/XP必须借助它的虚拟内存来维持系统和进程的运行。
虚拟内存机制是Windows 2000/XP操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存资源,以免导致性能下降。
解决内存不足问题的一个有效的方法就是添加更多的内存。
但是,一旦提供了更多的内存,Windows 2000/XP很可以会立即“吞食”。
而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生。
因此,应该相信,优化所拥有的内存是非常关键的。
1. 分页过程当Windows 2000/XP求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging) 。
分页就是将信息从主内存移动到磁盘进行临时存储的过程。
应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000/XP使用了两种内存方案,而认为系统拥有比实际内存更多的内存。
例如,系统的内存数量可能只有16MB,但每一个应用程序仍然认为有4GB内存可供使用。
使用分页方案带来了很多好处,不过这是有代价的。
当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异极大。
例如,硬盘的访问时间通常大约为4-10毫秒,而物理内存的访问时间为60 us,甚至更快。
2. 内存共享应用程序经常需要彼此通信和共享信息。
为了提供这种能力,Windows 2000/XP必须允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性。
从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量。
运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。
实验四固定分区存储管理一、实验目的通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。
二、实验内容(1)作业J3请求资源,申请5K大小的内存空间;(2)作业J4申请33K大小的内存空间;(3)作业J1执行完毕,释放空间4、编写程序实现相应存储空间的分配和去配,若请求成功,修改主存分配表,并输出该表,若请求不能满足,输出“分配失败”。
(其中不考虑空闲分区的移动)。
实验代码:#include<stdio.h>#include<vector>#include<string>#include<string.h>#include<iostream>using namespace std;//定义进程资源类class Resource{public :string name; //用来表示占用进程int num; //用来标识分区号int begin; //用来存放其实地址int length; //用来标识内存长度int take; //用来表示当前的该资源是否被占用Resource(int n,int b,int l,int t){num = n;begin = b;length = l;take = t;}};//定义输出类class Output{public :string o_name;int o_num;int o_begin;int o_length;int o_take;};//申请资源请求bool Request(string name,int len,vector<Resource> &res) {vector<Resource *> r;//!!!!!!!!在这边定义一个指针,用来指向res,这里的好处是待会进行排序的时候,不会修改原来的res原来元素的顺序!!!!for(int m=0;m<res.size();m++){r.push_back(&res[m]);}//按书上所说的,首先对分区进行从小到大进行排序。
第5章存储管理⑴存储管理的任务和功能是什么?解:存储管理的主要任务是:1.支持多道程序的并发执行,使多道程序能共享存储资源,在互不干扰的环境中并发执行。
2.方便用户,使用户减少甚至摆脱对存储器的管理,使用户从存储器的分配、保护和共享等繁琐事物中解脱出来。
3.提高存储器的利用率和系统吞吐量。
4.从逻辑上扩充内存空间,支持大程序能在小的内存空间运行或允许更多的进程并发执行。
为了完成上述任务,现代操作系统的存储管理应具有以下功能:1.存储空间的分配和I门I收。
2.地址转换,实现逻辑地址到物理地址的映射。
3.主存空间的共享。
4.主存空间的保护。
5.主存储空间的扩充。
6.对换,对换的主要任务是实现在内存和外存之间的全部或部分进程的对换,即将内存中处于阻塞状态的进程调换到外存上,而将外存上处于就绪状态的进程换入内存。
对换的目的主要是为了提高内存利用率,提高系统的吞吐量。
(2)为什么要配置层次式存储器?解:为了解决CPU和存储器之间速度上的不匹配,在现代计算机系统中,存储系统通常采用层次结构,存储层次可粗略分为三级:最高层为CPU寄存-器,中间为主存,最底层是辅存。
根据具体功能还可以细分为寄存器、高速缓存、主存储器、磁盘缓存、辅存储设备(固定磁盘、可移动存储介质)5层。
一个文件的数据可能出现在存储系统的不同层次电例如, 一个文件数据通常被存储在辅存中(如硬盘),当其需要运行或被访问时,就必须调入主存,也可以暂时存放在主存的磁盘高速缓存中。
大容量的辅存常常使用磁盘,磁盘数据经常备份在可移动磁盘:或者光盘上,以防止硬盘故障时丢失数据。
(3)什么是逻辑地址?什么是物理地址?为什么要进行二者的转换工作?解:逻辑地址是应用程序中使用的访存地址,有时也称为相对地址,由逻辑地址构成的地址空间称为逻辑空间。
每个应用程序的逻辑地址空间都是从零号地址码开始的。
物理地址是内存储器的实际存储单元地址,有时也称为绝对地址,由物理地址构成的地址空间称为物理空间。
欢迎共阅班级: 姓名: 学号:5) 当前计算机的实际内存大小为:______________________________________ 分析程序4-1,请回答问题:1) 理论上每个Windows 应用程序可以独占的最大存储空间是:_____________2) 程序中,用于检查系统中虚拟内存特性的API 函数是:__________________ 4.2 Windows 虚拟内存本节实验的目的是:实验4存储管理1) 通过实验了解Windows内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。
2) 学习检查虚拟内存空间或对其进行操作;3) 了解Windows的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。
1. 工具/准备工作在开始本节实验之前,请回顾教材的相关内容。
需要准备一台运行Windows系统的计算机,且安装了C/C++编译器。
2. 实验内容与步骤将系统当前的保留区(reserved)虚拟地址空间填入表4.3中。
表4.3 实验记录2) 根据运行结果,请简单描述程序运行的流程:_________________________________________________________________________________________________________________________________________的程序段,该段程序试图通过VirtualAlloc()函数,然后利用物理备用内存将整个块分配到虚拟内存空间的任何位置。
这种技术只对拥有1GB以上的RAM且都有换页文件的计算机可行。
从运行结果看,这种技术成功了吗?_________________。
3) 程序中说明为___________________________________________________的程序段,该段程序利用VirtualAlloc()函数,如果函数成功,则获得大块内存,但不将任何物理内存调配到此块中。
实验四操作系统存储管理实验报告一、实验目的本次操作系统存储管理实验的主要目的是深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握内存分配、回收、地址转换等关键技术,提高对操作系统存储管理机制的认识和应用能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019三、实验原理1、内存分配方式连续分配:分为单一连续分配和分区式分配(固定分区和动态分区)。
离散分配:分页存储管理、分段存储管理、段页式存储管理。
2、内存回收算法首次适应算法:从内存低地址开始查找,找到第一个满足要求的空闲分区进行分配。
最佳适应算法:选择大小最接近作业需求的空闲分区进行分配。
最坏适应算法:选择最大的空闲分区进行分配。
3、地址转换逻辑地址到物理地址的转换:在分页存储管理中,通过页表实现;在分段存储管理中,通过段表实现。
四、实验内容及步骤1、连续内存分配实验设计一个简单的内存分配程序,模拟固定分区和动态分区两种分配方式。
输入作业的大小和请求分配的分区类型,程序输出分配的结果(成功或失败)以及分配后的内存状态。
2、内存回收实验在上述连续内存分配实验的基础上,添加内存回收功能。
输入要回收的作业号,程序执行回收操作,并输出回收后的内存状态。
3、离散内存分配实验实现分页存储管理的地址转换功能。
输入逻辑地址,程序计算并输出对应的物理地址。
4、存储管理算法比较实验分别使用首次适应算法、最佳适应算法和最坏适应算法进行内存分配和回收操作。
记录不同算法在不同作业序列下的内存利用率和分配时间,比较它们的性能。
五、实验结果与分析1、连续内存分配实验结果固定分区分配方式:在固定分区大小的情况下,对于作业大小小于或等于分区大小的请求能够成功分配,否则分配失败。
内存状态显示清晰,分区的使用和空闲情况一目了然。
动态分区分配方式:能够根据作业的大小动态地分配内存,但容易产生内存碎片。
2、内存回收实验结果成功回收指定作业占用的内存空间,内存状态得到及时更新,空闲分区得到合并,提高了内存的利用率。
实验四操作系统存储管理实验报告一、实验目的本次实验的主要目的是深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收、页面置换算法等关键概念,并能够分析和解决存储管理中可能出现的问题。
二、实验环境本次实验在装有 Windows 操作系统的计算机上进行,使用了 Visual Studio 等编程工具和相关的调试环境。
三、实验内容(一)内存分配与回收算法实现1、首次适应算法首次适应算法从内存的起始位置开始查找,找到第一个能够满足需求的空闲分区进行分配。
在实现过程中,我们通过建立一个空闲分区链表来管理内存空间,每次分配时从表头开始查找。
2、最佳适应算法最佳适应算法会选择能够满足需求且大小最小的空闲分区进行分配。
为了实现该算法,在空闲分区链表中,分区按照大小从小到大的顺序排列,这样在查找时能够快速找到最合适的分区。
3、最坏适应算法最坏适应算法则选择最大的空闲分区进行分配。
同样通过对空闲分区链表的排序和查找来实现。
(二)页面置换算法模拟1、先进先出(FIFO)页面置换算法FIFO 算法按照页面进入内存的先后顺序进行置换,即先进入内存的页面先被置换出去。
在模拟过程中,使用一个队列来记录页面的进入顺序。
2、最近最久未使用(LRU)页面置换算法LRU 算法根据页面最近被使用的时间来决定置换顺序,最近最久未使用的页面将被置换。
通过为每个页面设置一个时间戳来记录其最近使用的时间,从而实现置换策略。
3、时钟(Clock)页面置换算法Clock 算法使用一个环形链表来模拟内存中的页面,通过指针的移动和页面的访问标志来决定置换页面。
四、实验步骤(一)内存分配与回收算法的实现步骤1、初始化内存空间,创建空闲分区链表,并为每个分区设置起始地址、大小和状态等信息。
2、对于首次适应算法,从链表表头开始遍历,找到第一个大小满足需求的空闲分区,进行分配,并修改分区的状态和大小。
3、对于最佳适应算法,在遍历链表时,选择大小最接近需求的空闲分区进行分配,并对链表进行相应的调整。
习题4存储管理解答一、单项选择题1、存储管理的功能是(B)A、执行程序B、增加加内存利用率和提高内存速度B、提高内存的速度D、增加内存的实际容量2、在可变分区管理中,最佳适应算法是将空白区在空白区表中按(C)次序排列。
A、地址递增B、地址递减C、容量递增D、容量递减3、通常情况下,采用(B)内存管理方式产生的内存碎片最小。
A、段式存储管理B、页式存储管理C、固定式分区存储管理D、虚拟存储器4、虚拟存储技术是(B)A、扩充内存物理空间的技术B、扩充相对地址空间的技术B、扩充外存空间的技术D、扩充输入输出缓冲区的技术5、(B)是指将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需要的数据。
A、覆盖技术B、对换技术C、虚拟技术D、物理扩充6、在请求页式存储管理中,若所需要的页面不在内存时,则会引起(D)A、输入输出中断B、时钟中断C、越界中断D、缺页中断7、以下存储管理技术中,支持虚拟存储的技术是(C)A、动态分区法B、可重定位分区法C、请求分页技术D、两重页表方式8、内存碎片是指(A)A、存储分配完后所剩的不便再被利用的空闲区B、没有被使用的存储区C、不能被使用的存储区D、不被使用,而暂时不能使用的存储区9、在存储管理方案中,(A)采用覆盖技术。
A、单一连续分区存储管理方式B、可变分区存储管理C、段式存储管理方式D、段页式存储管理方式10、在分段存储管理中,(A)A、以段为单位分配,每段是一个连续的存储区B、段与段间必定不连续C、段与段间必定连续D、每段是等长的11、系统抖动是指(B)A、使用机器时,出现屏幕闪烁现象B、刚被调出的页同面又立刻被调入形成的频繁的调出调入现象C、系统般不净,操作系统不稳定的现象D、存分配不当,偶然造成内存不够的现象12、虚拟存储器的最大容量是由(B)决定的。
A、内、外存容量之和B、计算机系统的地址结构C、作业的相对地址空间D、作业的绝对地址空间13、采用先进先出页面淘汰算法,一进程在内存占3块,页面访问序列为1、2、3、4、1、2、5、1、2、3、4、5、6。
宁德师范学院计算机系
实验报告
(2014—2015学年第二学期)
课程名称操作系统
实验名称实验四存储管理
专业计算机科学与技术(非师)年级2012级
学号B2012102147 姓名王秋指导教师王远帆
实验日期2015-05-20
图1 word运行情况
“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。
启动应用程序的另一个实例并观察它的内存需求。
请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:第二个实例占用内存22772K,比第一个实例占用的内存大很多
2、教师批改学生实验报告应在学生提交实验报告10日内。
实验四操作系统存储管理实验报告一、实验目的1.了解存储管理的概念和意义;2.掌握内存管理的基本原理和技术;3.了解常见的存储管理策略。
二、实验内容1.使用C/C++编程语言,设计并实现一个模拟内存管理的程序;2.实现内存的分配和回收算法,模拟内存的分配和释放过程;3.实现不同的内存管理策略,并通过实验比较它们的效果。
三、实验过程1.阅读相关的参考资料,了解存储管理的概念和意义,以及常用的内存管理策略;2.使用C/C++编程语言,设计并实现一个模拟内存管理的程序;3.设计并实现内存的分配和回收算法,模拟内存的分配和释放过程;4.设计并实现不同的内存管理策略,如首次适应算法、最佳适应算法和最坏适应算法;5.运行程序,测试不同的内存管理策略,比较它们的效果。
四、实验结果与分析在模拟的内存管理程序中,我们实现了三种常见的内存管理策略:首次适应算法、最佳适应算法和最坏适应算法。
这些策略在进行内存分配时,从空闲内存块列表中选择合适的内存块进行分配,并在内存回收时对已使用的内存块进行释放。
我们通过对不同策略的测试,得到了以下的实验结果。
首次适应算法:该算法会从空闲内存块列表中选择第一个满足要求的内存块进行分配。
该算法的优点是速度较快,但容易出现内存碎片的问题。
在实验中,我们发现该算法的分配速度相对较快,但在长时间运行后,可能会出现大量的内存碎片,导致无法分配较大的连续内存块。
最佳适应算法:该算法会遍历空闲内存块列表,选择大小最合适的内存块进行分配。
该算法的优点是能够更好地利用内存空间,减少内存碎片的发生。
在实验中,我们发现该算法的分配效果较好,但需要遍历整个空闲内存块列表,所以速度较慢。
最坏适应算法:该算法会选择大小最大的内存块进行分配。
该算法的优点是可以防止内存碎片的发生,但由于每次选择的内存块较大,可能会导致较多的内存浪费。
在实验中,我们发现该算法的分配效果较好,但会造成较多的内存浪费。
根据实验结果和分析,我们可以根据具体的需求选择合适的内存管理策略。
第4章存储管理作业题答案第一篇:第4章存储管理作业题答案第四章存储管理一、单项选择题1.在存储管理方案中,___可与覆盖技术配合。
A.页式管理B.段式管理 C.段页式管理 D.可变分区管理2.在存储管理中,采用覆盖与交换技术的目的是___。
A.节省存储空间 B.物理上扩充主存容量 C.提高CPU利用率 D.实现主存共享3.动态重定位技术依赖于___。
A.重定位装入程序B.重定位寄存器C.地址机构D.目标程序4.设内存的分配情况如图5.7所示。
若要申请一块40K字节的内存空间,若采用最佳适应算法,则所得到的分区首址为___。
A.100KB.190KC.330KD.410K10(占用)->30(占用)->50(占用)->60->80->90->100(占用)-> 5.很好地解决了“零头”问题的存储管理方法是___.A.页式存储管理 B.段式存储管理 C.多重分区管理 D.可变式分区管理 6.在固定分区分配中,每个分区的大小是___.A.相同 B.随作业长度变化 C.可以不同但预先固定 D.可以不同但根据作业长度固定7.在连续存储管理方式中,可重定位分区管理采用紧凑技术的目的是____________。
A.增加主存容量 B.缩短访问周期 C.集中空闲区 D.加速地址转换8.分区管理中采用“最佳适应”分配算法时,宜把空闲区按___次序登记在空闲区表中.A.长度递增 B.长度递减 C.地址递增 D.地址递减9.若一个系统采用分页存储管理方式,当一个进程处于执行态时,该进程的页表始址和页表长度信息将被送至。
A.PCBB.物理地址寄存器C.页表寄存器D.重定位寄存器10.采用段式存储管理的系统中,若地址用24位表示,其中8位表示段号,则允许每段的最大长度是___.A.2的24次方B.2的16次方C.2的8次方 D.2的32次方11.把作业地址空间使用的逻辑地址变成内存中物理地址的过程为___.A.重定位 B.物理化 C.逻辑化 D.加载 12.首次适应算法的空闲区是___.A.按地址递增顺序连在一起 B.始端指针表指向最大空闲区C.按大小递增顺序连在一起D.寻找从最大空闲区开始13.在分页地址环境下,程序员编制的程序,其地址空间是连续的,分页是由___完成的。
实验四 操作系统存储管理实验报告一、实验目的存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
二、实验内容(1) 通过计算不同算法的命中率比较算法的优劣。
同时也考虑了用户内存容量对命中率的影响。
页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。
在本实验中,假定页面大小为1k ,用户虚存容量为32k ,用户内存容量为4页到32页。
(2) produce_addstream 通过随机数产生一个指令序列,共320条指令。
A 、 指令的地址按下述原则生成:1) 50%的指令是顺序执行的2)25%的指令是均匀分布在前地址部分3) 25%的指令是均匀分布在后地址部分B 、 具体的实施方法是:1)在[0,319]的指令地址之间随机选取一起点m ; 2) 顺序执行一条指令,即执行地址为m+1的指令;3) 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m ’; 4)顺序执行一条指令,地址为m ’+1的指令 5)在后地址[m ’+2,319]中随机选取一条指令并执行; 6) 重复上述步骤1)~5),直到执行320次指令C 、 将指令序列变换称为页地址流在用户虚存中,按每k 存放10条指令排列虚存地址,即320条指令在虚存中页地址流长度页面失效次数命中率-=1的存放方式为:第0条~第9条指令为第0页(对应虚存地址为[0,9]);第10条~第19条指令为第1页(对应虚存地址为[10,19]);。
第310条~第319条指令为第31页(对应虚存地址为[310,319]);按以上方式,用户指令可组成32页。
(3)计算并输出下属算法在不同内存容量下的命中率。
1)先进先出的算法(FIFO);2)最近最少使用算法(LRU);3)最佳淘汰算法(OPT);4)最少访问页面算法(LFR);其中3)和4)为选择内容三、系统框图五运行结果首先打印出产生的指令信息,第一列为指令序列号,第二列为指令地址,第三列为指令所在的虚页号选择FIFO调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率选择LRU调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率选择OPT调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率六实验程序产生指令流文件produce_addstream.h #ifndef PRODUCE_ADDSTREAM_H #define PRODUCE_ADDSTREAM_H #include<stdio.h>#include<stdlib.h>#include<time.h>#include<iomanip.h>#include<vector>using namespace std;#define random(x) (rand()%x)#define MAX_LENGTH 320struct produce{int num; //指令序号int zhiling; //指令地址int virtualpage; //指令虚页号produce *next;};struct produce*creatlist();void insert(struct produce *first,struct produce *s); //插入一个节点(尾插法)void print(struct produce *first); //打印函数int max(vector<vector<int> >,int );struct produce*creatlist(){srand((int)time(0));struct produce*first=new produce;first->next=NULL;int m=0,m1=0;/*int yanzheng[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};for (int i=0;i<(MAX_LENGTH/4);i++){struct produce *s0;s0=new produce;s0->num=i*4+0;s0->zhiling=yanzheng[i*4+0];s0->virtualpage=s0->zhiling;insert(first,s0);struct produce *s1;s1=new produce;s1->num=i*4+1;s1->zhiling=yanzheng[i*4+1];s1->virtualpage=s1->zhiling;insert(first,s1);struct produce *s2;s2=new produce;s2->num=i*4+2;s2->zhiling=yanzheng[i*4+2];s2->virtualpage=s2->zhiling;insert(first,s2);struct produce *s3;s3=new produce;s3->num=i*4+3;s3->zhiling=yanzheng[i*4+3];s3->virtualpage=s3->zhiling;insert(first,s3);}//*///*for (int i=0;i<(MAX_LENGTH/4);i++){struct produce *s0;s0=new produce;m=random(MAX_LENGTH);s0->num=i*4+0;s0->zhiling=m+1;s0->virtualpage=s0->zhiling/10;insert(first,s0);m1=random(m+1);struct produce *s1;s1=new produce;s1->num=i*4+1;s1->zhiling=m1;s1->virtualpage=s1->zhiling/10;insert(first,s1);struct produce *s2;s2=new produce;s2->num=i*4+2;s2->zhiling=m1+1;s2->virtualpage=s2->zhiling/10;insert(first,s2);struct produce *s3;s3=new produce;s3->num=i*4+3;s3->zhiling=random(MAX_LENGTH-m1-2)+m1+2;s3->virtualpage=s3->zhiling/10;insert(first,s3);}//*/return first;}void insert(struct produce *first,struct produce *s){struct produce *r=first;struct produce *p;while(r){p=r;r=r->next;}p->next=s;p=s;p->next=NULL;}void print(struct produce *first) //打印函数{struct produce *p;p =first->next;cout<<"随机产生的指令的信息如下"<<endl;cout<<"指令序号"<<"指令地址"<<"指令虚页号"<<endl;while (p){cout<<p->num<<'\t'<<p->zhiling<<setw(14)<<p->virtualpage<<endl;p=p->next;}}int max(vector<vector<int> > page,int Maxpage){int a=0,position=0;for (int i=0;i<Maxpage;i++){if (page[i][1]>a){a=page[i][1];position=i;}}return position;}#endif先来先出调度算法:fifo.h#ifndef FIFO_H#define FIFO_Hvoid fifo(struct produce *first,int Maxpage){vector<int> page(Maxpage);//for (int i=0;i<Maxpage;i++)page[i]=-1;int rear=0;//定义一个变量,指向要被替换的位置int pages;//定义变量保存当前指令的所在的地址int count1=0;//int count2=0;//缺页次数int find=1;struct produce *p=first->next;while (p){pages=p->virtualpage;for(int i=0;i<Maxpage;i++){if (page[i]==-1||count1<Maxpage){page[i]=pages;count1 ++;count2 ++;find =1;break;}else if (page[i]==pages){find =1;break;}find=0;}if (find==0){page[rear]=pages;rear ++;rear=rear%Maxpage;count2 ++;}p=p->next;}cout<<"FIFO调度算法缺页次数缺页率命中率"<<endl;cout<<count2<<setw(25)<<double(count2)/MAX_LENGTH<<setw(10)<<1-dou ble(count2)/MAX_LENGTH<<endl;}#endif FIFO_HLRU调度算法lru.h#ifndef LRU_H#define LRU_H#include<vector>using namespace std;//int max(vector<vector<int> >,int );void lru(struct produce*first,int Maxpage){struct produce*p=first->next;vector<vector<int> > page2(Maxpage, vector<int>(2));int count1=0; //定义内存已经被占用的页数int count2=0; //定义记录缺页次数int equal=0; //定义判断如果当前页数与比较的页数,如果相等则为1,否则为0int place=0; //定义要替换的位置for (int i=0;i<Maxpage;i++){page2[i][0]=-1;page2[i][1]=0;}while (p){if (count1<Maxpage){for (int i=0;i<Maxpage;i++){page2[i][1]=page2[i][1]+1;if (page2[i][0]==-1){page2[i][0]=p->virtualpage;count2++;break;}else if (page2[i][0]==p->virtualpage){page2[i][1] =1;}}count1++;}else{for (int i=0;i<Maxpage;i++){page2[i][1] +=1;if (page2[i][0]==p->virtualpage){equal=1;place=i;break;}}if (equal==1){page2[place][1] =1;equal=0;}else{place = max(page2,Maxpage);page2[place][1]=1;page2[place][0]=p->virtualpage;count2++;}}p=p->next;}cout<<"LRU调度算法缺页次数缺页率命中率"<<endl;cout<<count2<<setw(24)<<double(count2)/MAX_LENGTH<<setw(10)<<1-dou ble(count2)/MAX_LENGTH<<endl;}#endif LRU_HOPT调度算法opt.h#ifndef OPT_H#define OPT_H#include<vector>using namespace std;int search(struct produce*place,int position);void opt(struct produce*first,int Maxpage){struct produce*p =first->next;vector<vector<int> > page3(Maxpage, vector<int>(2));int count1=0; //定义内存已被使用的页数int count2=0; //定义缺页次数int current=0; //定义当前工作位置int equal=0; //定义判断如果当前页数与比较的页数,如果相等则为1,否则为0int place=0; //定义要替换的位置for (int i=0;i<Maxpage;i++){page3[i][0]=-1;page3[i][1]=0;}while (p){//cout<<1111<<endl;if (count1<Maxpage){for (int i=0;i<Maxpage;i++){if (page3[i][0]==-1){page3[i][0]=p->virtualpage;page3[i][1]=search(p,current);count2++;break;}else if (page3[i][0]==p->virtualpage){page3[i][1]=search(p,current);}}count1++;}else{for (int i=0;i<Maxpage;i++){if (page3[i][0]==p->virtualpage){equal=1;place=i;break;}}if (equal==1){page3[place][1] =search(p,current);equal=0;}else{place = max(page3,Maxpage);page3[place][1]=search(p,current);page3[place][0]=p->virtualpage;count2 +=1;}}p=p->next;current +=1;}cout<<"OPT调度算法缺页次数缺页率命中率"<<endl;cout<<count2<<setw(25)<<double(count2)/MAX_LENGTH<<setw(10)<<1-dou ble(count2)/MAX_LENGTH<<endl;}int search(struct produce*place,int position){struct produce*p=place->next;int current=place->virtualpage;int position1=position+1;while(p){if (current==p->virtualpage){return position1;}position1++;p=p->next;}return position1;}#endif主函数控制台ccglmain.cpp#include<iostream.h>#include "produce_addstream.h"#include "fifo.h"#include "lru.h"#include "opt.h"void main(){int S; //定义变量记录用户选择char again; //定义变量用户选择继续还是退出cout<<"开始产生内存指令"<<endl;struct produce *first=creatlist();//产生随机指令cout<<"打印产生的指令信息"<<endl;print(first);//打印产生的指令信息while (1){int Maxpage=3;//定义内存最大页面数cout<<"输入你的选择"<<endl;cout<<"1:FIFO(先进先出)调度算法\n"<<"2:LRU(最近最少使用算法)\n"<<"3:OPT(最佳淘汰算法)\n"<<"4:清屏"<<endl;cin>>S;while(S>4||S<1){cout<<"输入错误重新输入"<<endl;cin>>S;}if (S!=4){while(Maxpage<=32){switch(S){case 1:fifo(first,Maxpage);break;case 2:lru(first,Maxpage);break;case 3:opt(first,Maxpage);break;default:break;}Maxpage++;}cout<<"是否继续调用其他算法?是请按y/Y,否请按其它键"<<endl;cin>>again;if(again=='y'||again=='Y'){continue;}else break;}else system("cls");}}。
实验四存储管理(一)
学号:姓名:班级:
实验目的:
1。
了解存储管理的内容和目的。
2。
掌握分区式存储管理的主要内容
3。
掌握可变分区管理分配策略。
实验内容:
一、填空:
1。
存储管理的实质对内存的管理,主要对内存中用户区进行管理
2。
将作业相对地址空间的相对地址转换成内存中的绝对地址的过程称为地址重定位
3。
在可变分区存储管理中采用最佳适应算法时,最好按分区块大小从小到大排序空闲分区。
4。
在可变分区存储管理中采用最先适应算法时,最好按分区块地址从低到高排序空闲分区。
5。
静态重定位在程序装入时进行,动态重定位在程序执行时进行。
6。
在可变分区管理中有两张说明表,一是已分配分区说明表,一是空闲分区说明表。
7。
可变分区管理中的空闲分区表根据分配算法需要排序。
已分配分区表不需要排序。
(需要、不需要)
二、简答:
1.何谓名字空间?何谓地址空间?何谓存储空间?
答:名字空间:程序中符号名的集合。
地址空间:在目标模块中的地址的集合。
存储空间:实际内存地址的集合。
储空间
2.分区式存储管理能用于实现虚拟内存吗?(虚拟内存P165-166)
答:不能,因为虚拟存储最重要的特点就是离散性,而分区式存储管理只适用于连续分配方式,即全部程序都放在内存,而不允许程序运行时一部分在内存、
一部分在外存。
所以,无法提供内存的逻辑扩充功能。
3。
为什么要引入动态重定位?如何实现?
答:
为了在程序执行过程中,每当访问指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址,引入了动态重定位。
可在系统中增加一个重定位寄存器,用它来装入(存放)程序在内存中的起始地址,程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的,从而实现动态重定位。
4。
分区存储管理中常采用哪些分配策略?
答:
固定式分区:又称静态分区,它是在系统初始化时,把内存空间划分为若干个大小不等的分区,分区的大小和分区的个数预先确定好,一旦划分好,在没有人工干预的情况下,内存的划分方式不变。
可变分区分配:与固定分区法相同,可变分区法也要使用分区说明表等数据结构对内存进行管理。
但由于随着时间的推移,系统中分区的个数是不断变化的。
5。
最佳适应(Best Fit)算法和最坏适应(Worst Fit)算法优缺点:
最佳适应算法:要求按空闲区大小从小到大的次序组成空闲区可用表或自由链。
当用户作业或进程申请一个空闲区时,存储管理程序从表头开始查找,当找到第一个满足要求的空闲区时,停止查找。
如果该空闲区大于请求表中的请求长度,则与最先适应法时相同。
将减去请求长度后的剩余空闲区部分留在可用表中。
最坏适应算法:要求空闲区按其大小递减的顺序组成空闲区可用表或自由链。
当用户作业或进程申请一个空闲区时,先检查空闲区可用表或自由链的第一个空闲可用区的大小是否大于或等于所要求的内存长度,若可用表或自由链的第一个项所示空闲区长度小于所要求的,则分配失败,否则从空闲区可用表或自由链中分配相应的存储空间给用户,然后修改和调整空闲区可用表或自由链。
优缺点:
最佳适应算法使剩下的空间尽量最小,但有可能由于空间过小导致其他程序无法使用而变成碎片。
最坏适应算法使剩下的空间尽量最大,减少了产生碎片的机会,但会使空闲分区大的分区较少,无法满足后面需求存储空间较大的作业。
三、应用题:
1.在可变分区存储管理中,按地址法组织当前的空闲分区,其大小分别为:10KB,4KB,20KB,18KB,7KB,9KB,12KB和15KB。
现在依次有3个存储请求为:12KB,10KB,9KB。
试问使用最先适应算法时的分配情形如何?最佳适应、最坏适应呢?(不考虑存储释放情况)
(1)最先适应算法
(2)最佳适应算法
(3)最坏适应算法。