自操作系统课程设计请求页式存储管理Word文件下载.docx

上传人:b****3 文档编号:14459233 上传时间:2022-10-23 格式:DOCX 页数:15 大小:106.61KB
下载 相关 举报
自操作系统课程设计请求页式存储管理Word文件下载.docx_第1页
第1页 / 共15页
自操作系统课程设计请求页式存储管理Word文件下载.docx_第2页
第2页 / 共15页
自操作系统课程设计请求页式存储管理Word文件下载.docx_第3页
第3页 / 共15页
自操作系统课程设计请求页式存储管理Word文件下载.docx_第4页
第4页 / 共15页
自操作系统课程设计请求页式存储管理Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

自操作系统课程设计请求页式存储管理Word文件下载.docx

《自操作系统课程设计请求页式存储管理Word文件下载.docx》由会员分享,可在线阅读,更多相关《自操作系统课程设计请求页式存储管理Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

自操作系统课程设计请求页式存储管理Word文件下载.docx

设:

①页面大小为1K;

②用户内存容量为 4页到 32页;

③用户虚存容量为32K 。

在用户虚存中,按每K存放10条指令排列虚存地址,即 320条指令在虚存中的存放方式为:

第0条~第9条指令为第0页(对应虚存地址为[0,9]);

第 10条 ~第19条指令为第1 页 (对应虚存地址为[10,19]);

第310 条 ~第 319条指令为第31页(对应虚存地址为[310,319])。

按以上方式,用户指令可组成32页。

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

先进先出的算法 (FIFO);

最近最少使用算法(LRR);

最少访问页面算法(LFR);

最近最不经常使用算法(NUR)。

3.实验环境

每个学生一台微机,需要安装windows98或windows2000操作系统,配备VC、VB、java或C编程语言,每个学生上机时间不少于24个小时。

(1)、分页请求系统

ﻩ为了能实现请求调页和置换功能,系统必须提供必要的硬件支持,其中,最重要的是:

(1)请求分页的页表机制。

它是在分页的页表机制上增加若干个项而形成的,作为请求分页的数据结构;

(2)缺页中断机构。

每当用户程序要访问的页面尚未调入内存时,便产生一缺页中断,以请求OS将所缺的页面调入内存;

(3)地址变换机构。

它同样是在分页的地址变换机构的基础上发展形成的。

为了实现请求调页还须得到OS的支持,在实现请求调页功能时,石油OS将所需的页从外存调入内存;

在实现置换功能时,也是由OS将内存的某些页调至外存。

4.实验提示

提示:

A.命中率=1-页面失效次数/页地址流长度

B.本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

 C.关于随机数产生方法,采用TC系统提供函数RAND()和RANDOMIZE()来产生。

5.自己对算法的理解

㈠ FIFO页面置换算法

⑴原理简述

①在分配内存页面数(AP)小于进程页面数(PP)时,当然是最先运行的AP个页面放入内存。

②这时有需要处理新的页面,则将原来内存中的AP个页面最先进入的调出(是以称为FIFO),然后将新页面放入。

③以后如果再有新页面需要调入,则都按⑵的规则进行。

算法特点:

所使用的内存页面构成一个队列。

㈡LRU页面置换算法

⑴原理算述

①当分配内存页面数(AP)小于进程页面数(PP)时,当然是把最先执行的AP个页面放入内存。

②当需要调页面进入内存,而当前分配的内存页面全部不空闲时,选择将其中最长时间没有用到的那个页面调出,以空出内存来放置新调入的页面(称为LRU)。

算法特点:

每个页面都有属性来表示有多长时间未被CPU使用的信息。

㈢LFU即最不经常使用页置换算法

1原理简述

要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。

但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。

LRU算法的硬件支持

把LRU算法作为页面置换算法是比较好的,它对于各种类型的程序都能适用,但实现起来有相当大的难度,因为它要求系统具有较多的支持硬件。

所要解决的问题有:

ﻩ1.一个进程在内存中的各个页面各有多久时间未被进程访问;

ﻩﻩ2.如何快速地知道哪一页最近最久未使用的页面。

为此,须利用以下两类支持硬件:

(1)寄存器

用于记录某进程在内存中各页的使用情况。

实页/R

R7

R6

R5

R4

R3

R2

R1

R0

1

2

O

5

6

1 

7

8

(2)栈

可利用一个特殊的栈来保存当前使用的各个页面的页面号。

每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。

LFU算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用寄存器的一位来记录页的使用情况,因此,访问一次和访问10000次是等效的。

㈣NUR页面置换算法

所谓“最近未使用”,首先是要对“近”作一个界定,比如CLEAR_PERIOD=50,便是指在CPU最近的50次进程页面处理工作中,都没有处理到的页面。

那么可能会有以下几种情况:

①如果这样的页面只有一个,就将其换出,放入需要处理的新页面。

②如果有这样的页面不止一个,就在这些页面中任取一个换出(可以是下标最小的,或者是下标最大的),放入需要处理的页面。

③如果没有一个这样的页面,就随意换出一个页面(可以是下标最小的,或者是下标最大的)。

有一个循环周期,每到达这个周期,所有页面存放是否被CPU处理的信息的属性均被置于初始态(没有被访问)。

6.实验流程图

7.实验运行结果

等等。

8.实验源程序

#include<

iostream>

time.h>

usingnamespacestd;

const intMaxNum=320;

//指令数

const intM=5;

//内存容量

intPageOrder[MaxNum];

//页面请求

int Simulate[MaxNum][M];

//页面访问过程

intPageCount[M],LackNum;

//PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数

floatPageRate;

//命中率

int PageCount1[32];

boolIsExit(inti)//FIFO算法中判断新的页面请求是否在内存中

{

 boolf=false;

for(intj=0;

j<M;

j++)

 {

if(Simulate[i-1][j]==PageOrder[i])//在前一次页面请求过程中寻找是否存在新的页面请求

ﻩ{ 

ﻩf=true;

ﻩ}

ﻩ}

returnf;

}

int IsExitLRU(int i)//LRU算法中判断新的页面请求是否在内存中

ﻩintf=-1;

  for(intj=0;

j<M;

{

ﻩ if(Simulate[i-1][j]==PageOrder[i])

{  

ﻩ f=j;

ﻩ}

}

ﻩreturnf;

intCompare()//LRU算法找出内存中需要置换出来的页面

ﻩintp,q;

ﻩp=PageCount[0];

q=0;

 for(inti=1;

i<

M;

i++)

ﻩ{

ﻩif(p<

PageCount[i])

ﻩ{

p=PageCount[i];

ﻩﻩﻩq=i;

ﻩﻩ}

ﻩ}

returnq;

voidInit() //初始化页框

for(intk=0;

k<MaxNum;

k++)

ﻩint n=rand()%320;

//随机数产生320次指令

PageOrder[k]=n/10;

//根据指令产生320次页面请求

ﻩ}

 for(inti=0;

MaxNum;

i++)//初始化页面访问过程

 for(intj=0;

j<

j++)

ﻩ Simulate[i][j]=-1;

ﻩ }

ﻩ 

 }

 for(intq=0;

q<

M;

q++)//初始化最久未使用数组

  PageCount[q]=0;

voidOutPut()//输出

ﻩinti,j;

ﻩcout<

<

"页面访问序列:

"

endl;

ﻩfor(j=0;

MaxNum;

ﻩcout<

<PageOrder[j]<<

"

;

cout<

ﻩcout<

"页面访问过程(只显示前10个):

endl;

ﻩfor(i=0;

i<10;

i++)

ﻩ{

ﻩfor(j=0;

j<

{

ﻩﻩif(Simulate[i][j]==-1)

ﻩﻩﻩcout<

" "

else

ﻩﻩﻩcout<

Simulate[i][j]<

 "

ﻩcout<

endl;

cout<

<"缺页数="

<LackNum<<

endl;

命中率="<

<PageRate<

<endl;

cout<

<"

--------------------------------------------------------------"

voidFIFO()//FIFO算法

ﻩintj,x=0,y=0;

ﻩLackNum=0,

Init();

for(j=0;

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(intt=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();

void LRU()//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1