操作系统实验3虚拟存储器管理

合集下载

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

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

操作系统实验实验报告虚拟内存一、实验目的本次操作系统实验的目的是深入理解虚拟内存的概念、原理和实现机制,通过实际操作和观察,掌握虚拟内存的相关技术,包括页面置换算法、内存分配策略等,并分析其对系统性能的影响。

二、实验环境操作系统:Windows 10 专业版开发工具:Visual Studio 2019编程语言:C++三、实验原理1、虚拟内存的概念虚拟内存是一种计算机系统内存管理技术,它使得应用程序认为自己拥有连续的可用内存(一个连续完整的地址空间),而实际上,这些内存可能是被分散存储在物理内存和外部存储设备(如硬盘)中的。

虚拟内存通过将程序使用的内存地址映射到物理内存地址,实现了内存的按需分配和管理。

2、页面置换算法当物理内存不足时,操作系统需要选择一些页面(内存中的固定大小的块)换出到外部存储设备,以腾出空间给新的页面。

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

3、内存分配策略操作系统在分配内存时,需要考虑如何有效地利用有限的物理内存资源。

常见的内存分配策略有连续分配、分页分配和分段分配等。

四、实验内容与步骤1、实现简单的虚拟内存系统使用 C++编写一个简单的虚拟内存模拟程序,包括内存页面的管理、地址映射、页面置换等功能。

2、测试不同的页面置换算法在虚拟内存系统中,分别实现 FIFO、LRU 和 Clock 算法,并对相同的访问序列进行测试,比较它们的页面置换次数和缺页率。

3、分析内存分配策略的影响分别采用连续分配、分页分配和分段分配策略,对不同大小和类型的程序进行内存分配,观察系统的性能(如内存利用率、执行时间等)。

具体步骤如下:(1)定义内存页面的结构,包括页面号、标志位(是否在内存中、是否被修改等)等。

(2)实现地址映射函数,将虚拟地址转换为物理地址。

(3)编写页面置换算法的函数,根据不同的算法选择要置换的页面。

(4)创建测试用例,生成随机的访问序列,对不同的算法和分配策略进行测试。

OS实验三虚拟存储器的管理

OS实验三虚拟存储器的管理

OS实验三虚拟存储器的管理虚拟存储器管理南京理工大学泰州科技学院实验报告书课程名称:《计算机操作系统》实验题目:实验三班级: 08计算机2班学号:姓名:叶萌指导教师:袁宝华虚拟存储器管理一实验目的1. 理解虚拟存储器概念;2. 掌握分页式存储管理地址转换和缺页中断。

二实验内容1.模拟分页式存储管理中硬件的地址转换和产生缺页中断分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。

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

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

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

2.用先进先出(FIFO)页面调度算法处理缺页中断在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。

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

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

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

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

三实验准备1. 设计一个“地址转换”程序来模拟硬件的地址转换工作当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。

当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断,程序流程图如图4-1所示。

虚拟存储管理实验报告

虚拟存储管理实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

操作系统实验3虚拟存储器管理[1]

操作系统实验3虚拟存储器管理[1]

实验报告班级:系统本111 学号:2011415108 姓名:张国锋日期:2013.6.27⒈实验题目模拟分页式虚拟存储管理实验。

2.实验要求编写一段程序来模拟页面置换算法。

要求能分别显示最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法的置换过程。

3. 实验目的通过本实验帮助学生理解虚拟存储器的工作方法。

了解分页式存储管理里中各页面置换算法是怎样实现的,各算法有怎样的优缺点。

⒋实验原理分析⑴页面置换算法是在分页存储管理方式中为了合理的将进程运行所需的页面调入内存而产生的算法。

一个好的页面转换算法,应具有较低的页面更换频率。

最常见的页面置换算法有最佳(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 页面号串5.实验代码清单#include <stdio.h>#include <stdlib.h>#include <conio.h>#define Bsize 3#define Psize 20struct pageInfor{int content; /*页面号*/int timer; /*被访问标记*/};void PRA(); /*初始化*/int findSpace(); /*查找是否有空闲内存*/int findExist(int curpage);/*查找内存中是否有该页面*/int findReplace(); /*查找应予置换的页面*/void display(); /*显示*/void FIFO(); /*FIFO算法*/void LRU(); /*LRU算法*/void Optimal(); /*OPTIMAL算法*/void BlockClear(); /*BLOCK恢复*/struct pageInfor * block; /*物理块*/struct pageInfor * page; /*页面号串*/int QString[20];void PRA(){int i,n;printf("请输入页面号引用串:\n");for(i=0;i<20;i++){scanf("%d",&QString[i]);}printf("您输入页面号引用串为:\n");printf("==================\n");for(i=0;i<20;i++){printf("%d\t",QString[i]);}printf("==================\n");block=(struct pageInfor *)malloc(sizeof(struct pageInfor));for(i=0; i<Bsize; i++) {block[i].content = -1;block[i].timer = 0;}page = (struct pageInfor *)malloc(sizeof(struct pageInfor)*Psize); for(i=0; i<Psize; i++) {page[i].content = QString[i];page[i].timer = 0;}}int findSpace(){int i=0;for(i=0; i<Bsize; i++)if(block[i].content == -1)return i; /*找到空闲内存,返回BLOCK中位置*/ return -1;}int findExist(int curpage){int i=0;for(i=0; i<Bsize; i++)if(block[i].content == page[curpage].content)return i; /*找到内存中有该页面,返回BLOCK中位置*/ return -1;}int findReplace(){int pos = 0,i;for(i=0; i<Bsize; i++)if(block[i].timer >= block[pos].timer)pos = i; /*找到应予置换页面,返回BLOCK中位置*/ return pos;}void display(){int i=0;for(i=0; i<Bsize; i++)if(block[i].content != -1)printf("%d\t",block[i].content);printf("\n");}void Optimal(){int exist,space,position,i,k,j ;for(i=0; i<Psize; i++) {exist = findExist(i);if(exist != -1) {printf("不缺页\n");}else {space = findSpace();if(space != -1) {block[space] = page[i];display();}else {for(k=0; k<Bsize; k++)for(j=i; j<Psize; j++) {if(block[k].content != page[j].content) { block[k].timer = 1000;}else {block[k].timer = j;break;}}position = findReplace();block[position] = page[i];display();}}}getch();system("cls");}void LRU(){int exist,space,position,i,k,j ; for(i=0; i<Psize; i++) { exist = findExist(i);if(exist != -1) {printf("不缺页\n");block[exist].timer = -1; } else {space = findSpace();if(space != -1) {block[space] = page[i]; display();}else {position = findReplace(); block[position] = page[i]; display();}}for(j=0; j<Bsize; j++)block[j].timer++;}getch();system("cls");}void FIFO(){int exist,space,position,i,k,j ;for(i=0; i<Psize; i++) {exist = findExist(i);if(exist != -1) {printf("不缺页\n");}else {space = findSpace();if(space != -1) {block[space] = page[i];display();}else {position = findReplace();block[position] = page[i];display();}}for(j=0; j<Bsize; j++)block[j].timer++; /*BLOCK中所有页面TIMER++*/ }getch();system("cls");}void BlockClear() //清空页面信息{int i;for(i=0; i<Bsize; i++) {block[i].content = -1;block[i].timer = 0;}}void main(){PRA();system("color 2");int select=1;while(select) {printf("系统本111项静怡小组页面置换算法程序\n"); printf("请按以下菜单选择:\n");printf("[1]\tOptimal\t算法\n");printf("[2]\tFIFO\t算法\n");printf("[3]\tLRU\t算法\n");printf("[0]\t退出\n");scanf("%d",&select);switch(select) {case 0:break;case 1:printf("Optimal算法结果如下:\n");Optimal();break;case 2:printf("FIFO算法结果如下:\n");FIFO();break;case 3:printf("LRU算法结果如下:\n");LRU();break;default:printf("菜选项输入错误,请输入(1,2,3,0)\n");break;}BlockClear();}}6.实现①输入课本中例题数据,创建3个物理模块,页面引用串为7 0 1 2 0 3 0 4 2 3 0 3 2 12 0 1 7 0 1运行界面如图1所示图1 输入②用最佳置换算法,运行后如图2所示图2 Optinal算法③用FIFO先进先出算法运行后如图3所示图3 FIFO算法④用LRU最久未使用算法,运行后如图4所示图4 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. 实验结果通过本次实验,成功创建了一个虚拟机,并安装了操作系统。

操作系统第5章存储管理3虚拟存储

操作系统第5章存储管理3虚拟存储

举例:某进程依次访问如下地址:
0100,0432,0101,0612,0102,0103, 0104,0101,0611,0102,0103,0104, 0101,0610,0102,0103,0104,0101, 0609,0102,0105。若页面大小为100, 上述访问串可简化为: 1,4,1,6,1,6,1,6,1,6,1
4 0 3
2 3 4 2 0 4
是 是 是 是 否 是 是 是 是 是 是 否 否
7 0 1 2 3 0 4
结果:缺页次数共10次。
次序
页 面 分 配 情 况 是否 缺页 换出 的页
7
0
1 1
2 2
0
3 3
0 0
4 4
2 2
3 3
0 0
3
2
0
7 7
0
7
1
0
2
1
3
2
0
3
4
0
2
4
3
2
是 是 是 是 否 是 是 是 是 是 是 否 否 7 0 1 2 3 0 4
4 0 3
是 是 是 是 否 是 是 是 是
7 0 1 2
次序
7
0
1
2
0
3
0
4
2
3
0
3
2
页 面 分 配 情 况
是否 缺页 换出 的页
1 2 0 7 7 0 1 7 0
3 0 2 3 1 2
4 0 3
2 4 0
是 是 是 是 否 是 是 是 是 是
7 0 1 2 3
次序
7
0
1
2
0
3
0

操作系统原理虚拟存储器管理资料

操作系统原理虚拟存储器管理资料

光存储技术
通过垂直堆叠存储单元,提供更 高的存储密度和更低的延迟,有 望改变虚拟存储器的架构和设计。
利用激光在介质上刻写数据,具 有极高的存储密度和长达数百年 的数据保存期限,为虚拟存储器 提供了前所未有的容量和可靠性。
云计算与虚拟存储器的关系
云计算资源池化
分布式存储系统
云原生技术
云计算通过虚拟化技术将物理资源抽 象成逻辑资源,实现资源的动态分配 和共享,虚拟存储器是云计算资源池 化的重要组成部分。
物理地址空间
实际内存中的地址空间,与逻辑地址空间不一定连续。物理地址是内存单元的 实际地址,由硬件直接访问。
地址映射机制
1 2
动态重定位
程序执行时,将逻辑地址转换为物理地址的过程。 通过查页表或段表实现地址映射。
请求调页/请求分段
当所需页面/段不在内存中时,发出缺页/缺段中 断,将所需页面/段调入内存。
05
虚拟存储器与操作系统的关系
虚拟存储器对操作系统的影响
扩大内存容量
虚拟存储器通过内外存交换技术, 使得程序可以使用比实际内存更 大的容量。
内存保护
每个程序都在自己的虚拟地址空 间中运行,互不干扰,提高了系 统的安全性。
内存管理灵活
虚拟存储器实现了内存的逻辑扩 充,使得内存管理更加灵活,方 便用户和程序员使用。
03
内存回收策略
当进程不再需要某些内存空间时,操 作系统需要将这些空间回收并重新利 用。常见的内存回收策略包括引用计 数法、标记清除法和复制法等。
缓存技术
要点一
缓存命中与缺失
当CPU访问数据时,如果数据已经在 缓存中,则称为缓存命中;否则需要 从主存中读取数据到缓存中,称为缓 存缺失。

操作系统原理虚拟存储器管理

操作系统原理虚拟存储器管理

总结词
将内存划分为大小不等的段,每段存放 一个程序的段,以段为单位进行交换。
VS
详细描述
段式存储管理将内存空间划分为大小不等 的段框,每个段框可以存放一个程序的段 。程序被划分为多个段,每个段可以有不 同的长度。在进行段交换时,以段为单位 进行数据的存取和替换。
段页式存储管理
总结词
结合段式和页式存储管理的特点,将内存划分为固定大小的页框,程序分割为多个段,每段再分割为 固定大小的页。
虚拟存储器提供了一个统一的地址空间,使得应用程序可以 像访问内存一样访问硬盘上的数据,从而提高了程序的运行 效率。
虚拟存储器的实现方式
内存管理单元(MMU)
负责将虚拟地址转换为物理地址,实现虚拟存储器到物理存储器的 映射。
交换区
当物理内存不足时,操作系统会将部分内存数据交换到硬盘的交换 区中,以释放物理内存空间。
实现进程隔离
通过虚拟内存技术,每个进程都有独 立的内存空间,实现进程间的隔离, 防止数据冲突和相互干扰。
支持大内存程序
通过将内存分为物理内存和虚拟内存, 支持大内存程序的运行,满足不断增 长的程序需求。
02
虚拟存储器的基本概念
虚拟存储器的定义
虚拟存储器是一种将物理内存与硬盘存储相结合的技术,通 过将部分硬盘空间映射到物理内存中,实现内存的扩展。
操作系统原理虚拟存储器管 理
• 引言 • 虚拟存储器的基本概念 • 虚拟存储器的原理 • 虚拟存储器的管理策略 • 虚拟存储器的实现技术 • 虚拟存储器的性能优化
01
引言
主题简介
虚拟存储器是操作系统中用于管理物 理内存和磁盘存储的技术,通过将内 存分为物理内存和虚拟内存,实现进 程间的隔离和内存的动态分配。

虚拟储存管理实验报告

虚拟储存管理实验报告

一、实验目的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、深入了解页式存储管理如何实现地址转换。

2、进一步认识页式虚拟存储管理中如何处理缺页中断。

实验内容
编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。

实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。

假定内存64KB,每个内存块1024字节;作业最大支持到64KB,系统中每个作业分得内存块4块。

实验步骤
注:可根据实际情况加页。

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

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

操作系统实验报告三存储器管理实验操作系统实验报告三:存储器管理实验一、实验目的本次存储器管理实验的主要目的是深入理解操作系统中存储器管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收的算法,以及页面置换算法的工作过程和性能特点,从而提高对操作系统资源管理的认识和实践能力。

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

三、实验内容1、内存分配与回收算法实现首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)2、页面置换算法模拟先进先出页面置换算法(FIFO)最近最久未使用页面置换算法(LRU)时钟页面置换算法(Clock)四、实验原理1、内存分配与回收算法首次适应算法:从内存的起始位置开始,依次查找空闲分区,将第一个能够满足需求的空闲分区分配给进程。

最佳适应算法:在所有空闲分区中,选择能够满足需求且大小最小的空闲分区进行分配。

最坏适应算法:选择空闲分区中最大的分区进行分配。

2、页面置换算法先进先出页面置换算法:选择最早进入内存的页面进行置换。

最近最久未使用页面置换算法:选择最近最长时间未被访问的页面进行置换。

时钟页面置换算法:给每个页面设置一个访问位,在页面置换时,从指针指向的页面开始扫描,选择第一个访问位为0 的页面进行置换。

五、实验步骤1、内存分配与回收算法实现定义内存分区结构体,包括分区起始地址、大小、是否已分配等信息。

实现首次适应算法、最佳适应算法和最坏适应算法的函数。

编写测试程序,创建多个进程,并使用不同的算法为其分配内存,观察内存分配情况和空闲分区的变化。

2、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。

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

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

操作系统管理-虚拟存储器-实验报告-代码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]; // 页表虚拟存储器和页表管理需要掌握的是页表的相关数据结构,还有一个重要的点,就是如何将虚拟地址映射到物理地址。

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

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

操作系统虚拟内存管理实验报告一、引言操作系统中的虚拟内存管理是一种将主存作为cache使用,将物理内存扩展到硬盘等外部存储设备的技术。

本实验旨在研究和实践虚拟内存管理的相关知识,并探讨不同策略在虚拟内存管理中的应用与效果。

二、实验目的本实验的主要目的有以下几点:1.了解并掌握操作系统中虚拟内存的概念和作用;2.基于已有的实验系统,实现并比较不同的虚拟内存管理策略;3.通过实验,深入理解虚拟内存管理对计算机系统性能的影响。

三、实验环境本次实验使用的虚拟机环境配置如下:操作系统:Windows 10开发工具:Visual Studio Code编程语言:C++四、实验步骤1.实验系统设计本实验使用C++语言编写一个简单的模拟系统,实现虚拟内存管理的各项功能。

该系统包含一个进程管理器、一个虚拟内存管理器以及一个页面置换算法模块。

2.进程管理器实现进程管理器负责管理进程的创建、调度和撤销等操作。

在本实验中,我们选择了最简单的时间片轮转调度算法。

3.虚拟内存管理器实现虚拟内存管理器负责将虚拟地址映射为物理地址,并进行合理的页面置换操作。

在本实验中,我们采用了两种常见的虚拟内存管理策略,分别为页面置换算法FIFO和LRU。

4.页面置换算法实现页面置换算法模块主要针对物理内存不足时进行页面置换,并合理选择待置换的页面。

本实验中,我们实现了先进先出(FIFO)和最近最久未使用(LRU)两种页面置换算法,并对其进行性能比较。

五、实验结果与分析1.实验数据收集我们通过运行不同规模的任务,并记录其执行时间、内存占用等数据,以便后续进行性能分析。

2.性能分析通过实验数据的对比分析,我们可以得出不同虚拟内存管理策略的优缺点。

FIFO算法适用于执行时间较长的任务,而LRU算法则适用于要求较高内存使用效率的任务。

六、实验总结通过本次实验,我们了解了虚拟内存管理的基本概念和主要作用,并实践了不同策略的虚拟内存管理系统。

通过对实验数据的分析,我们对不同策略的性能特点有了更深入的了解。

虚拟存储管理实验总结

虚拟存储管理实验总结

虚拟存储管理实验总结虚拟存储是一种计算机操作系统的存储管理技术。

通过虚拟存储技术,操作系统能够把正在运行的程序看成是存储在主存储器中的一部分。

当程序需要的数据暂时不存在于主存储器时,操作系统会自动把暂时不用的程序或数据存放在磁盘上,并在需要时再自动调入主存储器中,从而以较小的主存储器容量来运行大程序。

在本次虚拟存储管理实验中,我们学习了虚拟存储管理技术的实现原理以及相关算法。

通过该实验,我们深入理解了进程运行时的存储管理过程,并通过实际操作和调试,进一步巩固了对操作系统的理论知识和实践应用的掌握。

一、实验环境本次实验主要在Linux操作系统上进行。

Linux内核由于其源代码公开、开放平台、代码规范等优点,成为了广大计算机科学爱好者学习操作系统的首选。

我们还需要安装实验所需的MAM分配器和SSTF调度器等辅助工具。

二、实验过程实验的主要步骤包括:1.分配器的实现。

我们需要实现MAM分配器,该分配器要求能够自动将进程使用的内存块分配出去,且在进程退出时自动释放所使用的内存块。

2.虚拟地址转换实现。

实验中,我们需要使用页表来管理虚拟地址。

通过页表,可以将虚拟地址转换为物理地址,从而操作系统可以向硬盘中读写数据。

3.页面置换算法实现。

当内存不足时,虚拟存储会通过一些页面置换算法将部分进程在内存中的页面清除,以留下新的内存页面。

我们需要实现SSTF算法,即使用磁盘上最近访问时间最短的页面作为置换页面。

4.进程初始化和各种信号灯的设置。

进程初始化时,需要使用fork函数创建子进程并将进程挂入等待队列中,以等待分配内存同步完成。

信号灯的设置则是为了保证操作的原子性和同步性。

实验中,我们首先实现了MAM分配器,通过实现内存块分配和释放函数,它可以很好地帮助我们管理分配出去的内存块。

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

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

计算机操作系统实验指导计算机虚拟内存管理

计算机操作系统实验指导计算机虚拟内存管理

第九章￿虚拟内存管理《计算机操作系统实验指导》虚拟内存管理•虚拟内存是操作系统内存管理地一种技术,它使得程不必完全处于内存。

•程认为它拥有连续地可用地内存(一个连续完整地地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时行数据换。

•这种方案地优点是程序可以大于物理内存。

目前,大多数操作系统都使用了虚拟内存技术。

•由于程线地址空间里地页面不必常驻内存,在执行一条指令时,如果要访问地页没有在内存,那么停止该指令地执行,并产生一个页不存在地异常,对应地故障处理程序可通过从外存加载该页地方法来排除故障,即缺页断处理。

断处理之后,原先引起地异常地指令就可以继续执行。

•本章实验地目地是复虚拟内存技术,缺页断等知识,并统计从当前时刻起一段时间内发生地缺页断次数。

•统计系统缺页次数•统计一段时间内地缺页次数本实验采用修改内核源代码地方法来统计系统缺页次数,因此,涉及到有关内核源代码地修改,内核地重新编译,统计缺页次数地输出等内容。

具体步骤如下:一. 在内核源码找到include/linux/mm.h文件,声明变量pfcount,用于统计缺页次数。

二. 在/arch/x八六/mm/fault.c文件定义变量pfcount,并在 do_page_fault()函数找到good_area,让变量pfcount递增一,实现了缺页次数地统计。

三. 修改kernel/kallsyms.c文件,在文件最后插入EXPORT_SYMBOL(pfcount);该步骤地作用是,EXPORT_SYMBOL标签内定义地函数或者符号对全部内核代码公开。

可以用文本编辑器编辑直接修改文件也可使用命令 echo‘EXPORT_SYMBOL (pfcount);’ 在mm.h声明变量pfcount 在fault.c文件定义变量pfcount在good_area处修改使变量pfcount递增一在kallsyms.c 最后插入EXPORT_SYMBOL(pfcount)四. 重新编译内核,前面两个章节已经详细介绍过,此处不再赘述。

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

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

操作系统实验实验报告虚拟内存实验报告:虚拟内存一、引言虚拟内存是现代操作系统中一种重要的内存管理技术。

它允许将物理内存与硬盘上的存储空间结合起来,扩大了计算机系统的内存容量。

本实验旨在深入学习和实践虚拟内存的相关知识,包括虚拟地址到物理地址的转换及页面置换算法的实现。

二、实验原理2.1虚拟地址与物理地址转换虚拟内存通过将程序的虚拟地址空间划分为大小相等的页面,每个页面对应物理内存或硬盘上的一个页面帧。

通过页表来建立虚拟地址到物理地址的映射关系。

当程序访问一个虚拟地址时,系统会通过查找页表得到该虚拟地址对应的物理地址。

2.2页面置换算法当物理内存不足以存放所有需要运行的程序时,需要使用页面置换算法将一部分页面调出到硬盘上,以便为新的页面腾出空间。

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

三、实验过程3.1虚拟地址到物理地址的转换首先,在操作系统中,我们设计了一个简单的页表结构,用来存储虚拟地址到物理地址的映射关系。

我们将虚拟地址空间划分为大小为4KB的页面,页表中的每一项对应一个页面,包含了页面的有效位、物理页帧号等信息。

当程序访问一个虚拟地址时,首先通过虚拟地址的高位几位确定页表的索引,然后根据索引找到对应的页表项。

如果该页面已经在物理内存中,可以直接从页表项中获取物理页帧号,然后加上页内偏移量,得到物理地址。

如果该页面不在内存中,则需要将其从硬盘上调入内存,更新页表项中的信息,并得到物理地址。

3.2页面置换算法的实现在本实验中,我们选择了FIFO页面置换算法。

该算法简单、实现容易。

我们使用一个先进先出的队列来存储页面的序号。

当需要置换页面时,我们选择队列中的第一个页面进行替换,并将新的页面插入队列的末尾。

四、实验结果我们通过编写一个简单的程序来模拟实验过程,包括对虚拟地址到物理地址的转换以及页面置换算法的实现。

通过对程序的运行和输出结果的观察,我们验证了虚拟内存和页面置换算法的正确性。

存储器管理实验报告

存储器管理实验报告

一、实验目的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算法的优点,在性能和实现复杂度之间取得平衡。

佛山科学技术学院-操作系统-虚拟存储器-实验报告

佛山科学技术学院-操作系统-虚拟存储器-实验报告

实验三虚拟存储器3.1背景知识在Windows 2000环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用。

这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内 (低端2GB) 。

用户过程的虚拟地址空间也被分成三部分:1)虚拟内存的已调配区 (committed):具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作。

2)虚拟内存的保留区 (reserved):没有备用的物理内存,但有一定的访问权限。

3)虚拟内存的自由区 (free):不限定其用途,有相应的PAGE_NOACCESS权限。

与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作。

例如,用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限的区域里进行读、写操作。

而具有PAGE_ NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作。

在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域。

当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联。

如表3-2所示,给出了MEMORY_BASIC_INFORMAITON的结构,此数据描述了进程虚拟内存空间中的一组虚拟内存页面的当前状态,期中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了windows系统为这些区域添加了何种访问保护;type项则表明这些区域是课执行图像、内存映射文件还是简单的私有内存。

VirsualQueryEX() API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测。

Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间的虚拟内存API。

实验3虚拟存储器管理

实验3虚拟存储器管理

淮海工学院计算机科学系实验报告书课程名:《操作系统原理》题目:实验三虚拟存储器管理班级:Z软件52学号:***********名:***1、实验目的与要求本实验模拟请求页式虚存管理系统的页面置换情况。

实验程序能模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。

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

并通过为该进程分配不同的实页数,来比较几种算法的稳定性。

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

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

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

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

实验说明:(1)设计中虚页和实页的表示本设计利用C/C++/Java语言的结构体来描述虚页和实页的结构。

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

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

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

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

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

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

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

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

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

实验报告⒈实验题目模拟分页式虚拟存储管理实验。

2.实验要求编写一段程序来模拟页面置换算法。

要求能分别显示最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法的置换过程。

3. 实验目的通过本实验帮助学生理解虚拟存储器的工作方法。

了解分页式存储管理里中各页面置换算法是怎样实现的,各算法有怎样的优缺点。

⒋实验原理分析⑴页面置换算法是在分页存储管理方式中为了合理的将进程运行所需的页面调入内存而产生的算法。

一个好的页面转换算法,应具有较低的页面更换频率。

最常见的页面置换算法有最佳(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 页面号串5.实验代码清单#include <stdio.h>#include <stdlib.h>#include <conio.h>#define Bsize 3#define Psize 20struct pageInfor{int content; /*页面号*/int timer; /*被访问标记*/};void PRA(); /*初始化*/int findSpace(); /*查找是否有空闲内存*/int findExist(int curpage);/*查找内存中是否有该页面*/int findReplace(); /*查找应予置换的页面*/void display(); /*显示*/void FIFO(); /*FIFO算法*/void LRU(); /*LRU算法*/void Optimal(); /*OPTIMAL算法*/void BlockClear(); /*BLOCK恢复*/struct pageInfor * block; /*物理块*/struct pageInfor * page; /*页面号串*/int QString[20];void PRA(){int i,n;printf("请输入页面号引用串:\n");for(i=0;i<20;i++){scanf("%d",&QString[i]);}printf("您输入页面号引用串为:\n");printf("==================\n");for(i=0;i<20;i++){printf("%d\t",QString[i]);}printf("==================\n");block=(struct pageInfor *)malloc(sizeof(struct pageInfor));for(i=0; i<Bsize; i++) {block[i].content = -1;block[i].timer = 0;}page = (struct pageInfor *)malloc(sizeof(struct pageInfor)*Psize); for(i=0; i<Psize; i++) {page[i].content = QString[i];page[i].timer = 0;}}int findSpace(){int i=0;for(i=0; i<Bsize; i++)if(block[i].content == -1)return i; /*找到空闲内存,返回BLOCK中位置*/ return -1;}int findExist(int curpage){int i=0;for(i=0; i<Bsize; i++)if(block[i].content == page[curpage].content)return i; /*找到内存中有该页面,返回BLOCK中位置*/ return -1;}int findReplace(){int pos = 0,i;for(i=0; i<Bsize; i++)if(block[i].timer >= block[pos].timer)pos = i; /*找到应予置换页面,返回BLOCK中位置*/ return pos;}void display(){int i=0;for(i=0; i<Bsize; i++)if(block[i].content != -1)printf("%d\t",block[i].content);printf("\n");}void Optimal(){int exist,space,position,i,k,j ;for(i=0; i<Psize; i++) {exist = findExist(i);if(exist != -1) {printf("不缺页\n");}else {space = findSpace();if(space != -1) {block[space] = page[i];display();}else {for(k=0; k<Bsize; k++)for(j=i; j<Psize; j++) {if(block[k].content != page[j].content) { block[k].timer = 1000;}else {block[k].timer = j;break;}}position = findReplace();block[position] = page[i];display();}}}getch();system("cls");}void LRU(){int exist,space,position,i,k,j ; for(i=0; i<Psize; i++) { exist = findExist(i);if(exist != -1) {printf("不缺页\n");block[exist].timer = -1; } else {space = findSpace();if(space != -1) {block[space] = page[i]; display();}else {position = findReplace(); block[position] = page[i]; display();}}for(j=0; j<Bsize; j++)block[j].timer++;}getch();system("cls");}void FIFO(){int exist,space,position,i,k,j ;for(i=0; i<Psize; i++) {exist = findExist(i);if(exist != -1) {printf("不缺页\n");}else {space = findSpace();if(space != -1) {block[space] = page[i];display();}else {position = findReplace();block[position] = page[i];display();}}for(j=0; j<Bsize; j++)block[j].timer++; /*BLOCK中所有页面TIMER++*/ }getch();system("cls");}void BlockClear() //清空页面信息{int i;for(i=0; i<Bsize; i++) {block[i].content = -1;block[i].timer = 0;}}void main(){PRA();system("color 2");int select=1;while(select) {printf("系统本111项静怡小组页面置换算法程序\n"); printf("请按以下菜单选择:\n");printf("[1]\tOptimal\t算法\n");printf("[2]\tFIFO\t算法\n");printf("[3]\tLRU\t算法\n");printf("[0]\t退出\n");scanf("%d",&select);switch(select) {case 0:break;case 1:printf("Optimal算法结果如下:\n");Optimal();break;case 2:printf("FIFO算法结果如下:\n");FIFO();break;case 3:printf("LRU算法结果如下:\n");LRU();break;default:printf("菜选项输入错误,请输入(1,2,3,0)\n");break;}BlockClear();}}6.实现①输入课本中例题数据,创建3个物理模块,页面引用串为7 0 1 2 0 3 0 4 2 3 0 3 2 12 0 1 7 0 1运行界面如图1所示图1 输入②用最佳置换算法,运行后如图2所示图2 Optinal算法③用FIFO先进先出算法运行后如图3所示图3 FIFO算法④用LRU最久未使用算法,运行后如图4所示图4 LRU算法。

相关文档
最新文档