进程调度实验报告.doc_第1页
进程调度实验报告.doc_第2页
进程调度实验报告.doc_第3页
进程调度实验报告.doc_第4页
进程调度实验报告.doc_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 进程调度实验小组成员:09信管06班 余俭 3109005857 曾昭术 3109005859一、实验目的:用高级语言编写和测试一个进程调度程序,通过本实验可以加深理解有关进程控制块、进程队列的概念,以加深对进程的概念及进程调度算法的理解,并体会和了解优先数调度算法的具体实施方法。二、实验内容:设计一个有N个进程并发的进程调度程序。要求采用最高优先数优先算法,时间片轮转算法这两种算法。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。当执行进程在工作的时候,就绪队列中的进程优先级都加一。当要进行进程调度的时候,如果排在队列前面的进程优先级相等,则按照需要运行的时间大小来排序,需要时间小的排在前面,符合短作业优先算法。如果运行一个时间片后,进程的已占用CPU时间已到达所需要的运行时间,则撤销该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。三、源代码:/*进程调度 */#include stdio.h#include stdlib.h#include conio.h/*#define NULL 0*/#define getpch(type)(type *)malloc(sizeof(type)struct pcb /*定义进程控制块PCB*/char name10;char state;int supper;int ntime;int rtime;struct pcb *link;*ready=NULL,*p;typedef struct pcb PCB;sort() /*建立对进程进行优先级排列函数*/PCB *first,*second;int insert=0;if(ready=NULL)|(p-supper)(ready-supper) /*优先级最大者,插入队首*/p-link=ready;ready=p;else if(p-supper)supper)/*进程比较优先级,插入适当的位置中*/first=ready;second=first-link;while(second!=NULL)if(p-supper)=(second-supper) /*若插入进程比当前进程优先数大*/ if(p-supper)=(second-supper) /*修改的代码,实现了当进程优先级相等时,将需要运行时间小的进程放在队列首位*/ if(p-ntime)(second-ntime) p-link=second-link; second-link=p; second=NULL; insert=1; else p-link=second;first-link=p;second=NULL;insert=1; else p-link=second;first-link=p;second=NULL;insert=1; else /*插入进程优先数最低,则插入到队尾*/ first=first-link;second=second-link;if(insert=0) first-link=p; else if(p-ntime)ntime) p-link=ready; ready=p; else p-link=ready-link; ready-link=p; input() /*建立进程控制块函数*/int i,num;printf(n 请输入要执行进程的个数:);scanf(%d,&num);for(i=0;iname);printf(n 输入进程优先数:);scanf(%d,&p-supper);printf(n 输入进程运行时间:);scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(); /*调用sort函数*/ system(cls);/*清屏*/int space()int l=0;PCB *pr=ready;while(pr!=NULL)l+;pr=pr-link;return(l);disp(PCB *pr) /*建立进程显示函数,用于显示当前进程*/printf(nqnametstatetsuppertndtimetruntimen);printf(|%st,pr-name);printf(|%ct,pr-state);printf(|%dt,pr-supper);printf(|%dt,pr-ntime);printf(|%dt,pr-rtime);printf(n);check() /*建立进程查看函数*/PCB *pr;printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/disp(p);pr=ready;printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/while(pr!=NULL)disp(pr);pr=pr-link;destroy() /*建立进程撤销函数(进程运行结束,撤销进程)*/printf(n 进程 %s 已完成。n,p-name);free(p);running() /*建立进程就绪函数(进程运行时间到,置就绪状态)*/PCB *q;(p-rtime)+;if(p-rtime=p-ntime)destroy(); /*调用destroy函数*/else(p-supper)-;p-state=w;q=ready;while(q!=NULL ) /*实现就绪队列中进程优先级加一的功能*/(q-supper)+;q=q-link;sort(); /*调用sort函数*/main()int len,h=0;char ch;input();len=space();while(len!=0)&(ready!=NULL)ch=getchar();h+;printf(n The execute number:%dn,h);p=ready;re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论