2.1. 进程的概念
2.1.1. 程序顺序执行的特征
- 顺序程序设计:一个作业完成了,后一作业才能进入内存,并得以执行。各个作业的程序都是一个语句一个语句的按顺序构成。
- 特点(3个):
- ①顺序性:上一个动作结束之后才开始
- ②封闭性:只有程序本身可以的动作才能改变程序的运行环境
- ③可在现性:程序的执行结果与程序运行结果的速度无关。
2.1.2. 程序并发执行的特征
- 多道程序设计:并发执行,提高系统资源利用率和增加作业吞吐量(作业吞吐量:指在给定时间间隔内所完成作业的数量 )
- 特点(3个)
- ①失去封闭性:资源的使用状态受到并发程序的共同影响;
- ②程序与计算不再一一对应;
- ③并发程序在执行期间相互制约;
2.1.3. 进程的概念
- 进程: 具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位(进程定义为:程序在并发环境中的执行过程);
- 进程特征(5个)
-
- 动态性:进程是程序的执行过程,可以处于多种不同状态
-
- 并发性;
-
- 调度性:进程是申请资源的单位,也是被调度的单位;
-
- 异步性;
-
- 结构性:进程由程序段、数据段和控制结构等组成;
2.2. 进程状态描述及组织方式
2.2.1. 进程的状态(3个)
- 运行态:指当前进程已分配到CPU,他的程序正在处理机执行时的状态(不能大于CPU的个数);
- 就绪态:指进程已具备运行条件,但因为其他进程占用了CPU,所以它暂时不能运行而等待分配CPU的状态;
- 阻塞态:指进程因等待某种事件发生而暂时不能运行的状态;
进程状态的转换:
- 就绪-》运行
- 分配到了CPU,因此改变状态;
- 运行-》阻塞
- 正在运行的进程因某种条件不满足而放弃对CPU的占用;
- 阻塞-就绪
- 处于阻塞状态的进程所等待的事件发生了,如读数据的操作完成;
- 运行-》就绪
-
正在运行的进程用完了本次分配给它的CPU时间片;
进程状态转换图
2.2.2 进程的组成
1.进程映像:由程序、数据集合、栈和PCB(进程控制块) 四部分组成;
- PCB进程控制块:描述进程的当前状态、本身特性,对资源的占用及调度信息等;
2.进程控制块的组成
- 进程名:它是唯一的标志对应进程的一个标识符或数字;
- 特征信息:
- 进程状态信息;
- 调度优先权:进程获取CPU的优先级别;
- 通信信息;
- 现场保护区;
- 资源需求、分配和控制方面的信息;
- 进程实体信息:
- 族系关系:反映父子进程的隶属关系;
- 其他信息:如文件信息,工作单元等。
3. 进程控制块的作用: 进程控制块时进程映像中最关键的部分,每个进程都有唯一的程序控制块;
- 注意:PCB是进程存在的唯一标志;
2.2.3进程组织方式(三种)
- 线性方式:
- 操作系统预先确定整个系统中同时存在的进程的最大数目,然后静态分布空间,把所有进程的PCB都放进整个表中;
-
- 缺点:限定同时存在进程的最大数目,无法 创建新的进程,要对整个表扫描,降低了调度效率;
- 缺点:限定同时存在进程的最大数目,无法 创建新的进程,要对整个表扫描,降低了调度效率;
- 链接方式:
- 按照进程的不同状态分别放在不同的队列中(单CPU状态下);
-
- 运行状态只能一个,指针指向它的PCB;
-
- 处于就绪态排成一个队列,就绪队列指针指向该队列的第一个PCB,最后一个PCB的拉链指针置为0,表示结尾(先进先出策略);
-
- 阻塞队列可以有多个,当满足某个等待条件时,把对应阻塞队列上的PCB送到就绪队列中。
-
- 阻塞队列可以有多个,当满足某个等待条件时,把对应阻塞队列上的PCB送到就绪队列中。
- 索引方式:
- 利用索引表记载相应状态进程的PCB地址,状态相同的进程的PCB组织在同一个索引表中,每个索引表的表目中存放该PCB的地址。
- 各索引表在内存的起始地址放在专用的指针单元中。
2.3进程管理和有关命令
2.3.1 进程图和进程管理
1.进程图:
- 众多进程的族系关系:由父进程创建子进程,子进程在创建子进程,如此下去,从而构成一棵树形的进程族系图。
2.进程创建
- 一个进程可以动态创建新进程,前者为父进程,后者为子进程;
引发事件: ①:调度新的作业;②:交互式用户登录;③:操作系统提供服务;④:现有进程派生新进程
创建新进程要执行创建进程的系统调用:
- 申请一个空闲的PCB;(从系统的PCB表种找出一个空闲的PCB项,并指定一个唯一的进程标志号PID(进程内部名))。
- 分配资源给新进程。
- 初始化新进程的PCB;
- 将新进程加到就绪队列中;
一个进程派生新进程之后的可能执行方式:
- 父进程和子进程同时(并发)执行。
- 父进程等待它的某个或者全部子进程终止。
建立子进程的地址空间有两种方式:
- 子进程复制父进程的地址空间;
- 把程序装入子进程的地址空间。
3.进程终止
- 从系统的PCB表中找到指定的进程的PCB。若处于运行状态,则立即终止该进程的运行;
- 回收该进程所占用的全部资源。
- 若该进程还有子孙进程,则还要终止其所有子孙进程,回收它们所占有的全部资源。
- 释放被终止进程的PCB,并从原来队列中摘走。
4.进程阻塞
- 立即停止当前进程的执行。
- 将现行进程的CPU现场送到该进程的PCB现场保护区中保存起来,以便将来重新运行时回复此时的现场;
- 把该进程PCB中的现行状态由运行改为阻塞状态,把它插入具有相同事件的阻塞队列中。
- 转到进程调度程序,重新从就绪队列中挑选一个合适的进程投入运行;
5.进程唤醒
- 首先把被阻塞进程从相应的阻塞队列中摘走;
- 将现行状态改为就绪状态,然后把该进程插入到就绪队列中;
- 如果被唤醒进程比运行进程的优先级更高,则设置重新调度标志。
6. 进程映像的更换
- 释放子进程原来的程序和数据所占有的内存空间;
- 从磁盘上找出子进程所要执行的程序和数据;
- 分配内存空间,装入新的程序和数据;
- 为子进程建立初始的运行环境—主要对各个寄存器初始化,返回到用户态,运行该进程的程序;
2.3.2 Linux进程管理
1.Linux进程状态:
- 运行态;
- 可中断等待下状态(浅度睡眠);
- 不可中断等待状态(深度睡眠);
- 停止态;
- 僵死态;
2.进程的模式和类型
- 执行模式分为:用户模式和内核模式
- 用户模式:运行用户程序,应用程序或内核之外的系统程序;
- 内核模式:出现系统调用或者发生中断事件,运行系统(核心)程序;
2.4线程概念
- 线程是进程中执行运算的最小单位,也是执行处理机调度的基本单位
- 一个进程可以包含一个或多个线程;
2.4.1线程的组成和状态
- 线程的组成: 每个进程都有一个thread结构,及程序控制块,用于保存自己私有的信息;
- 一个唯一的线程标识符(PID);
- 描述处理器工作情况的一组寄存器的内容;
- 每个thread结构有两个栈指针,一个指向核心栈,一个指向用户栈;
- 一个私有存储区,存放现场保护信息和其他与线程相关的统计信息;
- 线程的状态:
- 运行状态;
- 就绪状态;
- 阻塞状态;
- 终止状态: 当一个线程完成任务后,它占用的寄存器和栈等私有资源会被系统回收,并重新分配给另外的线程;
2.4.2 线程的实现方式------用户级线程和核心级线程
- 用户级线程: 在用户空间实现;
优点:
- 切换速度快;
- 调度算法可专用 ;
- 可运行在任何操作系统上
缺点:
- 阻塞问题;
- 多处理器利用问题
- 核心级线程: 在核心空间实现;
优点:
- 真正实现并行操作
- 克服阻塞问题
- 本身也可以是多线程的
缺点:
- 控制转移开销大
- 调度算法由核心确定,应用进程无法影响线程的切换
2.5 进程间的同步与互斥
2.5.1 进程间的三种关系
1.同步
- 同步进程通过共享资源来协调活动,在执行时间的次序上有一定约束。如:SPOOLing系统;
2.互斥
- 进程争用某些资源 ,由于竞争同一个物理资源而相互制约
3.通信
- 各个进程通过名字彼此之间进行通信;
2.5.2竞争条件和临界区
竞争条件: 两个或多个进程同时访问和操纵相同的数据时,最后的执行结果取决于进程运行的精确时序;
- 要避免竞争条件:禁止两个或两个以上的进程的同时进入临界区;
临界资源: 共享资源都有一个特征,一次仅允许一个进程使用;
临界区: :每个进程中访问临界资源的那段程序,简称CS区
进入临界区要遵循的准则:
- 任何两个进不能同时处于其临界区;
- 进程运行的速度具有不确定性;
- 应保证进入临界区的进程能不受干扰的运行;
- 不得使进程无限期等待进入临界区;