1、CLOCK时钟置换算法青岛理工大学操作系统课程设计报告院(系): 计算机工程学院 专业: 软件工程 学生姓名: 班级: 学号: 题目: 采用CLOCK置换算法仿真请求分页系统 起迄日期: 2012.7.6-2012.7.13 设计地点: 实验楼 指 导 教 师: 20112012年度 第 2 学期完成日期: 2012 年 7 月 12 日一、课程设计目的操作系统课程设计是为了对学习的操作系统课程更深刻的理解和巩固,对操作系统的整体进行一个模拟。通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻
2、炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。课程设计是自己独立完成一项任务的过程,编程过程中要充分调动个人的积极性,提高自身解决实际问题的能力,发现自身的编程错误习惯,提高编写程序的质量。同时,也为以后深入层次的学习及研究打基础。编程中少不了难题,遇到难题时需要的是用程序员的思维方式去考虑问题解决问题,还需要很大的精力和耐心,对于我们来说都是磨练和提高。二、课程设计内容与要求1、设计内容:用高级语言编写和调试一个内存分配程序,加深对内存分配算法的理解。2、设计要求:1)实现请求分页存储管理方式的页面置换算法:CLOC
3、K算法2)内存物理块数固定为15个,对多个作业采用可变分配全局置换的策略分配物理块3)作业数量与作业大小(10-20页)可在界面进行设置4)所有作业按RR算法进行调度,时间片长度为1秒5)可为每个作业随机产生引用的页面串,也可以人工输入引用的页面串,页面串长度50-100,要求必须包括作业所有的页面,可作为样例数据保存6)可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、页面串长度的初始化7)要求采用可视化界面,模拟内存分配和使用情况图,可在运行过程中随时暂停,查看当前内存物理块使用情况。8)每次全部作业运行结束后,要求打印出访问命中率三、系统分析与设计1、系统分析CLOCK页面置
4、换算法是根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配和回收操作这样三个问题。为了实现分区分配,系统中必须配置相应的数据结构,用来描述空闲区和已分配区的情况,为分配提供依据。常用的数据结构有两种形式:空闲分区表和空闲分区链。为把一个新作业装入内存,须按照一定的算法,从空闲分区表或空闲分区链中选出一个分区分配给该作业。在动态分区存储管理方式中,主要操作是分配内存和回收内存。(1)信息。本系统完成的是对作业数量不固定,作业大小、进入内存时间、运行时间需要通过界面进行输入,或者从文件读取的作业基本信息,内存(1520)的处
5、理信息是处理对于各种作业完成动态的内存分配,回收和紧凑。(2)行为。完全描述系统状态变化所需处理或功能;本系统处理了RR时间片轮转算法对内存的动态分配,每一个作业都是按照先进先出的原则进入内存当地一个作业进入内存后,会长生一个时钟信号,依次递增,当一个作业从进入时间开始到运行时间结束,会动态的释放所占大小的内存区间,直到时钟信号等于最后一个作业释放他所占的内存区间,此时所有的作业运行完,内存也回收完。(3)表示。详细描述系统的对外接口与界面。本系统采用的VC编写的,在DOS界面下运行 2、系统设计:系统利用RR时间片轮转算法掉调度作业,并从内存区动态分配内存。设内存区的大小为number,表中
6、每个空闲分区的大小可表示为nunber个。虚拟存储区采用page类型二维数组实现,然后将虚拟存储区的首址返回给调用者。当进程运行完毕释放内存时,系统根据回收区的首址,从内存区表中按CLOCK算法找到相应的插入点。2.1、模块设计:RR算法(next fit)(详见程序流程图)先将所有的进程排成一队,按先来先服务原则排列,先调度首进程按时间片轮转执行。当执行到队尾时再从头执行,详细参看课本95页3.3.3节时间片轮转法改进型CLOCK算法(best fit/worst fit)根据页面的访问位A和修改位M确定调出页面执行四步循环找出要置换页面,详细介绍参看课本153页4.8.3节CLOCK置换算
7、法虚拟存储区采用的page二维数组模拟内存区定义如下void MemPageIinit(int number)/内存链 headptr = new page ; tailptr = headptr ; for(int i = 1 ; i next = new page ; tailptr = tailptr-next ; if( i = (number-1) ) tailptr-next = NULL ; 函数关系图2.2、数据结构说明:Struct page 数据对象job:page的作业号,int型。数据对象* next: page的后继指针。数据对象pageID: page的页号,int
8、型。数据对象A: 访问码,int型。数据对象M:修改码int型。 数据关系R:数据元素同属一个集合。基本操作P:MemPageIinit(int number)初始条件:指向new page headptr指针操作结果:构造一个number大小的指针链。ProcessPageInit()初始条件:i=PPAGENUMBER1,j=PPAGENUMBER2大小page类型的二维数组。操作结果:数组各项赋初值。rr()初始条件:操作结果:各个作业按时间片轮转算法调度 sleep( clock_t wait )初始条件:clock_t=1000操作结果:程序循环一秒ClockReplace(page
9、 * paget)初始条件:指向要调入页指针paget操作结果:按CLOCK算法调换页面ShowPage1()初始条件: 操作结果:显示内存调用情况。ReplacePage( page * preptr, page * ptr,page * paget )初始条件:指向要被替换掉页面指针的前序指针preptr, 指向要被替换掉页面指针 ptr, 指向要调入页指针paget paget操作结果:调换paget 和ptr;程序中主要用到指针链表模拟内存区,2.3、算法流程图:函数关系图RR算法rr()及其调用函数sleep()Y Y YY N NCLOCK页面置换算法 N N Y N Y Y N
10、N四、系统测试与调试分析1、系统测试2、调试分析:进入程序输入1显示随机产生的多个作业的页面信息输入2开始执行CLOCK页面置换算法五、用户手册1、使用平台是什么?下载网址?使用的VC+平台2、是否需要安装?如需要安装,如何安装?不需要安装3、说明如何使用你编写的程序,详细列出每一步的具体操作步骤。这里可以有适当的运行结果抓图。程序运行效果图六、程序清单void ProcessPageInit()/页面初始化引用串 srand( (unsigned)time( NULL ) ); int a; for( int i=0 ; i PPAGENUMBER1 ; i + )/PPAGENUMBER为
11、引用串数 for(int j=0 ; j PPAGENUMBER2 ; j + ) a= rand() % 15; a=a+1; / printf(a:%d,a); processpageij.pageID = a ; processpageij.A = 0 ; processpageij.M = 0 ; processpageij.next=NULL; processpageij.job=i; / printf(n); /printf(dsfds%o,processpage00.next); /ShowPage() ;void MemPageIinit(int number)/内存链 hea
12、dptr = new page ; tailptr = headptr ; for(int i = 1 ; i next = new page ; tailptr = tailptr-next ; if( i = (number-1) ) tailptr-next = NULL ; void rr() / printf(%d%d,i,j); for(;i clock() ) / printf(once %d %dn,i,j); if(i=0&j=0) page * p ; p = headptr ; int a; srand( (unsigned)time( NULL ) ); for( ;
13、1 ; j + ) a= rand() % 2; p-A = processpageij.A ; p-M = a; p-pageID = processpageij.pageID ; p = p-next ; / ShowPage1() ; if( p = NULL) break ; j+; ShowPage1() ; else / printf(j:%dn,j); paget=&processpageij; ClockReplace(paget) ; ShowPage1() ; printf(i:%dj:%dn,i,j); if(i=PPAGENUMBER1-1&j=PPAGENUMBER2
14、-1) break; else if(j=PPAGENUMBER2-1) /printf(19n); break; /? j+; cout*next-next!=NULL) preptr=preptr-next; curptr = headptr ; /preptr = tailptr ; while(1) if(paget-pageID = curptr-pageID&paget-job = curptr-job) /modify acess curptr-A = 1 ; k+; break; else if( (curptr-A=falg_A)&(curptr-M=falg_M) ) Re
15、placePage(preptr,curptr,paget); l+; break ; if(falg_M = 1 ) /(2) curptr-A = 0 ; preptr = curptr ; curptr = curptr-next ; if(curptr = NULL) if( falg_M = 0 ) falg_M = 1 ; /(2) else falg_M = 0 ; preptr = headptr ; curptr = headptr ; void ReplacePage( page * preptr, page * ptr,page * paget ) /coutnext=
16、headptr-next ; ptr=preptr=headptr = paget; else if( ptr-next = NULL ) ptr=paget; preptr-next = paget ; else paget -next= ptr-next ; preptr-next = paget ; processpageij.A = 1; processpageij.M = a; / if(tempptr=NULL) printf(NULLn); /free(tempptr) ;void ShowPage() cout*endl ; coutPageID: ; for(int i=0
17、;iPPAGENUMBER1;i+) for(int j=0 ;jPPAGENUMBER2;j+) coutprocesspageij.pageID ; coutendl ; coutA : ; for(int it=0 ;itPPAGENUMBER2;it+) coutprocesspageiit.A ; coutendl ; coutM : ; for(int ic=0 ;icPPAGENUMBER2;ic+) coutprocesspageiic.M ; coutendl ; void ShowPage1() page * ptr ; ptr = headptr ; coutMemery
18、Pageendl; coutMemPgeID :; while(ptr != NULL) coutpageIDnext ; ptr = headptr ; coutendl ; coutA : ; while(ptr != NULL) coutAnext ; ptr = headptr ; coutendl ; coutM : ; while(ptr != NULL) coutMnext ; ptr = headptr ; coutendl ;int main() ProcessPageInit() ;/页面初始化 MemPageIinit(15) ;/内存初始化string strcmd ;
19、 int pageid ,a ,m ; cout请输入命令:endl ; cout ; cinstrcmd ; while (strcmd != exit) if ( strcmd = help ) cout 命令 功能endl ; coutsetpage : 设置页面信息endl ; coutshowpage : 状态显示endl ; coutreplace : Clock页面置换endl ; coutexit : 退出程序endl ; else if ( strcmd = 1 ) /ShowPage() ; ShowPage1() ; else if ( strcmd = 3 ) /Run
20、Mempage() ; rr(); double z; z=100*k/(l+k); printf(%d,%d,%fn,k,l,z); / ShowPage1() ; else if (strcmd = 2) coutplease input PageID,flag A,falag M:pageidam ; / SetPage( pageid , a , m ) ; else coutinvalidation command,please input :helpendl ; cout ; cinstrcmd ; return 0 ;七、体会与自我评价八、参考文献1 汤子瀛 编著,计算机操作系统(修订版),西安电子科技大学出版社,2001年2严蔚敏 编著,数据结构(C语言版),清华大学出版社,2010年3谭浩强 编著,C程序设计(第三版),清华大学出版社,2009年4黄维通,姚瑞霞. Visual C+程序设计教程M. 北京:机械工业出版社,2001.75胡志坤. Visual C+通信编程工程实例精解M. 北京:机械工业出版社,2007.68-69九、课程设计评价(由任课教师填写)课程设计评价 成绩: 教师: 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1