页面替换算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
页面替换算法
一、实验目的
为了使大的进程(其地址空间超过主存可用空间)或多个进程的地址空间之和超过实际主存空间时,仍能运行,引入了虚拟存储器的概念。使进程的一部分地址空间在主存,另一部分在辅存,由操作系统实现多级存储器的自动管理,实现主存空间的自动覆盖。模拟请求分页虚拟存储器管理技术中的硬件地址变换、缺页中断以及页式淘汰算法,处理缺页中断。
二、实验要求
书写实验报告,应该包括以下几项内容:
(1)实验题目;
(2)程序中使用的数据结构及主要符号说明;
(3)程序流程图和带有注释的源程序;
(4)执行程序名,并打印程序运行时的初值和运行结果;
(5)通过实验后的收获与体会及对实验的改进意见和见解。
三、主要符号说明
int pagecount;//记录需要访问的页面次数
int blockcount;//记录内存块大小
四、实验结果
1、起始界面
2、先进先出页面替换算法
2、最近最少使用页面替换算法
3、最佳页面替换算法
五、实验体会
通过请求页式管理中页面置换算法的模拟设计,了解了虚拟存储技术的特点,掌握了请求页式管理的页面置换算法。
附录:实验源程序
#include
using namespace std;
class Page
{ int pagecount;//记录需要访问的页面次数
int blockcount;//记录内存块大小
int head;
int t;
int *page;
int **block;
public:
Page(int m,int n);
~Page();
void setpage();
int seekpage(int i);
int isfull();
void FIFO(int i);
void LRU(int i);
void OPT(int i);
void queyediaodu(int r);
};
Page::Page(int m,int n):pagecount(n),blockcount(m) {head=t=0;
page=new int[pagecount];
block=new int*[blockcount];
for(int i=0;i Page::~Page() {delete page; for(int i=0;i } void Page::setpage() {cout<<"输入页面走向:"; for(int i=0;i for(int i=0;i block[i][0]=-1,block[i][1]=0; } int Page::seekpage(int i) {for(int l=0;l if(block[l][0]==i) return l; return -1; } int Page::isfull() {for(int i=0;i if(block[i][0]==-1) return i; return -1; } void Page::FIFO(int i)//head的下一个页面被替换 {head=(head+1)%blockcount; t=head; cout<<"\n页面"< if(block[t][1]==1) cout<<"将页面"< void Page::LRU(int i)//head前一个被替换 {if(head==0) t=blockcount-1; else t=head-1; cout<<"\n页面"< if(block[t][1]==1) cout<<"将页面"< } void Page::OPT(int i) {int *q,d=-1; q=new int[blockcount]; for(int j=0;j for(int k=0;k for(int l=pagecount-1;l>i;l--) if(block[k][0]==page[l]) q[k]=l; for(int h=0;h if(q[h]>d) d=q[h],t=h; cout<<"\n页面"< if(block[t][1]==1) cout<<"将页面"< void Page::queyediaodu(int r)