预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

仅供个人参考 实验报告 课程名称计算机操作系统 实验项目作业/进程调度算法设计与实现 实验仪器 院系计算机学院 专业计算机科学与技术 班级/学号计0503/29 学生姓名杨天心 实验日期2007-11 成绩 指导老师 不得用于商业用途 仅供个人参考 实验二作业/进程调度算法设计与实现 一.实验目的 调度是操作系统的主要功能,本实验通过自行设计实现的调度程序,使同学们加深 对作业/进程调度功能的理解,从而掌握操作系统的基本原理。同时还可以提高同学们 的编程能力。 二.实验要求 用C语言编制按优先级调度三个进程的调度程序,其中要求进程的优先级随着运 行时间的延长而降低,但却随着等待时间的延长而升高。 三.实验方法内容 (一)算法设计的思路 1、设计进程控制块为以下结构: structPRO ﹛ charid;/*进程的id号,可以表示为a,b,c*/ intpri;/*进程的初始优先级*/ intp;/*等待进程可以动态增加的优先级量*/ ints;/*运行进程应该动态减少的优先级量*/ intstatus;/*表示进程的状态,0为等待,1为运行*/ ﹜A={‘a’,2,1,1,0},B={‘b’,1,1,1,0},C={‘c’,0,1,1,0}; 2、要求接管时钟中断:INT1Ch 使用到的C语言函数为: getvect(intno)/*获得intno的中断向量*/(要求保存在一个全局变量中) setvect(intno,time)/*设置intno的中断向量为函数time的入口地址*/ 3、在自己编制的新的时钟中断处理程序中,完成进程优先级的修改;并记录被中断的 次数。 Voidinterrupttime() { if(A.status==1)A.pri=A.pri-A.s; elseA.pri=A.pri+A.p; …….. ……. xx++; } 不得用于商业用途 仅供个人参考 4、编制函数select(),其功能是从三个进程中选择优先级最高的进程,并将其状态设 置为运行,其余设置为等待。并返回运行进程的序号供主程序选择运行。 5、编制函数intprime(intn),功能是判断n是否为素数,如果是素数,返回n;否则 返回0。该函数是三个进程的执行过程。 6、主程序框架如下: main() {inta[3]={100,100,100}; intI,j,k,u,v,w=0,x=0,y=0; charc; /*获得时钟中断向量*/ /*设置新的中断向量*/ ……….. while(xx<300)/*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()以及主函数中switch语句部分的程序编制即可。 (三)算法的功能框架流程图 Main() Time()ASelect()Prim() CB 中断到达选择进程 不得用于商业用途 仅供个人参考 (四)此算法中用到的数据结构: 进程实体结构,模拟PCB: structPRO { charid;/*进程id号*/ intpri;//进程优先级 intp;/*优先级递增量*/ ints;/*优先级递减量*/ intstatus;//进程状态 } (五)主要常量变量: INTR:存放中断号1ch的常量 Xx:存放中断次数的全局变量 Oldhandler:指向原中断处理程序的向量 a[3]:对素数进行操作的数组空间 (六)主要模块: 1.中断处理函数 voidinterrupttime(...) 接管时钟中断,当中断到达时,对A,B,C三个进程数据结构中优先级pri进行修改。 对正在运行的程序,优先级减去一个递减量s,对于未运行的程序,优先级增加一个的增量 p。处理完成后,中断次数xx加1。 2.进程选择函数 charselect() 根据进程的优先级进行选择。选出优先级最高的进程,将其状态status设置为1,即为 该进程分配处理机,投入运行,返回该进程的进程号id。将其他进程状态s