操作系统实验报告--实验三Word文档下载推荐.doc

上传人:wj 文档编号:13032853 上传时间:2022-10-03 格式:DOC 页数:14 大小:127.50KB
下载 相关 举报
操作系统实验报告--实验三Word文档下载推荐.doc_第1页
第1页 / 共14页
操作系统实验报告--实验三Word文档下载推荐.doc_第2页
第2页 / 共14页
操作系统实验报告--实验三Word文档下载推荐.doc_第3页
第3页 / 共14页
操作系统实验报告--实验三Word文档下载推荐.doc_第4页
第4页 / 共14页
操作系统实验报告--实验三Word文档下载推荐.doc_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

操作系统实验报告--实验三Word文档下载推荐.doc

《操作系统实验报告--实验三Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《操作系统实验报告--实验三Word文档下载推荐.doc(14页珍藏版)》请在冰豆网上搜索。

操作系统实验报告--实验三Word文档下载推荐.doc

开始

初始化内存空间

建立页表

分配页表到空的内存空间

进程请求分页

检查页面是否在内存?

调用淘汰最近最少使用LRU

直接转换逻辑地址到物理地址

提示:

可先用动态申请的方式申请一大块空间,然后假设该空间为内存区域,对该空间进行页框的划分、分配等。

程序功能结构图:

流程图:

开始

生成地址流

输入算法号S

1≤S≤4

形成地址页号

用户内存空间msize=2

Msize≤32

OPT()

FIFO()

LRU()

LFU()

Msize加1

S=?

是否用其他算法继续

结束

N

Y

1

2

3

4

提示出错,重新输入

数据结构定义:

我提供定义了两个类。

第一个类就是页面类,在这类里面包括一些重要的数据成员。

有页号(page_no),页框号(frame_no),页面是否在内存的标志(flag(1表示在内存,0表示不在内存)),访问次数(times)。

另一个类是进程控制块类PCB。

类的数据成员有id(进程编号),name(进程名),size(进程大小),*p(页类指针)。

在本类中,有一些成员函数:

构造函数(用来初始化本类的所有数据),displayPCB(输出函数),convert(地址映射函数),allocation(分配函数),restore(回收函数)。

另外还有一些类外的函数:

initMemorySpace(初始化内存空间的函数),displayMemorySpace(输出内存空间的状态1(表示占用)0(表示空))。

四、所用仪器、材料(设备名称、型号、规格等)。

计算机一台

五、实验方法、步骤

程序代码:

#include<

iostream>

string>

ctime>

usingnamespacestd;

constintframe_size=1024;

//页框长度,固定为1k

constintpage_size=1024;

//页面长度,固定为1k

constintmemory_size=102400;

//内存容量,固定为100k

constintframe_number=memory_size/frame_size;

//100k/1k=100frames

int*memory;

//指针变量,用来存内存的状态1还是0。

voidinitMemorySpace()//初始化内存空间

{

inti,ran,times;

time_tt;

//定义time_t对象t

t=time(0);

srand(t);

//随机改变每秒

times=0;

//变量times初始化为0,变量的功能是检查内存空间是否有一半空了没。

memory=newint[frame_number];

//申请内存空间,有frame_number这么大的空间

for(i=0;

i<

frame_number;

i++)//首选循环页框数次

memory[i]=1;

//初始化全部为1

do

{

ran=rand()%frame_number;

//随机空间位置

if(memory[ran]==0)continue;

//如果当前的位置已经是空就要再循环

else//否则

{

memory[ran]=0;

//内存空间在ran的位置为0(空)

times++;

//times变量增加一个

}

}while(times<

=(frame_number/2));

//空的空间还没到内存空间的一半,再循环

}

voiddisplayMemorySpace()//输出内存空间状态,1还是0

inti;

cout<

<

"

内存空间(0表示空,1表示占用)"

endl;

i++)//循环页框数次

cout<

memory[i]<

"

;

//输出1或者0

if((i+1)%10==0)cout<

//到第10个列回车一次

}

classpage//定义页表类page

public:

intlogic_no;

//定义页号变量

intframe_no;

//定义页框号变量

intflag;

//定义内存标志变量,1表示在内存,0表示不在

inttimes;

//定义访问次数变量

};

classPCB//定义进程控制块类PCB

private:

staticintid;

//定义静态进程编号变量

stringname;

//定义进程名为字符串类

intsize;

//定义进程大小

intpage_number;

//定义页面总数变量

intgiven_frame;

//定义系统给的页框数变量

page*p;

//类page的指针变量

PCB();

//本类的构造函数

voiddisplayPCB();

//输出进程和页表的重要信息

voidconvert();

//地址映射函数,也有淘汰方法(最近最少使用方法LRU)

intallocation(int);

//分配函数。

函数里是按到页框号分配的

voidrestore();

//回收函数。

用来回收内存空间

intPCB:

:

id=0;

//初始化进程编号

voidPCB:

restore()//实现restore函数在类外

given_frame;

i++)//循环given_frame次

memory[p[i].frame_no]=0;

//请求到的页框号的内存空间改到被占用

allocation(intframe_no)//实现allocation函数体在类外部

if(memory[frame_no]==0)//如果内存空间是空的话

{

memory[frame_no]=1;

//改该空间位置到1

return1;

//返回1

}

return0;

//如果对应的页框号在内存没有空间的话,返回0

PCB:

PCB()//实现构造函数体

inti,j,unused_page,*random_page,*page_no_array;

id++;

//自动增加进程编号一个

请输入进程名:

cin>

>

name;

//输入进程名

size=3072+rand()%48128;

//初始化进程大小,随机从3页数到50页

page_number=(size/1024);

//计算出页面数,进程大小除以一个页面的长度

given_frame=(page_number*2)/3;

//固定页框数只是总页面数的三分之二

unused_page=page_number-given_frame;

//空页面

p=newpage[page_number];

//动态初始化类page的指针对象p

random_page=newint[given_frame];

//动态初始化random_page指针变量

page_no_array=newint[page_number];

//动态初始化page_no_array指针变量

i++)//循环given_frame次数

while

(1)

intrecord=0;

random_page[i]=rand()%page_number;

//随机从0到page_number-1

for(j=0;

j<

i;

j++)

{

if(random_page[i]==random_page[j])record++;

//如果当前随机的值等于以前值

}

if(record==0)break;

//如果当前随机的值不等于以前值

page_number;

i++)//循环page_number次

intrecord=0;

for(j=0;

if(random_page[j]==i)record++;

if(record==0)page_no_array[i]=0;

//如果第i个没有在random_page中,所以赋值为0

elsepage_no_array[i]=1;

//否则第i个就赋值为1

if(page_no_array[i]==1)//如果第i的page_no_array等于1,表示要放也页面

p[i].logic_no=i;

//赋i的值给页号

do

while

(1)

intrecord=0;

p[i].frame_no=rand()%frame_number;

//随机页框号,从0到frame_number-1

for(intj=0;

{

if(p[i].frame_no==p[j].frame_no)record++;

}

if(record==0)break;

//如果当前随机的值没有跟以前的值一样的话,结束loopwhile

(1)

}while((allocation(p[i].frame_no))==0);

//如果要放到内存的位置不为空的话,再循环

p[i].flag=1;

//页面在内存

p[i].times=1;

//

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

当前位置:首页 > 职业教育 > 其它

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

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