该从何说起?比如完成进程切换的是“内核”吗?毫无疑问,是“内核”,但这样回答问题并没有深一步的理解。“内核”是泛指操作系统的内核代码,在软件层面并不是一个过程,也不是一个对象,对实际运行的过程并没有什么解释,说某某事情是在“内核”当中完成的,倒是可以让人初步了解“内核”代码包含些什么内容。
所以“完成进程切换的是什么”这个问题本身的问法就有点问题,因为这个语法当中的什么是一个对象,而且更像是独立于进程的另外一个对象。为了正确的解释进程切换这个问题,并且在过程、对象层面对系统有更清楚的认识,这个问题应该是,什么时候会发生进程切换?因为答案可以是进程本身主动完成进程切换,当然也包括其它的切换场景如时间片用完被动切换,但终究不是“内核”这个对象来完成的。这个过程是在内核当中吗? 当然,因为它是使用的内核代码,但是代码是死的,并不是一个对象,只有进程,中断等才包含过程并且是一个对象(会有对象的描述信息),也就是说是进程、中断使用内核的代码完成进程的切换,对于进程而言,此时进程工作在内核态。
以上是其一,其二:“内核”中定义的一些全局数据到底属于谁的? 答案是属于全体进程的,所有的进程都可以使用“内核” 中定义的全局数据,只是是要切换在内核态当中来使用而已!!!
以上两点可以简要说明,进程内核态,“内核”的一些内涵及其差别。简而言之,事情不是由“内核”完成的,而是由进程在内核态使用“内核”提供的数据完成的。内核是“死”的,进程是“活”的。