操作系统之缺页中断

用最近最少用(LRU)页面调度算法处理缺页中断

1.实验目的
加深对于存储管理的了解,掌握虚拟存储器的实验原理;观察和了解重要的页面置换算法的置换过程.
2.实验原理及相关提示
在分页式虚拟存储系统中,当硬件发出”缺页中断”后,引出操作系统来处理这个中断事件。如果主存中已经没有空闲块,则可用LRU页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都要修改页表中对应页的标志。
3.实验内容
利用最近最少用置换算法(LRU),将页面依次调入主存,并算出缺页中断次数及缺页中断率。
4.实验步骤
1.分析设计思路:考虑用队列来存储调入主存中的页面号,设置全局变量count来记录缺页中断次数,队列的总长度即为分配的主存的块数,若队列未满则将页面调入,若队列满了,则判断要调入的页面是否已在主存中,若在则记录其下标,将下标后的元素依次往前移,若不在,则将队首元素出队,依次将后面的元素往前移,最后将页面插入在队尾。
2.概要分析:定义队列的结构体,定义数据类型,写出调入主存后的页面展示函数void display(),写出判断队列是否为空即是判断主存中是否有页面存在的判空函数int empty()
3.流程图:
操作系统之缺页中断_第1张图片
5.程序中使用的数据结构及符号说明。
typedef int datatype; //定义数据类型
typedef struct{ //定义队列的结构体 存储调入主存中的页面号
int count=0;//设置全局变量count来记录缺页中断次数
void init(sequence_queue *sq){ //初始化队列
void insert(sequence_queue *sq,datatype x,int block) //调入主存的页面
int flag=0; //flag用于判定要调入的页面是否已经在主存中
int empty(sequence_queue sq) //判断队列中是否为空 主存中是否有调入的页面
void display(sequence_queue sq) //展示调入页面
int main() //主函数实现
6.源代码
操作系统之缺页中断_第2张图片
操作系统之缺页中断_第3张图片
操作系统之缺页中断_第4张图片
操作系统之缺页中断_第5张图片
7.运行截图
操作系统之缺页中断_第6张图片

操作系统之缺页中断_第7张图片

用先进先出(FIFO)页面调度算法处理缺页中断

1.实验目的
理解连续存储管理方式的原理和分类,理解离散存储管理方式的原理和分类,理解虚拟存储器的原理和分类,掌握动态分区分配的常用算法,掌握页式虚拟管理中常用页面置换算法。了解内存分页策略,掌握一般常用的调度算法。学会各种存储分配算法的实现,了解页面大小和内存实际容量对命中率的影响。
2.实验原理及其相关提示
在分页式虚拟存储系统中,当硬件发出”缺页中断”后,引出操作系统来处理这个中断事件。如果主存中已经没有空闲块,则可用FIFO页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都要修改页表中对应页的标志。

3.实验内容
随机一访问串和驻留集的大小,通过模拟程序显示淘汰的页号并统计命中率。

4.实验步骤
1.分析设计思路:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按照先后次序连接成一个队列,并设置一个替换指针,使它总是指向最老的页面。
2.概要分析:定义存储的结构体,定义相关的数据类型,分析需要初始化队列函数,入队列函数,删除队头元素string DeQueue(LinkQueue & Q),计算队列长度函数,检测页面是否驻留在页面中的函数ool FindQueue(LinkQueue &Q,string e),FIFO函数,主函数实现。
3.流程图:

操作系统之缺页中断_第8张图片

5.程序中使用的数据结构及符号说明
typedef struct QNode // 定义结点,
string data; //数据域,
struct QNode *next; //指针域,
typedef struct //定义队列的头,
QueueNode front; //队列头指针,
QueueNode rear; //队列尾指针,
void InitQueue(LinkQueue &Q) //初始化队列,
void EnQueue(LinkQueue & Q,string e){ //将e插入队列队尾
string DeQueue(LinkQueue & Q) //删除队头元素
int QueueLength(LinkQueue &Q) //计算队列长度函数,返回队列长度
bool FindQueue(LinkQueue &Q,string e) //遍历队列,看e是否在驻留集队列中,在则返回true
void FIFO(string pageFrame[], int pageCount, int waitSpace) //FIFO

6.源代码

操作系统之缺页中断_第9张图片
操作系统之缺页中断_第10张图片

操作系统之缺页中断_第11张图片

操作系统之缺页中断_第12张图片
操作系统之缺页中断_第13张图片
操作系统之缺页中断_第14张图片
7.运行截图:

操作系统之缺页中断_第15张图片

你可能感兴趣的:(操作系统之缺页中断)