进程调度实验报告.pdf
实验一进程调度实验
小组成员:09信管06班余俭3109005857
曾昭术3109005859
一、实验目的:
用高级语言编写和测试一个进程调度程序,通过本实验可以加深理解有关进程控制块、
进程队列的概念,以加深对进程的概念及进程调度算法的理解,并体会和了解优先数调度算
法的具体实施方法。
二、实验内容:
设计一个有N个进程并发的进程调度程序。要求采用最高优先数优先算法,时间片轮
转算法这两种算法。
每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优
先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机产生)。进程的到
达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之
一。
就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。当执行
进程在工作的时候,就绪队列中的进程优先级都加一。当要进行进程调度的时候,如果排在
队列前面的进程优先级相等,则按照需要运行的时间大小来排序,需要时间小的排在前面,
符合短作业优先算法。
如果运行一个时间片后,进程的已占用CPU时间已到达所需要的运行时间,则撤销该
进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进
程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等
待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以
便进行检查。
重复以上过程,直到所要进程都完成为止。
三、源代码:
/*进程调度*/*/*/*/
/*#defineNULL0*/
#definegetpch(type)(type*)malloc(sizeof(type))
structpcb/*定义进程控制块PCB*/
{charname[10];
charstate;
intsupper;
intntime;
intrtime;
structpcb*link;
}*ready=NULL,*p;
typedefstructpcbPCB;
sort()/*建立对进程进行优先级排列函数*/
{
PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p-supper)(ready-supper)))/*优先级最大者,插入队首*/
{p-link=ready;
ready=p;
}
elseif((p-supper)(ready-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;