操作系统第三次试验 存储管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.实验数据与程序清单
//存储管理----页面置换算法
#include
#define M 40
#define N 10 //可用内存页面struct Pro //页面结构体{
int num;
int time;
};
int Input(int m, Pro p[])
{
cout<<"请输入实际页数:";
do
{
cin>>m;
if(m>M) cout<<"数目太多,请重试"< else break; }while(1); cout< for(int i=0;i { cin>>p[i].num; p[i].time=0; } return m; } void Print(Pro *page, int n) //打印当前的页面{ for(int i=0; i cout< cout< } int Search(int e, Pro *page, int n) //在内存页面中查找{ for(int i=0; i if(e==page[i].num) return i; return -1; } int Max(Pro *page, int n) { int e=page[0].time, i=0; while(i if(e < page[i].time) e=page[i].time; i++; } for(i=0; i if(e==page[i].time) return i; return -1; } int Compfu(Pro *page, int i, int t, Pro p[]) { int count=0; for(int j=i; j { if(page[t].num==p[j].num ) break; else count++; } return count; } int main() { int nu; cout<<"------------胡爽------------\n可用内存页面数:"< cin>>nu; if(nu>N) { cout<<"页面过大"< return 0; } Pro p[M]; Pro page[N]; char c; int m=0; //实际页数 int t=0; //页面循环 float n=0; //缺页次数 m = Input(m, p); do{ for(int i=0; i { page[i].num=0; page[i].time=2-i; } i=0; cout<<"f:FIFO页面置换"< cout<<"l:LRU页面置换"< cout<<"o:OPT页面置换"< cout<<"按其它键结束"< cin>>c; if(c=='f') //FIFO页面置换 { n=0; cout<<"页面置换情况: "< while(i { if(Search(p[i].num, page, nu)>=0) i++;//找到相同的页面 else { if(t==nu) t=0; n++; //缺页次数加1 page[t].num=p[i].num; Print(page, nu); t++; i++; } } cout<<"缺页次数:"< i=0; if(c=='l') //LRU页面置换 { n=0; cout<<"页面置换情况:"< while(i { if(Search(p[i].num, page, nu)>=0) { int j=Search(p[i].num, page, nu); for(int k=j; k>0; k--) page[k].num=page[k-1].num; page[k].num=page[j].num; i++; } else { if(t==nu) t=0; n++; for(int k=nu-1; k>0; k--) page[k].num=page[k-1].num; page[k].num=p[i].num; Print(page, nu); t++; i++; } } cout<<"缺页次数:"< } if(c=='o') //OPT页面置换 { n=0; while(i { if(Search(p[i].num, page, nu)>=0) i++; else { int temp=0, cn; for(t=0; t { if(temp < Compfu(page, i, t, p)) { temp=Compfu(page,i,t,p); cn=t; } } page[cn]=p[i]; n++; Print(page, nu); i++; } } cout<<"缺页次数:"< } }while(c=='f'||c=='l'||c=='o'); return 0; }