1. 内核是什么
计算机真正工作的东西是硬件,数据运算需要CPU,数据存储需要硬盘,图形显示需要显卡,音乐播放需要声卡等等,那么如何控制这些硬件?这就是内核的工作,内核就是管理计算机硬件的软件。
2. 进程的概念
进程就是处于执行期的程序,但进程并不仅仅局限于一段可执行程序代码,也就是代码段,通常进程还包括很多其它的资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程以及用来存放全局变量的数据段等。
现代操作系统的进程提供两种虚拟机制:虚拟处理器和虚拟内存。虚拟处理器是指虽然实际上可能是许多进程分享一个处理器,但是虚拟处理器给进程一个假象让这些进程觉得自己在独享处理器;虚拟内存机制则让进程在分配和管理内存的时候觉得自己拥有整个系统的所有内存资源。
linux支持多进程特性,可以最大化的使用cpu资源;用户可以在同一个cpu上运行多个用户程序。多进程的原理是:时钟中断触发进程调度程序,调度程序分时运行多个进程。这就要求每个进程能够保留现场信息(cpu现场、系统资源、调度信息等)。
3. 进程管理
3.1 进程描述符
进程存放在叫做任务队列(task list)的双向循环链表中。链表中的每一项包含一个具体进程的所有信息,类型为task_struct,称为进程描述符(process descriptor),
task_struct相对较大,在32位机器上,它大约有1.7KB。但如果考虑到该结构内包含了内核管理一个进程所需的所有信息,那么它的大小也算相当小了。每个进程都有一个进程描述符,记录以下重要信息:进程标识符PID、进程占用的内存区域、相关文件的文件描述符、进程环境、信号处理、同步处理等。
3.2 分配进程描述符
Linux通过slab分配器分配task_struct结构,这样能达到对象复用和缓存着色(cache coloring)的目的。在2.6以前的内核中,各个进程的task_struct结构存放在它们内核栈的尾端,这样做是为了让那些像x86那样寄存器较少的硬件体系结构只要通过栈指针就可以计算出它的位置,而避免使用额外的寄存器专门记录。现在则在栈底