王道_操作系统 第二章 进程与线程
作者:互联网
1.0 知识总览
1.1 进程
1.1.0 知识总览
1.1.1 进程的定义
进程和程序是两个截然不同的概念。
程序:一个指令序列。
单道程序阶段:
早期的计算机(只支持单道程序)一个时间段内只能执行一个程序。内存中只包含一个程序的程序段和代码段。
程序的代码放在程序段内,程序运行过程处理的数据放在数据段内(如变量)。可以固定其在内存中的位置(区域)进行读取。
引入多道程序技术后:
PCB: Processing Control Block,进程控制块
进程实体,又称进程映像
程序段、数据段、PCB三部分组成了进程实体(进程映像)。
一般情况下,我们把进程实体就简称为进程。例如所谓的创建进程,实质上就是创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB。
注意:PCB是进程存在的唯一标志!
从不同的角度,进程可以有不同的定义,比较传统典型的定义有:
- 进程是程序的一次执行过程
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
这些定义都强调进程的“动态性”
引入进程实体的概念后,可以把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
注:严格来说,进程实体和进程并不一样,进程实体是静态的,而进程是动态的。不过,除非题目专门考察二者区别,否则可以认为进程实体就是进程。因此我们也可以说“进程由程序段、数据段、PCB三部分组成”。
1.1.2 进程的组成
进程(进程实体)由程序段、数据段、PCB三部分组成。
进程的管理者(操作系统)所需的数据都在PCB中
而程序段和数据段中包含的是程序本身运行所需的数据
1.1.3 进程的组织
在一个系统中,通常有数十、数百乃至数千个PCB。为了能对它们加以有效的管理,应该用适当的方式把这些PCB组织起来。
注:进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题
1 链接方式
2 索引方式
1.1.4 进程的特征
进程和程序是两个截然不同的概念,相比于程序,进程拥有以下特征:
动态性是进程最基本的特征
进程是资源分配、接受调度的基本单位
异步性会导致并发程序执行结果的不确定性。具体会在“进程同步”相关小结进行学习
1.1.5 知识回顾与重要考点
1.2 进程的状态
1.2.0 知识总览
1.2.1 三种基本状态
进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时又需要等待CPU服务,可见,进程的状态会有各种变化。
为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态。
注意:单核处理机环境下,每一时刻最多只有一个进程处于运行态。(双核环境下可以同时有两个进程处于运行态)
就绪态:进程已经拥有了除CPU之外所有需要的资源,一旦获得CPU使用资格,即可进入运行态开始运行。 即:万事俱备,只欠CPU
阻塞态:如等待操作系统分配打印机、等待读磁盘操作的结果。CPU是计算机中最昂贵的部件,为了提高CPU的利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务。
1.2.2 进程的另外两种状态
1 创建态
2 终止态
综上,进程共有五种状态。
思考:在什么情况下需要转换进程状态
1.2.3 进程状态的转换
1.2.4 知识回顾与重要考点
1.3 进程控制
1.3.0 知识总览
1.3.1 基本概念
1.3.1.1 什么是进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
简化理解:进程控制就是要实现进程状态转换
1.3.1.2 如何实现进程控制
细化上述过程:
思考下述情况:假如不修改进程的PCB内容(标志位表示的状态),直接将它放到另一种状态的队列中(例如:把阻塞队列中的进程直接放到就绪队列)。
这种情况是很危险的,极有可能导致系统错误。因为PCB当前所处的队列(更换后的)与PCB中的状态标志位标志的情况不一致。
为了防止这种问题,就使用原语来实现进程控制
原语
用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作即原子操作。
原语采用“关中断指令”和“开中断指令”实现。
在关中断指令后,会暂时忽略外部中断信号,直到原语执行完毕,开中断指令后,才会正常处理外部中断信号。
显然,关/开中断指令的权限非常大,必然是只允许在核心态下执行的特权指令
1.3.2 进程控制相关的原语
学习技巧
进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:
-
更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
a. 所有的进程控制原语一定都会修改进程状态标志
b. 剥夺当前运行进程的CPU使用权,必然需要保存其运行环境
c. 某进程开始运行前,必然要恢复其运行环境
-
将PCB插入合适的队列
-
分配/回收资源
1 进程的创建
2 进程的终止
3 进程的阻塞和唤醒
4 进程的切换
1.3.3 知识回顾与重要考点
1.4 进程通信
1.4.0 知识总览
什么是进程通信
顾名思义,进程通信就是指进程之间的信息交换。
1.4.1 进程通信——共享存储
1.4.2 进程通信——管道通信
- 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现全双工通信,则需要设置两个管道。
- 各进程要互斥地访问管道。
- 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。读进程将数据全部取走后,管道变空,读进程的read()系统调用被阻塞。
- 如果没写满,就不允许读。如果没读空,就不允许写。
- 数据一旦被读出,就从管道中被抛弃,这意味着读进程最多只能有一个,否则可能会有读错数据的情况。
1.4.3 进程通信——消息传递
进程间的数据交换以格式化的消息(Message)为单位。
进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
2.1 处理机调度的概念、层次
2.1.0 知识总览
2.1.1 调度的基本概念
处理机调度,就是从就绪队列中按照一定的算法选择一个进程并将处理器分配给它运行,以实现进程的并发执行。
2.1.2 调度的三个层次——高级调度
2.1.3 调度的三个层次——中级调度
虚拟存储技术先有个印象,在第三章中我们会进行学习
补充知识:进程的挂起态与七状态模型
2.1.4 调度的三个层次——低级调度
2.1.5 三层调度的联系、对比
2.1.6 知识回顾与重要考点
2.2 进程调度的时机、切换与过程、方式
2.2.0 知识总览
2.2.1 进程调度的时机
当一个进程处于内核程序临界区,并且临界区是要访问就绪队列的话,那么在访问之前,它会把就绪队列上锁。
如果还没退出临界区(还没解锁)就进行进程调度,但是进程调度相关的程序也需要访问就绪队列,由于此时就绪队列被锁住了,因此无法顺利地进行进程调度。
如果进程访问的是普通的临界资源(例如打印机)的话,在打印机打印完成之前,进程一直处于临界区内,临界资源不会解锁。但打印机又是慢速设备,此时如果一直不允许进程调度的话就会导致CPU一直空闲。
2.2.2 进程调度的方式
2.2.3 进程的切换与过程
2.2.4 知识回顾与重要考点
2.3 调度算法的评价指标
2.3.0 知识总览
2.3.1 CPU利用率
2.3.2 系统吞吐量
2.3.3 周转时间
2.3.4 等待时间
2.3.5 响应时间
对于计算机用户来说,会希望自己的提交的请求(比如通过键盘输入了一个调试命令)尽早地开始被系统服务、回应。
响应时间指从用户提交请求到首次产生响应所用的时间。
2.3.6 知识回顾与重要考点
2.4 FCFS、SJF、HRRN调度算法
2.4.0 知识总览
Tips:各种调度算法的学习思路
- 算法思想
- 算法规则
- 这种调度算法是用于作业调度还是进程调度?
- 这种调度算法是抢占式还是非抢占式?
- 优点和缺点
- 是否会导致饥饿(指某进程/作业长期得不到服务)
2.4.1 先来先服务(FCFS)
2.4.2 短作业优先(SJF/SPF)
非抢占式
最短剩余时间优先算法(SRTN)
抢占式
注意几个小细节:
如果题目中未特别说明,所提到的“短作业/进程优先算法”默认是非抢占式的
很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”
严格来说,这个表述是错误的、不严谨的。之前的例子表明,最短剩余时间优先算法(SRTN)得到的平均等待时间、平均周转时间还要更少
应该加上一个条件:“在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少”
如果不加上上述前提条件,则应该说“抢占式短作业/进程优先调度算法(最短剩余时间优先算法,SRNT)的平均等待时间、平均周转时间最少”
虽然严格来说,SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS),SJF依然可以获得较少的平均等待时间、平均周转时间
如果选择题中遇到“SJF算法的平均等待时间、平均周转时间最少”选项,那最好判断其他选项是否有很明显的错误,如果没有更合适的选项,那也应该选择该选项
2.4.3 高响应比优先(HRRN)
2.4.4 知识回顾与重要考点
2.5 调度算法:时间片轮转、优先级调度、多级反馈队列
2.5.0 知识总览
2.5.1 时间片轮转调度算法(RR)
时间片大小为2
时间片大小为5
一般来说,设计时间片时,要让切换进程的开销占比不超过1%
2.5.2 优先级调度算法
2.5.3 多级反馈队列调度算法
知识回顾与重要考点
3.1 进程同步、进程互斥
3.1.0 知识总览
-什么是进程同步
-什么是进程互斥
对临界资源的互斥访问,可以在逻辑上分为四个部分:进入区、临界区、退出区和剩余区。
知识回顾与重要考点
3.2 进程互斥的软件实现方法
3.2.0 知识总览
3.2.1 单标志法
while (turn != 0/1) 是指当turn != 0/1时,无法进入临界区!
3.2.2 双标志先检查法
3.2.3 双标志后检查法
两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。
3.2.4 Peterson算法
3.2.5 知识回顾与重要考点
3.3 进程互斥的硬件实现方法
3.3.0 知识总览
学习提示:
- 理解各方法的原理
- 了解各方法的优缺点
3.3.1 中断屏蔽方法
3.3.2 TestAndSet指令
3.3.3 Swap指令
3.3.4 知识回顾与重要考点
3.4 信号量机制
3.4.0 知识总览
3.4.1 信号量机制
semaphore: n. 信号量
3.4.2 信号量机制——整型信号量
3.4.3 信号量机制——记录型信号量
例题详解:https://www.bilibili.com/video/BV1YE411D7nH?p=21
3.4.4 知识回顾与重要考点
3.5 用信号量机制实现进程互斥、同步、前驱关系
3.5.0 知识总览
3.5.1 信号量机制实现进程互斥
3.5.2 信号量机制实现进程同步
3.5.3 信号量机制实现前驱关系
3.5.4 知识回顾与重要考点
3.6 生产者-消费者问题
3.7 多生产者-多消费者问题
3.8 吸烟者问题
3.9 读者-写者问题
3.10 哲学家进餐问题
3.11 管程
4.1 死锁的概念
4.2 死锁的处理策略——预防死锁
4.3 死锁的处理策略——避免死锁
4.3.0 知识总览
4.3.1 什么是安全序列
4.3.2 安全序列、不安全状态、死锁的联系
4.3.3 银行家算法
4.3.4 知识回顾与重要考点
标签:操作系统,知识,调度,王道,PCB,算法,线程,进程,总览 来源: https://www.cnblogs.com/cara-tail/p/15674236.html