1、进程是动态概念,必须程序运行才有 进程的产生。2、进程的状态模型:(1)运行:进程已获得处理机,当前处于运行状态。(2)就绪:进程已经准备好,一旦有处理器就可运行。3、处理机调度:在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机 这一重要的资源。处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将 处理机分配给它运行,以实现进程并发地执行。4、进程调度算法的功能:记录系统中所有进程的执行情况选择占有处理机的进程进行进程的上下文切换5、进程调度的算法:(1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在 就绪队列的后面,那么先来先服务总是把当前处于就绪队
2、列之首的那个进程调 度到运行状态。(2)优先数算法:即进程的执行顺序由高优先级到低优先级。系统或用户按某种原则为进程指定一个优先级来表示该进程所享有的确调度优先权。该算法核心是确定进程的优先级。(3)时间片轮转算法:固定时间片,每个进程在执行一个时间片后,轮到下一进程执行,知道所有的进程执行完毕。处理器同一个时间只能处理一个任务。处理器在处理多任务的时候,就要看请求的时间顺序,如果时间一致,就要进行预测。挑到一个任务后,需要若干步骤才能做完,这些步骤中有些需要处理器参与,有些不需要(如磁盘控制器的存储过程)。不需要处理器处理的时候,这部分时间就要分配给其他的进程。原来的进程就要处于等待的时间段
3、上。经过周密分配时间,宏观上就象是多个任务一起运行一样,但微观上是有先后的,就是时间片轮换。 (4) 多级反馈队列法:又称反馈循环队列或多队列策略, 主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列, 较高优先级的队列一般分配给较短的时间片。 处理器调度先从高级就绪进程队列中选取可占有处理器的进程, 只有在选不到时, 才从较低 级的就绪进程队列中选取。(5)短作业优先法:对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成, 或发生某事件而被阻塞放弃处理机时再重新调度。二设计方案2.1先来先服务调度2.1.1算法思
4、想先来先服务调度算法的思想是按照进程进入就绪队列的先后顺序调度并分配处理机执行。先来先服务调度算法是一种不可抢占的算法,先进入就绪队列的进程,先被处理机运行。一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某事件而不能继续运行时才释放处理机。2.1.2算法流程图图1.先来先服务算法流程图2.1.3程序代码#include stdlib.hstring.htypedef struct node char name10; /*进程名*/ int cputime; /*占用cpu时间*/ char starttime5; /进程开始时间 int needtime; /*要求
5、运行时间*/ char state; /*状态*/ struct node *next; /*指针*/PCB;PCB *ready, *run, *finish; /就绪、执行、结束指针int N; /进程数量void print() /输出函数 PCB *p; printf( NAME CPUTIME STARTTIME NEEDTIME STATUSn); if(run != NULL) printf( %-10s%-10d%-10s%-10d %cn, run-name,cputime,starttime,needtime,state); /*输出执行的进程的信息*/ p=ready;
6、while(p ! p- /*输出就绪进程的信息*/ p=p-next; p=finish; /*输出结束队列的信息*/ p=p- getchar(); /*使用getchar()函数可以让输出时停留画面, 等待人按回车继续*/ void insert(PCB *q) /*插入新进程,把进程按进程到来时间大小排序*/ PCB *p1,*s,*r; int b; s=q; /*指针s指向新要插入的进程*/ p1=ready; /*指针p1指向原来的进程队列的队首*/ r=p1; /*使用指针r是指向p1前面的进程*/ b=1; while(p1!=NULL)&b) if(strcmp(p1-st
7、arttime,s-starttime) /*新进程的开始时间大,则p1 指向下一个进程继续比*/ else b=0; if(r!=p1) r-next=s; s-next=p1; /*新进程找到位置,插在r和p1之间*/ else s- ready=s; /*新进程的开始时间按最小,插在队首,并修改就绪队首ready指针*/void create() int i; ready=NULL; run=NULL; finish=NULL;Please enter the name and time and starttime of PCB:n /*输入进程名、运行时间和开始时间*/ for(i=0
8、;iname); /*输入进程名*/%d,&p-needtime); /*输入进程要求运行时间*/starttime); /输入进程开始时间 p-cputime=0;state=W; /*表示就绪队列中未在队首先执行,但也是就绪状态*/ if (ready!=NULL) insert(p); /*就绪队首不为NULL,插入新进程*/ /*否则先插在NULL前*/next=ready; ready=p; Display is going to start: n*n print(); run=ready; /*队列排好,run指向就绪队列队首*/ ready=ready- /*ready指向下一个
9、进程*/ run-R /*队首进程的状态为就绪*/void FCFS() while(run !cputime=run-cputime+run-needtime;needtime=0;next=finish; finish = run;E run = NULL; if(ready ! run = ready; run- ready=ready- print();void main()Please enter the total number of PCB: scanf(N); create(); /*模拟创建进程,并输入相关信息*/ FCFS(); /*先来先服务调度算法*/2.1.4测试结果及说明首先输入进程个数(为5个),这里命名为A,B,C,D,E,然后分别输入运行时间和开始时间所有进程都在队列中,并都处于等待状态其中一个进程执行完毕所有进程都执行完毕2.2优先级调度2.2.1算法思想进程的执行顺序由高优先级到低优先级,系统或用户按某种原则为进程指定一个优先级来表示该进程所享有的确调度优先权。2.2.2算法流程图图2.优先级调度流程图2.2.3程序代码 char name10; int