哪个需要更长的时间?在用户和内核模式之间切换或在两个进程之间切换?

Cra*_*der 6 kernel process

哪个需要更长的时间?

在用户和内核模式之间切换(或)在两个进程之间切换?

请解释原因.

编辑:我知道每当有上下文切换时,调度员需要一些时间将前一个进程的状态保存在其PCB中,然后从相应的PCB重新加载下一个进程.为了在用户和内核模式之间切换,我知道必须更改模式位.不是全部,还是还有更多呢?

gus*_*f r 6

按照我的上帝的顺序切换进程(假设您实际切换,而不是并行运行).

从用户空间到内核空间的捕获过去曾经过处理器中断.2005年左右(不记得内核版本),并在邮件列表上的讨论后,如果有人发现,诱捕是较慢的(绝对的措施!)在高端至强处理器比早期的奔腾II或III(再次,我的记忆),他们用一个新的cpu指令实现它sysenter(我认为Pentium Pro以来它实际存在).这是在每个进程的虚拟动态共享对象(vdso)页面中完成的(cat/proc/pid/maps查找它)IIRC.

所以,现在,内核陷阱基本上只是几个cpu指令,因此相比十分之几或数十万使用中断(在现代CPU上真的很慢).

进程之间的上下文切换很重.这意味着存储所有的处理器状态(寄存器等)到RAM(在用户进程空间神奇记忆位置实际上,想在哪里!),在实践中弄脏所有缓存内存的CPU和回读过程状态的新处理.从上次运行开始,它(可能)在cpu缓存中仍然没有任何内容,因此每次读取内存都将是缓存未命中,需要从RAM中读取.这很慢.当我在大学里,我"发明"(当然,我也想出的想法,知道有很多染料的CPU中,但还不够冷静,如果它持续供电)的高速缓存,这是虽然无动力无限大当在CPU中使用时(仅用于上下文切换),并在Simics中实现.实现了对这个神奇缓存的支持我在Linux中称为CARD(Context-switch Active,Run-time Drowsy),并且进行了相当大的基准测试.我发现它可以加速Linux机器,其中许多繁重的进程共享相同的核心,大约5%.但这是在相对较短(低延迟)的处理时间片上.

无论如何.上下文切换仍然非常繁重,而内核陷阱基本上是免费的.

回答每个进程在用户空间中的内存位置:

地址为零.是的,空指针!你无法从用户空间读取整个页面:)这是在2005年,但现在可能是相同的,除非CPU状态信息增长大于页面大小,在这种情况下,他们可能已经改变了实现.