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

    实验一、进程调度实验报告(共17页).doc

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

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

    实验一、进程调度实验报告(共17页).doc

    精选优质文档-倾情为你奉上广东技术师范学院实验报告学院:计算机科学学院专业:计算机科学与技术(师范)班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:预习情况操作情况考勤情况数据处理情况实验名称: 实验一、进程调度实验 一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解二、实验类别综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据结构等多方面的知识三、实验内容和步骤 1编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。 静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。 动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等该题根据老师给的代码用Visual C+运行,结果以及分析如下:结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程aa先级比较高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪队列的最后。而此时这两个进程的状态都为就绪态。结果分析:当进程cc了一个时间片之后而它已占用 CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa按照这种方式一直运行下去:直到:结果分析:当进程bb的CPU占用时间等于它需要的执行时间时,进程bb度完成。则这时进程调度中还有两个进程:进程aa进程cc结果分析:当调度进程中只剩下进程aa程cc这时根据进程优先级的大小,进程aa入运行态。当进程aa调度时,进程调度程序中直剩下进程cc这时进程cc进入运行态,而当前就绪队列将为空。直到:结果分析:当进程i的CPU占用时间等于所需要的执行时间时,进程cc调度完成,则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。 轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。 简单轮转法的基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。将老师给的源程序修改成简单的时间片轮转法流程图如下:进程完成,撤消该进程就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占用CPU时间已达到所需的运行时间把运行进程插入到下一个队列的队尾插入新的进程开始初始化PCB,输入进程信息所有队列都为空各进程按FCFS原则排队等待调度时间片轮转法#include<stdio.h>#include<stdlib.h>#include<conio.h>#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/时间片长度/typedef struct pcb /进程管理块char name10;/进程名字char state;/进程状态int queue;/进程所在的队列int ntime;/进程需要运行的时间int rtime;/进程已经运行的时间int etime;/进程在本队列可运行的时间片struct pcb *link;PCB;PCB*ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;/*就绪队列,进程插入位置的变量*/int geti()/使用户仅能输入整数char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = 'n')printf("tf输入不能为空.请重新输入n");fflush(stdin);ch = getchar();while(ch != 'n')if(ch > '9' | ch < '0')printf("t输入有误!输入只能为正整数,请重新输入.n");fflush(stdin);i = 0;ch = getchar();elsei = i*10 + (ch - '0');ch = getchar();return i;void findpos()/更新状态量PCB *ps = pfend;if(!ps | !ps -> link | (ps-> link->queue - ps->queue) > 1) pinsert = ps;elsewhile (ps->link && ps ->link->queue != (pfend ->queue +2)ps = ps->link;pinsert = ps;void insert()/插入进程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready ->queue = 1) /第一队列存在p->link = pfend->link;pfend->link = p;pfend = p;findpos();Elsep->link = ready;ready = p;findpos();void input()/*建立进程控制块函数*/int i,num;printf("n请输入进程的个数:");num = geti();for(i=0; i < num; i+)printf("n进程号No.%d:n",i+1);p=getpch(PCB);printf("n输入进程名:");scanf("%s",p->name);printf("n输入进程运行时间:");p ->ntime = geti();printf("n");p->rtime=0;p->state='w'p->queue =1;p->etime = TIME;p->link=NULL;insert();/*调用insert函数*/void disp(PCB *pr)/*建立进程现实函数,用于显示当前进程*/printf("nnamet statet queuet ntimet rtimet在队列可停留时间t n");printf("|%st",pr->name);printf(" |%ct",pr->state);printf(" |%dt",pr->queue);printf(" |%dt",pr->ntime);printf(" |%dt",pr->rtime);printf(" |%dt",pr->etime);printf("n");void check()/*建立进程查看函数*/PCB *pr;printf("n *当前正在运行的进程是:%s",ready->name);/*显示当前运行的进程*/disp(ready);pr= ready ->link;printf("n*当前就绪队列状态为:n");/*显示就绪队列状态*/while(pr!=NULL)disp(pr);pr=pr->link;void sort()/调整进程队列if(!ready->link |ready->queue < ready->link->queue) return;p = ready ->link;ready ->link = pinsert ->link;pinsert ->link = ready;pinsert = ready;ready = p;if (ready && ready -> queue = pinsert ->queue)findpos();void addnew()/添加新的进程if(ready ->queue != 1)(ready -> queue)+;ready->etime *= 2;ready -> state='w'sort();/*调用sort函数*/input();elseinput();void destroy()/*建立进程撤销函数(进程运行结束,撤销进程)*/printf("n进程%s已完成.n",ready->name);p = ready;ready = ready->link;free(p);if (ready && ready -> queue = pinsert ->queue)findpos();void running()/*建立进程就绪函数(进程运行时间到,置就绪状态)*/(ready -> rtime)+;ready ->etime -;if(ready->rtime = ready->ntime)destroy();return;else if(ready ->etime = 0)int time = 2;(ready -> queue)+;for(int i = 2; i != ready->queue; +i)time *= 2;ready->etime = time;ready -> state='w'sort();/*调用sort函数*/void main()char ch;input();while(ready != NULL)printf("nThe execute name:%sn",ready ->name);ready ->state = 'R'check();running();printf("n按i键添加新进程.按其他任意键继续运行.");fflush(stdin);ch = getchar();if (ch = 'i'| ch='I')addnew();printf("nn 进程已经完成n");getchar();运行结果如下:根据题意输入五个进程按任意键继续四、实验问题及原因  (1)本次试验,思路设计不难在这个多级反馈的实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend用来表明新插入的队列的位置。  (2)在建立优先数就绪队列时主要运用,链表插入模型。但是由于本题是从建立、到完成一个就绪对列,所以必须分多种情况讨论。  五、实验体会和收获 (1)本次试验后对优先数调度算法和时间片轮转调度算法实现的过程,有了很清楚的认识、理解。设计计数器来对进程执行状态的时间分析,使得进程调度这一抽象模型得到具体化。之后,便是对进程的插入(执行完,插入到完成队列,否则插入到就绪)和再次调度(当改进程再次满足条件时,从就绪队列调度到执行队列)重复过程。 (2)通过设计PCB结构,模拟进程调度,加深了对进程的理解。(3)提高了C语言编程动手能力专心-专注-专业

    注意事项

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

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




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

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

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

    收起
    展开