进程调度之7:need_resched与强制调度

本文详细介绍了进程调度中强制调度的条件,包括时钟中断、wake_up_process()唤醒进程以及改变调度政策和礼让的情况。强调了need_resched字段的重要性,以及在时钟中断服务程序、唤醒进程和调度政策变化时如何设置和利用这个字段来触发调度。调度延迟(dispatch latency)是强制调度的一个特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

date: 2014-11-02 13:16

在《进程的调度与切换》一节中,我们提到,强制调度的两个条件:

  1. 调度时机:系统调用返回到用户空间前夕,以及中断或者异常服务程序返回到用户空间前夕。可能会有人担心如下两种情况:其一如果进程“躲在”“安全地带”内核空间中不出来,调度器岂不只能干着急?好在内核的设计与实现避免了这个问题。其二:如果进程在用户空间运行,既不调用系统调用函数,也没有中断与异常发生,岂不是也无法进行强转调度?别忘了,系统的时钟中断在默默地坚守着哩。

  2. 必要条件:当前进程的need_resched字段必须非0。该字段必须由内核去设置,为了让调度器有效运转起来,内核必须“瞅准时机”“见缝插针”地设置该字段。设置的时机包括:

    • 其一:在时钟中断服务程序中,当发现当前进程连续运行太长时间时;
    • 其二:当唤醒一个睡眠中的进程,发现被唤醒的进程比当前进程更有资格运行时;
    • 其三:一个进程通过系统调用改变调度政策(sched_setscheduler)或表示礼让(sched_yield)时。这种情况实际上应该被视为主动的、自愿的调度,因为这些系统调用在返回用户空间时会引起立即调度(而上面两种情况只是设置好了need_resched字段,至于何时能有“调度时机”还是个未知数)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值