Linux内核运行方式
前两天被AA问了个问题,你觉得Linux的内核是一个进程吗
第一反应自然是一个进程,但是接下来就被问到了内核是一个进程的话,进程调度是怎么实现的,以进程来管理进程吗之类的问题
所以首先应该能给出答案,Linux的内核并不是一个进程
那么接下来就出现了第二个问题,内核并不是一个进程,那么如何做到进程调度,内存管理这些事情的呢
为此查了一个下午各种各样的资料
众所周知,一个进程拥有内核空间和用户空间两个空间,用户空间存放的就是进程自己的数据,代码,堆栈之类的东西,还有一个libc函数库,而内核空间则是映射到内核数据区。也就是说,内核数据在物理内存上只有一份,但是会在每个进程中映射一份,内核数据就是各个进程的进程控制块,操作系统的资源分配表,文件标识符之类的各种各样的资源,还有就是系统调用函数,以及一系列的内核相关函数。
只有在系统刚启动时,内核可能表现的像一个进程,当启动完成后,内核会启动一部分线程,提供相应的服务,这些进程可以在ps里面看到,都由方括号包裹起来,标识为内核启动的线程。而更多的情况下,内核表现的更像是一个巨大的函数库,也可以说内核是运行在用户进程里的,当用户进程发起系统调用时,进入内核态,这并不是说内核开始运行,而是用户进程调用内核函数,去访问内核数据。