第二章进程管理
第 2 章 进程管理
2.1 进程与线程
2.1.1 进程的定义、组成、组织、特征(PCB、程序段、数据段)
- 定义
- 组成
- 组织
- 特征
小结(梳理一下本小节的知识点叭!!!):
2.1.2 进程的状态与转换(运行、就绪、阻塞、创建、终止)
进程的另外两种状态:
- 创建态(New,又称新建态):进程正在被创建,操作系统为进程分配资源、初始化PCB
- 终止态(Terminated,又称结束态):进程正在从系统中撤销,操作系统会回收进程拥有得资源、撤销PCB
小结(梳理一下本小节的知识点叭!!!):
2.1.3 进程控制(原语实现、关中断和开中断)
进程控制就是要实现进程状态的转换。
2.1.4 进程通信(共享存储、管道通信、消息传递)
- 共享存储
- 管道通信
- 消息传递
小结(梳理一下本小节的知识点叭!!!):
2.1.5 线程概念和多线程模型(用户级和内核级线程、多线程)
线程的两种实现方式:
多线程模型:
小结(梳理一下本小节的知识点叭!!!):
2.2 处理机的调度
2.2.1 处理机调度的概念、层次(高级、中级、低级调度)
什么是处理机的调度(概念):
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理时,就需要确定某种规则来决定处理这些任务的顺序,这就是 “调度” 研究的问题。在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定地算法选择一个进程并将处理机分配给它运行,以实现进程地并发执行。
小结(梳理一下本小节的知识点叭!!!):
2.2.2 进程调度的时机(主动被动)、方式(剥夺非剥夺)、切换与过程(广义狭义)
- 时机
- 方式
- 切换与过程
小结(梳理一下本小节的知识点叭!!!):
2.2.3 调度算法的评价指标(CPU利用率、系统吞吐量、周转、等待、响应时间)
- CPU 利用率
- 指 CPU “忙碌” 的时间占总时间的比例
- 系统吞吐量
- 单位时间内完成作业的数量
- 周转时间
- 等待时间
- 响应时间
- 指从用户提交请求到首次产生响应所用的时间
小结(梳理一下本小节的知识点叭!!!):
2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
- 先来先服务(FCFS,First Come First Server)
- 短作业优先(SJF,Shortest Job First)
- 高响应比优先(HRRN, Highest Response Ratio Next)
小结(梳理一下本小节的知识点叭!!!):
2.2.5 作业/进程调度算法(时间片轮转RR、优先级、多级反馈队列)
- 时间片轮转调度算法(RR,Round-Robin)(分时)
- 优先级调度算法(实时)
- 多级反馈队列调度算法
小结(梳理一下本小节的知识点叭!!!):
2.3 进程的同步与互斥
2.3.1 进程的同步与互斥
什么是进程同步?
什么是进程互斥?
对临界资源的互斥访问,可以在逻辑上分为如下四个部分:
- 进入区:负责检查是否可进入临界区,若可进入,则应设置正在访问临界资源的标志(上锁),以阻止其他进程同时进入临界区
- 临界区:访问临界区资源的那段代码
- 退出区:负责解除正在访问临界资源的标志
- 剩余区:做其他处理
注意:临界区是内存中访问临界资源的代码段。进入区和退出区是负责实现互斥的代码段。临界区也可称为 “临界段”。
2.3.2 进程互斥的软件实现方法(单标志、双标志先检查、双标志后检查、Peterson)
- 单标志法
- 双标志先检查
- 双标志后检查
- Peterson 算法
Peterson 算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、优先等待 三个原则,但是依然未遵循让权等待的原则。Peterson 算法相较于之前三种软件解决方案来说是最好的,但依然不够好。
小结(梳理一下本小节的知识点叭!!!):
2.3.3 进程互斥的硬件实现方法(中断屏蔽、TestAndSet 指令、Swap 指令)
- 中断屏蔽方法
- TestAndSet(TS指令 / TSL指令)
- Swap 指令(XCHG 指令)
小结(梳理一下本小节的知识点叭!!!):
2.3.4 信号量机制(整形信号量、记录型信号量)
- 整型信号量
- 记录型信号量(重点)
小结(梳理一下本小节的知识点叭!!!):
2.3.5 用信号量机制实现进程互斥、同步、前驱关系
- 信号量机制实现进程互斥
- 信号量机制实现进程同步
- 信号量机制实现进程前驱关系
小结(梳理一下本小节的知识点叭!!!):
2.3.6 进程同步与互斥经典问题(生产者-消费者、多生产者-多消费者、吸烟者、读者-写者、哲学家进餐)
- 生产者-消费者问题
小结(梳理一下本小节的知识点叭!!!): - 多生产者-多消费者问题
原因在于:本题中的缓冲区大小为 1,在任何时刻,apple、orange、plate 三个同步信号量中最多只有一个是1.因此在任何时刻,最多只有一个进程的 P 操作不会被阻塞,并顺利地进入临界区。但如果缓冲区的大小大于 1,就必须专门设置一个互斥信号量 mutex 来保证互斥访问缓冲区。
小结(梳理一下本小节的知识点叭!!!): - 吸烟者问题
小结(梳理一下本小节的知识点叭!!!): - 读者-写者问题
小结(梳理一下本小节的知识点叭!!!): - 哲学家进餐问题
如何防止死锁的发生呢?有如下三种方法:
小结(梳理一下本小节的知识点叭!!!):
2.3.7 管程和Java中实现管程的机制
为什么要引入管程?
由于信号量机制存在编写程序困难、易出错等问题,有人提出:能不能设计一种机制,让程序员写程序时不需要再关注复杂的 PV 操作(若 PV 顺序写错就会发生死锁等问题),让写代码更轻松呢?1973 年,Brinch Hansen 首次在程序设计语言中引入了 “管程” 成分 --------- 一种高级同步机制。
管程是一种特殊的软件模块,有如下这些部分则组成:
- 局部于管程的共享数据结构说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
- 管程有一个名字
管程的基本特征:
- 局部于管程的数据只能被局部于管程的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据,即管程内部的变量只能被管程内部的函数所修改
- 每次仅允许一个进程在管程内执行某个内部过程
关于Java管程相关详细内容可以查看 线程共享模型----之----管程 这篇文章!!!!
小结(梳理一下本小节的知识点叭!!!):
2.4 死锁
2.4.1 死锁的概念
什么是死锁?
在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是 “死锁”。发生死锁后,若无外力干涉,这些进程都将无法向前推进。
死锁的处理策略:
- 预防死锁(静态)。破坏死锁产生的四个必要条件种的一个或几个。
- 避免死锁(动态)。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
- 死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。
小结(梳理一下本小节的知识点叭!!!):
2.4.2 死锁的处理策略(预防、避免[银行家算法]、检测和解除)
- 预防
小结(梳理一下本小节的知识点叭!!!): - 避免【重点】
小结(梳理一下本小节的知识点叭!!!): - 检测和解除
小结(梳理一下本小节的知识点叭!!!):

浙公网安备 33010602011771号