时钟中断,调度器,任务切换

时钟中断,调度器,任务切换

总的关系是硬件触发时钟中断,时钟中断调用调度器,调度器完成任务的选择和切换。

1) 时钟中断

计算机的处理是离散的,不是连续的。这涉及到计算精度、时钟的问题。

现代的操作系统都是多任务分时系统,也就是以时间片为单位进行运转的。

多任务的切换必然要判断涉及到时间信息,操作系统可以从时钟中断获取。

另外,任务执行的时间片的数量也可以用来进行任务级别的划分。

计算强度大的可以多占用时间片,IO多的就少占用。

2) 调度器

比例公平调度,完全公平调度,EAS调度器,实时调度…等等调度方法,都是在时钟中断时触

发的。不同调度策略侧重点不同,有的重视性能,想要提高处理器利用率,有的希望任务的

频繁切换,有的想节能,有的需要硬实时。

调度器不同的地方在于对任务的负载、处理器的模型化描述,以及next任务的选择依据。

处理器的模型化描述表示了处理器的性能,任务的负载联合起来描述了处理器的负载,

这两个决定了处理器间的任务调度,next任务的选择依据在单核上最为重要。

(单一计算机上的任务调度)

3) 任务切换

任务切换在调度器完成next任务的选择之后进行的。

同一特权级下的任务切换:

最关键的地方在于,A任务在向B任务切换时,A的全部push操作针对A的

栈来运行,而A的全部pop操作针对B的栈操作。其实就是,A进行的

上下文恢复,恢复的是B任务,当然A并不知道。最后结束上下文切换,

执行jmp/call/ret指令,完成了任务代码的切换。

上面的想法引发了一个问题,对于一个新任务来说,从任务A切换到new任务,

需要恢复new任务的上下文环境,然而new任务是新创建的,没有上下文。

怎么办? 程序员需要直接捏造一个上下文环境存放到new任务的栈中。

所以os第一个任务是手动创建的,之后的任务便可以直接fork它了。

注意:在任务没有彻底完成切换时,还在本任务运行。

不同特权级下的任务切换:

与单一特权级不同的是,低特权的任务需要记录多个栈,比如3特权级需要

记录0,1,2一共4个栈。在切换到内核或者其他任务时,需要恢复不同的栈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值