在时间片轮转调度中,如果一个进程在一个时间片内就已经运行结束,那剩下的时间片时间怎么利用
如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。结束的进程会从运行队列中清除,剩下的时间片随进程结构的清除而清除,并不影响到其他进程的调度。时间片由操作系统内核的调度程序分配给每个进程。首先,内核会给每个进程分配相等的初始时间片,然后每个进程轮番地执行相应的时间,当所有进程都处于时间片耗尽的状态时,内核会重新为每个进程计算并分配时间片,如此往复。在每个进程的task_struct结构中有以下四项:policy、priority、counter、rt_priority。这四项是选择进程的依据。其中,policy是进程的调度策略,用来区分实时进程和普通进程,实时进程优先于普通进程运行;priority是进程(包括实时和普通)的静态优先级。counter是进程剩余的时间片,它的起始值就是priority的值;由于counter在后面计算一个处于可运行状态的进程值得运行的程度goodness时起重要作用,因此,counter也可以看作是进程的动态优先级。rt_priority是实时进程特有的,用于实时进程间的选择。扩展资料:时间片长度的影响:时间片轮转调度中特别需要关注的是时间片的长度。从一个进程切换到另一个进程是需要一定时间的--保存和装入寄存器值及内存映像,更新各种表格和队列等。假如进程切换(process switch) - 有时称为上下文切换(context switch),需要5毫秒,再假设时间片设为20毫秒,则在做完20毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。CPU时间的20%被浪费在了管理开销上。为了提高CPU效率,我们可以将时间片设为500毫秒。假设所有其他进程都用足它们的时间片的话,最后一个不幸的进程不得不等待5秒钟才获得运行机会。多数用户无法忍受一条简短命令要5秒钟才能做出响应。同样的问题在一台支持多道程序的个人计算机上也会发生。结论可以归结如下:时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。参考资料来源:百度百科-时间片轮转参考资料来源:百度百科-时间片参考资料来源:百度百科-进程调度
操作系统的时间片轮转法具体的算法
四、算法实现
1)系统初始化时给每一个进程赋以一个needtime,并将所有进程按needtime从小到大的次序排成一个队列。
2) 取队头进程,并投入运行。
3) 采用相对固定时间片(Time_piece),进程每执行一次,进程占用的CPU时间加Time_piece。
4) 若进程没有运行完,进程needtime减Time,并排到就绪队列的尾部。
5) 如果尚有进程在队列中,那么转入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() //运行就绪队列的第一个进程
你可以到这个地址下载文章看一下。
'http://wenku.baidu.com/view/f3bca1d333d4b14e85246830.html'
时间片轮转调度算法中同一时刻时一个进程时间片完,另一个到达,那个会先调用?
那个时刻,顺序是:先入队,调整队,队首进程执行。
所以,新程序先入队,调整队把第一个进程放在队尾了,最后执行在队头的进程
所以你说的“第一个进程”(就是没完成的那个)在队尾
想像一下,如果队中只有一个没有完成的进程,结束之后不是放在队尾,这样不是刚进来的进程都要放在它的后面执行吗?这样是不是对刚来的家伙不公平呢?但是实际上不同的进程调度算法实现起来是不一样的,你也可以自己写一个,让新来的给前辈让路。
我参照的是汤小丹的《计算机操作系统》教材的实现方式。
希望能帮到你