Linux内核的体系结构主要分为5个模块:进程调度模块,内存管理模块,文件系统模块,进程间通信模块和网络接口模块。
进程调度模块主要负责控制进程对CPU资源的使用,策略是各进程能够公平合理访问CPU,同时保证内核能够及时执行硬件操作。
内存管理模块主要确保进程能够安全共享机器内存区,并且支持虚拟文件操作系统,把暂时不用的内存块交换到外部存储设备上去。
文件系统模块用于支持对外部设备的驱动和存储。虚拟文件系统向外部存储设备提供通用的文件接口,从而支持与其他操作系统兼容的多种文件系统格式。
进程间通信模块子系统用于支持多种进程间的信息交换方式。
网络接口模块提供对多种网络通信标准的访问并支持许多硬件网络。
内核程序使用进程号来标识,进程由可执行的指令代码、数据和堆栈区组成。进程之间的通信需要通过系统调用进行,内核通过任务调度分时调用各个进程。
Linux 下内核栈和用户栈是分开的。内核程序是通过进程表对进程进行管理的,每个进程在进程表中占有一项,进程表是一个 task 结构。
当一个进程在执行时,CPU的所有寄存器的值、进程的状态以及堆栈中的内容被称为该进程的上下文。在内核进行切换到另一个进程的时候需要保存当前的进程状态。
进程的各种状态及之间的转换.
只有当前进程从内核态转移到睡眠状态时,内核才会进行进程的切换.一个进程不能改变另一个进程的状态.