网站大量收购闲置独家精品文档,联系QQ:2885784924

操作系统-加深对进程概念和进程调度的过程,算法的理解.docx

操作系统-加深对进程概念和进程调度的过程,算法的理解.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统-加深对进程概念和进程调度的过程,算法的理解

山东工商学院实验(上机)报告实验题目: 进程调度模拟程序 2014年4月20日实验目的加深对进程概念和进程调度的过程/算法的理解实验内容给出进程调度算法的描述(如基于动态优先级和时间片轮转调度算法的描述)用C语言设计一个对n个并发进程进行调度的程序,每个进程由一个进程控制块PCB结构表示,该进程控制块应包含下述描述信息:进程标识ID,进程优先数priority(并规定优先数和优先权成正比),时间片数chip,进程已经占用CPU的时间cputime,进程还需要运行的时间alltime(当进程运行完毕时,其值为0),进程的状态state(为简化起见,设每个进程处于运行E(Executing),就绪R(Ready)和完成F(Finished)3中状态之一,并假设起始状态都是就绪状态R),以及进程队列指针next(用来将PCB排成队列)等,可按照调度算法的不同而增删.调度程序应当包含两种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较.程序应能显示或打印各种进程状态和参数变化情况,便于观察.既要显示每个时间片内各进程的情况,并且指出运行进程就绪和阻塞队列中的内容实验步骤算法描述时间片轮转调度算法描述:使用LENGTH(宏定义为100)个元素的PCB数组作为进程队列,使用一次所有进程状态输出作为一个时间片.从队列的队头开始,一个时间片改变一个进程信息(cputime++,alltime--,state由Ready转为Executing,最后转为Ready或者Finished),直到所有的进程状态全部为Finished(宏定义为F)动态优先级调度算法描述:使用LENGTH 个元素的PBC数组作为进程队列,使用一次所有进程的状态输出作为一个时间片,定义十个优先级,从1到10,10为最高优先级,定义了10个优先级队列,分别名为one , two , three , four , five , six , seven , eight , nine ,ten,队列长度为LENGTH.在进程信息输入到进程队列后,进行进程优先级排序,将相应优先级进程的id值存入相应优先级队列.在调度处理函数中,从ten优先级队列开始遍历,如果不空,则取优先级进程队列队首元素作为进程队列id,调度处理该id值的进程(priority-- , cputime++ , alltime-- ,state由Ready转为Executing,最后转为Ready或者Finished;将该进程id从原优先级队列移除,然后添加到低一优先级队列的队尾),同一进程队列的进程id,从队头开始调度,如果进程优先级全部将为1,则进行时间片轮转调度,直到所有进程状态为Finished(宏定义为F).编译环境在Linux下使用gcc进行编译调试代码#include stdio.h#define EXECUTING 69#define READY 82#define FINISHED 70#define TRUE 1#define FALSE 0#define LENGTH 100typedef struct {int id;//进程IDint priority;//进程优先数int chip;//需要的时间片数int cputime;//进程已占用CPU的时间int alltime;//进程还需要运行的时间int state;//进程状态//struct process *next; //Next 指针}PCB;PCB q_process[LENGTH];int top=0;//指向队头int last=0;//指向队尾int flag=1;//动态优先级调度算法使用的int one[LENGTH],two[LENGTH],three[LENGTH],four[LENGTH],five[LENGTH],six[LENGTH],seven[LENGTH],eight[LENGTH],nine[LENGTH],ten[LENGTH];int top_one,last_one,top_two,last_two,top_three,last_three,top_four,last_four;int top_five,last_five,top_six,last_six,top_seven,last_seven,top_eight,last_eight;int top_nine,last_nine,top_ten,last_ten;int dy_time=0;void time_round();void dy_priority();int if_empty_dy();int if_empty_time();void enter_last(int *topPoint,int *lastPoin

您可能关注的文档

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档