ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:248.62KB ,
资源ID:11117067      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11117067.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CLOCK时钟置换算法.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CLOCK时钟置换算法.docx

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