- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计CPU时间片轮转算法
目 录
一、 设计目的 1
二、 设计内容 1
三、设计原理 2
四、 算法实现 2
五、 流程图 4
六、 源程序 5
七、 运行示例及结果分析 12
八、心得体会 14
九、参考资料 14
时间片轮转法进行CPU调度
设计目的
处理机调度是操作系统中非常重要的部分。为深入理解进程管理部分的功能,设计时间片轮转法进行CPU调度算法,模拟实现处理机的调度。通过本次课程设计理解进程调度的概念,深入理解进程控制的功能、进程的创建与删除以及进程各个状态之间的转换过程,实现时间片轮转算法调度进程。
学会使用C++语言编写和调试一个简单的时间片轮转法进行CPU调度的 程序。
加深了解有关进程控制块和进程队列的概念。
并体会时间片轮转算法的具体实现方法。
设计内容
用时间片轮转算法模拟单处理机调度。
建立一个进程控制块PCB来代表。PCB包括:进程名、链接指针、到达时间、估计运行时间、剩余时间和进程状态。
进程状态分为就绪(P)、运行(W)和完成(F)。
为每个进程任意确定一个要求运行时间和到达时间。
按照进程到达的先后顺序排成一个循环队列。再设一个对首指针指向第一个到达进程的首址。
执行处理机调度时,开始选择对首的第一个进程运行。另外再设一个当前运行进程的指针,指向当前正运行的进程。
执行: a)预计运行时间减1;
b)输出当前运行进程的名字。
进程执行一次后,若该进程的剩余运行时间为零,则将该进程的状态置为完成态F,并退出循环队列;若不为空,则将其移至队尾。继续在运行队首的进程。
若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。
在所设计的调度程序中,要求包含显示或打印语句。以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
三、设计原理
在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程再一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能再给定的时间内响应所有用户的请求。
算法实现
1)系统初始化时给每一个进程赋以一个needtime,并将所有进程按needtime从小到大的次序排成一个队列。
取队头进程,并投入运行。
采用相对固定时间片(Time_piece),进程每执行一次,进程占用的CPU时间加Time_piece。
若进程没有运行完,进程needtime减Time,并排到就绪队列的尾部。
如果尚有进程在队列中,那么转入2)PCB结构:N 进程个数
name 进程名 Time_piece 进程优先数/进程轮转时间片 Cpu_time 进程占用的CPU时间 Need_time 进程到完成还要的时间
Count 计数器
State 进程状态(P,W,F)
Arrive_time到达时间
next 链指针
run 当前运行进程指针
start 就绪队列头指针
end 就绪队列尾指针
finish 完成队列头指针 void insert(PCB *p) //时间片插入函数
void create() //时间片算法创建进程函数
void roundrobin() //时间片算法函数
void firstin() //运行就绪队列的第一个进程
流程图
图1
源程序
Dos版:
#include iostream.h
#include string.h
#include stdlib.h
typedef struct node {
char name[10];//进程名
int Time_piece;//时间片
int Need_time;//还需要的时间
int Count;//计数器
char State;//进程的状态
struct node *next;//链指针
int Arrive_time;//到达时间
}PCB;
//run为当前运行进程指针,star
文档评论(0)