# 第二章进程的描述与控制
## 前驱图和程序执行
## 程序并发执行
### 程序的并发执行
### 程序并发执行时的特征
* 间断性
* 失去封闭性
* 不可再现性
## 进程的描述
### 进程的定义
* 进程是程序的一次执行
* 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
* 进程是具有独立功能的程序在一个数据集合上运行的过程，它是系统进行资源分配和调度的一个独立单位
### 进程的特征
* 动态性
* 并发性
* 独立性
* 异步性
### 从操作系统角度分类
* 系统进程
* 用户进程
### 进程和程序的区别
* 进程是动态概念，而程序则是静态概念
* 程序是指令的有序集合，永远存在；进程强调是程序在数据集上的一次执行，有创建有撤销，存在是暂时的；
* 进程具有并发性，而程序没有
* 进程可创建其他进程，而程序并不能形成新的程序
* 进程是竞争计算机资源的基本单位，程序不是
### 进程和程序的联系
* 进程是程序在数据集上的一次执行
* 程序是构成进程的组成部分，一个程序可对应多个进程，一个进程可包括多个程序
* 进程的运行目标是执行所对应的程序
* 从静态看，进程由程序、数据和进程控制块（PCB）组成
### 进程的基本状态及转换
* 进程的三种基本状态
    * 就绪状态ready
    * 执行状态running
    * 阻塞状态block
* 三种基本状态的转换
* 创建状态和终止状态
    * 五状态进程模型
* 注意
    * 阻塞态->运行态和就绪态->阻塞态这二种状态转换不可能发生
### 挂起操作和进程状态的转换
* 挂起和阻塞的区别
* 挂起操作的目的
    * 终端用户的需要: 修改、检查进程
    * 父进程的需要：修改、协调子进程
    * 对换的需要：缓和内存
    * 负荷调节的需要：保证实时任务的执行
* 关键图
### 进程管理中的数据结构
* 进程控制块PCB的作用
    * 作为独立运行基本单位的标志
    * 能实现间断性运行方式
    * 提供进程管理所需要的信息
    * 提供进程调度所需要的信息
    * 实现与其他进程的同步与通信
* 进程控制块的信息
    * 进程标识符
        * 外部标识符PID
        * 内部标识符(端口)
    * 处理机状态
        * 通用寄存器
        * 指令计数器
        * 程序状态字PSW
        * 用户栈指针
    * 进程调度信息
        * 进程状态
        * 进程优先级
        * 进程调度所需的其他信息
        * 事件
    * 进程控制信息
        * 程序和数据的地址
        * 进程同步和通信机制
        * 资源清单
        * 链接指针
    * 进程控制块的组织方式
        * 线性方式
        * 链接方式
        * 索引方式
## 进程控制
### 操作系统内核
* 两大功能
    * 支撑功能
        * 中断管理
        * 时钟管理
        * 原语操作
            * 进程的管理，由若干原语（primitive）来执行
    * 资源管理功能
        * 进程管理
        * 存储器管理
        * 设备管理
* 状态
    * 系统态，管态，内核态
    * 用户态，目态
### 进程的创建
* 进程的层次结构
    * 父进程
    * 子进程
* 引起创建进程的事件
    * 用户登录
    * 作业调度
    * 提供服务
    * 应用请求
* 进程的创建过程
    * 1.申请空白PCB
    * 2.为新进程分配其运行所需的资源
    * 3.初始化进程块PCB
    * 4.如果进程就绪队列能够接纳新进程，便将新进程插入就绪队列
* 进程的终止
    * 引起进程终止的事件
        * 1.正常结束
        * 2.异常结束
        * 3.外界干预
    * 进程的终止过程
        * 1.根据被终止进程的标识符
* 进程的阻塞与唤醒
    * 引起进程阻塞和唤醒的事件
        * 请求系统服务而未满足
        * 启动某种操作而阻塞当前进程
        * 新数据尚未到达
        * 无新工作可做：系统进程
    * 进程阻塞过程(自己阻塞自己)
    * 进程唤醒过程(系统或其他进程唤醒自己)
* 进程的挂起与激活
    * suspend
    * active
### 进程同步
* 基本概念
    * 两种形式的制约关系
        * 间接相互制约关系
            * 互斥——竞争
        * 直接相互制约关系
            * 同步——协作
    * 临界资源
    * 分区
        * 进入区enter section
        * 临界区critical section
        * 退出区exit section
        * 剩余区remainder section
    * 同步机制应遵循的规则
        * 1.空闲让进
        * 2.忙则等待
        * 3.有限等待
        * 4.让权等待
* 进程同步机制
    * 软件同步机制:都没有解决让权等待，而且部分方法还会产生死锁的情况
    * 硬件同步机制
        * 关中断
        * 利用Test-and-Set指令实现互斥
        * 利用swap指令实现进程互斥
    * 信号量机制
        * 整型信号量
        * 记录型信号量
            * 由于整型信号量没有遵循让权等待原则，记录型允许负数，即阻塞链表
        * AND型信号量
        * 信号量集
            * 理解:AND型号量的wait和signal仅能对信号施以加1或减1操作，意味着每次只能对某类临界资源进行一个单位的申请或释放。当一次需要N个单位时，便要进行N次wait操作，这显然是低效的，甚至会增加死锁的概率。此外，在有些情况下，为确保系统的安全性，当所申请的资源数量低于某一下限值时，还必须进行管制，不予以分配。因此，当进程申请某类临界资源时，在每次分配前，都必须测试资源数量，判断是否大于可分配的下限值，决定是否予以分配
            * 操作
                * Swait(S1，t1，d1…Sn，tn，dn)
                * Ssignal(S1，d1…Sn，dn)
            * 特殊情况
* 经典进程的同步问题
    * 生产者–消费者问题
    * 哲学家进餐问题
    * 读者–写者问题
## 进程通信
### 进程通信是指进程之间的信息交换，又称低级进程通信
### 进程通信的类型
* 共享存储器系统
    * 基于共享数据结构的通信方式
        * 生产者和消费者
    * 基于共享存储区的通信方式
        * 高级通信
* 管道通信系统(pipe)
    * 高级通信
* 消息传递系统
    * 高级通信
    * 方式分类
        * 直接通信
        * 间接通信
* 客服机–服务器系统
### 消息传递通信的实现方式
* 直接消息传递系统
* 信箱通信
## 线程的基本概念
### 线程的引入
* 线程的引入正是为了简化线程间的通信，以小的开销来提高进程内的并发程度
* 多线程并发的不足
    * 进程的两个基本属性
        * 一个拥有资源的独立单位，可独立分配系统资源
        * 一个可独立调度和分派的基本单位，PCB
    * 程序并发执行所需付出的时空开销
        * 创建进程
        * 撤销进程
        * 进程切换
    * 进程间通信效率低
    * 将分配资源和调度两个属性分开
* 线程——作为调度和分派的基本单位
    * 进程是系统资源分配的单位，线程是处理器调度的单位
    * 线程表示进程的一个控制点，可以执行一系列的指令。通常，和应用程序的一个函数相对应
    * 进程分解为线程还可以有效利用多处理器和多核计算机
### 线程与进程的比较
* 不同点
    * 调度的基本单位
    * 并发性
* 相似点
    * 状态：运行、阻塞、就绪
    * 线程具有一定的生命期
    * 进程可创建线程，一个线程可创建另一个子线程
    * 多个线程并发执行时仍然存在互斥与同步
### 线程的实现
* 线程的实现方式
    * 内核支持线程KST
    * 用户级线程ULT
    * 组合方式
* 多线程OS中的进程属性
    * 进程是一个可拥有资源的基本单位
    * 多个线程可并发执行
    * 进程已不是可执行的实体
* 线程的状态和线程控制块
    * 线程运行的三个状态
        * 执行状态
        * 就绪状态
        * 阻塞状态
    * 线程控制块TCB

*XMind: ZEN - Trial Version*