代码改变世界

进程调度

2017-11-19 23:39  沈橙Anei  阅读(270)  评论(0编辑  收藏  举报

进程调度

  一,设计目的:    

  进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本设计模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。

二,设计内容

设计程序模拟单处理机系统中的进程调度算法,在短作业优先调度算法、时间片轮转调度、最高优先级优先算法三种算法中选择两种实现。

每个进程由一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等。

进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W(Wait)、运行R(Run)或完成F(Finish)3中状态之一。

三、开发环境

windows环境,VC6.0平台。

四,分析设计

<一>实验原理

(1)最高优先级优先算法思想

   将进程按照优先级由高到低排序

就绪进程获得CPU后都只能运行一个时间片,用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后进程的已占用CPU时间还未达到所需要的运行时间,也即进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列以及各个进程的PCB,以便进行检查。

重复以上过程,直到所有进程都完成为止。

(2)时间片轮转调度

系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片.这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间.

<二>程序结构

(1)最高优先级优先

  1.按照优先级排序

for(i=0;i<n-1;i++)      //按照优先级排序

    {

        for(j=n-2;j>=i;j--)

        {

            if(pcb[j+1].priority>pcb[j].priority)

            {

                temp=pcb[j];

                pcb[j]=pcb[j+1];

                pcb[j+1]=temp;

            }

        }

    }

2.按照排序运行时间片

3.判断程序是否完成

if((pcb[0].needtime-pcb[0].usedtime)>pTime)   //判断进程剩余的运行时间是否大于时间片

        {

            pcb[0].usedtime+=pTime;

            pcb[0].priority--;

            pcb[0].state='W';

        }

        else                       //已完成的进程

        {

            pcb[0].usedtime=pcb[0].needtime;

            pcb[0].priority=-1;

            pcb[0].state='F';

 

4.完成退出

(2)时间片轮转调度

1按照先来先服务原则排序

struct pro* creatList()   //创建链表,按照进程的到达时间排列,记录所有进程的信息

void insert(struct pro *head,struct pro *s)   //插入节点

{

struct pro *p=searchByAT(head,s->arriveTime);

s->next=p->next;

p->next=s;

 

2.按照先来先服务原则排序好队列之后按照输入的时间片运行。

3.进程运行完成退出就绪队列

程序流程图

(1)最高优先级优先

 

 

2时间片轮转调度

 

 

 

 

 

 

 

 

五.结果分析

(1)最高优先级优先

 

 

 

 

 

 

1.输入四个进程后按照优先级排序:2 1 3 4

2.按照时间片运行,每次运行后进程优先级减一。

3.每当进程运行完进程状态显示为F