加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 切换到用户模式时,非抢占式内核和抢占式内核之间有什么

发布时间:2020-12-13 23:20:26 所属栏目:Linux 来源:网络整理
导读:我正在阅读“理解 Linux内核,第3版”,在第5章“内核抢占”一节中,它说: All process switches are performed by the switch_to macro. In both preemptive and nonpreemptive kernels,a process switch occurs when a process has finished some thread of
我正在阅读“理解 Linux内核,第3版”,在第5章“内核抢占”一节中,它说:

All process switches are performed by the switch_to macro. In both preemptive
and nonpreemptive kernels,a process switch occurs when a process has finished
some thread of kernel activity and the scheduler is invoked. However,in nonpreemptive kernels,the current process cannot be replaced unless it is about to switch
to User Mode
.

我仍然没有看到非抢占式内核和抢占式内核之间的区别,因为您需要等待当前进程切换到用户模式的任何方式.

假设有一个进程p在内核模式下运行,并且其时间量到期,则调用scheduler_tick(),并设置p的NEED_RESCHED标志.
但是只有当p切换到用户模式时才调用schedule()(对吗?).

那么如果p永远不会切换到用户模式怎么办?

如果它切换到用户模式但是在设置NEED_RESCHED的时刻和实际切换到用户模式的时刻p之间需要“很长”的时间 – 那么它使用的不仅仅是它的量子?

解决方法

在非抢占式内核中,在返回用户空间时(以及系统调用阻塞的任何地方,也在空闲任务上)调用schedule().

在抢占式内核中,schedule()也可以在从任何中断返回时调用,也可以在其他一些地方调用,例如: on mutex_unlock()慢速路径,在接收网络数据包的某些条件下,…

例如,假设一个进程A发出一个由设备生成的中断中断的系统调用,然后由一个定时器中断中断:

process A userspace → process A kernelspace → device ISR → timer ISR
                  syscall               device IRQ    timer IRQ

当计时器ISR结束时,它返回到另一个ISR,然后返回到内核空间,然后返回到用户空间.抢占式内核会检查是否需要在每次返回时重新安排进程.非抢占式内核仅在返回用户空间时进行检查.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读