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

合集下载

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

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

实习五虚拟存储器实验报告一、实验目的本次虚拟存储器实验旨在深入理解虚拟存储器的工作原理,掌握页面置换算法的实现和性能评估,以及观察虚拟存储器对系统性能的影响。

二、实验环境本次实验在装有 Windows 操作系统的计算机上进行,使用了专门的虚拟存储器实验软件,包括模拟系统内存和磁盘存储的工具。

三、实验原理1、虚拟存储器的概念虚拟存储器是一种通过硬件和软件的结合,为用户提供一个比实际物理内存大得多的逻辑地址空间的技术。

它允许程序在运行时,仅将部分数据和代码装入内存,而其余部分则存储在磁盘上,当需要时再进行调入和调出。

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

这些算法用于决定当内存空间不足时,哪些页面应该被替换出去,以腾出空间给新的页面。

四、实验内容与步骤(一)实验内容1、实现 FIFO 页面置换算法,并对其性能进行测试。

2、实现 LRU 页面置换算法,并对其性能进行比较。

3、观察不同页面访问序列和内存大小对页面置换算法性能的影响。

(二)实验步骤1、启动虚拟存储器实验软件,设置系统内存大小和页面大小。

2、输入页面访问序列,分别运行 FIFO 和 LRU 页面置换算法。

3、记录每次页面置换的情况,包括被置换的页面、缺页次数等。

4、改变页面访问序列和内存大小,重复上述实验过程。

五、实验结果与分析(一)FIFO 页面置换算法结果当使用 FIFO 算法时,对于给定的页面访问序列,随着内存大小的增加,缺页次数逐渐减少。

但在某些情况下,由于先进先出的特性,可能会出现将即将使用的页面置换出去的情况,导致缺页率较高。

(二)LRU 页面置换算法结果LRU 算法在大多数情况下表现优于 FIFO 算法。

因为它基于页面的最近使用情况进行置换,更能保留近期可能会再次使用的页面,从而减少缺页次数。

(三)不同页面访问序列的影响不同的页面访问序列对页面置换算法的性能有显著影响。

实验五虚拟仪器 实验报告

实验五虚拟仪器 实验报告

虚拟仪器实验报告实验五:程序结构(2)院(系)电子工程学院专业电子信息工程学生姓名陈鹤龄学生学号 ******* 27指导教师余炜课程名称虚拟仪器实验5 --1 使用条件结构1.实验目的:学习使用条件结构(Case Structure)。

建立程序以检测温度是否超出范围,当温度超出上限时或下限时,前面板上的报警LED将点亮,并显示当前的温度状态为“温度过高”或“温度过低”。

在范围内时温度状态为“温度正常”。

2.设计步骤1)前面板1. 使用波形图标(Waveform Chart)显示实时温度和上、下限值。

并且如图进行配置。

2. 添加两个数值输入件,作为“温度上限”、“温度下限”的输入。

3. 添加一个LED显示件,作为报警指示。

报警时为红色,正常时为绿色。

4. 添加文本显示件,命名为“当前温度状态”。

2)框图程序1.上图为不完整的程序框图,其中条件(Case)结构只给出了真(True)分支。

请分析程序功能,完成未给出的程序实现功能。

主要实现温度值与上下限的比较,然后输出“温度过高”,“温度过低”,“温度正常”的状态文本,实现对“报警”指示灯的控制。

2.将程序重新命名为e Temperature Control.vi ,并保存起来。

实验5 - 2 使用顺序结构1.实验目的:学习使用顺序结构(Sequence Structure)。

用For 循环产生一个长度为1000000(1 百万)点的随机波形,并计算所用时间。

2.设计步骤:1)前面板1. 使用波形图表(Waveform Chart)显示随机数波形,并且如图进行配置。

2. 添加一个数值显示件,命名为“用时”。

2)框图程序1. 使用顺序结构实现,其中用时间计数器(Tick Count)函数获得当前时间。

2. 试将上图的平铺式顺序结构(Flat Sequence Structure)改为层叠式顺序结构1)前面板2)程序框图3.将程序命名为Sequence .vi,并保存起来。

虚拟存储管理实验报告

虚拟存储管理实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实习五-虚拟存储器实验报告实习五虚拟存储器实验报告一、实验目的本次虚拟存储器实验的主要目的是深入理解虚拟存储器的工作原理和机制,通过实际操作和观察,掌握虚拟存储器的地址转换、页面置换算法等关键概念,以及它们对系统性能的影响。

二、实验环境本次实验在_____操作系统下进行,使用了_____开发工具和_____模拟软件。

三、实验原理虚拟存储器是一种将主存和辅存结合起来使用的技术,它为用户提供了一个比实际物理内存大得多的逻辑地址空间。

虚拟存储器的实现基于分页或分段机制,将逻辑地址空间划分为固定大小的页或段,然后通过页表或段表将逻辑地址映射到物理地址。

在虚拟存储器中,当访问的页面不在主存中时,会发生页面缺失,此时需要从辅存中将所需页面调入主存。

页面置换算法则用于决定在主存已满时,将哪些页面换出主存,以腾出空间调入新的页面。

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

四、实验内容与步骤1、初始化实验环境启动操作系统和模拟软件。

设置相关参数,如页面大小、主存容量、辅存容量等。

2、生成访问序列使用随机数生成器或特定的模式生成一系列的逻辑地址访问序列。

3、地址转换根据页表,将逻辑地址转换为物理地址。

记录地址转换的过程和结果,包括是否发生页面缺失。

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

在发生页面缺失时,根据相应的算法选择换出的页面。

5、性能评估统计不同页面置换算法下的页面缺失次数、缺页率等性能指标。

分析不同算法对系统性能的影响。

五、实验结果与分析1、地址转换结果展示部分逻辑地址转换为物理地址的示例,说明转换的过程和正确性。

2、页面置换算法的性能比较给出 FIFO、LRU 和 OPT 算法在相同访问序列下的页面缺失次数和缺页率。

绘制图表直观地比较不同算法的性能差异。

例如,以下是三种算法在某一特定访问序列下的性能数据:|算法|页面缺失次数|缺页率||||||FIFO|_____|_____%||LRU|_____|_____%||OPT|_____|_____%|从上述数据可以看出,OPT 算法的性能最优,其页面缺失次数和缺页率最低;FIFO 算法的性能最差,页面缺失次数和缺页率相对较高;LRU 算法的性能介于两者之间。

虚拟器存储实验报告

虚拟器存储实验报告

一、实验目的1. 了解虚拟器存储的基本概念和原理;2. 掌握虚拟器存储的安装和配置方法;3. 通过虚拟器存储实验,验证虚拟器存储在计算机系统中的作用和优势。

二、实验环境1. 操作系统:Windows 102. 虚拟器软件:VMware Workstation 153. 实验内容:创建虚拟机、配置虚拟机、安装操作系统、配置网络、使用虚拟机存储三、实验步骤1. 创建虚拟机(1)打开VMware Workstation,点击“创建新的虚拟机”;(2)选择“自定义(高级)”,点击“下一步”;(3)选择虚拟机兼容性,点击“下一步”;(4)选择操作系统类型和版本,点击“下一步”;(5)输入虚拟机名称和安装路径,点击“下一步”;(6)分配内存大小,点击“下一步”;(7)创建虚拟硬盘,选择硬盘文件类型和容量,点击“下一步”;(8)选择虚拟机网络类型,点击“下一步”;(9)选择I/O设备设置,点击“下一步”;(10)完成创建虚拟机。

2. 配置虚拟机(1)双击打开虚拟机;(2)选择“自定义设置”;(3)在“硬件”选项卡中,调整虚拟机CPU核心数、内存大小等;(4)在“选项”选项卡中,配置网络连接、USB控制器等;(5)在“虚拟硬盘”选项卡中,调整硬盘容量、存储模式等;(6)在“CD/DVD选项”选项卡中,添加安装操作系统所需的镜像文件;(7)在“其他设置”选项卡中,配置USB控制器、打印机等。

3. 安装操作系统(1)启动虚拟机,进入操作系统安装界面;(2)按照安装向导完成操作系统安装。

4. 配置网络(1)在虚拟机中打开网络管理工具;(2)选择合适的网络连接方式,如桥接模式;(3)配置IP地址、子网掩码、网关等信息。

5. 使用虚拟机存储(1)在虚拟机中安装文件管理器;(2)将需要存储的文件复制到虚拟机中;(3)在虚拟机中打开文件管理器,查看存储的文件。

四、实验结果与分析1. 实验结果通过本次实验,成功创建了一个虚拟机,并安装了操作系统。

虚拟内存管理实习报告

虚拟内存管理实习报告

虚拟内存管理实习报告姓名李炜学号**********日期4月10日目录内容一:总体概述 (3)内容二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)内容三:遇到的困难以及解决方法 (9)内容四:收获及感想 (9)内容五:对课程的意见和建议 (9)内容六:参考文献 (10)内容一:总体概述这次实习主要是加入对tlb和虚拟内存的进一步支持,并且实验一下在原理课上学到过的各种替换策略,tlb是为了加速从虚拟地址到物理地址的翻译过程,而虚拟内存更是肩负着提供比实际物理内存更大的虚拟内存的重任,有了虚拟内存,才可以运行比实际内存更大的程序。

内容二:任务完成情况任务完成列表(Y/N)具体Exercise的完成情况TLB异常处理部分:Exercise 1:这个文件中和本次实习相关的主要是StartProcess这个函数,在这个函数中,首先打开一个文件,判断这个文件是否是可执行文件,如果是的话,为这个文件开辟一块地址空间来运行一个新线程,之后初始化和这个线程相关的寄存器,初始化完成之后运行这个程序。

其中在开辟新的地址空间的时候,为这个地址空间中的page table的每一项进行了初始化。

所以在后面对translationEntry增加内容的时候,最好还是在这个初始化过程中加入相应的初始化操作。

在构造可执行文件的空间时,首先读入这个文件的开始部分,即noffH,这个部分包含了文件的magic number(表示是否是可执行文件),文件中代码,数据,栈等各部分的位置、大小等。

之后根据这个大小,按照页大小分配内存页数量,初始化page table,将可执行文件的代码段和数据段按照虚存与内存一一对应的方式读入内存中。

(h)在这个文件中,主要是针对虚拟机整体的操作,其中在构造函数中,首先初始化了寄存器和内存,这个部分和本次实习没有关系,下面初始化了tlb中的项。

开始的时候,我认为对于每个地址空间都应该有自己的tlb,每次切换线(进)程的时候都要同时切换tlb内容,这个方案在nachos这样的虚拟机上实际上时可以实现的,而且tlb的miss可能会比只有一个tlb 要少很多,但是这种情况不符合计算机系统的实际情况,因为对于实际的计算机体系结构来说,tlb是一个硬件不见,每个cpu的核心应该具备一个tlb,因为多超标量等优化机制的存在,线程切换十分频繁,如果每次都要同时按照线程切换tlb,那样代价太大了,tlb本身是用来利用局部性来减少对page table的访问的,如果频繁改变tlb内容开销上太大,得不偿失。

虚拟储存管理实验报告

虚拟储存管理实验报告

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

操作系统管理_-_虚拟存储器_实验报告_代码

操作系统管理_-_虚拟存储器_实验报告_代码

淮海工学院计算机工程学院实验报告书课程名:《操作系统原理》题目:虚拟存储器班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日一、目的与要求(一)目的由于超大规模集成电器电路(VLSI)技术的发展,使存贮器的容量不断扩大,价格大幅度下降。

但从应用角度看,存贮器的容量和成本总会受到一定的限制。

所以,提高存贮器的使用效率始终是操作系统研究的重要课题之一,虚拟存贮器技术是用来扩大主存容量的一种重要的方法。

本实习要求学生独立地用高级语言编写几个常用的存贮器分配算法,并能设计一个存贮管理的模拟程序,能对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。

(二)要求为了比较真实地模拟存贮器管理,可预先生成一个大致符合实际情况的指令地址流。

然后,通过模拟这样一种指令序列的执行来计算和分析比较各种算法的访问命中率。

二、示例1.题目本示例给出采用页式分配存贮器管理方案,并通过分析、计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣,另外也考虑改变页面尺寸大小和实际存贮器容量对计算结果的影响,从而可为选择好的算法、合适的页面尺寸和存贮器实际容量提供依据。

本程序是按下述原则生成指令序列的:(1)50%的指令是顺序执行的。

(2)25%的指令是均匀分布在前地址部分。

(3)25%的指令是均匀分布在后地址部分。

示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。

公式为:页面失败次数命中率=1-───────页地址流长度假定虚拟存贮容量为32K,页面尺寸从1K到8K,实存容量从4页到32页。

2.算法与框图(1)最佳淘汰算法(OPT)。

这是一种理想的算法,可用来作为衡量其他算法优劣的依据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。

由于本示例中已生成了全部地址流,故可计算最佳命中率。

该算法的准则是淘汰已满页表中以后不再访问或是最迟访问的页。

这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不再访问此页,则把此页淘汰,不然得找出后继指令中最迟访问的页面予以淘汰。

实习五 虚拟存储器

实习五  虚拟存储器

实习五虚拟存储器一、实习内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。

二、实习目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。

用这种办法扩充的主存储器称为虚拟存储器。

通过本实习帮助同学理解在分页式存储管理中怎样实现虚拟存储器。

三、实习题目本实习有三个题,其中第一题必做,第二、第三题中可任选一个。

第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。

[提示]:(1) 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志——用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。

主存块号——用来表示已经装入主存的页所占的块号。

在磁盘上的位置——用来指出作业副本的每一页被存放在磁盘上的位置。

(2) 作业执行时,指令中的逻辑地址指出了参加运算的操作数存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号 块长+单元号计算出欲访问的主存单元地址。

如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。

按计算出的绝对地址可以取到操作数,完成一条指令的执行。

若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

(3) 设计一个“地址转换”程序来模拟硬件的地址转换工作。

当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。

操作系统实验报告——虚拟内存

操作系统实验报告——虚拟内存

北京邮电大学软件学院2019-2020学年第1学期实验报告课程名称:操作系统实验名称:虚拟存储器管理实验完成人:日期:2019 年12 月21 日一、实验目的(说明通过本实验希望达到的目的)1. 了解虚拟存储技术的特点;2. 掌握请求页式管理的页面置换算法。

二、实验内容(说明本实验的内容)1. 通过随机数产生一个指令序列,共320 条指令。

其地址按下述原则生成:(1)50%的指令是顺序执行的;(2)50%的指令是均匀分布在前地址部分;(3)50%的指令是均匀分布在后地址部分;具体的实施方法是:A. 在[0,319]的指令地址之间随机选取一起点M;B. 顺序执行一条指令,即执行地址为M+1 的指令;C. 在前地址[0,M+1]中随机选取一条指令并执行,该指令的地址为M’;D. 顺序执行一条指令,其地址为M’+1;E. 在后地址[M’+2,319]中随机选取一条指令并执行;F. 重复A—E,直到执行320 次指令。

2. 指令序列变换成页地址流设:(1)页面大小为1K;(2)用户内存容量为4 页到32 页;(3)用户虚存容量为32K。

在用户虚存中,按每K 存放10 条指令排列虚存地址,即320 条指令在虚存中的存放方式为:第0 条—第9 条指令为第0 页(对应虚存地址为[0,9]);第10 条—第19 条指令为第1 页(对应虚存地址为[10,19]);……………………第310 条—第319 条指令为第31 页(对应虚存地址为[310,319]);按以上方式,用户指令可组成32 页。

3. 计算并输出下述各种算法在不同内存容量下的命中率。

A. 先进先出(FIFO)页面置换算法B. 最近最久未使用(LRU)页面置换算法--最近最少使用算法C. 最少使用(LFR)页面置换算法D. 最佳(Optimal)页面置换算法三、实验环境(说明本实验需要的环境)Vscode+ubuntun四、实验过程描述本实验需要分几个步骤完成。

操作系统管理-虚拟存储器-实验报告-代码7页

操作系统管理-虚拟存储器-实验报告-代码7页

操作系统管理-虚拟存储器-实验报告-代码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分配器,通过实现内存块分配和释放函数,它可以很好地帮助我们管理分配出去的内存块。

接着,我们着手实现虚拟地址转换功能,需要对物理内存和虚拟内存进行管理。

由于高速缓存可以从磁盘中不用重复读取数据,所以我们还需要实现页面管理算法,以保证内存的有效利用。

作业系统实验五虚拟储存器管理

作业系统实验五虚拟储存器管理

作业系统试验五虚拟储存器管理作业系统课程报告虚拟储存器管理学号姓名班级老师华侨高校电子工程系设计目的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、执行结果以及结论。

虚拟存储器实验报告

虚拟存储器实验报告

虚拟存储器实验报告一、实验目的本次虚拟存储器实验的目的在于深入理解虚拟存储器的工作原理,掌握其基本概念和关键技术,通过实际操作和观察,分析虚拟存储器对系统性能的影响,并能够运用所学知识解决在实验过程中遇到的问题。

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

实验所使用的计算机配置为:Intel Core i7 处理器,16GB 内存,512GB 固态硬盘。

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

它将程序的逻辑地址空间与物理地址空间分开,使得程序可以使用比实际物理内存更大的地址空间。

当程序访问的地址不在物理内存中时,系统会通过页面置换算法将暂时不用的页面换出到硬盘,将需要的页面换入到物理内存中。

虚拟存储器的实现主要依赖于页式存储管理和地址转换机制。

页式存储管理将逻辑地址空间划分为固定大小的页面,物理地址空间也划分为相同大小的页框。

地址转换通过页表来完成,页表记录了逻辑页面与物理页框的对应关系。

四、实验内容1、页面置换算法的实现首先实现了先进先出(FIFO)页面置换算法。

创建一个固定大小的物理内存页框数组,模拟物理内存。

当需要装入新页面时,如果物理内存已满,按照先进入的页面先被置换的原则选择置换页面。

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

为每个页面设置一个访问时间戳,当需要置换页面时,选择访问时间最久远的页面进行置换。

2、虚拟地址到物理地址的转换设计了一个简单的页表结构,包括逻辑页号、物理页框号和有效位等字段。

输入一个虚拟地址,通过查找页表将其转换为物理地址。

如果页面不在物理内存中,触发页面置换算法进行页面调入。

3、性能分析对不同大小的程序和不同的页面置换算法,测量其页面缺失率和执行时间。

分析页面大小、物理内存大小等因素对虚拟存储器性能的影响。

五、实验步骤1、初始化实验环境设定物理内存大小、页面大小等参数。

虚拟存储器管理实验报告

虚拟存储器管理实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

操作系统实验六_虚拟存储器实验报告

操作系统实验六_虚拟存储器实验报告

操作系统实验六_虚拟存储器实验报告
实验目的:
通过本次实验,了解虚拟存储器的实现原理,以及如何分配虚拟地址和物理地址,实现虚拟存储器管理。

实验内容:
1.按照顺序完成程序代码,以实现对虚拟地址的映射,再间接实现对物理地址的访问。

2.完成不同的页面置换算法,并分析各自的特点。

实验步骤:
1.在实验中实现了给定的伪指令程序,其中包括了虚拟存储器的实现代码。

在页面大小为1K的情况下,每个进程的虚拟地址空间为64K,物理地址空间为16K。

2.在虚拟存储器的实现中,采用了分段式存储器管理模式,其中包括了段描述符表和页表。

其中段描述符表包括了段基址、段长、段类型等信息,而页表则记录了虚拟地址和物理地址的映射关系。

3.实现了三种页面置换算法:LRU、FIFO和随机算法。

其中,LRU算法会选择最近没有使用过的页面进行置换;FIFO算法会按照先进先出原则进行页面置换;随机算法则随机选取一个页面进行置换。

4.通过本次实验,学习了如何通过虚拟地址访问物理地址,并实现了对虚拟存储器的管理。

同时,在实现页面置换算法时,也对不同算法的特点进行了分析。

实验结果:。

操作系统原理实验-虚拟存储器.

操作系统原理实验-虚拟存储器.

佛山科学技术学院实验报告课程名称操作系统原理实验实验项目虚拟存储器专业班级姓名学号指导教师成绩日期一、实验目的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、运行结果以及结论。

虚拟内存机制实习报告范本

虚拟内存机制实习报告范本

虚拟内存机制实习报告目录一:总体概述 (3)二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)三:遇到的困难以及解决方法 (29)四:收获及感想 (29)五:对课程的意见和建议 (30)六:参考文献 (30)一:总体概述通过认真仔细阅读Nachos系统虚拟内存部分的源代码,理解虚拟内存的管理和应用机制,用户程序的运行逻辑,并修改源代码,达到“实现虚拟存储系统”的目标。

二:任务完成情况任务完成列表(Y/N)具体Exercise的完成情况Exercise 1: 源代码阅读Part1: 阅读code/userprog/,着重理解nachos执行用户程序的过程,以及该过程中与内存管理相关的要点。

阅读情况:用户程序执行过程:Part2: 阅读code/machine目录下的machine.h(cc),translate.h(cc)文件和code/userprog目录下的exception.h(cc),理解当前Nachos系统所采用的TLB机制和地址转换机制。

TLB机制和地址转换机制:Exercise 2: TLB MISS 异常处理任务:修改code/userprog目录下中的ExceptionHandler函数,使得Nachos系统可以对TLB异常进行处理(TLB异常时,Nachos系统会抛出PageFaultException,详见code/machine/)。

完成情况:关于异常处理的机理已经在Exercise1 中说明了。

因此能够对TLB异常进行处理,我们只要在判断传入的参数为TLBMISS的异常,并对其进行处理即可。

事实上,我在实际操作的时候,TLB MISS和PAGEFAULT,抛出的异常都是PageFaultException,此后再判断machine->tlb是否为空。

如果为空,则执行PagefaultFunc;否则,执行TLBmissFunc。

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

实习五虚拟存储器一、实习内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。

二、实习目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。

用这种办法扩充的主存储器称为虚拟存储器。

通过本实习帮助同学理解在分页式存储管理中怎样实现虚拟存储器。

三、实习题目本实习有三个题,其中第一题必做,第二、第三题中可任选一个。

第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。

[提示]:(1) 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志——用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。

主存块号——用来表示已经装入主存的页所占的块号。

在磁盘上的位置——用来指出作业副本的每一页被存放在磁盘上的位置。

(2) 作业执行时,指令中的逻辑地址指出了参加运算的操作数存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号 块长+单元号计算出欲访问的主存单元地址。

如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。

按计算出的绝对地址可以取到操作数,完成一条指令的执行。

若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

(3) 设计一个“地址转换”程序来模拟硬件的地址转换工作。

当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。

当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。

该模拟程序的算法如图5-1。

(4) 假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3如果作业依次执行的指令序列为:运行设计的地址转换程序,显示或打印运行结果。

因仅模拟地址转换,并不模拟指令的执行,故可不考虑上述指令序列中的操作。

第二题:用先进先出(FIFO)页面调度算法处理缺页中断。

[提示]:(1) 在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。

如果主存中已经没有空闲块,则可用FIFO页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上。

然后再把当前要访问的页装入该块。

调出和装入后都要修改页表中对应页的标志。

(2) FIFO页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来表示该作业已在主存的页面。

假定作业被选中时,把开始的m个页面装入主存,则数组的元素可定为m个。

例如:P[0],P[1]…,P[m-1]其中每一个P[i] (I=0, 1, …, m-1) 表示一个在主存中的页面号。

它们的初值为:P[0]: =0, P[1]: =1, …, P[m-1]: =m-1用一指针K指示当要装入新页时,应淘汰的页在数组中的位置,K的初值为“0”。

当产生缺页中断后,操作系统选择P[k]所指出的页面调出,然后执行:P[k]: =要装入页的页号k: = (k+1) mod m再由装入程序把要访问的一页信息装入到主存中。

重新启动刚才那条指令执行。

(3) 编制一个FIFO页面调度程序,为了提高系统效率,如果应淘汰的页在执行中没有修改过,则可不必把该页调出(因在磁盘上已有副本)而直接装入一个新页将其覆盖。

因此在页表中增加是否修改过的标志,为“1”表示修改过,为“0”表示未修改过,格式为:由于是模拟调度算法,所以,不实际地启动调出一页和装入一页的程序,而用输出调出的页号和装入的页号来代替一次调出和装入的过程。

把第一题中程序稍作改动,与本题结合起来,FIFO页面调度模拟算法如图5-2。

(4) 如果一个作业的副本已在磁盘上,在磁盘上的存放地址以及已装入主存的页和作业依次执行的指令序列都同第一题中(4)所示。

于是增加了“修改标志”后的初始页表为:按依次执行的指令序列,运行你所设计的程序,显示或打印每次调出和装入的页号,以及执行了最后一条指令后的数组P的值。

(5) 为了检查程序的正确性,可再任意确定一组指令序列,运行设计的程序,核对执行的结果。

第三题:用最近最少用(LRU)页面调度算法处理缺页中断。

[提示]:(1) 在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。

如果主存中已经没有空闲块,则可用LRU页面调度算法把该作业中距现在最久没有被访问过的一页调出,存放到磁盘上。

然后再把当前要访问的页装入该块。

调出和装入后都要修改页表中对应页的标志。

(2) LRU页面调度算法总是淘汰该作业中距现在最久没被访问过的那页,因此可以用一个数组来表示该作业已在主存的页面。

数组中的第一个元素总是指出当前刚访问的页号,因此最久没被访问过的页总是由最后一个元素指出。

如果主存只有四块空闲块且执行第一题中提示(4)假设的指令序列,采用LRU页面调度算法,那么在主存中的页面变化情况如下:汰页所占的主存块中,页号登记到数组的第一个元素中,重新启动刚才那条指令执行。

(3) 编制一个LRU页面调度程序,为了提高系统效率,如果淘汰的页在执行中没有修改过,则可不必把该页调出。

参看第二题中提示(3)。

模拟调度算法不实际地启动调出一页和装入一页的程序而用输出调出的页号和装入的页号来代替。

把第一题中程序稍作改动,与本题结合起来,LRU页面调度模拟算法如图5-3。

(4) 按第一题中提示(4)的要求,建立一张初始页表,页表中为每一页增加“修改标志”位(参考第二题中提示(4))。

然后按依次执行的指令序列,运行设计的程序,显示或打印每次调出和装入的页号,以及执行了最后一条指令后数组中的值。

(5) 为了检查程序的正确性,可再任意确定一组指令序列,运行设计的程序,核对执行的结果。

四源程序(1)程序中使用的数据结构及符号说明typedef struct //作业{char name[10];//作业名称int pageNum;//页号int offset;//单元号,偏移位移}Job;typedef struct //页表{int pageNum;//页号int mflag;//标志(是否在内存)int blockNum;//主存块号int alterFlag;//修改标志int position;//在磁盘上的位置}PageTable;(2) 打印一份源程序并附上注释#include <stdio.h>#include <string.h>typedef struct //作业{char name[10];//作业名称int pageNum;//页号int offset;//单元号,偏移位移}Job;typedef struct //页表{int pageNum;//页号int mflag;//标志(是否在内存)int blockNum;//主存块号int alterFlag;//修改标志int position;//在磁盘上的位置}PageTable;void InitPageTable(PageTable *pt) {int blockNum[5]={0,5,8,9,1};int position[5]={0,11,12,13,21};for (int i=1;i<5;i++){pt[i].pageNum=i-1;pt[i].mflag=1;pt[i].blockNum=blockNum[i];pt[i].alterFlag=0;pt[i].position=position[i];}}void InitJob(Job *job){const char *name[12]={"+","+","*","存","取","-","移位","+","存","取","+","存"};int pf[12]={0,1,2,3,0,6,4,5,1,2,4,6};int offset[12]={70,50,15,21,56,40,53,23,37,78,1,84};for (int i=0;i<12;i++){strcpy(job[i].name,name[i]);job[i].pageNum=pf[i];job[i].offset=offset[i];}}void FIFODiaoDu(Job job,PageTable *pt){if (pt[1].alterFlag==1)printf("页面%d已经被修改,故页面%d写回磁盘,页面%d调入内存\n",pt[1].pageNum,pt[1].pageNum,job.pageNum);elseprintf("页面%d调出内存,页面%d调入内存\n",pt[1].pageNum,job.pageNum);int temp[2]={pt[1].blockNum,pt[1].position};//暂存调出页面信息,容纳新页for (int i=1;i<5;i++) //数组模拟内存中放置页块队列,先进来的在队首,后进来的在队尾pt[i-1]=pt[i];pt[4].pageNum=job.pageNum;pt[4].blockNum=temp[0];pt[4].position=temp[1];if (strcmp(,"存")==0)//存操作,修改标志置1pt[4].alterFlag=1;else pt[4].alterFlag=0;}void printPageTable(PageTable *pt){printf("页号标志主存块号修改标志在磁盘上的位置\n");for (int i=1;i<5;i++)printf(" %d %d %d %d %d\n",pt[i].pageNum,pt[i] .mflag,pt[i].blockNum,pt[i].alterFlag,pt[i].position);}void printJob(Job *job){printf("作业名页号单元号\n");for (int i=0;i<12;i++)printf("%4s %d %d\n",job[i].name,job[i].pageNum,job[i].offs et);}int main(void){Job job[12];InitJob(job);printf("作业依次执行的指令序列:\n");printJob(job);PageTable pt[5];InitPageTable(pt);printf("初始内存表:\n");printPageTable(pt);printf("\n********************************作业执行开始*******************************\n\n");for (int i=0;i<12;i++){int j=0;for (j=1;j<5;j++){if (job[i].pageNum==pt[j].pageNum)//作业所需页面在内存中{if (strcmp(job[i].name,"存")==0)//存操作修改指令置1pt[j].alterFlag=1;break;}}if (j==5)//缺页中断{printf("********************缺页中断**********************\n");FIFODiaoDu(job[i],pt);//先进先出页面调度printf("作业\" %s \"重新执行\n",job[i].name);i--;//该作业重新执行}else{printf("\t 作业\" %s \"开始执行 \n",job[i].name);printf("逻辑地址: 页号%d , 单元号%d\n",job[i].pageNum,job[i].offset);printf("物理地址: 块号%d , 单元号%d\n",pt[j].blockNum,job[i].offset);printPageTable(pt);printf("\t 作业\" %s \"执行完毕 \n\n",job[i].name);}}printf("******************************所有作业执行完毕**************************\n!");}(3)打印初始页表、每次调出(要调出一页时)和装入的页号、执行最后一条指令后在主存中的页面号(即数组的值)。

相关文档
最新文档