内存管理Word文档下载推荐.docx

上传人:b****6 文档编号:20194040 上传时间:2023-01-17 格式:DOCX 页数:13 大小:17.34KB
下载 相关 举报
内存管理Word文档下载推荐.docx_第1页
第1页 / 共13页
内存管理Word文档下载推荐.docx_第2页
第2页 / 共13页
内存管理Word文档下载推荐.docx_第3页
第3页 / 共13页
内存管理Word文档下载推荐.docx_第4页
第4页 / 共13页
内存管理Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

内存管理Word文档下载推荐.docx

《内存管理Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《内存管理Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

内存管理Word文档下载推荐.docx

intmemory;

//页面对应的内存物理块号

intflag;

//状态标志,判断页面是否在内存,0页在内存,1页在辅存

};

(2)页框结构体:

structMem

intnum;

boolfree;

inttime;

(3)算法中涉及到的主要变量:

Pagepage_table[20];

//页表

Memmem_table[20];

//叶匡

intfangwenadd[20];

//访问地址流

intfangwenye[20];

//访问页流

intpage_size=1024;

//页面大小,单位byte

intmemory_size=0;

//物理块的大小

intprocess_size;

//进程大小

intpage_num;

//页面数

intM;

//访问地址个数

intmemory_num;

//物理块的个数

(4)主要函数说明:

intnum(intx,inty)//用来取得页面数,根据进程大小,范围页数

intcount_page_num(intaddress)//统计页数

voidinit(void)//初始化

boolcheck_in_page_table(intyehao)//检查访问的页号是否在内存中

boolcheck_in_mem(intyehao)//检查是否在内存中

intcheck_mem_free(void)//检查页框是否有空闲的,空闲的话返回空闲物理块号,没有空闲的返回-1

voidtimeup(void)//时间加1函数

intgetmax(void)//求出那个物理块中的页面呆的时间最长,返回物理块号

intgetpagenum(intmem_num)//根据物理块号获取页表号

voidprintpage(void)//打印页表函数

voidstart(void)//FIFO算法实现

2.2主要代码:

voidstart(void)

for(inti=0;

i<

M;

i++)

{

printf("

第%d个访问地址:

\n"

i+1);

if(check_in_page_table(fangwenye[i]))

{

if(check_in_mem(fangwenye[i]))

{

printf("

访问的地址在内存中!

);

printpage();

}

elseif(check_mem_free()>

=0)

inttempnum=check_mem_free();

mem_table[tempnum].free=false;

mem_table[tempnum].time=1;

page_table[fangwenye[i]].memory=tempnum;

page_table[fangwenye[i]].flag=0;

访问地址不在内存中,存在空闲物理块,调入页:

else

intmempage=getmax();

inttemppage=getpagenum(mempage);

page_table[temppage].flag=1;

page_table[temppage].memory=-1;

page_table[fangwenye[i]].memory=mempage;

mem_table[mempage].time=1;

访问的地址不在内存中,不存在空闲物理块,淘汰fi,调入页:

}

else

printf("

访问的地址超出范围!

\n\n"

timeup();

getchar();

}

}

intcheck_mem_free(void)

inttemp=-1;

i<

memory_num;

i++)

if(mem_table[i].free)

temp=i;

returntemp;

voidtimeup(void)

if(mem_table[i].time>

0)

mem_table[i].time++;

intgetmax(void)/*求出那个物理块中的页面呆的时间最长,返回物理块号*/

intmax=-1;

inttag=0;

memory_num;

max)

{

max=mem_table[i].time;

tag=i;

returntag;

intgetpagenum(intmem_num)

page_num;

if(page_table[i].memory==mem_num)

3.实验总结

在本次操作系统试验中,我采用C++实现请求分页存储管理方式的内存管理模拟,采用FIFO淘汰页面算法。

首先,应了解虚拟存储器和分也是存储管理的有关内容,并掌握FIFO算法的思想及流程。

然后,在这个基础上,结合编程方法,编写正确的程序实现。

在检查过程中,发现存在一些问题,比如,数据的确定方式,是用户确定,还是系统默认,等等,在老师的指导后,重新修改算法和实现,发现程序的可行性和实际应用性更强。

在这次实验中收获很多,谢谢老师的指导和同学的帮忙。

附录

源代码:

#include<

stdio.h>

structPage

intnum(intx,inty)

inttemp=x%y;

if(temp==0)

returnx/y;

else

return(x/y+1);

intcount_page_num(intaddress)

intpage_nums;

page_nums=num(address,page_size);

returnpage_nums;

voidinit(void)//初始化

printf("

输入进程大小(单位byte):

"

scanf("

%d"

&

process_size);

page_num=num(process_size,page_size);

page_table[i].page=i;

page_table[i].memory=-1;

page_table[i].flag=1;

初始化成功!

*************************************************\n"

进程信息:

进程大小:

%dbytes\n"

process_size);

进程页数:

%d页\n"

page_num);

页面大小:

page_size);

*************************************************\n\n"

boolcheck_in_page_table(intyehao)//检查访问的页号是否在内存中

booltemp=false;

if(yehao<

page_num)

temp=true;

boolcheck_in_mem(intyehao)//检查是否在内存中

if(page_table[yehao].flag==0)

temp=false;

voidprintpage(void)

***************页表情况如下:

*************\n"

页号物理块号标记位\n"

for(intx=0;

x<

page_num;

x++)

%3d%14d%11d\n"

page_table[x].page,page_table[x].memory,page_table[x].flag);

voidstart(void)

voidmain(void)

**************操作系统内存管理模拟***************\n"

init();

请输入物理块的个数:

memory_num);

for(inty=0;

y<

y++)

mem_table[y].num=y;

mem_table[y].free=true;

mem_table[y].time=0;

请输入访问地址个数M="

M);

请输入物理块大小:

memory_size);

请输入访问地址:

第%d个:

scanf("

fangwenadd[i]);

for(intj=0;

j<

j++)

fangwenye[j]=count_page_num(fangwenadd[j]);

x<

x++)

%d"

fangwenye[x]);

start();

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

当前位置:首页 > PPT模板 > 可爱清新

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

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