进程调度、死锁.doc

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

试验一:进程调度 实验目的 进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验要求学生独立地用 C 或 C++语言编写一个简单的进程管理程序,其主要部分是进程调度调度算法可由学生自行选择,如基于动态优先级的调度算法或多级反馈队列调度算法通过本实验可加深学生对进程各种状态的转化和各种调度算法的理解,提高系统程序设计能力以链式结构组成空闲 PCB 栈,以双向链式结构组成进程的就绪队列和睡眠队列,模拟UNIX 的进程管理程序,实现以下操作(可用键盘命令或由产生的随机数决定操作和参数)创建一个新进程:如 pid=newp(pri,size,time),申请空闲 PCB 和所需内存,填写 PC的各项初始数据,将该 PCB 送入就绪队列调度和执行:自己设计优先调度算法,在就绪队列中选择一个优先级最高的进程使其运行若干个单位时间。要求在运行期间进程的 p_cpu、p_pri 和 p_time 要变化,并在适当的时机重新调度进程睡眠:进程运行时可调用自编的睡眠函数,主动进入睡眠状态,并转调度程序也可由操作使进程强迫挂起,睡眠适当时间。进程睡眠时要在 PCB 中记录睡眠原因和优先数进程的唤醒:根据睡眠原因,将相应的进程从睡眠队列中调出,转入就绪队列。如该进程优先级比现运行进程优先级高,转调度程序进程的终止:如一个进程运行完作业所需的时间,或者用操作杀死该进程,该进程就终止,释放所占用的内存和 PCB 资源,转调度程序 主要数据结构及其说明 float arrivetime 到达时间 float servicetime 运行时间 float starttime 开始时间 float finishtime 完成时间 源程序并附上注释 //最短进程优先调度算法 、 #include cstdlib #include iostream #includeiomanip using namespace std; struct sjf{ char name[10]; float arrivetime; //到达时间 float servicetime; //运行时间 float starttime; //开始时间 float finishtime; //完成时间 }; sjf a1[100]; void input(sjf *p,int N1)//进程信息输入 { int i; coutendl; printf( 请您输入进程的 名字 到达时间 服务时间: \n 例如: a 0 100\n); for(i=0;i=N1-1;i++) { printf( 请您输入进程%d的信息:\t,i+1); scanf(\t\t\t%s%f%f,p[i].name,p[i].arrivetime,p[i].servicetime); } } void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,int N1)//最终结果输出 { int k; printf(\n\t调度顺序为:); printf(%s,p[0].name); for(k=1;kN1;k++) {printf(--%s,p[k].name);} coutendl; printf(\ny进程具体调度信息如下:\n); printf(\n\t进程名\t到达时间\t运行时间\t开始时间\t完成时间\n); for(k=0;k=N1-1;k++) { printf( \t%s\t %-.2f\t\t %-.2f\t\t %-.2f\t\t %-.2f\t\n,p[k].name,p[k].arrivetime, p[k].servicetime,p[k].starttime,p[k].finishtime); } getchar(); } void sort(sjf *p,int N1)//排序 { for(int i=0;i=N1-1;i++) for(int j=0;j=i;j++) if(p[i].arrivetimep[j].arrivetime) { sjf temp;

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档