程序能够完成以下操作:创建进程:先输入进程的数目,再一次输入每个进程的进程名、运行总时间和优先级,先到达的先输入;进程调度:
进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。
在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。
本次实验在vc++6.0环境下实现先来先服务调度算法,短作业优先调度算法,高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。
为了描述和管制进程的运行,系统为每个进程定义了一个数据结构——进程控制块pcb(process control block),pcb中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过pcb对进程进行控制,亦即,系统是根据进程的pcb而不是任何别的什么而感知进程的存在的,pcb是进程存在的惟一标志。本次课程设计用结构体process代替pcb的功能。
一、 用c语言(或c++)编程实现操作模拟操作系统进程调度子系统的基本功能;运用多种算法实现对进程的模拟调度。
二、 通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、短作业优先、多级反馈队列调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。
三、 实现用户界面的开发。
1、进程概念:进程是被独立分配资源的最小单位。进程是动态概念,必须程序运行才有
进程的产生。
2、进程的状态模型:
1)运行:进程已获得处理机,当前处于运行状态。
2)就绪:进程已经准备好,一旦有处理器就可运行。
3、处理机调度:在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机
这一重要的资源。处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将。
处理机分配给它运行,以实现进程并发地执行。
4、进程调度算法的功能:
记录系统中所有进程的执**况。
选择占有处理机的进程。
进行进程的上下文切换。
5、进程调度的算法:
1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在
就绪队列的后面,那么先来先服务总是把当前处于就绪队列之首的那个进程调。
度到运行状态。
2)优先数算法:即进程的执行顺序由高优先级到低优先级。系统或用户按某种原则为进程指定一个优先级来表示该进程所享有的确调度优先权。该算法核心是确定进程的优先级。
3)时间片轮转算法:固定时间片,每个进程在执行一个时间片后,轮到下一进程执行,知道所有的进程执行完毕。处理器同一个时间只能处理一个任务。
处理器在处理多任务的时候,就要看请求的时间顺序,如果时间一致,就要进行**。挑到一个任务后,需要若干步骤才能做完,这些步骤中有些需要处理器参与,有些不需要(如磁盘控制器的存储过程)。不需要处理器处理的时候,这部分时间就要分配给其他的进程。
原来的进程就要处于等待的时间段上。经过周密分配时间,宏观上就象是多个任务一起运行一样,但微观上是有先后的,就是时间片轮换。
(4) 多级反馈队列法:又称反馈循环队列或多队列策略, 主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列, 较高优先级的队列一般分配给较短的时间片。 处理器调度先从高级就绪进程队列中选取可占有处理器的进程, 只有在选不到时, 才从较低级的就绪进程队列中选取。
5)短作业优先法:对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成, 或发生某事件而被阻塞放弃处理机时再重新调度。
先来先服务调度算法的思想是按照进程进入就绪队列的先后顺序调度并分配处理机执行。先来先服务调度算法是一种不可抢占的算法,先进入就绪队列的进程,先被处理机运行。一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某事件而不能继续运行时才释放处理机。
图1.先来先服务算法流程图。
#include <>
#include <>
#include <>
typedef struct node
char name[10]; 进程名*/
int cputime占用cpu时间*/
char starttime[5]; 进程开始时间。
int needtime; /要求运行时间*/
char state状态*/
struct node *next; /指针*/
pcb;pcb *ready, *run, *finish; /就绪、执行、结束指针。
int n; /进程数量。
void print() 输出函数。
pcb *p;
printf(" name cputime starttime needtime status");
if(run !=null)
printf(" 10s%-10d%-10s%-10d %c",run->name,run->cputime,run->starttime,run->needtime,run->state); 输出执行的进程的信息*/
p=ready;
while(p !=null)
p=finish;
while(p !=null)
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->starttime,s->starttime)<0)
r=p1; p1=p1->next;
新进程的开始时间大,则p1 指向下一个进程继续比*/
else b=0
if(r!=p1)
r->next=s; s->next=p1;
新进程找到位置,插在r和p1之间*/else
s->next=p1; ready=s;
新进程的开始时间按最小,插在队首,并修改就绪队首ready指针*/
void create
pcb *p;
int i;
ready=null;
run=null;
finish=null;
printf("please enter the name and time and starttime of pcb:");
/*输入进程名、运行时间和开始时间*/
for(i=0;i {
p=(pcb *)malloc(sizeof(pcb));为新进程开辟空间*/
scanf("%s",p->name); 输入进程名*/
scanf("%d",&p->needtime); 输入进程要求运行时间*/
scanf("%s",p->starttime); 输入进程开始时间。
p->cputime=0;
p->state='w'; 表示就绪队列中未在队首先执行,但也是就绪状态*/
if (ready!=null)
insert(p); 就绪队首不为null,插入新进程*/
else 否则先插在null前*/
p->next=ready;
ready=p;
printfdisplay is going to startn");
printfn");
print();
getchar();
run=ready; /队列排好,run指向就绪队列队首*/
ready=ready->next; /ready指向下一个进程*/
run->state='r'; 队首进程的状态为就绪*/
void fcfs()
while(run !=null)
run->cputime=run->cputime+run->needtime;
run->needtime=0;
进程模拟调度算法课程设计
一 课程概述。程序能够完成以下操作 创建进程 先输入进程的数目,再一次输入每个进程的进程名 运行总时间和优先级,先到达的先输入 进程调度 进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并...
进程调度算法操作系统课程设计
操作系统原理。课程设计报告。题目 进程调度算法。班级 软件09 姓名 李宗仁 指导老师 张老师 进程调度算法。一 实验目的。通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。二 实验内容。1 用c语言或c 语言来实现对n...
算法与数据结构课程设计进程调度算法
第二题 进程调度。一 实验目的。多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二 实验要求 1 要求学生设计并实现模拟进程调度的算法 时间片轮转及先来先服务。2 理解...