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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验二进程调度实施方案与实现.docx

1、实验二进程调度实施方案与实现院 系:计 算 机 学 院实验课程: 操作系统实验项目:进程调度地设计与实现指导老师:陈红英老师开课时间:2011 2012年度第 2学期专 业:网络工程班 级:10级学 生:yuth学 号:*一、实验项目名称进程调度地设计与实现二、实验目地及要求1、 综合应用下列知识点设计并实现操作系统地进程调度:邻接表,布尔数 组,非阻塞输入,图形用户界面 GUI,进程控制块,进程状态转换,多级反馈队列进程调度算法. b5E2R。 2、 加深理解操作系统进程调度地过程. 3、 加深理解多级反馈队列进程调度算法.三、实验主要硬件软件环境32位PC机,VC+6四、实验内容及步骤 1

2、、采用一种熟悉地语言,如 C、PASCAL 或 C+等,编制程序,最好关键代码采用 C/C+,界面设计可采用其它自己喜欢地语言. p1Ean。 2、采用多级反馈队列调度算法进行进程调度. 3、每个进程对应一个 PCB .在PCB 中包括进程标识符pid、进程地状态标识 status、进程优先级 priority、进程地队列指针 next 和表示进程生命周 期地数据life(在实际系统中不包括该项). DXDiT。 4、创建进程时即创建一个 PCB,各个进程地 pid 都是唯一地,pid 是在 1 到 100 范围内地一个整数.可以创建一个下标为 1 到 100 地布尔数组, “真”表示下标对应

3、地进程标识号是空闲地,“假”表示下标对应地进程标识号已分配给某个进程. RTCrp。 5、进程状态 status 地取值为“就绪 ready ”或“运行 run ”,刚创建时,状态为“ready ”.被进程调度程序选中后变为“run ”. 5PCzV。 6、进程优先级 priority 是 0 到 49 范围内地一个随机整数. 7、进程生命周期 life 是 1 到 5 范围内地一个随机整数. 8、初始化时,创建一个邻接表,包含 50 个就绪队列,各就绪队列地进程优先级 priority 分别是 0 到 49 . jLBHr。 9、为了模拟用户动态提交任务地过程,要求动态创建进程.进入进程调度

4、 循环后,每次按 ctrl+f 即动态创建一个进程,然后将该 PCB 插入就绪队列中.按 ctrl+q 退出进程调度循环. xHAQX。 10、在进程调度循环中,每次选择优先级最大地就绪进程来执行.将其状态从就绪变为运行,通过延时一段时间来模拟该进程执行一个时间片地过程,然后优先级减半,生命周期减一.设计图形用户界面 GUI,在窗口中显示该进程和其他所有进程地 PCB 内容.如果将该运行进程地生命周期不为 0,则重新把它变为就绪状态,插入就绪队列中;否则该进程执行完成,撤消其 PCB .以上为一次进程调度循环.LDAYt。五、实验设计(一)、需求分析1、 采用一种熟悉地语言,如 C、PASCA

5、L 或 C+等,编制程序,最好关键代码采用 C/C+,界面设计可采用其它自己喜欢地语言. Zzz6Z。2、 采用多级反馈队列调度算法进行进程调度.3、 要求动态创建进程.进入进程调度 循环后,每次按 ctrl+f 即动态创建一个进程,然后将该 PCB 插入就绪队列中.按 ctrl+q 退出进程调度循环. dvzfv。(二)详细设计1、总体设计方案流程图2、创建进程函数3、进程调度函数4、使用地数据结构(一)、进程地PCB结构/进程队列节点(由于仅仅是模拟实验,这里无动作)struct process;/进程控制块PCBstruct PCB int pid; /进程标识符 string stat

6、us; /进程地状态标识,取值为“就绪 ready ”或“运行 run ”rqyn1。 int priority; /进程优先级,0 到 49 范围内地一个随机整数. process *next; /进程地队列指针 int life; /进程生命周期,1 到 5 范围内地一个随机整数. void operator = (PCB p)/运算符=重载 pid=p.pid; status=p.status; priority=p.priority; next=p.next; life=p.life; ;/就绪队列节点struct readyque PCB pc; struct readyque *n

7、ext; void operator = (readyque r) /运算符=重载 pc=r.pc; next=r.next; ;(二)、进程调度类threadmanager成员:class threadmanagerprivate: bool pidarray101 ; /“真”表示下标对应地进程标识号是空闲地,“假”表示下标对应地进程标识号已分配给某个进程. Emxvx。 struct readyque adj50; /邻接表public: threadmanager(); /构造函数 void run(); /运行进程调度程序(对外地接口) bool newpro(); /新建一个进程地

8、函数 void Manage_Draw(); /进程调度并将进程调度地情况显示在屏幕上 void Drawpro(int priority); /画出优先级比正在运行进程优先级低地其他进程SixE2。;六、主要功能模块(一)、构造函数threadmanager:threadmanager() int i;/初始化邻接表 for(i=0;i50;i+) adji.next=NULL; /“真”表示下标对应地进程标识号(1100)是空闲地,“假”表示下标对应地进程标识号已分配给某个进程. 6ewMy。 for(i=0;i101;i+) pidarrayi=true; /刚开始每个进程标识号都是空闲

9、地.(二)、运行进程调度程序.功能:监听各个按键并作出相应动作void threadmanager:run() int c; srand( (unsigned)time( NULL ) );/srand()函数产生一个以当前时间开始地随机种子 kavU4。 while(1) / cout请输入要进行地操作:Ctrl+f(新建进程) Ctrl+r(开始调度) Ctrl+q(停止调度)endl;y6v3A。 coutPlease input the key you want to doendl; cout Ctrl+f(new thread), Ctrl+r(start manager) Ctrl

10、+q(stop manager)endl;M2ub6。 /检查当前是否键盘输入,若有则返回一个非0值,否则返回0 if(!_kbhit() c=_getch(); /_getch返回地是键地ascii switch(c) case 0x6: /Ctrl+f(新建进程) srand( (unsigned)time( NULL ) );/srand()函数产生一个以当前时间开始地随机种子 0YujC。 newpro(); break; case 0x12: /Ctrl+r(开始调度) Manage_Draw(); break; case 0x11: /Ctrl+q(停止调度) ; /进程调度并将进

11、程调度地情况显示在屏幕上void threadmanager:Manage_Draw() readyque *rq=NULL,*tmpr=NULL; int i,j=0; / cout 优先级 标识符 状态标识 生命周期endl; cout priority pid status life=0;i-) /找优先级最大地进程来执行 if(adji.next!=NULL) /当对应地就绪队列不为空时 rq=adji.next; /从就绪队列取出一个进程执行. adji.next=rq-next; rq-pc.status=run; Sleep(1500); /通过延时一段时间来模拟该进程执行一个时

12、间片地过程. /画优先级 cout *pc.priority*; /画一次进程地调度情况 /1、画正在运行进程地PCB /设置下一个输出文本地字体颜色:绿色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN); eUts8。 cout*pc.pid*pc.status*pc.life*; sQsAE。 /2、画优先级与正在运行进程相同地其他进程地PCB(如果有地话) / 设置下面输出文本地字体颜色:白色 SetConsoleTextAttribute(G

13、etStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);GMsIa。 tmpr=adji.next; while(tmpr!=NULL) /当对应地就绪队列不为空时 cout*pc.pid*pc.status*pc.lifenext; j+; if( j%3 =0) coutendl ; coutpc.priority) /= 2; /优先级减半 (rq-pc.life) -= 1; /生命周期减一 /如果该运行进程地生命周期不为0,则重

14、新把它变为就绪状态,插入就绪队列中 if(rq-pc.life 0) rq-pc.status=ready; rq-next = adjrq-pc.priority.next; adjrq-pc.priority.next=rq; else /否则将其进程号归还. pidarrayi=true; break; /一次进程调度循环结束. /end of if /end of for coutone time manager have finish!endl=0;i-) rq=adji.next; if(rq!=NULL) /画优先级 cout *i*; j=0; while(rq!=NULL)

15、/当对应地就绪队列不为空时 cout*pc.pid*pc.status*pc.lifenext; j+; if( j%3 =0) coutendl ; coutendl; /新建一个进程地函数bool threadmanager:newpro() struct readyque *t = NULL; / srand( (unsigned)time( NULL ) );/srand()函数产生一个以当前时间开始地随机种子 zvpge。 for(int i=1;ipc.pid=i; pidarrayi=false; /宣布该进程号已被使用. t-pc.status=ready; t-pc.prio

16、rity = rand()%50;/随机产生优先级(随机域为049). t-pc.next=NULL; t-pc.life=rand()%5+1; /随机产生生命周期(随机域为15). t-next=adjt-pc.priority.next; adjt-pc.priority.next=t; /将新建地进程地PCB插入就绪队列 return true; /创建进程成功 return false; /找不到空地进程号,创建进程失败七、实验结果及分析(一)、新建进程连续15次按下Ctrl+F键后新建15个进程:(二)、开始调度每按一次Ctrl+R将进行一次进程调度:(三)、在一次进程调度完成后按

17、下Ctrl+F将新建一个进程:从上图地绿色部分可以看出按下Ctrl+F键后新建一个优先级为39,pid为15地进程.(四)、按下Ctrl+Q键后将停止调度,输出提示信息:八、实验总结通过这次实验我加深理解了操作系统进程调度地过程和多级反馈队列进程调度算法.长时间不用C+写代码未免有些生疏,这次实验同时让我复习了随机数地用法和链表地使用.实验耗费时间地往往是那些看似微不足道地细节上,比如链表地用法:因为输出进程信息到屏幕上时修改了指针,导致就绪队列中进程PCB丢失,调试了很久才发现这问题.NrpoJ。 这次实验不足地地方就是本人对MFC编程不熟悉,只能在控制台下实现,用户界面不是很好.版权申明本

18、文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.1nowf。用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.fjnFL。Users may use the conte

19、nts or services of this article for personal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its

20、relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.tfnNh。转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.HbmVN。Reproduction or quotation of the content of this article must be reasonable and good-faith citation for the use of news or informative public free information. It shall not misinterpret or modify the original intention of the content of this article, and shall bear legal liability such as copyright.V7l4j。

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

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