进程
进程的定义
- 程序就是一个指令序列,早期计算机只支持单道程序
- 引入多道程序技术后,为了方便操作系统管理,完成程序的并发执行,引入了进程,进程实体的概念
- 传统定义:进程是程序的一次执行过程(动态)
- 新定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
进程的组成
- 程序段,数据段,PCB(进程控制块)三部分组成了进程实体(简称进程,也叫进程映像),其中,PCB是进程存在的唯一标准!
- 程序段:存放要执行的代码
- 数据段:运算时使用产生的运算数据
- PCB:操作系统通过PCB管理进程。进程描述信息;进程控制和管理信息;资源分配清单;处理机相关状态。
进程的组织方式
- 链接方式:执行指针,就绪队列指针,阻塞队列指针
- 索引方式:按照进程状态建立几张索引表,各表指向一个PCB
进程的特征
- 进程!=程序
- 动态性(最基本特征),并发性,独立性(进程是系统进行资源分配,调用的基本单位),异步性,结构性
进程的状态
-
运行状态:占有CPU,并在CPU上运行。单核处理机环境,只能有一个进程处于运行状态
-
就绪状态:已具备运行条件,但没有空闲的CPU。万事具备,只欠CPU
-
阻塞状态:因等待某一事件而暂时不能运行
-
创建态:进程正在被创建,操作系统正在为进程分配资源,初始化PCB
-
终止态:进程被撤销,操作系统回收资源,撤销PCB
进程状态间的转换
- 就绪态到运行态:进程被调用
- 运行态到就绪态:时间片到或处理机被强占
- 运行态到阻塞态:进程用“系统调用”的方式请求某种系统资源,或者请求等待某个事件发生
- 阻塞态到就绪态:申请的资源被分配或请求的事件发生
- 就绪态:无处理机 其他都有;运行态:都有;阻塞态:都没有
- 运行态到阻塞态:是进程自身做出的主动行为
- 阻塞态到就绪态:不是进程本身能控制的,是一种被动行为
- 不能阻塞态进运行态,也不能就绪态进入阻塞态
什么是进程控制
- 进程控制就是要实现进程状态转换
进程控制的原语
- 用原语实现进程控制,执行期间不允许中断。这种不可被夹断的操作叫原子操作
- 用 关中断指令,开中断指令 来实现。特权指令,只能在核心态下执行
- 原语功能:1. 更新PCB中的信息 2. 将PCB插入合适的队列 3. 分配/回收资源
- 相关原语:进程的创建,进程的终止,进程的阻塞,进程的唤醒,进程的切换(阻塞和唤醒成队出现)
进程通信
- 进程之间的信息交换
- 进程拥有的内存地址空间相互独立
进程通信–共享存储
- 格外分配一个共享空间,访问必须互斥
- 基于数据结构的共享(低级通信),基于存储区的共享(高级通信)
进程通信–管道通信
- 一个管道只能采用半双工通信(好比于对讲机)
- 互斥的访问管道
- 数据以字符流的形式写入管道
- 如果没有写满,就不容许读。没读空,就不允许写。写满了就不允许写
- 读出后数据会被抛弃,这意味着读进程只能有一个
进程通信–消息传递
-
通过发送/接收原语来实现
-
直接通信方式:消息直接到接收方的队列里
-
间接通信方式:消息先发到中间体(信箱)
线程
什么是线程
- 在很久之前,系统只能串行执行
- 传统 CPU处理进程,进程是程序执行流的最小单位
- 当下CPU处理线程,线程成为了程序执行流的最小单位(一个进程有多个线程)
- 线程是“轻量级进程”
为什么引入线程
- 引入线程,进程间可以并发,进程内的各线程也可以并发
引入线程后,有什么变化
- 资源分配(进程),调度(由进程变为线程)
- 并发性:间并发 变成了 既能进程间并发,又能进程内并发
- 系统开销:变小了(线程切换不需要切换进程)
线程属性
- 线程是处理机调度的单位
- 多CPU计算机中,各个线程可占用不同的CPU
- 每个线程用有一个线程ID,线程控制决(TCB)
- 线程也有就绪,阻塞,运行的三种基本状态
- 线程几乎不拥有系统资源
- 同一进程的不同线程共享进程的资源
- 由于共享内存地址空间,同一进程中的线程通信无需系统干预
- 同一进程的线程切换,不会引起进程切换
- 不同进程的线程切换,会引起进程的切换
- 切换进程,系统开销大
线程的实现方式
- 用户级线程:从用户视角看到的线程
- 内核级线程:操作系统只能看的到内核级线程,因此只有内核线程才是处理机分配的单位。
- 组合方式:两种方式的结合
多线程模型
-
多对一模型,多个用户级线程映射到一个内核级线程。优点:进程管理开销小效率高,缺点:并发度低
-
一对一模型,并发能力强,开销大
-
多对多模型,集二者之优