欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    操作系统实验---处理机调度(共11页).doc

    • 资源ID:13964819       资源大小:270KB        全文页数:11页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统实验---处理机调度(共11页).doc

    精选优质文档-倾情为你奉上实 验 报 告实验题目姓名: 学号: 课程名称: 操作系统实验所在学院:信息科学与工程学院专业班级: 计算机任课教师: 实验项目名称处理机调度一、实验目的与要求: 1、给出所选实验题目。 2、给出源程序文件名和执行程序文件名。源程序中要有详细的注释。 3、给出程序中使用的数据结构和符号说明。 4、给出程序的流程图。 5、给出运行结果。 6、总结收获体会和对题解的改进意见及见解。 二、实验设备及软件:装有Linux操作系统的PC机一台三、实验方法(原理、流程图) 设计一个按时间片轮转法调度的算法1.进程控制块内容和先来先服务调度的算法一样,如右图所示。系统设置一个队头和一个队尾指针,分别指向队列的第一个和最后一个进程。2.为每个进程确定一个要求运行时间和到达时间。 3.按进程到达的先后次序排成一个循环队列。 4.处理机调度时,开始选择队首第一个进程运行,另外再设一个当前运行进程指针,指向当前正运行的进程。5.本实验是模拟,所选进程并不实际运行,只是执行: 估计运行时间减1和输出当前运行进程名。 6进程运行一次后,应将当前运行进程指针下移一个位置, 指向下一个进程。同时还应判断该进程的剩余运行时间是否为0。若不为0,则等待下一轮调度;若为0,则则状态改为完成状态,并撤出就绪队列。 7若就绪队列不空,重复上述5,6步。8程序中应有显示和打印语句,显示每次选中进程名字和队列变化情况。进程名 链接指针 到达时间 估计运行时间 进程状态建立就绪队列函数程序流程图如下:按进程到达的先后次序排成一个循环队列处理开始选择队首第一个进程运行,另外再设一个当前运行进程指针,指向当前正运行的进程。运行队首进程运行一次,指向下一个进程,同时估计运行时间减一。是剩余时间间是否为0?否等待下一轮运行状态改为为完成,并把它从就绪队列删除四、实验过程、步骤及内容 在下述三种调度算法中选择一题进行编程实验:1设计一个按先来先服务调度的算法;2设计一个按动态优先级调度的算法;3. 设计一个按时间片轮转法调度的算法;本次实验选择按时间片轮转法调度的算法:时间片轮转算法参考代码: #define N 20#include<stdio.h>#include<stdlib.h>/*#include<conio.h>*/typedef struct pcb/* 进程控制块定义*/ char pnameN; int runtime; int arrivetime; char state; struct pcb *next; PCB;PCB head_input;/就绪队列头指针PCB head_run; /运行队列头指针static char R='r',C='c'unsigned long current; /记录系统当前时间void inputprocess();/*建立进程函数 */int readyprocess();/*建立就绪队列函数*/int readydata();/*判断进程是否就绪函数 */int runprocess();/*运行进程函数 */int readyprocess() while(1) if(readydata()=0) return 1; else runprocess(); int readydata() /判断就绪队列是否为空 PCB *p1,*p2,*p3; if(head_input.next=NULL) if(head_run.next=NULL) return 0; else return 1; p1 = head_run.next; p2 = &head_run; while (p1 != NULL) p2 = p1; p1 = p2->next; p1 = p2; p3 = head_input.next; p2 = &head_input; while (p3 != NULL) if( (unsigned long)p3->arrivetime <= current) && (p3->state = R) printf("Time slice is %8ld( time %4ld); Process %s start.n", current, (current+500)/1000, p3->pname); p2->next = p3->next; p3->next = p1->next; p1->next = p3; p1 = p3; p3 = p2; p2 = p3; p3 = p3->next; return 1;int runprocess() PCB *p1,*p2; if(head_run.next = NULL) current+; return 1; else p1 = head_run.next; p2 = &head_run; while(p1 != NULL) p1->runtime-;/时间片大小为1 current+; if(p1->runtime <= 0) printf("Time slice is %8ld( time %4ld); Process %s end.n", current, (current+500)/1000, p1->pname); p1->state = C; p2->next=p1->next; free(p1); p1=p2->next; else p2 = p1; p1 = p2->next; return 1; void inputprocess() PCB *p1,*p2; int i,num; unsigned long max = 0; printf("How many processes do you want to run:"); scanf("%d",&num); p2 = &head_input; for (i=0; i<num; i+) p1=(PCB*)malloc(sizeof(PCB); p2->next = p1; printf("No.%3d process input pname:",i+1); scanf("%s",p1->pname); printf("runtime:"); scanf("%d",&(p1->runtime); printf("arrivetime:"); scanf("%d",&(p1->arrivetime); p1->runtime = (p1->runtime)*1000; p1->arrivetime = (p1->arrivetime)*1000; p1->state = R; if(unsigned long)(p1->arrivetime) > max) max = p1->arrivetime; p2 = p1; p2->next = NULL; void main() printf("ntime 1 = 1000 time slicen"); current = 0; inputprocess(); readyprocess(); system("stty -echo"); getchar(); system("stty echo");五、实验数据(现象)处理分析进一步生成可执行文件时出现错误1:解决办法:#include <>是一个控制输出的头文件,getch()函数不能使用,所以去掉头文件并且修改getch()函数。具体修改部分如下图所示:进一步生成可执行文件时出现错误2:解决办法:malloc的功能与头文件#include <>有关,但是本参考代码没有给出头文件,所以添加头文件以后malloc的功能可以实现了。生成可执行文件并运行:进行第一次测试:进行第二次测试:进行第三次测试:实验数据分析:因为实验中我们规定的一个时间等于1000个时间片,所以在哪个时间片结束就会有出现不是1000的倍数的情况。在上面运行结果中,当进程aa运行了1000个时间片之后,因为bb已到达,所以bb从第1001个时间片开始运行。以此类推,轮流下去,a在第29999个之间片结束。六、实验结论 通过本次实验更进一步的掌握了时间片轮转调度算法。虽然理论知识学过但是通过这次试验特别形象的掌握了时间片轮转调度算法的实际运行结果以及时间片对进程的运行时间和到达时间的要求。经过几次测试实验结果显示不同的时间片,运行时间以及到达时间对进程的顺利完成有紧密联系。刚开始直接利用实验手册里的参考代码没办法生成可执行文件,一直显示“conio.h目录不存在”,“malloc”和“getch”等函数未定义。通过查阅相关资料纠正对应的错误成功的生成可执行文件并且运行。这次试验虽然没有选先来先服务调度的算法和动态优先级调度的算法,但是通过时间片轮转调度算法间接的学会了进程调度基本思路。七、教师批阅意见:成绩评定: 教师签字: 年 月 日 八、备注:专心-专注-专业

    注意事项

    本文(操作系统实验---处理机调度(共11页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开