欢迎来到天天文库
浏览记录
ID:41723038
大小:79.85 KB
页数:9页
时间:2019-08-30
《实验一(进程调度)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验项目名称:进程管理一、实验目的进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实验要求学生独立的用高级语言编写和调试一个简单的进程调度程序。算法要求使用简单轮转法和优先数法。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。二、实验要求(1)设计一个有n个进程(可假定系统有五个进程)共行的进程调度程序。每一个进程用一个进程控制块PCB来代表。PCB中包含下列信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间及进程的状态等,且可按调度算法的不同而增减。各进程的优先数或轮转时间片数,以及进程运行需要地
2、时间片数,均由伪随机数发生器产生。(2)调度程序应包含2~3种不同的调度算法,运行时可任选一种。(3)每个进程处于运行R、就绪W和完成F三种状态之一,假定初始状态都为就绪状态W。(4)系统能显示或打印各进程状态和参数的变化情况。三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)1.程序流程图(见附图)2.逻辑设计使用链表表示就绪链(队列),每个元素包括进程名、进程优先数、进程需要运行的时间、占用CPU的时间及进程的状态等信息。该结构需支持以下操作:取头节点,在任意位置插入节点,删除头节点,判断表空。为此,引入2个指针变量:头指针HEAD和尾指针T
3、AILo3、物理设计stmctpcbtype〃进程控制块结构longid,priority,runtime,totaltime;charstatus;〃R,W,F->运行,就绪,完成}PCB[n+l];longlink[n+l];〃链表结构longRUN,HEAD,TAIL;//按照优先数人小设置就绪链for(i=l;i<=n;i++){for(j=n;j>i;j-){if(PCB[sort
4、j]].priority>PCB[sort[j-1]].priority){k=sort[j];sort
5、j]=sort[j-lj;sort[j-l]=k;})}HEAD=sort[l];for(i
6、=l;i7、一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。简单轮转法的基本思想是:所有就绪进程按FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。附录1:程序流程图开始附录2:源代码//操作系统实验■•进程调度〃优先数法和简单轮转法#include#include#include#includeconstlo8、ngn=5;structpebtype〃进程控制块结构(longid,priority,runtime,totaltime;charstatus;//R,W,F->运行,就绪,完成}PCB[n+l];longlink[n+1];〃链表结构longRUN,HEAD,TAIL;〃选择算法longChooseAlgo(){Jchars[128];printf(HPleasetypetheAlgorithm(Priority\RoundRobin):M);aptcf讦(s[0]=PIIs[0]=p)return1;return0;//初始化voidinit(){longi;for(i=l;i<9、=n;i++){PCB[i].id=i;PCB[i].priority=rand()%4+l;PCB[i].runtime=0;PCB[iJ.totaltime=rand()%8+l;PCB[i].status='W1;}〃显示进程调度状况voidshowit(){longi;printf(H%-25sn,”CPUTIME”);for(i=l;i<=n;i++)printf("%41d",PCB[iJ.runtime);prin
7、一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。简单轮转法的基本思想是:所有就绪进程按FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。附录1:程序流程图开始附录2:源代码//操作系统实验■•进程调度〃优先数法和简单轮转法#include#include#include#includeconstlo
8、ngn=5;structpebtype〃进程控制块结构(longid,priority,runtime,totaltime;charstatus;//R,W,F->运行,就绪,完成}PCB[n+l];longlink[n+1];〃链表结构longRUN,HEAD,TAIL;〃选择算法longChooseAlgo(){Jchars[128];printf(HPleasetypetheAlgorithm(Priority\RoundRobin):M);aptcf讦(s[0]=PIIs[0]=p)return1;return0;//初始化voidinit(){longi;for(i=l;i<
9、=n;i++){PCB[i].id=i;PCB[i].priority=rand()%4+l;PCB[i].runtime=0;PCB[iJ.totaltime=rand()%8+l;PCB[i].status='W1;}〃显示进程调度状况voidshowit(){longi;printf(H%-25sn,”CPUTIME”);for(i=l;i<=n;i++)printf("%41d",PCB[iJ.runtime);prin
此文档下载收益归作者所有