linux – 切换到用户模式时,非抢占式内核和抢占式内核之间有什么
我正在阅读“理解
Linux内核,第3版”,在第5章“内核抢占”一节中,它说:
我仍然没有看到非抢占式内核和抢占式内核之间的区别,因为您需要等待当前进程切换到用户模式的任何方式. 假设有一个进程p在内核模式下运行,并且其时间量到期,则调用scheduler_tick(),并设置p的NEED_RESCHED标志. 那么如果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,然后返回到内核空间,然后返回到用户空间.抢占式内核会检查是否需要在每次返回时重新安排进程.非抢占式内核仅在返回用户空间时进行检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |