操作系统-第二章
第一节
进程的概念
进程实现操作系统的并发、共享,进程映像包含进程控制块、代码段、数据段组成
将进程理解为一件手头上未完成的事会是最精准的
动态性:不连续、间断
异步性:也称失去封闭性
进程的组成
参考,P179,进程映像于内存中的存储形式,PCB、页表等常驻内存,其余按需调入
进程控制块内容需要背诵;操作系统中谈到的程序均为代码段含义
进程状态与转换
运行、就绪、阻塞、创建、终止
一般性转换案例:请求资源中断、资源获取、时间片剥夺、时间片轮到、异常终止
其余态转变依据具体情况判断,不一一列出,书有补充
进程控制
高频考点,重点在于创建、终止、阻塞、唤醒四大原语的具体执行步骤、细节
创建:PCB数量决定创建成功与否;资源分配决定创建态或就绪态;容量决定插入与否
终止:终止条件需要背诵;终止态立即释放进程资源;线程终止不立刻释放资源
阻塞:请求操作系统服务需要陷入;用户态陷入内核态
唤醒:由中断处理程序唤醒,同样处于内核态;返回用户态
上述原语均可被用户采用系统调用间接使用
进程通信
共享存储区、消息传递、管道通信
共享存储区:分为队列共享、内存共享区域共享;速度快;系统调用
消息传递:分为直接、间接通信;调用两个通信原语、速度较慢;直接通信需缓冲队列
管道通信:与存储区类似;互斥、同步、半双工、属于进程资源可继承;系统调用;
注:缓冲区大量存在于通信领域,本质是解决读、写速度不匹配的问题
注:管道是半双工,书上谈的互相通信是为了实现全双工
注:第二章综合题中对进程通信的描述较为准确和完整,建议学习
线程概念
线程权限:可创建、撤销另一线程;可修改另一线程栈区;可终止、复活另一线程;
调度、并发、资源、独立性、开销
线程不拥有独立地址空间;进程拥有独立地址空间;进程线程均有唯一标识控制块
同进程线程通信不需要操作系统参与;线程并发、调度代价较小
线程控制块
内容需要背诵;创建浏览即可、终止态留意于进程终止的区别,此不直接释放资源
线程实现方式
下述内容均基于用户态线程与内核态线程关系展开,不探讨纯内核态线程
用户级线程:
于操作系统看来是一个进程,由用户态线程库映射为多个用户态线程
线程切换代价低、线程调度算法自选、于不同操作系统迁移性强;操作系统视作同进程
内核级线程:
同一进程被操作系统映射为多个内核态线程,映射为多个用户态线程
操作系统视作多个线程调度;调度与切换均需转核态;于核态管理、调度,用户态运行
相对用户级线程,同进程间线程的调度与切换较慢,原因如上
组合态:
融合上述两类优势,拥有各自特点,调用用户库或系统调用均可管理线程
多线程模型
对组合态线程的单独展开论述,是对线程本身映射关系的论述,与进程无关
多对一、一对一、一对多,均是基于用户-操作系统顺序论述的
多对一:多个用户态线程来于一个内核线程,类用户级线程,但映射来源为线程非进程
一对一:一个内核线程映射为一个用户线程,需要与内核级线程区分
一对多:上述两者的组合,线程映射不固定
注:本处谈论的均为内核线程与用户线程关系,需要与先前谈及的用户级、内核级区分
前者是内核线程到用户线程的映射关系,后两者是对进程到用户线程的映射关系
且本处的讨论均基于组合态线程
父进程与子进程关系
1.父进程创建子进程
2.子进程继承父进程资源,但是一个独立的进程实体,拥有独立的进程映像
3.父进程与子进程为独立进程,并发运行、独立调度;可由管道等实现通信(普遍)
4.父进程可以调用系统调用终止子进程
随记
进程之间无法通过全局变量通信、同进程线程之间可以通过全局变量通信
任意时间最多只有核数个进程运行;最少全部均在阻塞
高级调度过程即为进程创建过程,若成功必然创建进程;操作系统响应服务即创建进程
消息传递、管道均涉及拷贝,套接字网络层面更加费时,共享存储共享最快
区分何者于进程控制块中,何者不在,建议结合控制块内容、进程内存映像背诵
系统调用既可以由用户进程发起,亦可由内核进程发起,系统调用不一定会产生变态
用户级线程切换必然不涉及变态;内核级线程切换必然涉及变态
管道为半双工文件;若要实现双向通信至少需要两个管道
进程控制块的数量是有限的,主要受限于内存大小
统考常考方式:下列操作请求时/执行时/完成时,会导致何种情况,区分不同阶段
等待键盘输入过程中,进程一直阻塞直到输入内容,具体见,P315,统考真题中断部分
定义:一组进程,如果它们单独不能正常进行,但并发可以进行,称这种现象为进程合作
第二节
三级调度
高级调度、中级调度、低级调度
高级调度从外存调到内存并创建进程:调入、申请、创建、分配、插入,创销均只一次
中级调度当内存不足时调部分进程映像到外存,进程控制块、页表等常驻内存,可调回
低级调度即为选择哪个进程获取处理器
调度的实现
调度器:排队器、分派器、上下文切换器;常用软件实现,亦可用硬件实现一部分逻辑
补充:硬件排队器;硬件中断控制器、多核处理调度逻辑;状态寄存器组
调度、切换的时机:父子进程择一、处理器空闲、I/O中断唤醒后的进程优先级判断
补充:I/O中断程序唤醒进程并传输数据入内核缓冲区;内核缓冲区将数据传至进程栈
当优先级较高且可剥夺时,直接调度进程;优先级不足或不可剥夺,不调度进程
调度衡量标准
处理器利用率、系统吞吐量、周转时间、带权周转时间、等待时间、响应时间
进程切换
进程切换前后均维持在内核态、上下文保存于进程控制块中,与中断有联系又有区别
上下文切换较为耗时,因而进程调度耗时、同进程的线程调度耗费较小
核态转换由硬件实现,当产生任何需要内核介入的事件,硬件会自动完成核态转换
典型案例:中断、异常、系统调用
模式切换可从执行前、执行中、执行后分类为四类,以下为常见案例
用户-内核-内核:用户进程系统调用,内核进程再度系统调用
用户-内核-用户:用户进程系统调用,完成后返回
内核-用户-内核:操作系统调度进程,用户态运行,产生中断、异常、系统调用
内核-用户-用户:操作系统调度进程,用户态运行,保持不需操作系统介入的稳定状态
调度算法
先来先服务、短作业(进程)优先、高响应比作业优先、优先级调度、时间片、多级队列
耗费程度:多级队列、时间片、高响应比,耗费较为严重
饥饿:先来先服务、短作业、优先级调度
FCFS:利于长作业
短作业、进程优先:饥饿、无及时性、平均效能最优;剥夺式/不可剥夺式
响应比:均衡全为优点
优先级:静态/动态优先级,抢占/非抢占式优先级
时间片:未完成的会被剥夺时间片放入末尾;当时间片未完结束直接调用下一进程
偏记忆性内容,统考考察均为简单计算
随记
进程在操作系统内核程序临界区中不能进行调度与切换,指代执行原语过程
进程在用户临界区可以被调度,临界区分普通临界区与特殊临界区,特殊临界区为上述
I/O进程理应被优先选择,方便外设与处理器提早开始并行运行
时间片轮转必然是剥夺式的,且不可能存在饥饿现象
动态优先级,应在进程时间片用完后减小其优先级,运行时不能减小,否则死循环
统考考察方式,将调度分为高级调度与低级调度两类,题目中需要明确有两次调度存在
第三节
基本概念
同步、互斥(互斥的四个基本准则)、临界资源、临界区
访问临界资源的那一段代码被称为临界区,即临界区是一段运行程序的代码段
临界资源:
只有共享资源才可能成为临界资源,非共享资源不可能是临界资源
共享资源中的独占资源,被称为临界资源,常见如打印机、共享存储区
补:临界资源=不可剥夺的共享资源=互斥共享模式资源
临界区算法
单标志法、双标志先/后检查法、Peterson算法、中断指令、TS指令、SWAP指令
互斥锁、整型信号量、记录型信号量
除记录型信号量外,均没有实现让权等待,具体的算法描述归档中
重点在于记忆各自的特点、优缺点,以记录型信号量为主
记录型信号量
资源数即为当前物理上所拥有的资源数量,负数即为已被预约数量
互斥信号量初始值必然为一,同步信号量初始值根据具体所需要求决定,不固定
经典问题与编程题,单独归档论述
管程
一类资源对应一个管程,系统中可存在多个管程
外部进程只能通过调用管程的接口来实现共享资源的访问,且必然能够互斥访问
管程接口实现对共享的规定方式,不需用户主动设置互斥量,内部操作天然互斥、同步
管程中的条件变量实际上为队列名,按阻塞原因排至不同条件变量队列下
条件变量实际上间接实现进程的互斥、同步
补充:进程调用管程行为与步骤
随记
互斥、同步上锁的对象为临界区,而非临界资源
通过上锁实现对临界资源的互斥、同步,这是目的与结果,对临界区上锁为实现方法
进程访问临界区时被阻塞可以调度其他进程,但其他进程不能访问这段互斥的临界区
临界区指代的就是被锁住的同一段代码段,或者相互有同步关系的代码段
其他进程之所以无法访问是因为操作系统必须要令并发进程的推进按逻辑有序
该临界区自然在结果上是被上锁的,不论是结果还是原因,均不可访问该临界区
缓冲区的互斥访问同样基于对临界区的信号量操作,缓冲区必然是互斥的
原语不是系统调用,系统调用可能基于原语实现
死锁只可能出现在两个以上程序之间,单个程序不可能死锁
并发进程涉及同一临界资源,而临界区是访问临界资源的代码段,因而一个进程一个
公用数据结构均为临界资源,对其的访问即为临界区,需要用信号量实现互斥
生产者、消费者问题中,最常见为生产消费者互相唤醒,但也可同类唤醒
同类唤醒的方式即为增设条件变量、全局变量,一旦需要同步大概率就会产生此类情况
进程、线程的互斥:同进程内的线程之间对共享变量的访问需要互斥,其余均不需要
第四节
死锁与饥饿
死锁一定是两个进程以上、饥饿是一个;死锁是逻辑上的死锁,饥饿没逻辑问题
死锁必然阻塞,饥饿既可为就绪也可为阻塞
死锁产生原因
现有互斥资源的竞争、同步资源的竞争
死锁必要条件与反必要条件
请求并保持、不可剥夺、循环等待、资源互斥
互斥:该资源为临界资源,一般无法破坏,不作为破坏条件
不可剥夺:进程占据临界资源后其他进程无法剥夺;当其请求新资源失败时剥夺其资源
请求并保持:已占据临界资源且不可剥夺,再申请资源;申请时不可带资源(两种)
循环等待:互相占用对方所需临界资源,形成环请求链;资源顺序编号、按资源数分配
哲学家为例:
四名哲学家进餐:破坏循环等待,按资源数分配
两边筷子均可用方可进餐:破坏请求并保持
哲学家顺序编号:破坏循环等待
死锁处理策略
预防、避免、检测
死锁预防
即为反必要条件,如上所述,书上概述
死锁避免
必须知晓进程运行全过程所需资源
死锁是资源分配问题,也同样是进程同步互斥问题,目前讨论前者
安全状态必然不会死锁、不安全状态不一定会死锁、死锁一定是不安全状态
案例:异常导致终止、进程释放资源、实际所需小于声明、申请资源为可消耗资源
死锁避免策略不一定能避免死锁,银行家算法一定能避免死锁
银行家算法是资源的分配策略,用于避免死锁,统考中唯一考察重点
死锁避免这类方式不采用破坏必要条件的方式避免死锁,银行家算法亦是如此
死锁检测与避免
已经死锁,回头检验,处理死锁,知晓当前资源请求即可
资源分配图有向图概念:请求边、分配边、圆形表进程、方形表资源、小圆点表资源数
死锁解除:资源剥夺(强迫)、撤销进程(强迫)、进程回退(自愿)
注:进程被迫回到原点或者被迫取消已经做的工作表面上是“回退”,但定义不同!!
注:只能说不要混淆日常概念与专业名称概念
随记
对同类资源的竞争不会死锁的含义,实际上为多个竞争一个的含义
判断死锁预防方法的题型:先看是否为破坏剥夺、请求,如果不是那么即为破坏循环
系统产生死锁的根本原因是资源不足
死锁定理是处理死锁的方式、死锁避免需要知道当前资源分配情况,避免需要全过程
避免死锁的核心思想:至少令当前有一个进程正常工作,化死锁为竞争
一般安全序理均不唯一,若资源大于一切所需资源,必然为安全状态,不会死锁
第二章困惑点:
线程实现方式、多线程模型;进程上下文切换与中断关系联系(联系计组);
临界资源与临界区;管程;PV大题;类C语言进程分析题;类C语言加锁类型题;