为什么我的电脑在切换创建用户的时候会卡死机?

了解不深,就尝试套一下理论吧。
在现今流行的windows桌面机上,假如某个应用的线程出现了死循环,它是会消耗掉很多CPU时间,但不该100%占用甚至卡死系统。原因有两点,一是用完它的时间片,内核会强制切换到别的线程上去执行;另外多核的CPU,最多一个核被100%占用,其它线程还是能欢快地分享剩下的N-1个核。
写了个死循环代码在Win7 四核机器上做了个实验,确实卡不死,只有一个核在100%,该进程在24%~25%徘徊。
所以,猜测这是由于

某个内核线程的死循环

导致的,而非用户态线程。Windows / Linux属于非抢占式内核,如果一段ring0代码霸占着CPU某个核不放,就算处理过中断还是会继续霸占下去,不会切换到别的线程。如果还在自旋锁的互斥保护范围内,那另外的N-1核在事实上也被废了。或者系统里其它各个用户态线程的优先级和这个死循环代码在别的核上的兄弟代码不对等,所以分到的CPU时间会极端少?内核态死循环的杀伤力满塞,这个我就没做试验了。简言之,大概某个驱动写得忒烂了。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注