实验5 页面置换算法_实验五页面置换算法

2020-02-26 其他范文 下载本文

实验5 页面置换算法由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验五页面置换算法”。

实验5

页面置换算法

一、实验题目:页面置换算法(请求分页)

二、实验目的:

进一步理解父子进程之间的关系。

1)理解内存页面调度的机理。2)掌握页面置换算法的实现方法。3)通过实验比较不同调度算法的优劣。4)培养综合运用所学知识的能力。

页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。

三、实验内容及要求

这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页面置换算法的基础上,能综合运用这两方面的知识,自行编制程序。

程序涉及一个父进程和两个子进程。父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Ace_Series[]中,作为内存页面访问的序列。两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存页面进行调度。要求:

1)每个子进程应能反映出页面置换的过程,并统计页面置换算法的命中或缺页情况。

设缺页的次数为diseffect。总的页面访问次数为total_instruction。缺页率 = disaffect/total_instruction 命中率 = 1-disaffect/total_instruction 2)将为进程分配的内存页面数mframe 作为程序的参数,通过多次运行程序,说明FIFO算法存在的Belady现象。

四、程序流程图

开始创建子进程1创建子进程2

结束 子进程1逻辑页面读完?N命中?N内存页面满?Y命中次数+1YY最先进入的进程退出内存页面N当前调入页面进入内存页面退出 2逻辑页面读完?N命中?N内存页面满?N当前调入页面进入内存页面Y被访问次数最少的进程退出内存页面Y命中次数+1,命中页面访问数+1Y退出

五、运行结果及其说明

FIFO:

LRU:

六、回答以下问题: ① 父进程、子进程之间的并发执行的过程

父进程与子进程之间的并发执行宏观并行,微观串行。从宏观来说,父进程创建子进程1,子进程1和父进程同时执行,直到父进程创建子进程2遇到wait()函数挂机为止,当子进程1结束父进程和子进程2并发执行到再次遇见wait()函数是挂起等待子进程2结束,到子进程2结束返回父进程父进程继续执行至结束。从微观来说,父进程先执行至创建子进程1,接下来父进程挂起执行子进程1知道子进程1结束回到父进程;父进程继续执行到创建子进程2再次挂起,执行子进程2,直到子进程2结束回到父进程继续执行至结束。

② 通过完成实验,根据你的体会,阐述虚拟存储器的原理。虚拟存储器实际上是用来解决作业大而内存小的问题,他通过页面置换算法来提供远大于内存地址空间的地址范围,针对不同的程序将不同的数据页面读取到虚拟存储器中用来实现。

③ 写出FIFO算法中出现Belady现象的内存页面访问序列。

4个内存页面数:

序列2 2 5 3 3 1 3 1 2 5 5 2 3个内存页面数:

序列2 1 3 2 1 4 3 1 3 1 5 5

7次命中,命中率为0.58 6次命中,命中率为0.5

七、程序源代码、文档注释及文字说明

#include #include #include #include #include #include #include #include #define max_Frame 12 #define Frame 2

main(){ srand(time(0));int pid1, pid2, fd[2], Ace_Series[12], temp;float effect, rate = 0;char str1[100], str2[100];struct M_Frame {

int page_no;

char flag;};struct M_Frame one_frame[4];one_frame[0].page_no = 0;one_frame[1].page_no = 0;one_frame[2].page_no = 0;one_frame[3].page_no = 0;effect = 0;int i = 0;printf(“内存访问页面序列:”);for(;i

Ace_Series[i] = rand()% 5 + 1;

printf(“%d ”, Ace_Series[i]);} while((pid1 = fork())==-1);if(pid1 == 0){

int no = 0;

int pno = 0;

printf(“FIFO页面置换算法:n”);

for(;no

{

printf(“调入的页面号是%d ”, Ace_Series[no]);

int k = 0;

for(;k

{

if(one_frame[k].page_no == Ace_Series[no]){ effect++;printf(“命中n”);break;}

if(one_frame[k].page_no == 0)

{

one_frame[k].page_no = Ace_Series[no];

printf(“未命中n”);

break;

}

if(k == Frame)

{

int j = 1;

for(;j

{

one_frame[j1].page_no;one_frame[t1].page_no = one_frame[j].page_no;

}

one_frame[Frame].page_no = Ace_Series[no];

printf(“未命中n”);

}

}

printf(“内存情况为:%d |%d |%d |%dn”, one_frame[0].page_no, one_frame[1].page_no, one_frame[2].page_no, one_frame[3].page_no);

}

rate = effect / 12;

printf(“命中次数:%fn”, effect);

printf(“命中率:%fn”, rate);

}

wait(0);

exit(0);} }

《实验5 页面置换算法.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验5  页面置换算法
点击下载文档
相关专题 实验五页面置换算法 算法 页面 实验五页面置换算法 算法 页面
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文