# 2.1 操作系统的进程
## 2.1.1 操作系统进程的引入
### “史前时代”——前趋图
一:最早,程序采取顺序执行的方式
二:前趋图是一种有向无循环图,用于描述程序的顺序执行
三:前驱关系可以用“右箭头”表示。
### 程序顺序执行
一:一个程序,由若干个程序段组成,每个程序段各司其职。
二:顺序执行,顾名思义,就是“一个一个来”,按照一定的先后顺序执行。
三:顺序执行的特点
- 顺序性
- 封闭性
- 可再现性
### 程序并发执行
一:并发性(第一章)
二:并发执行的特点:
- 间断性
- 不可封闭性
- 不可再现性
## 2.1.2 进程的阐释
### 一:进程的定义
> 进程是进程实体的一次运行过程,是OS进行资源调度分配的一个独立单位。
### 二:进程的特征
- 动态性:由创建而产生,由调度而执行,由撤销而消亡。
- 并发性:多个进程实体同时存在于内存中,且能在一段时间内同时运行。
- 独立性:独立运行,独立接受资源,独立独立接收调度
- 异步性:进程是按照各自独立的,不可预知的速度向前推进。
### 三:进程的3种基本状态
- 1:就绪:进程已经做好了被执行的准备
- 2:执行:进程已被CPU占用而正在执行
- 3:阻塞:进程在进行过程中出现错误而暂停继续执行
### 四:创建状态与终止状态
1:创建状态:首先由进程申请一个空白的PCB,并向PCB中写入用于控制管理的信息。最后引入该程序所需的资源。发起就绪状态。
2:终止状态:等待操作系统进行善后处理,最后将PCB清零,而后PCB空间返还给系统。
五:挂起操作与进程状态的转换
六:进程管理中的数据结构
## 2.1.3 进程控制
### 一:操作系统的内核
- 1:操作系统的内核是指操作系统中紧靠硬件的软件层次。
- 2:这么安排的好处?——提高系统的安全性;提高系统的运行效率。
- 3:通常将处理机的执行状态分为:
&系统态(管态,内核态):具有较高的特权,能访问所有的寄存器,存储器。
&用户态(目态):具有较低的特权,只能访问指定的寄存器,存储器。
一般程序只能拥有用户态,以达到安全性的目的。
- 4:OS内核所包含的2方面的功能:
- **支撑功能**
中断处理
时钟管理
原语操作
- **资源管理**
进程管理
存储器管理
设备管理
### 二:进程的创建
1:进程的层次结构
- 父进程
- 子进程
- 孙进程
- 他们之间有继承的关系
2:进程图:
> 用于描述进程之间关系的一棵有向树
3:引起创建进程的因素
>(1) 用户登录。(2) 作业调度。(3) 提供服务。(4) 应用请求。
4:创建进程的过程
(1) 申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
(2) 为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等。
(3) 初始化进程控制块(PCB)。
(4) 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
### 三:进程终止
1:造成进程终止的因素
- 正常结束
- 异常结束
- 外界干预
2:进程的终止过程
(1) 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态;
(2) 若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度;
(3) 若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们成为不可控的进程;(4) 将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统;
(5) 将被终止进程(PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
### 四:进程的阻塞与唤醒
1:引起条件
(1) 向系统请求共享资源失败。
(2) 等待某种操作的完成。
(3) 新数据尚未到达。
(4) 等待新任务的到达。
2:阻塞过程
3:唤醒过程
### 五:进程的挂起与激活
## 2.1.4 进程同步
> 为了确保每一条进程安全地进行,避免了进程之间争抢资源造成冲突。
> 进程同步对多个相关进程在执行次序上进行协调使得并发执行的诸进程之间按照一定的规划共享系统资源。
### 一:基本概念
1 两种形式的制约关系
- 间接制约
- 直接相互制约
2 临界资源与临界区
3 同步机制应该遵循的规则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
### 二:硬件同步机制
- 1:关中断
- 2:“测试并建立”指令(TS)
- 3:对换指令——swap
### 三:信号量机制及其应用
### 四:管理机制
## 2.1.5 经典的进程同步问题
- *生产者-消费者问题*
- *哲学家就餐问题*
- *读者-作者问题*
# 2.2 进程通信
> 进程之间的信息交换
> 特点:使用方便,高效的传递大量数据
## 2.2.1 进程通信的类型
- 共享存储器系统(SM)
> 相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
(1) 基于共享数据结构的通信方式。
(2) 基于共享存储区的通信方式。
- 管道系统(pipe)
1:管道是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
2:运作原理
向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。
3:首创于UNIX系统
4:必须提供的能力:
互斥、同步、确定对方是否存在
- 消息传递系统
> 以格式化的消息 (message)为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。
> 消息传递分为直接消息传递和间接消息传递
- 客户端/服务器系统(C/S)
1:套接字:UNIX下的网络通讯接口
2:远程过程调用(RPC)是一种网络协议
## 2.2.2 信息传递通信的几种方式
- 直接消息传递系统
- 信箱通信
1 信箱的结构:信箱头,信箱体
2 信箱的类型:私用,公共,共享
# 2.3 线程及其应用
## 2.3.1 线程的引入
一:进程的2个基本的属性复习
> 进程是一个可拥有资源的独立单位,同时又是一个可独立调度和分派的基本单位。
二:为使程序能并发执行,系统必须进行以下的一系列操作:
(1) 创建进程,系统在创建一个进程时,必须为它分配其所必需的、除处理机以外的所有资源,如内存空间、I/O设备,以及建立相应的PCB;
(2) 撤消进程,系统在撤消进程时,又必须先对其所占有的资源执行回收操作,然后再撤消PCB;
(3) 进程切换,对进程进行上下文切换时,需要保留当前进程的CPU环境,设置新选中进程的CPU环境,因而须花费不少的处理机时间。
## 2.3.2 线程的基本概念
一:线程作为*调度和分配的基本概念*
二:线程的3种状态
(1) 执行状态,表示线程已获得处理机而正在运行;
(2) 就绪状态,指线程已具备了各种执行条件,只须再获得CPU便可立即执行;
(3) 阻塞状态,指线程在执行中因某事件受阻而处于暂停状态,例如,当一个线程执行从键盘读入数据的系统调用时,该线程就被阻塞。
三:线程控制块:记录所有用于控制和管理线程的信息。
四:多线程OS的连接属性
(1) 进程是一个可拥有资源的基本单位。
(2) 多个线程可并发执行。
(3) 进程已不是可执行的实体。
## 2.3.3 线程的实现
一:线程实现方式
- 内核级线程KST
主要优点:
(1) 在多处理器系统中,内核能够同时调度同一进程中的多个线程并行执行;
(2) 如果进程中的一个线程被阻塞了,内核可以调度该进程中的其它线程占有处理器运行,也可以运行其它进程中的线程;
(3) 内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;
(4) 内核本身也可以采用多线程技术,可以提高系统的执行速度和效率。
- 用户级线程ULT
主要有点:
(1) 线程切换不需要转换到内核空间。
(2) 调度算法可以是进程专用的。
(3) 用户级线程的实现与OS平台无关,因为对于线程管理的代码是属于用户程序的一部分,所有的应用程序都可以对之进行共享。
二:用户级线程的实现
- 1 运行时系统:用于控制线程的函数的集合。
- 2 内核控制线程(轻型线程LWP)
三:线程的创建与终止
# 2.4 处理机调度的基本概念
## 2.4.1 什么是处理机调度?
> 处理机是处理进程的部件
> 处理机调度,顾名思义是处理机的资源与作业分配。
> 在多道批处理系统中,一个作业从提交到获得处理机执行,直至作业运行完毕,可能需要经历多级处理机调度
## 2.4.2 处理机调度的层次
- 1. 高级调度(High Level Scheduling)
- 2. 低级调度(Low Level Scheduling)
- 3. 中级调度(Intermediate Scheduling)
## 2.4.3 处理机调度算法的目标
一:处理机调度算法的共同目标
- 资源利用率
- 公平性
- 平衡性
- 策略强制执行
二:批处理系统目标
- 平均周转时间短
- 吞吐量高
- 处理机利用率高
三:分时系统目标
- 响应时间快
- 均衡性
四:实时系统目标
- 截止时间保证
- 可预测性
# 2.5:作业与作业调度
一:操作系统中的作业
1:作业(Job):批处理程序所要执行的一个个的任务。由程序文件与说明书组成。操作系统通过这个说明书来指挥程序进驻内存完成任务
2:作业步(Job Step):完成作业的每一个相互独立且相互联系的步骤。
3:作业控制块(JCB):作业在系统中存在的标志。存放着作业的相关信息。
4:作业运行的3个阶段:收容,运行,完成。
二:作业调度中的主要任务:
1:作业调度的任务是:根据JCB来调度,分配磁盘中的作业。
2:多道程序度:多少个程序在内存中运行。
3:“先来先”与短作业优先
4:优先级调度算法,高响应比优先调度
# 2.6:进程调度
## 2.6.1:进程调度的任务
1:保存处理机的现场信息
2:按照某种算法选取进程
3:把处理器分配给进程
## 2.6.2:进程调度机制
- 排队器
- 分派器
- 上下文切换器
## 2.6.3:进程调度方式
- 非抢占方式
在采用这种调度方式时,一旦把处理机分配给某进程后,就一直让它运行下去,决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机,直至该进程完成,或发生某事件而被阻塞时,才把处理机分配给其它进程。
- 抢占方式
这种调度方式允许调度程序根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。在现代OS中广泛采用抢占方式,这是因为:对于批处理机系统,可以防止一个长进程长时间地占用处理机,以确保处理机能为所有进程提供更为公平的服务。在分时系统中,只有采用抢占方式才有可能实现人—机交互。在实时系统中,抢占方式能满足实时任务的需求。但抢占方式比较复杂,所需付出的系统开销也较大。
## 2.6.4:轮转调度算法和优先调度算法
一:轮转法基本原理
系统将所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间(如30 ms)便产生一次中断,去激活进程调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。这样,就可以保证就绪队列中的所有进程在确定的时间段内,都能获得一个时间片的处理机时间。
二:进程切换时机
在RR调度算法中,应在何时进行进程的切换,可分为两种情况:① 若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。② 在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。
三:时间片大小的确定
![](D:\计算机\计算机操作系统\计算机操作系统学习笔记\res\3_1.jpg)
四:优先调度算法
1. 优先级调度算法的类型
优先级进程调度算法,是把处理机分配给就绪队列中优先级最高的进程。这时,又可进一步把该算法分成如下两种。
(1) 非抢占式优先级调度算法。
(2) 抢占式优先级调度算法。
2:优先级的类型
- 静态优先级
- 动态优先级
## 2.6.5:多队列调度算法与多级反馈调度算法
一:多队列调度算法
如前所述的各种调度算法,尤其在应用于进程调度时,由于系统中仅设置一个进程的就绪队列,即低级调度算法是固定的、单一的,无法满足系统中不同用户对进程调度策略的不同要求,在多处理机系统中,这种单一调度策略实现机制的缺点更显突出,由此,多级队列调度算法能够在一定程度上弥补这一缺点。
二:多级反馈调度算法
1:概述
2:调度机制:
- 设置多个就绪队列
- 按队列优先级调度
3:调度算法的性能
三:基于公平原则的算法调度
## 2.6.6:实时调度
一:实现实时调度的基本条件
- 提供必要信息
- 系统处理能力强
- 采用抢占式调度机制
- 具有快速切换机制
二:实时调度算法的分类
- 抢占式
- 非抢占式
三:最低松弛度优先算法(LLF)
四:优先级倒置
1:形成:高优先级进程被低优先级进程延迟或阻塞。
2:解决方案
# 2.7:死锁概述
## 2.7.1:资源问题
一:可重用性资源:可供用户多次使用的资源
二:可消耗性资源(临时性资源):程序运行期间,由进程动态地运行,销毁。
三:可抢占性资源
四:不可抢占性资源
## 2.7.2:计算机系统中的死锁(起因)
一:死锁是源于多个进程对资源的争夺
二:竞争可消耗资源引起死锁
三:竞争不可抢占性资源引起死锁
四:进程推进程序不当引起死锁
## 2.7.3:死锁的定义,必要条件,处理方法
一:如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
二:必要条件
互斥条件
请求和保持条件
不可抢占条件
循环等待条件
## 2.7.4:死锁的预防
方法:破坏产生死锁中的条件的一个或几个即可。
## 2.7.5:避免死锁
## 2.7.6:死锁的检测与排除