欢迎来到天天文库
浏览记录
ID:35625846
大小:216.50 KB
页数:13页
时间:2019-04-03
《《操作系统课程设计》报告--操作系统时间片轮算法课程设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《操作系统课程设计》报告《操作系统课程设计》报告学号:20090307110姓名:张乐乐班级:09软件(1)指导教师:王月敏报告日期:13《操作系统课程设计》报告目录一.设计目的3二.设计内容3三.设计原理4四.算法实现4五.流程图5六.源程序6七.运行结果10八.体会1113《操作系统课程设计》报告一.设计目的处理机调度是操作系统中非常重要的部分。为深入理解进程管理部分的功能,设计时间片轮转法进行CPU调度算法,模拟实现处理机的调度。通过本次课程设计理解进程调度的概念,深入理解进程控制的功能、进程的创建与删除以及进程各个状态之间的转换过程,实现时间片
2、轮转算法调度进程。学会使用C++语言编写和调试一个简单的时间片轮转法进行CPU调度的程序,加深了解有关进程控制块和进程队列的概念,并体会时间片轮转算法的具体实现方法。二.设计内容用时间片轮转算法模拟单处理机调度。(1)建立一个进程控制块PCB来代表。PCB包括:进程名、链接指针、到达时间、估计运行时间、剩余时间和进程状态。进程状态分为就绪(P)、运行(W)和完成(F)。(2)为每个进程任意确定一个要求运行时间和到达时间。(3)按照进程到达的先后顺序排成一个循环队列。再设一个对首指针指向第一个到达进程的首址。(4)执行处理机调度时,开始选择对首的第一个进
3、程运行。另外再设一个当前运行进程的指针,指向当前正运行的进程。(5)执行:a)预计运行时间减1;b)输出当前运行进程的名字。(6)进程执行一次后,若该进程的剩余运行时间为零,则将该进程的状态置为完成态F,并退出循环队列;若不为空,则将其移至队尾。继续在运行队首的进程。(7)若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。在所设计的调度程序中,要求包含显示或打印语句。以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。13《操作系统课程设计》报告三.设计原理在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成
4、一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程再一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能再给定的时间内响应所有用户的请求。四.算法实现1)系统初始化时给每一个进程赋以一个needtime,并将所有进程按needtime从小到大的次序排成一个队列。2)取队头进程
5、,并投入运行。3)采用相对固定时间片(Time_piece),进程每执行一次,进程占用的CPU时间加Time_piece。4)若进程没有运行完,进程needtime减Time,并排到就绪队列的尾部。5)如果尚有进程在队列中,那么转入2)PCB结构:N进程个数name进程名needtime估计运行时间state进程状态(R,W,C)reachtime到达时间node*next指向下一个进程的指针*finish指向三个队列的队首的指针*ready就绪队列头指针*tail就绪队列的队尾指针*run当前运行进程指针13《操作系统课程设计》报告voidrunNe
6、xt()/*从就绪队列取得第一个节点*/voidlistPrt()//创建进程的列表名称voidinfPrt(PCB*p)//列表内容voidoutput()/*输出队列信息*/voidinsert(PCB*q)//插入队尾标记voidrcreate_task()//创建用户给定数目的进程voidroundrun()//时间片轮转调度voidcaidan()//主目录intmain()//主函数五.流程图结束开始选择增加进程继续增加结束进程PCB顺序PCB顺序打印进程调度进程是13《操作系统课程设计》报告六.源程序/******************
7、*时间片轮转算法**********************/#include#includeusingnamespacestd;typedefstructnode{charname[10];//进程名intreachtime;//到达时间或进入顺序intneedtime;//估计运行时间charstate;//进程的状态:'W':运行,'R':就绪,'C':结束structnode*next;/*指向下一个进程的指针*/}PCB;PCB*finish,*ready,*tail,*run;/*指向三个队列的队首的
8、指针,tail为就绪队列的队尾指针*/intN;/*定义进程的数目*/voidrunNext(
此文档下载收益归作者所有