您的当前位置:首页正文

操作系统存储管理C++代码

2021-06-21 来源:榕意旅游网


操作系统实验

存储管理

#include

using namespace std;

#define INVALID -1

//定义结构类型

struct pl_type

{ //页表结构

int pn; //页号

int fn; //页帧号

int time; //访问时间

};

struct fl_type

{ //页帧结构

int pn; //页号

int fn; //页帧号

struct fl_type *next;//链接指针

};

//定义结构变量

pl_type pl[512];

fl_type fl[512],*free_head,*busy_head,*busy_tail;

int page[512]; //访问串(存放每条指令的页号)

int TOTAL_PAGES; //访问串长度

int diseffect; //页故障数

//初始化函数:初始化页表和页帧链

//形参total_pf为分配给用户进程的内存页帧数

void initialize(int total_pf)

{

int i;

diseffect=0; //页故障数初始化为0

//建立空页表

for(i=0;i<512;i++)

{

pl[i].pn=i; //页号

pl[i].fn=INVALID; //页帧号为-1,(开始时,页还未装入到页帧)

pl[i].time=-1;

}

//建立空闲页帧链

for(i=0;i{

fl[i-1].next=&fl[i]; //建立fl[i-1]和fl[i]间的链接

fl[i-1].fn=i-1;

}

fl[total_pf-1].next=NULL; //链表末尾为空指针

fl[total_pf-1].fn=total_pf-1; //末尾结点的页帧号

free_head=&fl[0]; //空闲页帧链头指针指向fl[0]

}

void LRU(int total_pf)

{

int i,j,min,minj,present_time;

present_time=0;

initialize(total_pf);

for(i=0;i{

if(pl[page[i]].fn==INVALID)

{ //页故障

diseffect++;

if(free_head==NULL)

{ //无空闲页帧

min=32767;

for(j=0;j{ //找time的最小值

if(min>pl[j].time && pl[j].fn!=INVALID){

min=pl[j].time;

minj=j;

}

}

free_head=&fl[pl[minj].fn]; //腾出一页帧

pl[minj].fn=INVALID;

pl[minj].time=-1;

free_head->next=NULL;

}

pl[page[i]].fn=free_head->fn; //有空闲页帧,改为有效

pl[page[i]].time=present_time; //time置为当前时间

free_head=free_head->next; //空闲页帧链头指针前移

}

else

pl[page[i]].time=present_time; //time置为当前时间

present_time++;

}

cout<<\" LRU: \"<}

//输入访问串

void getRefstring(void)

{

int i;

cout<<\"输入的访问串以'-1'结束!\"<cout<<\"请输入访问串:\";

for(i=0;i<512;i++)

{

cin>>page[i];

if(page[i]==-1)

break;

}

TOTAL_PAGES=i; //访问串大小

cout<<\"访问串大小:\"<for(i=0;icout<}

int main()

{

int f;

getRefstring();

for(f=2;f<=TOTAL_PAGES;f++)

{ //页帧数从3个页帧到TOTAL_PAGES个页帧

cout<<\"若分配给进程\"<LRU(f);

cout<}

system(\"pause\");

return 0;

}

运行界面截图

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