操作系统试验报告面置换算法模拟_第1页
操作系统试验报告面置换算法模拟_第2页
操作系统试验报告面置换算法模拟_第3页
操作系统试验报告面置换算法模拟_第4页
操作系统试验报告面置换算法模拟_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操 作 系 统 实 验 报 告 6 -页面置换算法模拟用心整理的精品 word文档,下载即可编辑!实验报告(2013 / 2014 学年第1学期)课程名称 操作系统原理实验名称实验6:页面置换算法模拟实验时间2013年 12 月 10 日指导单位软件工程系指导教师杨健学生姓名 班级学号学院(系)软件工程系专业- 计算机软件与服务外包精心整理,用心做精品2用心整理的精品 word文档,下载即可编辑!实验名称实验1 : Linux操作、使用、编程与进程创建指导教师杨健实验类型实验:实验学时2实验时间2013.12.10一、实验目的1.通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。2

2、.掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思 想,并至少用二种算法来模拟实现。3.通过对几种置换算法页面的比较,来对比他们的优缺点,并通过比较 更换频率来对比它们的效率。二、实验环境(实验设备)Win dows 2000Visual Studio三、实验内容设计 个虚拟存储区和内存工作区,并使用下述算法来模拟实现页面的置 换:1. 先进先出的算法(FIFO)2. 最近最久未使用算法(LRU3. 最佳置换算法(OPT实验分析在进程运行过程中,若其所访问的页面不存在内存而需要把它们调入 内存,但内存已无空闲时,为了保证该进程能够正常运行,系统必须从内 存中调出一页程序或数据送磁盘的

3、对换区中。但应调出哪个页面,需根据 一定的算法来确定,算法的好坏,直接影响到系统的性能。一个好的页面置换算法,应该有较低的页面更换频率。假设分给一作业的物理块数为3,页面数为20个。页面号为(20个):7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 11 .先进先出(FIFO)置换算法的思路该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久 的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面, 按照先后次序连接成一个队列,并设置一个替换指针,使它总指向最老的 页面。2. 最近久未使用(LRU)置换算法的思路

4、最近久未使用置换算法的替换规则,是根据页面调入内存后的使用情 况来进行决策的。该算法赋予每个页面一个访问字段,用来记录一个页面 自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面 中其时间值最大的进 行淘汰。3. 最佳(OPT置换算法的思路其所选择的被淘汰的页面,奖是以后不使用的,或者是在未来时间内 不再被访问的页面,采用最佳算法,通常可保证获得最低的缺页率。4. FIFO页面置换算法当需要访问一个新的页面时,首先调用 fin dExist(i)函数来查看物理块中是否就有这个页面,若要查看的页面物理块中就有,则调用 display 函数直接显示,不需要替换页面;如果要查看的页面物

5、理块中没有,就需 要寻找空闲物理块放入,若存在有空闲物理块,则将页面放入;若没有空 闲物理块,则调用findReplace函数替换页面。并将物理块中所有页面 timer+。5. LRU页面置换算法当需要访问一个新的页面,首先调用fin dExist(i)函数查看物理块中是否就有这个页面。6. OPT页面置换算法精心整理,用心做精品1用心整理的精品 word文档,下载即可编辑!当需要访问一个新的页面,首先调用fin dExist(i)函数来查看物理块中是否有这个页面。7. 寻找置换页面函数findReplace比较三个物理块中的时间标记timer , 找到时间最久的。代码#include <

6、;stdio.h>#include <stdlib.h>#include <time.h>#define BLOCK_MAX_SIZE 20最?大洙?物?理元?块e大洙?小?en u%FIFO=1 丄 RU,OPT;struct no de_pageint address; / 指?令?地?址int page_num;/ 页?面?号?int next_order; / 下?一?次?访?问。的?次?序6*page;/物?理元?块e定义?typedef struct BlockNodeint page_index; /page数簓组哩?的?下?标括?struct Bl

7、ockNode * next;BlockNode;struct int length; /当獭?前°物?理元?块e长O度0int miss_flag; / 缺o?页?标括?志?, ?若?为al, ?则。缺?页?int miss_count; / 缺 o?页?次?数簓BlockNode*fro nt;BlockNode*rear;Block;精心整理,用心做精品2用心整理的精品 word文档,下载即可编辑!/本?程序。中全?局?变?量?名?均0由?两?个?单蹋?词洙?组哩?成e,?且&开a头 ?字?母?大洙?写'int BlockSize = 5;/ 物?理元?块e 大

8、洙?小?int PageCount = 200; / 页?面?总哩?数簓int PageSize = 1024;/ 页?面?大洙?小?int AddrRange = 8*1024; / 访?问 e 地址范?围§int get_n um( i nt dow n, i nt up)/ 得?到?一 ?个 ?dow nup之?间?的?整?数簓int num;char str111;while (1)fgets(str,111* sizeof (int ),stdin);num=atoi(str); /把?字?符?串?中的?数簓字?转羇换?为a整?数簓if (num>=down&

9、& num<=up)break;printf("输?入?范?围§有瓺误6,请?重?新?输?入?:");/whilereturn n um;void init_block() /构1造一?个?空?的?物?理元?块e队6列Block.rear=Block.front=(BlockNode*)malloc(sizeof (BlockNode);if (!Block.front)printf("内 u 存?分?配?失骸?败悒?n");exit(0);Block.le ngth=0;Block.miss count=0;Block.rear

10、-> next=NULL;void enqueue( int page_index) / 入?队6BlockNode*node=(BlockNode*)malloc( sizeof (BlockNode);if (!node)printf("内 u 存?分?配?失骸?败悒?n");exit(0);no de->page_ in dex=page_ in dex;n ode-> next=NULL;Block .len gth+;Block.rear- >n ext=no de;Block.rear=no de;void dequeue() / 岀?队

11、 6BlockNode* node;no de=Block.fr ont->n ext;Block.fr ont->n ext=no de->n ext;if (node= Block.rear)Block.rear=Block.fro nt;free( no de);Block.le ngth-;void clear_block() / 清?空?物?理元?块ewhile (Block.rear=Block.front->next)Block.fr ont->n ext=Block.rear- >n ext;free(Block.rear);Block.le

12、 ngth_;Block.rear=Block.fro nt;Block.le ngth=0;Block.miss_cou nt=O;void destroy_block() / 销。毁d物理元?块0while (Block.rear=Block.front)Block.fr on t=Block.fro nt->n ext;free(Block.rear);free(page);void init_page() /初?始?化-页?面?系卩列int i,j;srand(time(NULL);/用?当獭?前°系卩统?时骸?间?来厉?初?始?化-随?机。种?子哩?page=(str

13、uct node_page*) malloc(PageCount* sizeof (struct node_page);for (i=O;i<PageCount;i+)pagei.address=ra nd()%AddrRa nge;pagei.page_ num=pagei.address/PageSize;for (i=O;i<PageCount;i+)for (j=i+1;j<PageCount;j+)if (pagei.page_num= pagej.page_num)pagei. next_order=j;break;/if/forif (j= PageCount)

14、 / 说卩明* pagei以?后o都?不?会0再d访问epagei. next_order= PageCou nt;/forvoid print_page()/ 打洙?印?页?面?系卩列int i;prin tf(''n'printf("页?面?系卩列为a:阰n");for (i=O;i<PageCount;i+)printf( "%-2d,%-4d" ,pagei.page_num,pagei.address%PageSize);if (i+1)%5= 0)printf( "n");/ifprintf(

15、 "n");void FIFO_Replace( int page_index) /FIFO 置?换?BlockNode* node;if (!Block.length)en queue(page_ in dex);return no de=Block.fr ont;while (node=node->next)if (pagenode->page_index.page_num=pagepage_index.page_num)Block.miss_flag=O;return ;if (Block.length<BlockSize) en queue(pag

16、e_ in dex);Block.miss_flag=0;return ;dequeue();en queue(page_ in dex);Block.miss_flag=1; Block.miss_cou nt+; void LRU_Replace( int page_index) /LRU 置?换? BlockNode* no de,*last_ no de;if (!Block.length)en queue(page_ in dex);return ;last_ node=no de=Block.fr ont;while (node=node->next)if (pagenode

17、->page_index.page_num= pagepage_index.page_num) last_ no de->n ext=no de->n ext;Block.le ngth-;if (node= Block.rear)Block.rear=last_ no de;en queue (no de->page_ in dex);free( no de);Block.miss_flag=0;return ;last_ node=no de;if (Block.length<BlockSize) en queue(page_ in dex);return ;

18、dequeue();en queue(page_ in dex);Block.miss_flag=1;Block.miss_cou nt+; void OPT_Replace( int page_index) /OPT置?换?BlockNode* node;BlockNode*max_ no de,*max_ no de_last; if (!Block.length)en queue(page_ in dex);Block.miss_flag=0;return ;no de=Block.fr ont;while (node=node->next)if (pagenode->pag

19、e_index.page_num= pagepage_index.page_num) no de->page_ in dex=page_ in dex;return ;if (Block.length<BlockSize) en queue(page_ in dex);Block.miss_flag=0;return ; no de=Block.fr ont;max_node=no de->n ext;while (node=node-next) / 寻°找 oBlock 中Dnext_order 值卩最?大洙?的?节。点? if (pagemax_node->

20、;page_index.next_order<pagenode->page_index.next_order) max_node=no de;no de=Block.fr ont;max_no de_last=no de;while (node=node->next) / 寻°找 oBlock 中Dnext_order 值卩最?大洙?的?节。点?的?上?一?个?节。点? if (node= max_node)break;max_no de_last=no de;max_no de_last- >n ext= max_no de->n ext;Block.

21、le ngth_;if (max_node= Block.rear)Block.rear=max_ no de_last;free(max_ no de);en queue(page_ in dex);Block.miss_flag=1;Block.miss_cou nt+;void page_replace( int num)int i,j;BlockNode* node;char str35= "FIFO" , "LRU " , "OPT "printf( "=%s=snr n um-1);printf("页?

22、面 ?号?*");for (i=0;i< BlockSize;i+)printf(" “);printf( "* 是?否?缺o?页? *n");for (i=O;i<PageCount;i+)printf( " %-4d*" ,pageil.page num);if (num= FIFO) FIFO_Replace(i);else if (num = LRU) LRU_Replace(i);else if (num = OPT) OPT_Replace(i);no de=Block.fr ont;while (node=n

23、ode->next)printf( "%-2d" ,pagenode->page_index.page_num);for (j=Block.length;j<BlockSize;j+)printf("“);printf("* %s *nn",(Block.miss_flag=1 ?"Yes" : "No");printf(printf("缺应页?数簓:%d,缺应页?率©%.2fnn" ,Block.miss_count,( float )Block.miss

24、_count/PageCount *100);printf("按恪?回?车卩键u继绩!nn");getchar();void confige()/ 程序。设®置?int num;while (1)精心整理,用心做精品21printf(*n");printf( "* 程序6设已置? *n");printf(H*n");printf( "* 1,设E?置?物?理元?块e大洙?小?(默?认?5) *n");"* 2,设E?置?访?问0地?址范?围§*n"printf( "

25、* 3,设E ?置?页?面?大洙?小?(默?认?1K) *n");printf( "* 4,设E ?置?页?面?总哩?数簓(默?认?200) *n");printf( "* 5,显?示?各+项?设E ?置?值卩 *n");printf( "* 6,返刁?回? *n");printf(H*n");printf("请?输?入?您。的?选?择?:");n um=get_ num(1,6);if (num=6)break;if (num=1)printf("请?输?入?物?理元?块e 大洙?小

26、?(1%d):" ,BLOCK_MAX_SIZE);BlockSize=get_ num(1,BLOCK_MAX_SIZE);printf("设E?置?成e功!nn");/ifelse if (num=2)printf("请?输?入?访?问 e 地?址范?围§ (1%d)K: " ,999);AddrRa nge=get_ num(1,999)* 1024;printf("设E?置?成e功!nn");/elseifelse if (num=3)printf("请?输?入?页?面?大洙?小?(1%d)K:

27、" ,AddrRange/1024);PageSize=get_ num(1,AddrRa nge/1024)* 1024;printf("设E?置?成e功!nn");/elseifelse if (num=4)printf("请?输?入?页?面?总哩?数簓(1%d):" ,32767);PageCou nt=get_ num(1,32767);I!/elseif else if (num=5)printf( "n");printf( "* 当獭?前° 物?理元?块 e 大洙?小?:dn" ,B

28、lockSize);printf( "* 当獭?前° 访?问 e 地?址范?围§ :%d Kn" ,AddrRange/1024);printf( "* 当獭?前°页?面?大洙?小?:%d Kn" ,PageSize/1024);printf( "* 当獭?前°页?面?总哩?数簓dn",PageCount);printf( "n");free(page);in it_page();void begin() int num; prin t_page();while (1)pri

29、ntf(*n");printf( "* 页?面?置?换?算?法厉?*n");printf(H*n");printf( "* 1,先0 进?先e 出?置?换?算?法厉?FIFO) *n");printf( "* 2,最?近u最?久?未使?用?置 ?换?算?法厉?LRU) *n");printf( "* 3,最?佳?置?换?算?法厉?OPT) *n");printf( "* 4,返刁?回? *n");printf(H*n");printf("请?输?入?您。的

30、?选?择?:");n um=get_ num(1,4); if (num= 4) break; page_replace( num); clear_block();free(page); in it_page(); int main()int num;in it_block();in it_page();while (1) n um=get_ num(1,3);printf(、n*n");printf("*存?储洹?器+管u理元?模£拟a系卩统? *n");printf("*n");printf("* 1,进?入?页?面?置?换?算?法厉?*n");printf(&quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论