ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-07-11 00:50:23  阅读:268  来源: 互联网

标签:linux linux-kernel operating-system kernel preemption


我正在阅读“理解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,然后返回到内核空间,然后返回到用户空间.抢占式内核会检查是否需要在每次返回时重新安排进程.非抢占式内核仅在返回用户空间时进行检查.

标签:linux,linux-kernel,operating-system,kernel,preemption
来源: https://codeday.me/bug/20190711/1429472.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有