第三章 Unix/Linux进程管理
3.1 多任务处理
多任务处理指的是同时执行几个独立的任务
这种逻辑并行性称为“并发”
3.2 进程的概念
进程是对映像的执行
3.3 多任务处理系统
多任务处理系统,简称MT,由以下几部分组成
3.3.1 type.h文件
type.h文件定义了系统常数和表示进程的简单PROC结构体
3.3.2 ts.s文件
ts.s在32位GCC汇编代码中可实现进程上下文切换
3.3.3 queue.c文件
queue.c文件可实现队列和链表操作函数
3.3.4 t.c文件
t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数
3.3.5 多任务处理系统代码介绍
3.4 进程同步
进程同步时指控制和协调进程交互以确保其正确执行所需的各项规则和机制
3.4.1 睡眠模式
当某进程需要某些当前没有的东西时,它就会在某个事件值上进入休眠状态。
3.4.2 唤醒操作
当某个等待事件发生时,另一个执行实体将会调用kwakeup(event),唤醒正处于休眠状态等待该事件值的所有程序
3.5 进程终止
正常终止:进程调用exit(value),发出_exit(value)系统调用来执行在操作系统内核中的kexit(value)
异常终止:进程因某个信号而终止
3.5.1 kexit()的算法
3.5.2 进程家族树
3.5.3 等待子进程终止
3.6 MT系统中的进程管理
(1)用二叉树的形式实现进程家族树
(2)实现ksleep()和kwakeup()进程同步函数
(3)实现kexit()和kwait()进程管理函数
(4)添加"W"命令来测试和演示等待操作
3.7 Unix/Linux中的进程
3.7.1 进程来源
3.7.2 INIT和守护进程
3.7.3 登录进程
3.7.4 sh进程
3.7.5 进程的执行模式
在Unix/Linux中,进程以两种不同的模式执行,即内核模式和用户模式
(1)中断:中断是外部设备发送给CPU的信号,请求CPU服务
(2)陷阱:陷阱是错误条件
(3)系统调用:系统调用是一种允许Umode进程进入Kmode以执行内核函数的机制
3.8 进程管理的系统调用
3.8.1 fork()
3.8.2 进程执行顺序
在fork()完成后,子进程与父进程和系统中所有其他进程竞争CPU运行时间
接下来运行哪个进程取决于它们的调度优先级,优先级呈动态变化
3.8.3 进程终止
(1)正常终止
(2)异常终止
3.8.4 等待子进程终止
3.8.5 Linux中的subreaper进程
3.8.6 exec():更改进程执行映像
进程可以使用exec()将其Umode映像更改为不同的(可执行)文件
3.8.7 环境变量
环境变量是为当前sh定义的变量,由子sh或进程继承
3.9 I/O重定向
3.9.1 文件流和文件描述符
3.9.2 文件流I/O和系统调用
3.9.3 重定向标准输入
3.9.4 重定向标准输出
3.10 管道
管道是用于进程交换数据的单项进程间通信通道
命名管道是不相关进程之间的FIFO通信通道
管道有一个读取端和一个写入端
3.10.1 Unix/Linux中的管道编程
3.10.2 管道命令处理
3.10.3 将管道写进程与管道读进程连接起来
3.10.4 命名管道
命名管道又叫做FIFO
它们有“名称”,并在文件系统中以特殊文件的形式存在