欢迎来到天天文库
浏览记录
ID:6603350
大小:263.06 KB
页数:35页
时间:2018-01-20
《《操作系统》综合实训项目设计-基于多队列反馈的进程调度》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《操作系统》综合实训项目设计文档【大纲】(不用打印,提交电子稿即可!)一、基本信息项目名称:成人姓名、学号、完成日期项目名称:基于时间片的多队列反馈的进程管理系统完成日期:2017.5.24二、实验内容与目的实验内容:编写程序完成单处理器系统的进程调度,要求采用基于时间片多队列反馈式调度策略调度策略。具体内容:1.确定PCB内容及其组织方式。2.要求模拟进程空闲(新)、就绪、运行、阻塞和完成5个状态。3.实现进程创建、进程调度、进程阻塞、进程唤醒和进程撤销5个原语。4.能够模拟进程从生到灭的完整过程。实
2、验目的:1.加深进程概念理解,明确进程与程序区别。2.理解操作系统中进程的组织、创建和调度等方法。一、主要设计思路和流程图设计思路:1定义数据结构2.设置队列3.创建进程4.创建的进程进入就绪队列5.多级反馈调度1.)在第一就绪队列里的进程被调度运行,进程状态由等待变为运行,设置时间片计数器,每次运行加1,时间片满后,该进程出队列,进入下一级别的就绪队列。若是在最后一级别的队列,则在该队列中进行时间片轮转调度2.)运行进程若是被阻塞的话,该进程出就绪队列,进入阻塞队列,状态变为阻塞态3.)若是唤醒被阻塞
3、进程,则阻塞进程根据其时间片计数器计入相应的就绪队列4.)撤销进程,该进程直接出就绪队列二、主要数据结构及其说明typedefstructNode{charname[20];charstate;//进程所处的状态,N新建,W等待,B阻塞,R运行,F结束intround;//时间片计数器inttime;//运行时间structNode*next;}LinkQueueNode,*PCB;//定义PCBtypedefstruct{LinkQueueNode*front;LinkQueueNode*rear;}
4、LinkQueue;//定义队列voidinitQueue(LinkQueue*Q)//队列的初始化函数voidInitializa()//初始化所有队列voidRunPrintf()//打印运行队列voidBlockPrintf()//打印阻塞队列voidReadyPrintf(LinkQueueq)//打印就绪队列voidputout()//输出函数voidEnterQueue(LinkQueue*Q,PCB*p)//进程插入队列函数intDeleteQueue(LinkQueue*Q,PCB*p)
5、//进程出队列voidTransferRun(LinkQueue*q1,LinkQueue*q2,PCBq)//进程出就绪队列,入运行队列voidTransfer(LinkQueue*q1,LinkQueue*q2,PCBq)//进程唤醒或阻塞时队列转换的函数intMultiDiapatch()//调度函数,若此队列运行的进程时间片满,则进入下一级队列intrun()//模拟运行voidblock()//模拟阻塞voidwake()//模拟唤醒intCreateprocess(LinkQueue*Q)/
6、/进程的创建voidmeanu()//菜单函数一、程序运行时的初值和运行结果一、源程序并附上注释【可是另一个源程序文件,在此应说明该文件名】#include#include#include#includetypedefstructNode{charname[20];charstate;//进程所处的状态,N新建,W等待,B阻塞,R运行,F结束intround;//时间片计数器inttime;//运行时间structNode*next
7、;}LinkQueueNode,*PCB;//定义PCBtypedefstruct{LinkQueueNode*front;LinkQueueNode*rear;}LinkQueue;intcount=0;LinkQueueqRun,qBlock,qReady1,qReady2,qReady3,qReady4;//定义四个就绪队列voidinitQueue(LinkQueue*Q)//队列的初始化函数{Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNod
8、e));if(Q->front!=NULL){Q->rear=Q->front;Q->front->next=NULL;}}voidInitializa()//初始化所有队列{initQueue(&qRun);initQueue(&qBlock);initQueue(&qReady1);initQueue(&qReady2);initQueue(&qReady3);initQueue(&qReady4);}voidRunPrintf()//
此文档下载收益归作者所有