前言
本文内容主要源自于王道讲解的学习笔记总结。梳理《操作系统》考点(以理论为重点),并对重点内容划下横线和加粗标注,方便考研复习。
可搭配以下链接一起学习:
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第四章
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章
(第一章至第七章的博文已完成,点上面链接进去即可跳转)
一、第一章 操作系统概述
(一)操作系统的概念、特征和功能
1、并行性与并发性
(1)并行性:指两个或多个事件在同一时刻发生;
(2)并发性:指两个或多个事件在同一时间间隔内发生。
2、操作系统的特征:并发、共享、虚拟、异步。
(并发与共享是最基本的特征,互为存在条件)
3、操作系统提供的接口:
(1)命令接口:联机命令接口、脱机命令接口
(2)程序接口:即系统调用,用户通过程序间接使用
(3)GUI(图形用户界面)
(二)用户态与核心态(即目态和管态)
4、特权指令(核心态):输入/输出指令、开中断指令、关中断指令、修改PSW指令、置时钟指令、广义指令、进程切换、进程调度程序
5、非特权指令(用户态):访管指令(trap指令)
(三)中断、异常
中断信号来自CPU | 与当前指令 | |
内中断(异常、例外、陷入) | 内部 | 有关 |
外中断(中断) | 外部 | 无关 |
6、子程序调用是程序设计者事先在主程序中安排一条调用指令 CALL,子程序的调用时间是固定的。主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路。。
7、中断处理和子程序调用的区别:
调用类型 | 中断 | 子程序调用 |
入口地址 | 由中断隐指令根据中断向量得到 | 由调用程序根据寻址方式得到 |
保存环境 | 保存PC、PSW、通用寄存器 | 保存PC、通用寄存器 |
进程状态 | 从用户态转换为核心态 | 没有状态变化 |
8、有中断请求时,先由中断隐指令完成中断前程序的状态保存,主要工作有:
① 关中断;
② 保存 PC、PSW;
③ 根据中断向量引出对应的中断服务程序( 即中断处理程序,属于操作系统内核),通用寄存器的保护由中断服务程序完成。当中断服务程序运行结束后再开中断。
(四)系统调用(运行在系统的核心态,请求是发生在用户态)
9、什么时候需要系统调用?
答:系统中的各种共享资源都由操作系统统一掌管, 因此在用户程序中,凡是与资源有关的操作(如存储分配、进行 I/O 传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
10、系统调用按功能大致可分为如下几类:
(1)设备管理:完成设备的请求或释放,以及设备启动等功能。
(2)文件管理:完成文件的读、写、创建及删除等功能。。
(3)进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。
(4)进程通信:完成进程之间的消息传递或信号传递等功能。
(5)内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。
11、系统调用的过程是什么?
(1)传递系统调用参数;
(2)执行陷入(trap)指令;
(3)执行相应的服务程序;
(4)返回用户态。
二、第二章 进程管理
(一)进程与线程
1、用户级线程:由应用程序通过线程库实现,其线程切换可以在用户态下即可完成,无需操作系统干预。
2、内核级线程:处理机分配的单位。
(二)进程状态与进程控制
3、进程的状态转换:
(三)处理机调度
4、调度的三个层次:高级调度(作业调度)、中级调度、低级调度(进程调度),调度频率由小到大。
5、 特别注意带权周转时间。
6、进程优先级分别:静态优先级和动态优先级,通常:
(1)系统进程优先级高于用户进程;
(2)前台进程优先级高于后台进程;
(3)I/O型进程(或称|/O繁忙型进程)优先级高于计算型进程( CPU 繁忙型进程) ;
7、不能进行处理机高度的情况:(即不能进行进程的调度与切换的情况)
(1)在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源。
(2)进程在操作系统内核程序临界区中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行。
(3)其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。
如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统的请求调
度标志,直到上述过程结束后才进行相应的调度与切换。
8、典型的调度算法(重点)
(四)进程同步与互斥
9、为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:
1)空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
2)忙则等待。当己有进程进入临界区时,其他试图进入临界区的进程必须等待;
3)有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿) ;
4)让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
10、互斥的四种软件实现方式:
(1)单标志法;
(2)双标志先检查法;
(3)双标志后检查法;
(4)Peterson算法。
11、信号量机制
(1)整型信号量:被定义为一个用于表示资源个数的整型量S。当进程发现S≤0时,就会不断测试。因此进程处于忙等状态,未遵循“让权等待”原则。
(2)记录型信号量遵循了“让权等待”原则。其数据结构类型如下:
typedef struct{
int value; //代表资源数目
struct process *L; // 链接等待该资源的进程。
}semaphore;
信号量的 P、V 操作的实质是“加减”操作,P、V操作又是原语操作,所以:
P操作是对信号量(只能对信号量,不可以对普通变量)进行减“1”操作,然后判断是否小于零,“是”则阻塞等待,“否”则什么都不做;
V操作是对信号量加“1”操作,再判断是否小于等于零,“是”则唤醒进程,“否”则什么也不做。
记录型信号量 S 中 value 值的意义:
- S.value 的初值表示系统中某类资源的总数。
- S.value < 0 表示当前系统中已经没有可用的该类资源。
- S.value < 0 时,其绝对值表示 S.L 中因等待该资源而阻塞的进程个数。
(五)经典同步问题
关于 P、V 操作的系列习题可见下方链接(此处只放两个,更多请见博主专栏——操作系统):
【考研】操作系统——同步互斥问题(P、V操作)1
【考研】操作系统:2019年真题43(同步互斥问题)
12、生产者-消费者问题(注意:实现互斥的 P 操作一定要在实现同步的 P 操作之后)
13、读者-写者问题
14、哲学家进餐问题
(六)死锁
15、死锁条件
产生死锁必须同时满足以下四个条件,只要其中任一一个条件不成立,死锁就不会发生。
● 互斥条件:在一段时间内某资源仅为-一个进程所占有。此时若有其他进程请求该资源,则
请求进程只能等待。
● 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。
● 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
● 循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。
16、有什么办法可以解决死锁问题?
答:死锁的处理策略可分为三种:
(1)死锁的预防:指通过设立一些限制条件,破坏死锁的一些必要条件,让死锁无法发生。
(2)死锁的避免:指在动态分配资源的过程中,用一些算法防止系统进入不安全状态,从而避免死锁。(如银行家算法)
(3)死锁的检测和预防:指在死锁产生前不采取任何措施,只检测当前系统有没有发生死锁(如死锁定理),若有则采取一些措施解除死锁(如资源剥夺法、撤销进程法、进程回退法)。
【补充】
死锁定理:S 为死锁的条件是当且仅当 S 状态的资源分配图是不可完全简化的。
资源分配图:
(1)圆圈:代表一个进程;
(2)框:代表一类资源;
(3)请求边:从进程到资源的有向边;
(4)分配边:从资源到进程的边,表示该类资源已有一个资源分配给了该进程。
【可搭配以下链接一起学习】
【考研】操作系统之考点——死锁(含真题讲解)_住在阳光的心里的博客
17、系统安全状态
18、银行家算法(避免死锁)
【补充】应掌握如何求系统安全序列
可参考该章的课后习题及答案:
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章_住在阳光的心里的博客
三、第三章 内存管理
(一)内存管理的概念
1、程序运行的基本原理
将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:
● 编译,由编译程序将用户源代码编译成若干个目标模块,每个模块具有各自的逻辑地址空间。
● 链接,由链接程序将上述目标模块,以及所需库函数链接,形成具有完整的逻辑地址空间的装入模块。
● 装入,由装入程序将装入模块装入内存。
而程序执行的过程中,在指令寻址与数据寻址时,CPU 不断地进行从逻辑地址到物理地址的转换。图 3 - 1 展示了从源程序(C程序为例)变为在内存中执行的程序的过程。
(二)连续分配管理方式
(三)非连续分配管理方式
1、分页存储管理方式
2、分段存储管理方式
(四)虚拟页式存储管理(重点)
1、虚拟存储器的定义和特征
(1)定义:基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存。另一方面,操作系统将内存中暂时不使用的内容换出到外存上。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。
(2)虚拟存储器有以下三种实现方式:请求分页;请求分段;请求段页式。
(3)虚拟存储器有以下三个主要特征:多次性、对换性、虚拟性。
(4)虚拟存储器的容量取决于地址空间的大小,而不是由实际的内存容量决定。
2、缺页中断机构
在页式虚拟存储管理系统中,程序是部分装入的,还有部分是处于外存上的,因此,当需要访问那部分位于外存上的代码或数据时,系统就会产生缺页中断。
产生缺页中断的目的是要将位于外存上的代码或数据装入内存,此时应将缺页的进程阻塞(调页完成唤醒),如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项,若此时内存中没有空闲块,则需要淘汰某页。
缺页中断作为中断同样要经历,诸如保护 CPU 环境、分析中断原因、转入缺页中断处理程序恢复 CPU 环境等几个步骤。但与一般的中断相比,它有以下两个明显的区别:
(1)在指令执行期间产生和处理中断信号,而非一条指令执行完后。
(2)一条指令在执行期间,可能产生多次缺页中断。
3、快表TLB
4、请求分页存储管理
5、虚拟页式存储管理的硬件机制说明
6、置换算法
6、页面分配策略
(1)固定分配局部置换。它为每个进程分配一定数量的物理块,在整个运行期间都不改变。若进程在运行中发现缺页,则只能从该进程在内存的页面中选出一个换出,然后再调入需要的页面。实现这种策略难以确定为每个进程应分配的物理块数量,太少会频繁出现缺页中断,太多又会使CPU和其他资源利用率下降。
(2)可变分配全局置换。这是最易于实现的物理块分配和置换策略,为系统中的每个进程分配一定数量的物理块,操作系统自身也保持一个空闲物理块队列。当某进程发现缺页时,系统从空闲物理块队列中取出物理块分配给该进程,并将欲调入的页装入其中。
(3)可变分配局部置换。它为每个进程分配一定数目的物理块,当某进程发现缺页时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其他进程的运行。如果进程在运行中频繁地缺页,系统需再为该进程分配若干附加物理块,直至该进程缺页率趋于适当程度为止;反之,若一个进程在运行过程中缺页率特别低,则此时可适当减少分配给该进程的物理块。“
7、工作集(驻留集)
例如:页面:1、2、3、4、5、6、7、8,此时访问到了6号页面
假设工作集窗口大小为4,则工作集为{3,4,5,6}
一般驻留集(此时驻留在内存里的页面的集合)要比工作集(在某段时间内,进程要访问的页面集合)大,但有些时候,认为工作集 = 驻留集。
假设系统给进程分配了6个页框,则访问到了6号页面时,驻留集应为{1,2,3,4,5,6}。
8、抖动
频繁的页面调度行为称为抖动或颠簸。
如果一个进程在换页上用在进程的页面置换过程中的时间多于执行时间,那么这个进程就在颠簸。
使用虚拟内存技术,操作系统中进程通常只有一部分块位于主存中,从而可以在内存中保留更多的进程以提高系统效率。产生抖动后,使得系统吞吐量下降,缺页中断率迅速增长,由于外理机差不多花费所有时间在进行内外存页面置换,因此几乎不能做任何工作。
引起系统抖动的原因:是对换的信息量过大、内存容量不足、置换算法选择不当。
解决的办法:降低交换页面的数量、加大内存容量、改变置换选择算法。
但是降低交换页面数量和改变置换选择算法对于一个应用系统来讲是不可能的,只能增加内存容量,或者降低进程数量(相对地增加内存)。而增加交换区容量并不能解决物理内存不足的问题。“