操作系统-页式虚拟存储管理程序模拟
操作系统 课程实验-实验四页式虚拟存储管理中地址转换和缺页中断

实验四页式虚拟存储管理中地址转换和缺页中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。
二、实验预备知识页式存储管理中地址转换的方法;页式虚拟存储的缺页中断处理方法。
三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。
假定主存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位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
操作系统-存储管理(4)段页式虚拟存储

操作系统-存储管理(4)段页式虚拟存储物理地址:⼜称绝对地址,即程序执⾏所使⽤的地址空间(处理器执⾏指令时按照物理地址进⾏)逻辑地址:⼜称相对地址,即⽤户编程所使⽤的地址空间,从0开始编号,有两种形式:⼀维逻辑地址(地址)⼆维逻辑地址(段号:段内地址)主存储器空间的分配与去配:分配:进程装⼊主存时,存储管理软件进⾏具体的主存分配操作,并设置⼀个表格记录主存空间的分配情况去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占⽤的全部或者部分存储空间,调整主存分配表信息主存储器空间的共享:多个进程共享主存储器资源:多道程序设计技术使若⼲个程序同时进⼊主存储器,各⾃占⽤⼀定数量的存储空间,共同使⽤⼀个主存储器多个进程共享主存储器的某些区域:若⼲个协作进程有共同的主存程序块或者主存数据块多道程序设计需要复⽤主存:按照分区复⽤:主存划分为多个固定/可变尺⼨的分区,⼀个程序/程序段占⽤⼀个分区按照页架复⽤:主存划分成多个固定⼤⼩的页架,⼀个程序/程序段占⽤多个页架装载程序/加载器(loader)把可执⾏程序装⼊内存的⽅式有:绝对装载可重定位装载动态运⾏时装载地址转换:⼜称重定位,即把可执⾏程序逻辑地址转换成绝对地址,可分为:静态地址重定位:由装载程序实现装载代码模块的加载和地址转换(⽆需硬件⽀持),把它装⼊分配给进程的内存指定区域,其中所有指令代码和数据的逻辑地址在执⾏前⼀次全部修改为内存物理地址。
早期单任务单⽤户OS使⽤。
动态地址重地位:由装载程序实现装载代码模块的加载,把它装⼊进程的内存在指定区域,但对链接程序处理过的应⽤程序逻辑地址不做修改,程序内存起始地址被置⼊重定位寄存器(基址寄存器)。
程序执⾏过程中每当CPU访问程序和数据引⽤内存地址时,由硬件地址转换机构截取此逻辑地址并加上重定位寄存器的值。
运⾏时链接地址重定位存储保护:为避免主存中的多个进程相互⼲扰,必须对主存中的程序和数据进⾏保护。
实验一熟悉操作系统工作环境一、实验目的:能熟练地在2种不同的操作

实验一熟悉操作系统工作环境一、实验目的:能熟练地在2种不同的操作系统环境下工作,学会使用各种命令,熟悉系统提供的各种功能,熟悉系统实用程序的调用方法和各种系统调用模块的功能和作用。
主动而有效地使用计算机。
二、实验要求:掌握Windows的使用方法,熟悉虚拟机——VMWare,并在此基础上运行Linux,在两个学时内练习掌握2种操作系统的使用方法(Dos&Linux)。
三、实验内容:1.掌握虚拟机——VMWare的一般使用方法,运行Linux;2.熟悉Windows的使用,了解控制面板,计算机管理等界面的功能;3.熟悉DOS基本命令:cd,dir,copy,md,rm,format,fdisk等;4.熟悉Linux图形界面以及基本命令:login,halt,cd,ls,cp,mv,vi,gcc等。
四、实验步骤:1.打开实验计算机并登陆后,从开始菜单找到VMWare,熟悉其操作,或者自己安装后使用;2.通过教师提供的ftp站点下载实验所需软件:在IE中输入ftp://stu:****************.86.3,下载相关软件;3.用VMWare软件的文件菜单的打开功能,使用教师提供的linux.iso进行相应实验;4.在Linux中打开终端,练习命令,重点学习vi和gcc:(1).在linux命令行输入:vi lenient.c进入vi环境,进行编写程序;(2).保存退出后使用gcc命令编译程序。
及各命令使用方法如图:5.在DOS下操作如图:如下图MyFold目录已经不存在了:实验二Linux进程通信程序设计一、实验目的:在Linux/Unix平台下,用C语言编写一个进程通信的程序,理解fork()等一些系列系统函数的正确使用和工作原理,学会设计基本的进程通信程序。
二、实验要求:掌握Linux/Uinx平台,进程通信程序的工作原理,重点理解fork()函数创建子进程的原理,学会在Linux/Unix下编写,编译通信进程。
操作系统——页式存储管理

操作系统——页式存储管理分区式存储管理最⼤的缺点是碎⽚问题严重,内存利⽤率低。
究其原因,主要在于连续分配的限制,即它要求每个作⽤在内存中必须占⼀个连续的分区。
如果允许将⼀个进程分散地装⼊到许多不相邻的分区中,便可充分地利⽤内存,⽽⽆需再进⾏“紧凑”。
基于这⼀思想,产⽣了“⾮连续分配⽅式”,或者称为“离散分配⽅式”。
连续分配:为⽤户进程分配的必须是⼀个连续的内存空间。
⾮连续分配:为⽤户进程分配的可以是⼀些分散的内存空间。
分页存储管理的思想:把内存分为⼀个个相等的⼩分区,再按照分区⼤⼩把进程拆分成⼀个个⼩部分。
分页存储管理分为:实分页存储管理和虚分页存储管理⼀、实分页式存储管理实分页式存储最⼤的优点是内存利⽤率⾼,与⽬前流⾏的虚分页存储管理相⽐,具有实现简单,程序运⾏快的优点。
⽬前,飞速发展的硬件制造技术使得物理内存越来越⼤,因此我们认为,实分页式存储管理将是⼀种最有发展前途的存储管理⽅式。
1.1、基本原理假设⼀个⼤型饭店,所有的客房都是标准的双⼈间,部分客房已经住进客⼈,现在⼜有⼀个旅游团要求⼊住。
接待员统计了⼀下,对旅游团领队说:“贵团全体成员都能住下,两⼈⼀个房间,但是不能住在同⼀楼层了,因为每层空着的客房不够,更没有⼏个挨着的。
请原谅!”。
对于这样的安排,⼀般⼈不会感到奇怪。
因为旅游团本来就是由⼀位位个⼈或夫妻等组成的,⽽饭店的客房本来也是两⼈⼀间的,两⼈⼀组正好可住在⼀个客房⾥;另外,饭店⼏乎每天都有⼊住的和退房的客⼈,想在同⼀楼层找⼏间挨着的客房实在不容易。
①将整个系统的内存空间划分成⼀系列⼤⼩相等的块,每⼀块称为⼀个物理块、物理页或实页,页架或页帧(frame),可简称为块(block)。
所有的块按物理地址递增顺序连续编号为0、1、2、……。
这⾥的块相当于饭店的客房,系统对内存分块相当于饭店把⼤楼所有的客房都设计成标准的双⼈间。
②每个作业的地址空间也划分成⼀系列与内存块⼀样⼤⼩的块,每⼀块称为⼀个逻辑页或虚页,也有⼈叫页⾯,可简称为页(page)。
《操作系统》模拟试卷3及参考答案

《操作系统》模拟试卷3及参考答案《操作系统》模拟试卷三一、单项选择题(每小题1分,共 15 分)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.用户在程序中试图读某文件的第100个逻辑块,使用操作系统提供的()接口。
A.系统调用B.图形用户接口C.键盘命令D.原语8.若一个程序为多个进程所共享,那么该程序的代码在执行的过程中不能被修改,即程序应是()。
A. 可运行的B.可重入的C.可改变的D.可连接的9.虚拟存储器的容量由计算机的地址结构决定,若CPU的地址为32位,则对于一个进程来说,其最大的虚拟存储空间为()。
A. 2GB. 4GC. 1GD. 8G10.仅有基本地址变换机构的分页存储管理方式中,CPU每次存取一个数据时,要( )访问内存。
A. 1次B.2次C. 3次D. 4次11.MS-DOS采用的外存分配方法是()A.单级索引分配B.隐式链接C.显示连接D.两级索引分配12.UNIX系统对空闲磁盘空间的管理,采用的是()。
A 空闲链表法B 位示图法C成组链接法D.线性检索法13.有能避免“磁臂粘着”的磁盘调度算法是()。
操作系统课程设计-虚拟页式存储管理系统的实现

课程设计课程设计名称:计算机操作系统专业班级:计算机科学与技术学生姓名:学号:指导教师:课程设计时间:操作系统专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页目录一、设计目的为了掌握Linux环境下常用编译工具如gcc/g++/nasm及开源虚拟机bochs 的下载、安装、使用,掌握x86架构下分页式存储管理系统的基本原理,设计一个请求分页式虚拟存储系统。
掌握Linux系统下程序的编写及运行等方面展开实验。
二、设计要求2.1要求熟练掌握sudo apt-get install的用法。
2.2要求能够掌握分页存储管理系统的基本原理。
2.3要求学会在Linux系统下编写程序、执行程序。
三、设计内容3.1运行环境3.1.1虚拟机系统下3.1.2使用Ubuntu下提供的apt-get软件包安装工具安装vim、 g++ 、nasm 、bochs等3.2 2.详细设计1)回顾虚拟页式存储系统:作业分页,内存分块,只有当进程要使请认真阅读readme.txt文件,弄清楚各个文件的作用2)用其虚拟内存时,其对应的数据才装入物理内存。
3)完成frame_pool.H 、frame_pool.C 、page_table.C三个文件,其中page_table.H已经提供,我们需要添加page_table.C,自己设计并实现这些函数。
4)在frame_pool.H定义所需要的数据结构,在frame_pool.C完成这些函数。
添加代码如下所示:class FramePool {private: unsigned long base_frame_no; unsigned long nframes;unsigned long info_frame_no; unsigned char* free_frames;public:static const unsigned char USED -1;static const unsigned char UNUSED -0;static const unsigned int FRAME_SIZE -4096;public:FramePool(unsigned long _base_frame_no,unsigned long_nframes,unsigned long _info_frame_no);5)建立Frame_pool.C文件系统中使用位示图bitmap标识页面是否使用,start_frame表示第一个页面的起始地址(如系统内存池从2M开始),pool_size表示在用户池中页框的总数(如系统内存池的页框从2M~4M,因此共有(4M-2M)/4KB=512个页框)。
虚拟存储器管理实验报告

淮海工学院计算机科学系实验报告书课程名:《操作系统》题目:虚拟存储器管理页面置换算法模拟实验班级:学号:姓名:一、实验目的与要求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%。
课件:页式虚拟存储管理

将该页登记入快表
硬件处理 操作系统处理
• 现代OS的主流存储管理技术
• 首次只把进程第一页信息装入主存, 称为请求页式存储管理
页式虚拟存储管理的页表
• 需要扩充页表项,指出:
– 每页的虚拟地址、实际地址 – 主存驻留标志、写回标志、保护标志、
引用标志、可移动标志
标志位 主存块号 辅助存储器地址 第0页
第n页
页式虚拟存储管理的实现
• CPU处理地址 –若页驻留,则获得块号形成绝对地址 – 若页不在内存,则CPU发出缺页中断
• OS处理缺页中断 –若有空闲页架,则根据辅存地址调入 页,更新页表与快表等 –若无空闲页架,则决定淘汰页,调出 已修改页,调入页,更新页表与快表
页式虚拟存储管理的地址转换
按逻辑地址查快表
否 查页表
该页在快表 中有登记吗?
否 该页在主存? 是
发缺页中断
形成绝对地址
是 形成绝对地址 继续执行指令
保护现场
计算机操作系统
3 存储管理 – 3.3 页式存储管理 3.3.3 页式虚拟存储管理
掌握页式虚拟存储管理的基本思 想
掌握页式虚拟存储管理的页表 掌握页式虚拟存储管理的地址转
换 掌握缺页中断的处理流程源自页式虚拟存储管理的基本思想
• 把进程全部页面装入虚拟存储器,执 行时先把部分页面装入实际内存,然 后,根据执行行为,动态调入不在主 存的页,同时进行必要的页面调出
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统-页式虚拟存储管理程序模拟
FIFO页面置换算法
1在分配内存页面数(AP)小于进程页面数(PP)时,当然是最先运行的AP个页面放入内存。
2这时有需要处理新的页面,则将原来内存中的AP个页面最先进入的调出(是以称为FIFO),然后将新页面放入。
3以后如果再有新页面需要调入,则都按2的规则进行。
算法特点:所使用的内存页面构成一个队列。
LRU页面置换算法
1当分配内存页面数(AP)小于进程页面数(PP)时,当然是把最先执行的AP个页面放入内存。
2当需要调页面进入内存,而当前分配的内存页面全部不空闲时,选择将其中最长时间没有用到的那个页面调出,以空出内存来放置新调入的页面(称为LRU)。
算法特点:每个页面都有属性来表示有多长时间未被CPU使用的信息。
结果分析
#include<iostream>
#include<time.h>
using namespace std;
const int MaxNum=320;//指令数
const int M=5;//内存容量
int PageOrder[MaxNum];//页面请求
int Simulate[MaxNum][M];//页面访问过程
int PageCount[M],LackNum;//PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数
float PageRate;//命中率
int PageCount1[32];
bool IsExit(int i)//FIFO算法中判断新的页面请求是否在内存中
{ bool f=false;
for(int j=0;j<M;j++)
{if(Simulate[i-1][j]==PageOrder[i])//在前一次页面请求过程中寻找是否存在新的页面请求{ f=true; }
}
return f;
}
int IsExitLRU(int i)//LRU算法中判断新的页面请求是否在内存中
{ int f=-1;
for(int j=0;j<M;j++)
{if(Simulate[i-1][j]==PageOrder[i])
{ f=j; }
}
return f;
}
int Compare()//LRU算法找出内存中需要置换出来的页面
{ int p,q;
p=PageCount[0];
q=0;
for(int i=1;i<M;i++)
{if(p<PageCount[i])
{p=PageCount[i];
q=i; }
}
return q;
}
void Init() //初始化页框
{ for(int k=0;k<MaxNum;k++)
{ int n=rand()%320;//随机数产生320次指令
PageOrder[k]=n/10;//根据指令产生320次页面请求}
for(int i=0;i<MaxNum;i++)//初始化页面访问过程
{ for(int j=0;j<M;j++)
{ Simulate[i][j]=-1; }
}
for(int q=0;q<M;q++)//初始化最久未使用数组
{PageCount[q]=0; }
}
void OutPut()//输出
{ int i,j;
cout<<"页面访问序列:"<<endl;
for(j=0;j<MaxNum;j++)
{cout<<PageOrder[j]<<" ";}
cout<<endl;
cout<<"页面访问过程(只显示前10个):"<<endl;
for(i=0;i<10;i++)
{ for(j=0;j<M;j++)
{ if(Simulate[i][j]==-1)
cout<<" ";
else
cout<<Simulate[i][j]<<" ";
}
cout<<endl;
}
cout<<"缺页数= "<<LackNum<<endl;
cout<<"命中率= "<<PageRate<<endl;
cout<<"--------------------------------------------------------------"<<endl;
}
void FIFO()//FIFO算法
{ int j,x=0,y=0;
LackNum=0,
Init();
for(j=0;j<M;j++)//将前五个页面请求直接放入内存中
{ for(int k=0;k<=j;k++)
{ if(j==k)
Simulate[j][k]=PageOrder[j];
else
Simulate[j][k]=Simulate[j-1][k];
}
//LackNum++;
}
for(x=M;x<MaxNum;x++)
{ for(int t=0;t<M;t++)//先将前一次页面访问过程赋值给新的页面访问过程
{ Simulate[x][t]=Simulate[x-1][t]; }
if(!IsExit(x))//根据新访问页面是否存在内存中来更新页面访问过程
{ LackNum++;
Simulate[x][y%M]=PageOrder[x];
y++;
}
}
PageRate=1-((float)LackNum/(float)MaxNum );//算出命中率
OutPut();
}
//最近最不常用调度算法(LRU)
void YourChoice(int choice)
{ switch(choice)
{ case 1:
cout<<"----------------------------------------------------------"<<endl;
cout<<"FIFO算法结果如下:"<<endl;
FIFO();
break;
case 2:
cout<<"----------------------------------------------------------"<<endl;
cout<<"LRU算法结果如下:"<<endl;
LRU();
break;
case 3:
break;
default:
cout<<"重新选择算法:1--FIFO 2--LRU 3--退出"<<endl;
cin>>choice;
YourChoice(choice);
}
}
void main()
{ int choice,i=1;
while(i)
{ cout<<"请选择算法:1--FIFO 2--LRU 3--退出"<<endl;
cin>>choice;
if(choice==3)
{i=0;
}
else
{ YourChoice(choice); }
}
}。