欢迎来到天天文库
浏览记录
ID:8315711
大小:121.50 KB
页数:12页
时间:2018-03-18
《os计算机操作系统课程实验报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、肇庆学院计算机科学与软件学院《计算机操作系统》课程实验报告姓名:学号:班级:完成日期:实验题目进程调度模拟程序实验形式小组合作□独立完成□设计目的1.加深对进程、进程控制块及进程队列等概念的理解。2.了解优先数和时间片轮转调度算法的具体实施办法,加深对进程管理各部分内容的理解。设计预备知识1.进程管理。2.优先数调度算法、时间片轮转算法。设计内容可按实际情况选择一下列出的1个题目:1.设计一个采用优先数调度算法的模拟进程调度程序。2.设计一个采用时间片轮准调度算法的模拟进程调度程序。3.进程调度模拟
2、程序的设计(包括至少两种调度算法)。要求如下:(1)设计进程控制块PCB表结构,分别适用于优先权调度算法和时间片轮转调度算法。PCB结构包括以下信息:进程名、进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可以作适当的增删。(2)建立进程就绪队列。对两种不同算法编制入链子程序。(3)设计的程序中能显示或打印进程控制块的动态变化过程。一、设计理论描述(1)抢占式优先权调度算法进程按照优先数的大小进行排队,优先数最高的先执行,直到出现另
3、一个优先权更高的进程,进程调度便停止当前进程的执行,重新将处理机分配给新到的优先权更高的进程。(2)时间片轮转法(先来先服务原则)进程按先来先服务原则将所有的进程排队,每次调度时,把CPU分配给队首进程,并令其执行一个时间片,当时间片用完,则把它送入队列末尾,再执行下一个进程,如此循环。二、设计思想、设计分析及数据结构模型程序中利用快速排序算法,效率更高,通过此算法可以确定进程的入队顺序。然后再按照不同的算法要求执行进程。程序中用到的数据结构:快速排序函数:intcmp(constvoid*a,co
4、nstvoid*b){//快速排序的函数;node*c=(node*)a;node*d=(node*)b;returnd->degree-c->degree;}进程间的复制:voidcopy(intn,node*PCB,node*PCB_tem){//进程间的复制;加入这个函数,是为了可以选择多个运行,调用每个算法时,不用重新输入每个进程的值;//不改变它的值;如PCB_tem复制到PCB,如果没有这个函数,那么PCB的值就会改变;inti;for(i=0;i5、e=PCB_tem[i].degree;PCB[i].rtime=PCB_tem[i].rtime;strcpy(PCB[i].name,PCB_tem[i].name);strcpy(PCB[i].state,PCB_tem[i].state);}}队列的使用:具体表现在进程的出队入队。三、变量说明及程序流程图charname[20];进程名intdegree;优先权intrtime;运行所要的时间charstate[30];运行状态inc计数器请选择:1、优先权调度算法2、时间片轮转调度算法0、6、退出case'1':调用函数f1();case'2':调用函数f2();开始函数f1()实现优先权调度算法函数f2()实现时间片轮转调度算法Case'0':退出程序函数说明:四、源代码#include#include#include#include#include"conio.h"usingnamespacestd;typedefstructnode{charname[20];intdegree;//优先权;intrtime;/7、/运行所要的时间;charstate[30];}node;intcmp(constvoid*a,constvoid*b){//快速排序的函数;node*c=(node*)a;node*d=(node*)b;returnd->degree-c->degree;}voidwork(intn,node*PCB){//优先权调度算法,程序的核心;inti,inc=0;while(1){qsort(PCB,n,sizeof(PCB[0]),cmp);//排序,相当于进一个队列了;printf("namedeg8、reertimestate");printf("%s%d%d%s",PCB[0].name,PCB[0].degree,PCB[0].rtime,"正在运行");for(i=1;i
5、e=PCB_tem[i].degree;PCB[i].rtime=PCB_tem[i].rtime;strcpy(PCB[i].name,PCB_tem[i].name);strcpy(PCB[i].state,PCB_tem[i].state);}}队列的使用:具体表现在进程的出队入队。三、变量说明及程序流程图charname[20];进程名intdegree;优先权intrtime;运行所要的时间charstate[30];运行状态inc计数器请选择:1、优先权调度算法2、时间片轮转调度算法0、
6、退出case'1':调用函数f1();case'2':调用函数f2();开始函数f1()实现优先权调度算法函数f2()实现时间片轮转调度算法Case'0':退出程序函数说明:四、源代码#include#include#include#include#include"conio.h"usingnamespacestd;typedefstructnode{charname[20];intdegree;//优先权;intrtime;/
7、/运行所要的时间;charstate[30];}node;intcmp(constvoid*a,constvoid*b){//快速排序的函数;node*c=(node*)a;node*d=(node*)b;returnd->degree-c->degree;}voidwork(intn,node*PCB){//优先权调度算法,程序的核心;inti,inc=0;while(1){qsort(PCB,n,sizeof(PCB[0]),cmp);//排序,相当于进一个队列了;printf("namedeg
8、reertimestate");printf("%s%d%d%s",PCB[0].name,PCB[0].degree,PCB[0].rtime,"正在运行");for(i=1;i
此文档下载收益归作者所有