进程的描述
进程的定义和特征
-
进程控制块(Process Control Block,PCB):利用PCB来描述进程的基本情况和活动过程。
-
进程实体:程序段、相关的数据段和PCB三部分便构成了进程实体(又称进程映像)
-
一般我们把进程实体 简称为 进程
-
所谓创造进程,实质上,是创建进程实体中的PCB;
-
而撤销进程,实质上,是撤销进程的PCB
进程的定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征:
动态性
并发性
独立性
异步性
进程的基本状态及转换
进程的七种基本状态:
三状态模型:就绪态、执行态、阻塞态
五状态模型:就绪态、执行态、阻塞态、创造状态、终止状态
七状态模型:五 + 就绪挂起、阻塞挂起
进程控制块
进程控制块的目的和作用?
- 目的:为了便于系统描述和管理进程的运行
- 作用:使程序成为一个在多道程序环境下能独立运行的基本单位。
进程控制块中的信息有什么?
- 进程标识符
- 处理机状态
- 进程调度信息
- 进程控制信息
进程控制块的组织方式
- 线性方式
- 链接方式
- 索引方式
进程控制
操作系统内核
- OS内核:我们通常将一些与硬件紧密相关的模块、各种常用设备的驱动程序以及运行频率较高的模块,都安排在紧靠硬件的软件层次,将它们常驻内存,我们将之称为OS内核。
OS内核的目的是什么?
- 便于这些软件进行保护,防止遭受其他应用程序的破坏。
- 可以提高OS的运行效率。
OS内核的功能
- 支撑功能:
- 中断处理:内核最基本的内容。
- 时钟管理:基本功能
- 原语操作:由若干条指令组成,用于完成一定功能的一个过程。
- 资源管理功能:
- 进程管理
- 存储器管理
- 设备管理
进程的创建
进程有怎样的层次结构?
- OS中,允许进程创建进程,所以就有了父进程与子进程。
- UNIX中的进程父子进程,Windows中进程都是平级的。
什么事件可以引起进程的创建?
- 用户登录
- 作业调度
- 提供服务:用户请求服务
- 应用请求:进程创建进程
进程的创建过程是怎么样的?
- 申请空白PCB
- 为新进程分配其运行所需的资源
- 初始化进程控制块
进程的终止
引起进程终止的事件
- 正常结束
- 异常结束:越界错,保护错,非法指令,特权指令错,运行超时,等待超时,算数运算错,I/O故障
- 外界干扰:操作员或操作系统干预,父进程请求,因父进程终止。
进程终止的过程?
- 根据被终止进程的标识符,检索PCB,读取进程状态。
- 若被终止进程正处于执行状态,终止进程。
- 若该进程还有子孙进程,还应将其所有子孙进程终止。
- 将被终止进程所拥有的所有资源回收
进程的阻塞和唤醒
引起进程阻塞和唤醒的事件
- 向系统请求共享资源失败
- 等待某种操作的完成
- 新数据尚未到达
- 等待新任务的到达
进程阻塞的过程
进程的挂起和激活
进程同步
在OS中进入进程后
一方面可以使系统中的多道程序并发执行,这不仅能有效地改善资源利用率,还可显著地提高系统的吞吐量。
另一方面,使系统变得更复杂。
如果,不采取有效的措施,对多个进程进行有效的管理,必然会因为这些进程对系统资源无序争夺给系统造成混乱,致使每次处理的结果存在着不确定性,即显现出其不可再现性。
进程同步的基本概念
- 两种形式的制约关系
- 间接相互制约关系
- 直接相互制约关系
- 临界资源(Critical Resouce)
- 临界区(Critical Section)
- 同步机制应遵循的规则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
硬件同步机制
- 关中断
- 利用Test-and-Set指令实现互斥
- 利用Swap指令实现进程互斥
信号量机制
- 整型信号量(pv操作):让权等待×
- 记录型信号量
- AND型信号量:使用于共享多个临界资源的情况
- 信号量集
信号量的应用
- 利用信号量实现进程互斥
- 利用信号量实现前趋关系
管程机制
- 管程的特性:
- 模块化
- 抽象数据类型
- 信息遮掩
- 进程和管程的不同:
- 数据结构
- 各自数据结构上的操作
- 目的不同
- 工作方式
- 是否并发
- 动态性
- 条件变量
经典进程同步问题
生产者-消费者问题
- 利用记录型信号解决生产者-消费者问题
- 利用AND信号量解决生产者-消费者问题
- 利用管程解决生产者-消费者问题
哲学家进餐问题
- 利用记录型信号量解决哲学家进餐问题
- 利用AND信号量机制解决这哲学家进餐问题
读者-写者问题
- 利用记录型信号量解决读者-写者问题
- 利用信号量集解决读者-写者问题
进程通信
进程通信的类型
- 共享存储器系统(Shared-Memory System)
- 管道通信系统
- 信息传递系统(Message passing system)
- 客户机-服务器系统(Client-Server system)
信息传递通信的实现方式
- 直接消息传递系统
- 直接通信原语
- 对称寻址方式
- 非对称寻址方式
- 消息的格式
- 进程的同步方式
- 通信链路
- 直接通信原语
- 信箱通信
- 信箱的结构
- 信箱头
- 信箱体
- 信箱通信原语
- 邮箱的创造和撤销
- 消息的发送和接收
- 信箱的类型
- 私用邮箱
- 公用邮箱
- 共享邮箱
- 信箱的结构
直接消息传递系统实例
- 消息缓冲队列通信机制中的数据结构
- 发送原语
- 接收原语
线程的基本概念
线程的引入
- 引入进程的目的是为了多个程序能并发执行,以提高资源利用率和系统吞吐量
- 引入线程则是为了减少程序在并发执行时所付出的时空开销,是OS具有更好的并发性。
进程的两个基本属性
- 进程是一个可拥有资源的独立单位
- 进程同时又是一个可独立调度和分派的基本单位
程序并发执行所付出的时空开销
- 创建进程
- 撤销进程
- 切换进程
线程—作为调度和分派的基本单位
进程与线程的比较
- 调度的基本单位
- 并发性
- 拥有资源
- 独立性
- 系统开销
- 支持多处理机系统
线程的状态和线程控制块
线程运行的三个状态
- 执行状态
- 就绪状态
- 阻塞状态
线程控制块TCB
- 线程标识符
- 一组寄存器
- 线程运行状态
- 优先级
- 线程专有存储区
- 信号屏蔽
- 堆栈指针
多线程OS中的进程属性
- 进程是一个可拥有资源的基本单位
- 多个线程可并发执行
- 进程已不是可执行的实体
线程的实现
线程的实现方式
线程已在许多系统中实现,但各系统的实现方式并不完全相同。
有的系统中,是用户级线程;而另一些系统中,是内核支持线程;还有一些同时实现两种类型的线程。
内核支持线程KST(Kernel Supported Threads)
用户级线程ULT(User Level Threads)
组合方式
- 多对一模型:将用户线程映射到一个内核控制线程
- 一对一模型:
- 多对多模型:
线程的实现
- 无论是进程还是线程,都必须直接或间接地取得内核的支持。
- 由于内核支持线程可以直接利用系统调用为他服务,故线程的控制相当简单。
- 而用户级线程必须借助于某种形式的中间系统的帮助方能取得内核的服务,故在对线程的控制上要稍复杂些
内核支持线程的实现
用户级线程的实现
- 运行时系统
- 内核控制线程