您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页存储管理流程图及其代码

存储管理流程图及其代码

来源:华佗小知识
开 始 生成地址流 形成地址页号 输入算法号S N 是否用其他算法继续 结 束 N Msize≤32 Y 1≤S≤4 Y 用户内存空间msize=2 提示出错,重新输入 FIFO 1 S=? 2 OPT Msize加1

实验程序

产生指令流文件produce_addstream.h #ifndef PRODUCE_ADDSTREAM_H #define PRODUCE_ADDSTREAM_H #include #include

#include #include #include using namespace std;

#define random(x) (rand()%x) #define MAX_LENGTH 320 struct produce { int num; //指令序号 int zhiling; //指令地址 int virtualpage; //指令虚页号 produce *next; };

struct produce*creatlist();

void insert(struct produce *first,struct produce *s); //插入一个节点(尾插法) void print(struct produce *first); //打印函数 int max(vector >,int ); struct produce*creatlist() { srand((int)time(0)); struct produce*first=new produce; first->next=NULL; int m=0,m1=0; /* int yanzheng[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1}; for (int i=0;i<(MAX_LENGTH/4);i++) { struct produce *s0; s0=new produce; s0->num=i*4+0; s0->zhiling=yanzheng[i*4+0]; s0->virtualpage=s0->zhiling; insert(first,s0); struct produce *s1; s1=new produce; s1->num=i*4+1; s1->zhiling=yanzheng[i*4+1]; s1->virtualpage=s1->zhiling; insert(first,s1); struct produce *s2; s2=new produce; s2->num=i*4+2; s2->zhiling=yanzheng[i*4+2]; s2->virtualpage=s2->zhiling;

insert(first,s2); struct produce *s3; s3=new produce; s3->num=i*4+3; s3->zhiling=yanzheng[i*4+3]; s3->virtualpage=s3->zhiling; insert(first,s3); } //*/ //* for (int i=0;i<(MAX_LENGTH/4);i++) { struct produce *s0; s0=new produce; m=random(MAX_LENGTH); s0->num=i*4+0; s0->zhiling=m+1; s0->virtualpage=s0->zhiling/10; insert(first,s0); m1=random(m+1); struct produce *s1; s1=new produce; s1->num=i*4+1; s1->zhiling=m1; s1->virtualpage=s1->zhiling/10; insert(first,s1); struct produce *s2; s2=new produce; s2->num=i*4+2; s2->zhiling=m1+1; s2->virtualpage=s2->zhiling/10; insert(first,s2); struct produce *s3; s3=new produce; s3->num=i*4+3; s3->zhiling=random(MAX_LENGTH-m1-2)+m1+2; s3->virtualpage=s3->zhiling/10; insert(first,s3); }//*/ return first; }

void insert(struct produce *first,struct produce *s) { struct produce *r=first;

struct produce *p; while(r){p=r;r=r->next;} p->next=s;p=s; p->next=NULL; }

void print(struct produce *first) //打印函数 { struct produce *p; p =first->next; cout<<\"随机产生的指令的信息如下\"<num<<'\'<zhiling<virtualpage<next; } }

int max(vector > page,int Maxpage) { int a=0,position=0; for (int i=0;ia) { a=page[i][1]; position=i; } } return position; }

#endif

先来先出调度算法:fifo.h #ifndef FIFO_H #define FIFO_H

void fifo(struct produce *first,int Maxpage) {

vector page(Maxpage);//

for (int i=0;iint rear=0;//定义一个变量,指向要被替换的位置 int pages;//定义变量保存当前指令的所在的地址 int count1=0;//

int count2=0;//缺页次数 int find=1;

struct produce *p=first->next;

while (p) { pages=p->virtualpage; for(int i=0;inext; }

cout<<\"FIFO调度算法缺页次数 缺页率 命中率\"<cout<#endif FIFO_H

LRU调度算法lru.h #ifndef LRU_H #define LRU_H #include using namespace std;

//int max(vector >,int );

void lru(struct produce*first,int Maxpage) {

struct produce*p=first->next;

vector > page2(Maxpage, vector(2)); int count1=0; //定义内存已经被占用的页数 int count2=0; //定义记录缺页次数

int equal=0; //定义判断如果当前页数与比较的页数,如果相等则为1,否则为0

int place=0; //定义要替换的位置 for (int i=0;iwhile (p) { if (count1virtualpage; count2++; break; } else if (page2[i][0]==p->virtualpage) { page2[i][1] =1; } } count1++; } else { for (int i=0;ivirtualpage) {equal=1;place=i;break;} } if (equal==1) { page2[place][1] =1; equal=0; } else

{ place = max(page2,Maxpage); page2[place][1]=1; page2[place][0]=p->virtualpage; count2++; } } p=p->next; }

cout<<\"LRU调度算法缺页次数 缺页率 命中率\"<cout<#endif LRU_H

OPT调度算法opt.h #ifndef OPT_H #define OPT_H #include using namespace std;

int search(struct produce*place,int position); void opt(struct produce*first,int Maxpage) {

struct produce*p =first->next;

vector > page3(Maxpage, vector(2)); int count1=0; //定义内存已被使用的页数 int count2=0; //定义缺页次数 int current=0; //定义当前工作位置

int equal=0; //定义判断如果当前页数与比较的页数,如果相等则为1,否则为0

int place=0; //定义要替换的位置 for (int i=0;iwhile (p) { //cout<<1111<page3[i][0]=p->virtualpage; page3[i][1]=search(p,current); count2++; break; } else if (page3[i][0]==p->virtualpage) { page3[i][1]=search(p,current); } } count1++; } else { for (int i=0;ivirtualpage) {equal=1;place=i;break;} } if (equal==1) { page3[place][1] =search(p,current); equal=0; } else { place = max(page3,Maxpage); page3[place][1]=search(p,current); page3[place][0]=p->virtualpage; count2 +=1; } } p=p->next; current +=1; }

cout<<\"OPT调度算法缺页次数 缺页率 命中率\"<cout<int search(struct produce*place,int position) {

struct produce*p=place->next; int current=place->virtualpage; int position1=position+1;

while(p) { if (current==p->virtualpage) { return position1; } position1++; p=p->next; }

return position1; }

#endif

主函数 控制台ccglmain.cpp #include

#include \"produce_addstream.h\" #include \"fifo.h\" #include \"lru.h\" #include \"opt.h\" void main() {

int S; //定义变量记录用户选择

char again; //定义变量用户选择继续还是退出 cout<<\"开始产生内存指令\"<struct produce *first=creatlist();//产生随机指令 cout<<\"打印产生的指令信息\"<>S; while(S>4||S<1) { cout<<\"输入错误重新输入\"<>S; } if (S!=4) { while(Maxpage<=32) { switch(S)

{ case 1:fifo(first,Maxpage);break; case 2:lru(first,Maxpage);break; case 3:opt(first,Maxpage);break; default:break; } Maxpage++; } cout<<\"是否继续调用其他算法?是请按y/Y,否请按其它键\"<>again; if(again=='y'||again=='Y') { continue; } else break; }

else system(\"cls\");

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务