文章目录
第二章 进程、线程与作业
多道程序设计
目标
提高吞吐率
吞
吐
量
=
作
业
道
数
全
部
处
理
时
间
吞吐量=\frac{作业道数}{全部处理时间}
吞吐量=全部处理时间作业道数
单道程序设计的缺点
- 处理机利用率低
- 设备利用率低
- 内存利用率低
多道程序设计的提出
- 增加同时运行程序的道数可以提高资源利用率,从而提高系统效率,但道数应与系统资源数量相当。
- 道数过少,系统资源利用率低。
- 道数过多,系统开销(system overhead)增大,程序响应速度下降。
进程的引入
多道系统中的程序:
推进,暂停,推进,暂停,…….
- 暂停:保存现场(PSW+PC,寄存器)
- 推进:恢复现场(寄存器,PSW+PC)
- 暂停原因:(1) 自身原因:等待资源,启动IO
(2) 剥夺CPU—给其它程序运行机会
定义
- 可参与并发执行的程序称为进程。
- 进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。
定义强调两个方面:
- 动态:执行中的程序;
- 并发:可与其他进程同时执行。
并行和并发的区别
并发:concurrent
- 宏观同时,“交替执行”,不要求多个CPU
并行:parallel
- 微观同时,要求多个CPU
进程状态(基本状态)
- 运行态(RUN): 占有CPU正在向前推进
- 就绪态(READY): 可以运行,但未得到CPU
- 等待态(WAIT): 等待某一事件发生
状态转换
就绪
→
\rightarrow
→运行:获得处理机
运行
→
\rightarrow
→就绪:剥夺处理机
运行
→
\rightarrow
→等待:申请资源未得到,启动IO
等待
→
\rightarrow
→就绪:得到资源,IO中断
- 进程状态转换由操作系统完成,对用户是透明的;
- 进程在其生存期内经过多次状态转换,体现了进程的动态性和并发性。
进程控制块(PCB)
标志进程存在的数据结构,其中保存系统管理进程所需的全部信息
PCB内容:(不同系统不尽相同)
- 进程标识(pid)
- 家族联系
- 进程状态
- 地址信息
- 现场信息
- 打开文件
- 调度参数
- 消息指针
- 所属用户(uid)
- 队列指针
进程的组成
- 进程控制块(process control block)
- 建立进程 → \rightarrow →建立PCB
- 撤销PCB → \rightarrow →撤销进程
- 程序
- 代码(code)
- 数据(data)
- 堆栈(stack+heap)
-栈:保存返回点、参数、返回值、局部变量
-堆:动态变量
进程上下文切换
-
进程上下文(process context)
进程的物理实体与支持进程运行的物理环境统称为进程上下文-PCB+程序
-系统环境:地址空间,系统栈,打开文件表,… -
上下文切换(context switch)
由一个进程的上下文转到另外一个进程的上下文 -
系统开销(system overhead)
运行操作系统程序完成系统管理工作所花费的时间和空间
进程的队列
PCB构成的队列:(不一定FIFO(先进先出),单向或双向)
- 就绪队列:系统一个或若干个(根据调度算法确定)
- 等待队列:每个等待事件一个
- 运行指示字:每个处理机一个
进程类型
- 系统进程
运行操作系统程序,完成系统管理(服务)功能. - 用户进程
运行用户(应用)程序,为用户服务。
进程的特征
- 并发性:可以与其它进程一道向前推进;
- 动态性:动态产生、消亡,生存期内状态动态变化;
- 独立性:一个进程是可以调度的基本单位;
- 交往性:同时运行的进程可能发生相互作用;
- 异步性:进程以各自独立,不可预知的速度向前推进;
- 结构性:每个进程有一个PCB。
进程间相互联系
相关进程
- 同一家族的进程
- 可以共享文件,需要相互通讯,协调推进速度…
- 父进程可以监视子进程,子进程完成父进程交给的任务。
无关进程
- 没有逻辑关系、同时执行的进程。
- 有资源竞争关系,互斥、死锁、饿死。
进程间相互作用
-
直接相互作用:发生在相关进程之间
-
间接相互作用:发生在任何进程之间
进程的创建与撤销
- 进程的创建
建立PCB,分配内存,加载程序,入就绪链 - 进程的撤销
去配资源,撤销PCB,通知父进程 - 除初始进程外,其它进程由(父)进程创建,并形成进程家族。
进程与程序的联系与差别
进程与程序的联系
- 进程包括一个程序
- 进程存在的目的就是执行这个程序
进程与程序的差别
- 程序静态,进程动态
- 程序可长期保存,进程有生存期
- 一个程序可对应多个进程,一个进程只能执行一个程序
线程与轻进程
进程切换的不足和解决方案
- 上下文涉及内容多,开销大,“笨重”
- 相关进程之间耦合关系差
解决方案
- Multi-threading
- 同一进程中包含多个线程
- 上下文只涉及寄存器和用户栈,切换速度快
- 相关线程之间通讯方便、快捷
线程的概念
进程中一个相对独立的执行流。
线程和进程的区别
- 进程是资源分配单位
- 线程是执行单位
多线程优点
- 切换速度快(地址空间不变)(light weighted)
- 系统开销小
- 通讯容易(共享数据空间)
用户示图
多进程
多线程
线程控制块(TCB)
标志线程存在的数据结构,其中包含对线程管理需要的全部信息.
内容
- 线程标识
- 线程状态
- 调度参数
- 现场(通用寄存器,PC,SP)
- 链接指针
存放位置
- 用户级线程:目态空间(运行时系统)
- 核心级线程:系统空间
用户级别线程
实现方法:
- 基于library函数,系统不可见
- 线程创建、撤销、状态转换在目态完成
- TCB在用户空间,每个进程一个系统栈
优点:
- 不依赖于操作系统,调度灵活
同一进程中多线程切换速度快(不需进入操作系统) - 缺点:
同一进程中多个线程不能真正并行
一个线程进入系统受阻,进程中其它线程不能执行
核心级别线程
实现方法:
- 基于系统调用
- 创建、撤销、状态转换由操作系统完成
优点:
- 同一进程内多线程可以并行执行
- 一线程进入核心等待,其它线程仍可执行
缺点:
- 系统开销大,同一进程内多线程切换速度慢
- 调度算法不能灵活控制
作业
概念
用户要求计算机系统为其完成的计算任务集合。
作业步(job step)
- 作业处理过程中一个相对独立的步骤
- 一般一个作业步可由一个进程完成
- 某些作业步之间可以并行
作业分类
- 批处理作业
- 交互式作业
作业与进程
- 作业进入内存后变为进程
- 一个作业通常与多个进程相对应
进程与线程
- 一个进程一般包含多个线程,至少包含一个线程
- 不支持多线程的系统,可视为单线程进程