作业进程调度算法设计与实现操作系统实验报告.doc_第1页
作业进程调度算法设计与实现操作系统实验报告.doc_第2页
作业进程调度算法设计与实现操作系统实验报告.doc_第3页
作业进程调度算法设计与实现操作系统实验报告.doc_第4页
作业进程调度算法设计与实现操作系统实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机操作系统 计0503 杨天心 29 实 验 报 告计算机操作系统作业/进程调度算法设计与实现课程名称 实验项目 实验仪器 院系 计算机学院 专业 计算机科学与技术 班级/学号 计0503 / 29 2007-11学生姓名 杨天心 实验日期 成绩 指导老师 实验二 作业/进程调度算法设计与实现一实验目的调度是操作系统的主要功能,本实验通过自行设计实现的调度程序,使同学们加深对作业/进程调度功能的理解,从而掌握操作系统的基本原理。同时还可以提高同学们的编程能力。二实验要求用C语言编制按优先级调度三个进程的调度程序,其中要求进程的优先级随着运行时间的延长而降低,但却随着等待时间的延长而升高。三实验方法内容(一)算法设计的思路1、 设计进程控制块为以下结构:struct PROchar 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 a3=100,100,100; int I, j, k, u, v, w=0, x=0, y=0; char c; /*获得时钟中断向量*/ /*设置新的中断向量*/ .while(xx10000) a0=100; v=prime(a0); if(v) gotoxy(2,4); printf(“a %6d %6d”, v, w+); break;case1:.case2:./*恢复时钟中断*/(二)题目理解说明: 从实验的题目可以看出本次实验的内容是在已经给定的结构上对程序进行补充完善。 通过对已给程序的分析,只需要完成时钟中断处理函数time(),进程选择程序select(),求素数函数prime()以及主函数中switch语句部分的程序编制即可。(三)算法的功能框架流程图Main()Time()Select()CBA中断到达时Prim()选择进程(四)此算法中用到的数据结构:进程实体结构,模拟PCB:struct PROchar id; /*进程id号 */int pri; /进程优先级int p; /*优先级递增量*/int s; /*优先级递减量*/int status; /进程状态(五)主要常量变量:INTR:存放中断号1ch的常量Xx:存放中断次数的全局变量Oldhandler:指向原中断处理程序的向量a3:对素数进行操作的数组空间(六)主要模块:1.中断处理函数void interrupt time(.)接管时钟中断,当中断到达时,对A,B,C三个进程数据结构中优先级pri进行修改。对正在运行的程序,优先级减去一个递减量s,对于未运行的程序,优先级增加一个的增量p。处理完成后,中断次数xx加1。2.进程选择函数char select()根据进程的优先级进行选择。选出优先级最高的进程,将其状态status设置为1,即为该进程分配处理机,投入运行,返回该进程的进程号id。将其他进程状态status设置为0,即剥夺处理机或不为其分配处理机。此函数模拟对PCB的操作。3求素数函数int prime (int n)用于判断n是否为素数。通过循环依次用从2到n的平方根对n取模。如果能被除尽,余数为零。跳出循环,返回0。如果始终没被除尽,表明n为素数,返回n。4.主函数void main ( )首先定义 所需要的变量,数组。获取中断,并将中断处理程序设置到time()函数上。输出提示信息后。便开始模拟进程调度过程。通过select()函数取得优先级最高的进程号。通过switch语句判别进程号,选中三个模拟的循环求素数进程的程序体中的一个,执行其中的内容,输出信息。如果中断次数xx小于300次,则继续调用select()函数选出进程并执行,直至满足这个条件。最后恢复系统原有的中断处理程序。四实验代码:ex2.c/=#include #include #include #include #define INTR 0x1C /INT 1Chint xx=0; /记录中断次数的全局变量void interrupt (*oldhandler)(.); /定义中断向量/进程控制块结构体struct PROchar id; /*进程id号 */int pri; /进程优先级int p; /*优先级递增量*/int s; /*优先级递减量*/int status; /进程状态A=a,2,1,1,0,B=b,1,1,1,0,C=c,0,1,1,0;/中断处理函数void interrupt time(.) int a;if(A.status=1) A.pri=A.pri-A.s;else A.pri=A.pri+A.p;if(B.status=1) B.pri=B.pri-B.s;else B.pri=B.pri+B.p;if(C.status=1) C.pri=C.pri-C.s;else C.pri=C.pri+C.p;xx+; /*进程选择函数*/char select() if(A.pri=B.pri&A.pri=C.pri) A.status=1;B.status=0;C.status=0;return A.id;else if(B.priA.pri&B.pri=C.pri) A.status=0;B.status=1;C.status=0;return B.id;else A.status=0;B.status=0;C.status=1;return C.id;/* 求素数函数*/int prime (int n)int k,i,j;k=sqrt(n);for(i=2;i=k;i+)if(n%i=0) return 0;return n;/主函数void main ( ) int a3=100,100,100; int u, v, w=0, x=0, y=0; char c;oldhandler=getvect(INTR); /*获取中断处理INT 1Ch*/setvect(INTR,time); /*将中断处理函数设为time()*/gotoxy(10,2); printf(THE PROCESSES ARE PLAYING:n);gotoxy(10,4); printf(Processid Prime Timesn);while(xx10000) a0=100; v=prime(a0); if(v) gotoxy(10,6); printf( A %6d %6d, v, w+); break;case b: a1+; if(a110000) a1=100; v=prime(a1); if(v) gotoxy(10,8); printf( B %6d %6d, v, x+); break;case c: a2+; if(a210000) a2=100; v=prime(a2); if(v) gotoxy(10,10); printf( C %6d %6d, v, y+); break;gotoxy(13,12); printf(TIME INTERRUPT %d,xx);setvect(INTR,oldhandler); /*恢复中断*/getchar();/=五执行结果:(一)结果截图:(二)结果分析:程序执行结果中process id代表了每个参与调度的进程号,prime为进程的程序体即求素数过程在最后一次执行时所求得的那个素数。Times中的数据为各个进程各自得出的素数的个数的总数。Time interrupt后的值为程序执行过程中中断的次数。该结果正好符合题目要求,达到了实验的目的。六用户操作指南:本程序没有过多涉及人机交互的处理,在程序调试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论