进程的描述和控制
前趋图和程序执行
前趋图
一个有向无环图(DAG),一个节点表示一段进程或者程序或一个语句。已知以下前趋关系:
可以得到以下的前趋图
注意:前趋图是无循环的!!
程序的顺序执行
- 若干的程序段按顺序依次执行。
- 特征:顺序性;封闭性:资源只可以被一个程序独占;可再现性:只要执行的环境相同就可以得到相同的执行结果。
程序的并发执行
不存在前趋关系的程序才可以并发执行
- 特征:间断性:并发的程序之间相互制约;失去封闭性:资源的状态可能被多个程序改变;不可再现性。
进程的描述与控制
进程的定义与特征
- 定义:多道程序环境下,程序属于并发执行,因此他们会失去封闭性,同时具有间断性和不可再现性。通常,程序是不能并发执行的。为此,引入了进程。进程有单独的数据结构叫做进程控制块(PCB)。有三种定义:进程是程序的一次执行、是一个程序及其数据在处理机上顺序执行时所发生的活动、时具有独立功能的程序在一个数据集上执行的过程,时系统进行资源分配和调度的一个独立的单位。
- 特征:动态性:对应于生命周期、并发性、独立性、异步性。
进程的基本状态与转换
三种基本状态
- 就绪:进程已经分配到除了CPU之外的所有必要资源
- 执行:获得了CPU后程序正在执行的状态
- 阻塞:被IO请求、申请缓冲区失败等事件导致暂时无法执行
相互转换
创建状态和终止状态
创建状态
进程创建过程:1、申请一个空白PCB并且写入信息;2、为该进程分配需要的资源;3、转换为就绪态并且放置在就绪队列中
终止状态
进程终止过程:1、等待OS进行善后;2、将PCB清零并且返还给OS。
挂起操作和进程状态的转换
挂起操作的引入
挂起是为了满足以下的需求:
- 终端用户的需要:程序运行出现问题,用户把程序暂停以分析问题。
- 父进程的需要:父进程需要考察和修改子进程。
- 负荷调节的需要:避免在工作负荷重的时候影响实时任务。
- OS的需要:检查在进程运行过程中资源的使用情况。
引入挂起后基本状态的转换
进程管理中的数据结构
PCB的作用
- 作为独立运行的基本单位的标志
- 实现间断运行方式
- 提供进程管理所需要的信息
- 提供进程调度所需要的信息
- 实现与其他进程的同步和通信
PCB中的信息
- 进程标识符(进程的名称):外部标识符:方便用户对进程进行访问;内部标识符:方便系统对进程的使用。
- 处理机状态:由处理机的各个寄存器的内容组成
- 进程调度信息:进程状态、进程优先级、进程调度所需要的其他信息、事件
- 进程控制信息:程序和数据的地址、进程同步和通信机制、资源清单、连接指针
组织方式
- 线性方式
- 链接方式
- 索引方式
进程通信
进程通信的高级和低级
- 低级:效率低、通信对用户不透明。
- 高级:使用OS的高级通信工具,使用方便、高效地传输大量数据。
进程通信的类型
- 共享存储器系统:互相通信的进程共享某些数据结构或存储区,进程之间能够通过这些空间进行通信。有两种类型:(1)基于共享数据结构的通信方式:属于低级通信,比如生产者消费者的缓冲区;(2)基于共享存储区的通信方式:内存的一块区域。
- 管道通信系统:连接一个读进程和写进程的一个共享文件,成为pipe文件。其具有以下3方面的协调能力:(1)互斥;(2)同步;(3)确认对方是否存在。
- 消息传递系统:以格式化消息的方式,通过操作系统的原语进行通信。(1)直接通信方式:利用OS提供的发送原语发送给对于的进程。(2)间接通信方式:发送进程和接收进程都通过共享中间实体的方式进行发送和接收。
- 客户机-服务器系统:有三种实现方式(1)套接字:有基于文件型和基于网络型;(2)远程过程调用和远程方法调用
进程通信的实现方式
直接通信
- 直接通信原语:利用OS发送命令实现,有两种:(1)对称寻址方式:指定了发送和接收者 send/receive(发送/接收者,消息);(2)非对称寻址方式:send(P(接收的进程), message), receive(id(可以是发送的进程id或者名称), message)。
- 消息的格式
- 进程的同步方式:(1)发送进程阻塞、接收进程阻塞:两者间无缓冲的情况。(2)发送进程不阻塞、接收进程阻塞。(3)发送和接收进程都不阻塞:要一个事件让他们停下来。
- 通信链路:单项和双向
间接通信
- 信箱的结构:(1)信箱头:存放信箱的描述信息;(2)信箱体:存放消息或者消息头的小格子组成。
- 信箱通信原语:(1)信箱的创建和撤销;(2)信箱的发送和接收。
- 信箱的类型:(1)私用信箱:用户进程为自己创建的信箱,其他用户只能发送信息,不能接收信息。(2)公用信箱:有OS创建,可以给所有进程用。(3)共享信箱:由某个进程创建,要指明其他哪个进程可以访问。
- 通信关系:(1)一对一;(2)一对多;(3)多对一:客户/服务器交互;(4)多对多。
线程的概念
线程是调度和分派的基本单位。是把进程的两个基本属性分开,由OS分开处理,不把调度和分派的基本单位作为资源的分配单位
线程和进程的比较
线程被成为轻型进程,传统的成为重型进程。
基本调度单位
进程作为独立调度和分派的基本单位,能够独立运行。线程作为调度和分派的基本单位,是能独立运行的基本单位。线程切换的时候只需要设置少量的寄存器的内容,代价远低于进程。同一进程的线程切换不会引起进程切换,但是不同进程的线程切换会引起进程切换。
并发性
进程可以并发执行,一个进程中的线程也可以并发执行。
拥有资源
线程几乎不拥有资源。
独立性
线程独立性比进程的独立性低得多。
系统开销
线程的系统开销小于进程。
支持多处理机系统
线程可以分配到多个处理机上。
线程状态和线程控制块
三种状态
执行、就绪、阻塞
线程控制块
名称为TCB,组成如下:
- 线程标识符
- 一组寄存器的内容
- 线程执行状态
- 优先级
- 线程专有存储区
- 信号屏蔽
- 堆栈指针
多线程OS中的进程属性
- 进程是一个可拥有资源的基本单位
- 多个线程可以并发执行
- 进程已不是可执行的实体:以线程作为基本单位