进程调度算法设计与实现一.实验目的调度是操作系统的主要功能,本 ....pdf
文本预览下载声明
进程调度算法设计与实现
一.实验目的
调度是操作系统的主要功能,本实验通过自行设计实现的调度程序,使同学们加深
对作业/进程调度功能的理解,从而掌握操作系统的基本原理。同时还可以提高同学们
的编程能力。
二.实验要求
用 C 语言编制按优先级调度三个进程的调度程序,其中要求进程的优先级随着运行
时间的延长而降低,但却随着等待时间的延长而升高。
三.实验方法内容
(一)算法设计的思路
1、设计进程控制块为以下结构:
struct PRO
﹛
char id; /*进程的 id号,可以表示为 a, b, c */
int pri; /*进程的初始优先级*/
int p; /*等待进程可以动态增加的优先级量*/
int s; /*运行进程应该动态减少的优先级量*/
int status; /*表示进程的状态,0 为等待,1 为运行*/
﹜A={‘a’,2,1,1,0},B={‘b’,1,1,1,0}, C={‘c’,0,1,1,0};
2、 要求接管时钟中断:INT 1Ch
使用到的 C语言函数为:
getvect(intno) /*获得 intno的中断向量*/(要求保存在一个全局变量中)
setvect(intno,time) /*设置 intno的中断向量为函数 time的入口地址*/
3、 在自己编制的新的时钟中断处理程序中,完成进程优先级的修改;并记录被中断的
次数。
Void interrupt time( )
{
if(A.status 1) A.pri=A.pri-A.s;
else A.pri=A.pri+A.p;
……..
…….
xx++;
}
4、 编制函数 select( ),其功能是从三个进程中选择优先级最高的进程,并将其状态
设置为运行,其余设置为等待。并返回运行进程的序号供主程序选择运行。
5、 编制函数 int prime (int n),功能是判断 n 是否为素数,如果是素数,返回 n;
否则返回 0。该函数是三个进程的执行过程。
6、 主程序框架如下:
main ( )
{ int a[3]={100,100,100};
int I, j, k, u, v, w=0, x=0, y=0;
char c;
/*获得时钟中断向量*/
/*设置新的中断向量*/
………..
while(xx300) /*xx 是全局变量,用于记录时钟中断的次数;用循环来模拟三个
进程的运行过程*/
{u=select ( ); /*调度一次*/
switch (u)
{case0: a[0]++; if(a[0]10000) a[0]=100; v=prime(a[0]);
if(v) {gotoxy(2,4); printf(“a %6d %6d”, v, w++);}
break;
case1:…………………..
case2:…………………..
}
}
/*恢复时钟中断*/
}
(二)题目理解说明:
从实验的题目可以看出本次实验的内容是在已经给定的结构上对程序进行补充完善。
通过对已给程序的分析,只需要完成时钟中断处理函数 time(),进程选择程序 select(),
求素数函数 prime()以及
显示全部