第三章读数笔记
Unix/Linux进程管理
3.1多任务管理
- 一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)中,一次只能执行一个任务,多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。这种逻辑并行性被称为“并发”。在多处理器(多核CPU)中,同时执行多个任务这种并行性称为“并行”。
3.2进程的概念
- 在操作系统种中,任务也称为进程,与程序不同,程序是静态的,而进程是动态的。在实际应用中,进程和任务这两个术语可以互换。
- 进程的定义:进程是对映像的执行。
- 进程的数据结构:进程控制块(PCB)或任务控制块(TCB),称为PROC结构体。一个简单的PROC结构体如下:
- 单CPU系统中,操作系统内核经常会使用PROC指针,指向当前正在执行的PROC。
- 多CPU的多处理操作系统中,可在不同的CPU上实时、并行执行多个进程。因此多处理器系统中正在运行的[NCPU]可能是一个指针数组,每一个元素指向一个正在特定CPU上运行进程。
3.3多任务处理系统
多任务处理系统MT编程示例如下(示例代码过长,在此不予展示):
- type.h文件:定义了系统常数和表示进程的简单PROC结构体。
- ts.s文件:在32位GCC汇编代码中可实现进程上下文切换。
- queue.c文件:可实现队列和链表操作函数。
- t.c文件:t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数。
3.4进程同步
- “并发”执行时协调各进程正确有序地执行。
- 最简单的进程同步工具:休眠与唤醒操作。
3.4.1休眠操作
- 休眠条件:当某个进程申请资源或等待事件发生却没能得到“满足”时,该进程就会在某个事件值上进入休眠状态,,该事件值表示休眠原因。
- 休眠操作实现:可在PROC结构体中添加一个event字段,并实现ksleep(int event)函数(当event参数满足休眠条件时,执行休眠操作)。
- 修改后的PROC结构体如下:
- ksleep(int event)函数算法如下:
3.4.2唤醒操作
- 当某一个等待的时刻到来时,kwakeup()函数将被调用以唤醒等待这一时间值的所有程序,值得一提的是被唤醒的进程不会被允许立刻申请资源,而是一个一个排队等待到来的资源。
- kwakeup()函数算法如下:
3.5进程终止
- 正常终止:进程调用exit(value)。发出-exit(value)系统调用来执行在操作系统内核中的kexit(value)。
- 异常终止:进程因为某个信号而异常终止。
以上二者均会调用kexit()函数。