操作系统
第二章 进程与线程
author:slightwjq
2022年12月30日
2.1 进程与线程
进程基本概念与特征
引入进程,以便更好地描述和控制程序的并发执行,实现操作系统并发性和共享性。
为了使参与并发执行的每个程序都能独立地运行,必须为每个进程配备一个进程控制块PCB。系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。PCB是进程存在的唯一标准。
进程特征:动态性、并发性、独立性、异步性。
进程的基本状态有:运行态、就绪态、阻塞态、创建态、结束态。
PCB是进程实体的一部分,是进程存在的唯一标志。进程执行时,系统通过其PCB了解进程的现行状态信息,以便操作系统对其进行控制和管理;进程结束时,系统回收其PCB,进程随之消亡。
PCB包括进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息。
进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有的进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行的过程中不允许中断,它是一个不可分割的基本单位。
进程的通信
进程通信是指进程之间的信息交换。高级通信方法有:共享存储、消息传递、管道通信。
线程与多线程
引入进程的目的是更好的实现并发与共享,提高资源利用率和系统吞吐率。而引入线程的目的是减小程序在并发时所付出的时空开销,提高操作系统并发性能。
线程是基本的CPU执行单元,也是程序执行流的最小单元。
进程与线程比较:在引入线程的操作系统中,线程是独立调度的基本单位。线程之间也可以并发执行。线程切换只需要很小的开销,。线程之间的同步与通信无需操作系统干预。
线程的属性:
- 线程不拥有资源,但是每个线程都有唯一的标识符和一个进程控制块。
- 不同的线程可以执行相同的程序。
- 同一进程的不同线程共享该进程的资源。
- 线程在生命周期内会经历各种状态的变化。
线程的实现方式:
- 用户级线程:线程的管理都在用户空间内完成,内核意识不到线程的存在。
- 优点:线程切换无需到内核态,节省开销;实现与操作系统平台无关。
- 缺点:当线程执行一个系统调用时,进程内的所有线程都被阻塞;不能发挥多处理机优势,进程中仅有一个线程能执行。
- 内核级线程:线程的所有工作在内核态实现。
- 优点:能发挥多处理机优势,多个线程并行;一个线程被阻塞,其他线程也能执行;线程切换快;内核本身也可以多线程。
- 缺点:同一进程内线程切换,需要到核心态,开销大。
多线程模型:
- 多对一:多个用户级线程映射到一个内核级线程。
- 一对一:每个用户级线程映射到一个内核级线程。
- 多对多:n个用户级线程映射到m个内核级线程,n>=m。
2.2 处理机调度
调度的概念
处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。
调度的层次:高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)。
调度程序是操作系统内核程序,不能进行进程调度与切换的情况如下:在处理中断的过程中;进程在操作系统内核临界区中;其他需要完全屏蔽中断的原子操作过程中。
进程的调度方式:非抢占调度方式;抢占调度方式。
典型调度算法
- 先来先服务算法FCFS:不可剥夺算法,不能作为分时和实时系统的主要调度策略。
- 短作业优先算法SJF:可能存在饥饿现象。
- 最短剩余时间优先算法SRTN:抢占式调度,平均等待时间、平均周转时间均为最少。
- 优先级调度算法:可以分为抢占式和非抢占式。
- 高响应比优先调度算法:主要用于作业调度克服了饥饿现象。响应比R
p= (等待时间+要求服务时间)/要求服务时间 - 时间片轮转调度算法:主要用于分时系统,进程调度,不能用于作业。
- 多级队列调度算法
- 多级反馈队列调度算法:抢占式进程调度算法。思想:
- 设置多个就绪队列,为每个队列赋予不同的优先级。
- 赋予各个队列进程运行时间片大小各不相同。优先级越高,时间片越小。
- 每个队列采用FCFS算法。
- 按队列优先级调度。
2.3 同步与互斥
临界资源:很多资源一次只能为一个进程所用,这样的资源称为临界资源,访问临界资源的代码称为临界区。
同步:亦称直接制约关系。多个进程之间协调工作次序而等待、传递信息所产生的制约关系。
互斥:亦称间接制约关系。两个进程不能同时进入临界区。
- 应遵循以下准则:
- 空闲让进:临界区空闲时,允许一个请求进入临界区。
- 忙则等待:已有进程进入临界区,其他进程必须等待。
- 有限等待:请求访问的进程,应保证能在有限时间内进入临界区。
- 让权等待:当不能进入临界区时,应立即释放处理器,防止忙等。
信号量
信号量可以用来解决互斥与同步问题,它只能被两个标准原语wait(S)和signal(S)访问,也可以记为”P操作”和”V操作”。
经典同步问题
- 生产者-消费者问题
- 读者-写者问题
- 哲学家进餐问题
- 吸烟者问题
此处未展开叙述,极其重要!
2.4 死锁
死锁是指多个进程因竞争资源而造成的一种互相等待的僵局,若无外力作用,这些进程将都无法向前推进。
死锁产生的必要条件:互斥条件、不剥夺条件、请求并保持条件、循环等待条件。
死锁预防
破坏互斥条件:不可行。
破坏不剥夺条件:新的请求无法满足时必须释放已保持的资源,会导致饥饿。
破坏请求并保持条件:采取预分配办法,会导致饥饿。
破坏循环等待:顺序资源分配方法。
死锁避免
防止系统进入不安全状态,若无法找到一个可以安全推进的序列则成为不安全状态。
主要方式为银行家算法。
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2023/10/17/操作系统-第二章/
- 版权声明: 该文章来源及最终解释权归作者所有