进程管理

1. 进程基本概念

进程是处于执行期间的程序以及相关资源的总称。

2. 进程描述符

linux通过`slab分配器`分配进程描述符结构体
task_struct{
	unsigned log state;//进程状态
	pid_t pid;//进程标志,唯一
	struct task_struct *parent//父进程,每个进程都必定有一个父进程
	...
}

进程上下文

一个用户空间进程,通过系统调用或者触发某个异常,就会陷入内核空间——这种情况就称作内核代表进程执行处于进程上下文中。 注意:用户空间进程只能通过系统调用异常处理程序这两类内核提供的接口,才能陷入内核执行。

3. 进程创建&终结

linux系统中的进程存在明显的继承关系,所有进程都是PID为1的init进程的后代。内核在系统启动的最后阶段启动init进程。

fork()拷贝当前进程创建子进程

fork()使用写时拷贝(COW)机制

exec()读取可执行文件并将其载入地址空间运行

exit()结束进程

进程释放资源后,处于EXIT_ZOMBIE状态(此时会占用内核栈,thread_info结构,task_struct结构),此时需要通过父进程通知内核释放剩余资源,真正结束进程。

如果父进程在子进程之前退出,必须有机制保证子进程能找的新的父进程(可以让init作为父进程),否则这些子进程在退出时就会成为僵尸进程,浪费内存空间。

4. 线程

linux系统中的线程与进程实现机制一样,被当做与其他进程共享某些资源的进程。

进程调度

进程调度是指,从就绪的进程中选择一个来执行

基本概念

寄存器、cpu缓存、内存

寄存器 是cpu的重要组成部分

cpu缓存 是为了弥补cpu与内存之间速度的差异而增加的缓存

三者的速度:寄存器 > cpu缓存 > 内存

进程类型

IO消耗型 进程大部分时间用来提交IO请求,或者等待IO请求结果

cpu消耗性进程大部分时间都在执行代码,IO请求比较少

进程优先级、时间片

进程优先级调度程序总数选择时间片未用完且优先级最高的进程来执行。

时间片是一个数值,表示进程被抢占前所能运行的时间。

实时进程、普通进程

进程调度方法

每个cpu都有两个进程队列,可运行进程队列等待/过期进程队列

linux用红黑树存储系统中所有可运行的进程,红黑树的键值是该进程可运行的虚拟时间。

当进程阻塞或终止时,会从红黑树中移除。进程阻塞时,会把当前进程移入等待队列(等待队列是由等待某些事件发生的进程组成的简单链表)。当该进程等待的事件发生后,会被唤醒,再加入红黑树中。