按照我所收集的资料,先摘一下大家对三者的描述
非抢占式内核:当用户进程通过系统调用或因中断进入内核态之后,假设这个过程中内核没有主动进行调度让出cpu(这里的主动主要是由于例如IO操作导致的睡眠等),那么即使因为某些其他原因例如时间片耗尽、更高优先级的进程被唤醒,均不能使得内核让出cpu。内核只会在完成了所有该完成的任务,并且准备切换回用户态的时候,检查是否需要进行调度,此时才会让出cpu。
抢占式内核:与非抢占式内核不同,在内核态下,如果发现时间片耗尽或更高优先级进程被唤醒,内核会尽快的(之所以说是尽快的是因为某些情况下不允许内核抢占)进行调度以让出cpu,而不是继续完成自己的任务。
用户抢占:上面非抢占式内核的最后,这种切换回用户态才进行调度检查的方式,称作用户抢占。
下面是我的疑问:
第一个问题是:
在一些资料中会说,非抢占式内核由任务主动放弃cpu的使用权,或者说进程只有主动放弃cpu否则永远不会被调度,它会运行到任务结束。
http://wjhsh.net/sky-heaven-p-7111974.html
我的困惑就在于,上述这种说法是不是应该加一个前缀,就是在内核态下,如果说是内核态下,任务必须主动放弃cpu,否则任务结束前不会被调度,那就没有问题。但是没有这个前缀就让我觉得,是不是进程即使是在用户态下也可以一直运行下去,除非它运行结束。换句话说,就是这句话中的任务,指的到底是整个进程的任务,还是指内核态的任务,可能也是我个人对于任务一词的理解不够深刻。
换一个说法:
对于一个非抢占式的内核,假设一个进程执行的就是一个死循环,它什么都不做更不会进行系统调用。那么它的时间片用尽的时候,它是否会被切换?或者说切换与否是不是跟这个操作系统是否支持用户抢占有关?