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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(操作系统计划性实验报告.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

操作系统计划性实验报告.docx

1、操作系统计划性实验报告操作系统 设计性实验报告 20132014学年第二学期 实验项目名称进程调度 专业班级12计算机二班姓 名刘洋学 号1206111105 进程调度一、实验目的与要求1、选用优先数法或简单轮转法对n个进程进行调度。2、用高级语言编写和调试一个简单的进程调度程序。3、上机调试程序,撰写实验报告。二、实验条件(所需场地、设备、实验耗材等)计算机机房,微型计算机,Turbo C(或VC+)软件。三、实验设计的内容1、 设计一个有n个进程(可假定系统有五个进程)共行的进程调度程序。每一个进程用一个进程控制块PCB来代表。PCB中应包含下列信息:进程名、进程优先数、进程需要运行的时间

2、、占用CPU的时间及进程的状态等,且可按调度算法的不同而增减。各进程的优先数或轮转时间片数,以及进程运行需要的时间片数,均由伪随机数发生器产生。2、调度程序应包含2到3种不同的调度算法,运行时可任选一种。3、每个进程处于运行R、就绪W和完成F三种状态之一,假定初始状态都为就绪状态W。4、系统能显示或打印各进程状态和参数的变化情况。四、实验设计的步骤及结果测试为便于处理,程序中进程的运行时间以时间片为基本计算单位。1、 进程控制块PCB的格式为:进程标识数链指针优先数/轮转时间片数占用CPU时间片数进程所需时间片数进程状态2、 优先数算法:进程就绪链按优先数大小排列,链首首先投入运行。每过一个时

3、间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先数应降低一级。接着比较现行进程和就绪链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链的链首进程投入运行。原运行进程再按照其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。简单轮转法:进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时

4、间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。3、随即函数rand()通常的使用方法:rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。如果你要产生010的10个整数,可以表达为:int N = rand() % 11;这样,N的值就是一个010的随机数,如果要产生110,则是这样:int N = 1 + rand() % 11;总的来说,可以表示为:a + rand() %n ;其中的a是起始值,n是整数的范围。若要

5、01的小数,则可以先取得010的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0100的10个整数,然后均除以100,其它情况依此类推。通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。此外,还可以包含time.h头文件,然后使用srand( time(0)来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过

6、1秒)。五、程序代码及运行结果程序代码:#include#include#include#include#include#include#define P_NUM 5enum state W, R, block, F;struct pcb char name4; int priority; int cputime; int needtime; int count; int round; state process; pcb*next;pcb*get_process() pcb*q; pcb*t; pcb*p; int i=0; coutinput name and timeendl; whil

7、e(iq-name; cinq-needtime; q-cputime=0; q-priority=20 + rand() %31 ; q-process=W; q-next=NULL; if(i=0) p=q; t=q; else t-next=q; t=q; i+; return p;void display(pcb*p) coutname cputime needtime priority stateendl; while(p) coutname; cout ; coutcputime; cout ; coutneedtime; cout ; coutpriority; coutproc

8、ess) case W:coutWendl;break; case R:coutRendl;break; case block:coutblockendl;break; case F:coutFnext; int process_F(pcb*q) int bl=1; while(bl&q) bl=bl&q-needtime=0; q=q-next; return bl;void cpuexe (pcb*q) pcb*t=q; int tp=0; while(q) if(q-process!=F) q-process=W; if(q-needtime=0) q-process=F; if(tpp

9、riority&q-process!=F) tp=q-priority; t=q; q=q-next; if(t-needtime!=0) t-priority-=3; t-needtime-; t-process=R; t-cputime+; void priority_cal() pcb*p; system(cls); p=get_process(); int cpu=0; system(cls); while(!process_F(p) cpu+; coutcputime:cpuendl; cpuexe(p); display(p); Sleep(2); printf(All proce

10、sses have finished,press any key to exit); getch();void display_menu() coutCHOOSE THE ALGORITHM:endl; cout1 PRIORITYendl; cout2 POUNDROBINendl; cout3 EXITendl;pcb*get_process_round() pcb*q; pcb*t; pcb*p; int i=0; coutinput name and timeendl; while(iq-name; cinq-needtime; q-cputime=0; q-round=0; q-co

11、unt=0; q-process=W; q-next=NULL; if(i=0) p=q; t=q; else t-next=q; t=q; i+; return p;void cpu_round(pcb*q) q-cputime+=2; q-needtime-=2; if(q-needtimeneedtime=0; q-count+; q-round+; q-process=R;pcb*get_next(pcb*k,pcb*head) pcb*t; t=k; do t=t-next; while(t&t-process=F); if(t=NULL) t=head; while(t-next!

12、=k&t-process=F) t=t-next; return t;void set_state(pcb*p) while(p) if(p-needtime=0) p-process=F; if(p-process=R) p-process=W; p=p-next; void display_round(pcb*p) coutNAME CPUTIME NEEDTIME COUNT ROUND STATEendl; while(p) coutname; cout ; coutcputime; cout ; coutneedtime; cout ; coutcount; cout ; coutr

13、ound; coutprocess) case W:coutWendl;break; case R:coutRendl;break; case F:coutFnext; void round_cal() pcb*p; pcb*r; system(cls); p=get_process_round(); int cpu=0; system(cls); r=p; while(!process_F(p) cpu+=2; cpu_round(r); r=get_next(r,p); coutcpucpuendl; display_round(p); set_state(p); Sleep(5); vo

14、id main() display_menu(); int k; scanf(%d,&k); switch(k) case 1:priority_cal();break; case 2:round_cal();break; case 3:break; display_menu(); scanf(%d,&k); 运行结果: 六、实验体会 总之,这次实验是有收获的,自己也有许多心得体会。首先,感受颇深的一点是,理论学习是业务实战的基础,但实际工作与理论的阐述又是多么的不同,结合着老师课堂上所讲的内容,磕磕绊绊地完成了实验的要求。回想起来,虽然不同函数层层调用,看着很复杂,但通过与老师及同学们探讨交流,以及查阅资料,发现也并不如起初那样难以理解。 通过这次的实验,深刻体会到“纸上得来终觉浅,绝知此事要躬行”的真正内涵。之前课堂上的学习只是让我们懂得了一些基础知识,当需要将理论付诸于实践的时候,才知道这远远是不够的。书本上只是散乱的知识点,实践才可以让它们显得系统化,才能让我们在使用起来游刃有余。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2