进程调度时机

进程调度现在用的是完全公平算法策略;

调度是个过程,需要时间和合适的时机。一般上下文 分为中断上下文和进程上下文。所谓上下文就是说当前代码运行所处的环境,假如说 当前cpu正在处理某个进程A的 计算任务,此时就算是再进程上下文。突然有个硬件信号,中断来了,cpu开始跑中断的任务了。这个时候就算是 中断上下文了(终端环境)。中断处理完会返回进程上下文。上面说到一个进程A再进程上下文状态,如果能保存好进程A的上下文信息,那么就可以从后面中断跑完后继续执行进程A暂停的任务(无论之前进程是再用户态还是内核态,因为有用户栈和内核栈)。既然如此对于另外一个进程B也是如此。只要管理好各自的上下文信息就可以完成 ,进程的中断和恢复工作。

   上面提到一个内核态进程,如果进程前用户处于内核态,如果暂停进程就要保存内核态进程的上下文信息。有一种情况 就不需要保存上下文信息,就是系统调用结束。因为他把自己要处理的事情做完了。相当于要清理内核栈了。有人再问不能并发执行任务嘛,多个事情做把内核栈清掉 那其他并发任务不久乱了?不会,并发任务,是通过多线程进行。每个线程维护自己的 内核栈(包括用户栈)。而且每个线程 (任务)同一时间只能在一个cpu上运行。异步线程通讯会有进程通讯机制相会协同合作。总之这个时候内核态的事情做完了。

所以 目前找到两个点 ,中断任务结束时或者系统调用处理完时接下来再次返回用户态时候,这两个时间 都不需要关心目前状态的上下文。这个时候通过调度程序 就要小心的切换到需要进程的上下文了 。此时要注意切换的时候要关闭中断。避免再调度和切换进程时候系统乱掉。中断执行是用的是 被中断进程的内核栈,中断执行完后出栈,内核态发生中断就内核态之间函数调用。

 

调度时间确定了 ,但是调度是有条件的。TIF_NEED_RESCHED  作为进程被调度的标志,会在几个时机被更新。调度定时器,系统调用,一些抢占函数 都会在更新当前task 调度标志。具体调度函数 会在 系统调用或者中断返回时 和自己主动让出进程  调度。抢占函数一般是一些唤醒函数,通过唤醒一些其他进程来完成本次任务。进程肯定尽快完成任务,但是自己不行有些时候无法完成,需要其他线程来协助处理,那就把其他任务唤醒,尽快让其他任务参与调度。

 

时钟函数do_timer-》  schedule》ret_from_sys_call

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值