欢迎来到天天文库
浏览记录
ID:57275838
大小:220.00 KB
页数:17页
时间:2020-08-08
《实验一-进程调度——starof.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一进程调度一.实验题目:1、编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。二:实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.三.实验内容:最高优先级优先调度算法1)优先级简介动态优先数是指在进程创建时先确定一个初始优先数,以后在进程运行中随着进程特性的改变不断修改优先数,这样,由于开始优先数很低而得不到CPU的进程,就能因为等待时间的增长而优先数变为最高而得到CPU运行。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待
2、的时间超过某一时限时增加其优先数的值,等等。2)详细设计优先权调度算法:1、设定系统中有五个进程,每一个进程用一个进程控制块(PCB)表示,进程队列采用链表数据结构。2、进程控制块包含如下信息:进程名、优先数、需要运行时间、已用CPU时间、进程状态等等。3、在每次运行设计的处理调度程序之前,由终端输入五个进程的“优先数”和“要求运行时间”。4、进程的优先数及需要的运行时间人为地指定.进程的运行时间以时间片为单位进行计算。5、采用优先权调度算法,将五个进程按给定的优先数从大到小连成就绪队列。用头指针指出队列首进程,队列采用链表结构。6、处理机调度总是选队列首进程运行。采用动态优先数办法,进程每
3、运行一次优先数减“1”,同时将已运行时间加“1”。7、进程运行一次后,若要求运行时间不等于已运行时间,则再将它加入就绪队列;否则将其状态置为“结束”,且退出就绪队列。8、“就绪”状态的进程队列不为空,则重复上面6,7步骤,直到所有进程都成为“结束”状态。9、在设计的程序中有输入语句,输入5个进程的“优先数”和“要求运行时间”,也有显示或打印语句,能显示或打印每次被选中进程的进程名、运行一次后队列的变化,以及结束进程的进程名。10、最后,为五个进程任意确定一组“优先数”和“要求运行时间”,运行并调试所设计的程序,显示或打印出逐次被选中进程的进程名及其进程控制块的动态变化过程。3)流程图:图一.
4、最高优先级优先调度算法流程图4)源程序:#include"stdio.h"#include#include#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0structpcb/*定义进程控制块PCB*/{charname[10];//进程名charstate;//进程状态intsuper;//进程优先级intntime;//进程需要运行时间intrtime;//进程已经运行的时间structpcb*link;}*ready=NULL,*p;typedefstructpcbPCB;voids
5、ort()/*建立对进程进行优先级排列函数*/{PCB*first,*second;intinsert=0;if((ready==NULL)
6、
7、((p->super)>(ready->super)))/*优先级最大者,插入队首*/{p->link=ready;ready=p;}else/*进程比较优先级,插入适当的位置中*/{first=ready;second=first->link;while(second!=NULL){if((p->super)>(second->super))/*若插入进程比当前进程优先数大,*/{/*插入到当前进程前面*/p->link=second;first-
8、>link=p;second=NULL;insert=1;}else/*插入进程优先数最低,则插入到队尾*/{first=first->link;second=second->link;}}if(insert==0)first->link=p;}}voidinput()/*建立进程控制块函数*/{inti;system("cls");/*清屏*/printf("请输入五个进程信息:");for(i=0;i<5;i++){printf("进程号No.%d:",i);p=getpch(PCB);printf("输入进程名:");scanf("%s",p->name);prin
9、tf("输入进程优先数:");scanf("%d",&p->super);printf("输入进程运行时间:");scanf("%d",&p->ntime);printf("");p->rtime=0;p->state='w';p->link=NULL;sort();/*调用sort函数*/}}intspace()//计算进程控制块的个数{intl=0;PCB*pr=ready;while(pr!
此文档下载收益归作者所有