# 操作系统考点总结

# 1.操作系统概述


# 2.进程管理

# 2.1 进程的定义

为了能使程序并发执行,并且可以对并发执行的程序加以控制和描述,人们引入了“进程”的概念。

# 2.2 进程与程序的区别

进程实际上就是程序的一次执行。

①进程是动态的,程序是静态的。

②进程具有生命周期,程序是永久存在的。

③进程是由程序段、相关数据段和进程控制块(PCB)组成,程序是指令的有序集合。

# 2.3 进程的状态

# 2.4 前趋图

# 2.5 进程的同步与互斥

# 2.6 PV操作

对于上面的生产者——消费者问题,s1的初值为1、s2的初值为0,我们参照上面的图,假设s1为空区,s2为满区。

①先执行生产者,后执行消费者:首先P(s1),表示生产者生产产品,要在空区中进行,当执行完P(s1),就代表生产了一个产品,此时空区数量减少1,再执行V(s2),满区数量增加1,即此时s1=s1-1=0、s2=s2+1=1。接下来我们如果继续执行生产者操作P(s1),s1=s1-1=-1,此时s1<0,对于P操作,就要进入等待队列中等候。所以我们此时只能执行消费者操作,首先P(s2),表示消费者消费产品,要在满区中进行,当执行完P(s2),就代表消费了一个产品,此时满区数量减少1,再执行V(s1),空区数量增加1,即此时s2=s2-1=0、s1=s1+1=0。

②先执行消费者,后执行生产者:首先P(s2),表示消费者消费产品,要在满区中进行,s2的初值为0,经过P操作,s2=s2-1=-1,此时s2小于0,无法继续执行下去。换一种思路理解就是,这种情况下,生产者还没有生产任何一个产品,那么消费者自然是无法消费产品的(因为空区的数量为0)。

# 2.7 PV操作练习题

我们来看上面这道题,购书者和收银员两个进程,设置了三个信号量:S1、S2、Sn(初值分别为0、0、n),可以假设有两种情况:①先执行购书者进程,后执行收银员进程(此情况符合大家日常去书店买书的情形),②先执行收银员进程,后执行购书者进程(此情况不太符合常理,如果没有人来书店买书,那收银员去为谁结账呢???),所以我们只能采取第一种情况:先执行购书者进程、后执行收银员进程。

首先P(Sn):Sn=Sn-1,表示有一个购书者进入书店,此时书店最多允许进入的购书者人数就应该减少1;之后购书者可以进行购书,后面进入付款步骤(联系到a1和a2),此时我们想,在购书者没有选择购书付款之前,收银员应该是被阻塞的(通俗的讲:就是坐在那里喝茶,闲着没事干),所以在b1这里需要一个P操作来阻塞它,只有当购书者付款步骤中的a1来到收银员面前结账时,收银员才有事情可做,即a1这里应该是与b1(收银员为购书者结账)相对应的V操作,所以a1:V(S1)、b1:P(S1)。即购书者买书付款→收银员进行结账,购书者不买书或者没有购书者→收银员没事干(阻塞)。

下面我们这样考虑,因为购书者此时在收银员这里等待付款,并不是说购书者直接扔几张100的红票子直接就走人了,而是需要等待收银员把购书者所买书籍一一扫码消磁、计算出总价之后,再由购书者付款,所以在这期间,购书者是在等待(即购书者处于阻塞状态),也就是说a2这里需要一个P操作来阻塞购书者,而b2需要一个V操作与a2相对应,所以a2:P(S2)、b2:V(S2)。即收银员将总价计算好→购书者进行付款,收银员结账过程中→购书者等待(阻塞)。

综上所述,第一空选A,第二空选C!!!

# 2.8 PV操作与前趋图

这类题比较简单,有一个规律就是一个进程→另一个进程,就是先V后P,按照信号量变化的顺序对应好就可以了!!!

对照上面两张图,可以得出答案:C、A、A(这里我就不再详细讲解了。。。)

# 2.9 死锁问题

# 2.9.1 什么是死锁?

死锁是指多个进程在运行过程中,因争夺资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。

# 2.9.2 产生死锁的原因

①竞争资源。②进程间推进顺序非法。

# 2.9.3 产生死锁的4个条件

①互斥条件。②请求和保持条件。③不剥夺条件。④循环等待条件。

# 2.9.4 处理死锁的4种方法

①预防死锁。②避免死锁。③检测死锁。④解除死锁。

# 2.9.5 死锁相关问题

我们来看上面这道例题,一共3个进程,每个进程都需要5个系统资源。

①如果系统中有5个资源,A分配2个,B分配2个,C分配2个,此时所有进程不能得到满足,都在等待资源,无法正常运行,即发生死锁;如果将A分配5个,运行完再分配给B,B运行完再分配给C,这样并不会发生死锁。但是,这类题我们考虑的是无论怎样都不会发生死锁的情况,所以要考虑它的一般性!!!

②如果系统中有10个资源,A分配4个,B分配4个,C分配2个,显然每个进程都无法获得5个资源去运行,即发生死锁;11、12个资源也是同样的道理;而当系统中有13个资源的时候,我们可以看到A分配4个,B分配4个,C分配4个,此时还剩下1个空闲资源,无论我们将这1个空闲资源分配给哪个进程,系统都是可以正常运行的,因为一个进程再获得1个资源即得到满足,运行完释放资源,另外两个进程也可以正常运行,即不会发生死锁!!!所以系统至少需要13个资源。

公式:假设有k个进程,每个进程都需要n个资源才可以正常运行,则系统不发生死锁的资源数至少为:k ×(n-1)+1。

# 2.9.6 银行家算法

对于银行家算法这类问题,其实并不是太难。上面这道题,首先我们需要计算的就是当前系统中还有多少可用的资源,因为**三类资源的总数分别为9、8、5,而已经分配给5个进程的三类资源数为:7、7、5,所以此时这三类资源还剩2、1、0。下面的做法其实就是将当前可用的资源数分配给5个进程中的一个,看能否达到它的最大需求量,**如果不能,则选择其他进程;**如果能,就加上该进程已分配的资源数,运行完释放,此时资源数=已分配给该进程的资源数+当前系统中剩余的资源数。**后面是同样的道理,继续分配给其他的进程,能满足最大需求量就分配,直到所有进程都可以顺序运行,就可以找到这样一条安全序列来保证系统不发生死锁。

而下面这种情况,当运行完P2进程,将可用资源数分配给P1进程时,无法达到P1的最大需求量,所以系统无法继续运行下去,就会发生死锁,这就是一个不安全序列!!!


# 3.存储管理

# 3.1 分区存储组织

①**首次适应算法:空闲分区以地址递增的次序链接。**对于上面这个题,作业4申请内存9k,按照地址递增的情况,此时作业4会被分配到25k的空闲分区,占用9k,剩余25-9=16k。

②**循环首次适应算法:与首次适应算法的区别是:不是每次都从链首开始查找,而是从上一次找到的空闲分区的下一个空闲分区开始查找。**所以作业4申请9k,而作业2和作业3所在的空闲分区的下一个空闲分区为28k,即作业4被分配到了28k这个空闲分区,占用9k,剩余28-9=19k。

③**最佳适应算法:空闲分区按其容量从小到大的顺序链接。**作业4申请9k,而当前空闲分区的容量从小到大依次为:10k、25k、28k,所以作业4被分配到10k这个空闲分区,占用9k,剩余10-9=1k。

④**最差适应算法:空闲分区按其容量从大到小的顺序链接(与最佳适应算法相反)。**作业4被分配到容量最大的空闲分区28k中,占用9k,剩余28-9=19k。

# 3.2 页式存储组织

我们来看上面这道例题,首先页面大小为4K=2^12,表示页内地址为12位,所以在对逻辑地址变换的时候,就要保留它的低12位作为物理地址,因为逻辑地址是16进制数5A29H,它的低12为是A29,那么只需要对前面的页号进行变换就可以了,由页表可知,页号5对应的物理块号(页帧号)为6,所以经变换后的物理地址为:6A29H。

第二空,进程P要访问的页面4不在内存,应该淘汰哪个页面?这里我们考虑的是:**只能淘汰在内存中的页面,因为如果一个页面压根就不在内存,那你是无法淘汰它的(换句话说,你淘汰它有何意义呢?),所以我们看到状态位是1表示在内存(有页面0、1、2、5),而对于淘汰而言,我们不能淘汰刚刚被访问过的页面,只能淘汰没有被访问过的页面(即访问位为0),查表得,页面1的访问位为0,所以将其淘汰。**即第一空选D,第二空选B。

# 3.3 段式存储组织

# 3.4 段页式存储组织

# 3.5 页面置换算法

# 3.5.1 先进先出算法

选择先进入内存的页面予以淘汰。

分析:1进来,3个物理块中都没有,所以缺页,2和3此时同理;之后4进来,物理块中没有,即缺页,会淘汰(1,2,3)最先进入内存的页面,也就是1,所以4淘汰1;之后1进来,物理块中没有,即缺页,淘汰(4,2,3)最先进入内存的,也就是2,所以1淘汰2;之后2进来,物理块中没有,即缺页,淘汰(4,1,3)最先进入内存的,也就是3,所以2淘汰3;之后5进来,物理块中没有,即缺页,淘汰(4,1,2)最先进入内存的,也就是4,所以5淘汰4;而后1和2再进来,物理块中已经有这两个页面了,所以不缺页;之后3进来,物理块中没有,即缺页,淘汰(5,1,2)最先进入内存的,也就是1,所以3淘汰1;之后4进来,物理块中没有,即缺页,淘汰(5,3,2)最先进入内存的,也就是2,所以4淘汰2;最后5进来,物理块中有,所以不缺页。这就是页面置换算法中的先进先出算法的整个过程!!!

# 3.5.2 最佳置换算法

选择永远不再需要的页面或者最长时间内不再使用的页面予以淘汰。

分析:页面1进来,物理块中没有,即缺页;页面2和3同理;之后页面4进来,物理块中没有,即缺页,我们看到页面后面的走向,可知页面1、2、3中最长时间内不再访问的是页面3,所以页面4淘汰页面3,之后页面1和2进来,物理块中已有,不缺页;之后页面5进来,物理块中没有,即缺页,再观察页面后面的走向,可知页面1、2、4中最长时间内不再访问的是页面4,所以页面5淘汰页面4;之后页面1和2进来,物理块中已有,不缺页;接下来页面3进来,物理块中没有,即缺页,虽然页面后面的走向中没有1、2,有5,但是考虑到页面1和2刚刚被访问,页面1访问的较早,所以这里页面3淘汰页面1;4进来与3同理,物理块中没有,即缺页,即淘汰页面2;最后5进来,物理块已有,即不缺页。这就是页面置换算法中的最佳置换算法的整个过程!!!

# 3.5.3 最近最久未使用算法

选择最近一段时间中最长时间没有被访问过的页面予以淘汰。

分析:首先页面1、2、3依次进入内存,物理块中都没有,即都会产生缺页;之后页面4进来,物理块中没有,即缺页,选择页面1、2、3这段时间中最久没有被访问过的页面,那么显然1访问的最早,所以这里页面4淘汰页面1;之后页面1进来,物理块中没有,即缺页,淘汰页面4、2、3这段时间中最久没有被访问过的页面,也就是页面2,所以页面1淘汰页面2;之后页面2进来,物理块中没有,即缺页,淘汰页面4、1、3这段时间中最久没有被访问过的页面,也就是页面3,所以页面2淘汰页面3;接下来页面5进来,物理块中没有,即缺页,淘汰页面4、1、2这段时间中最久没有被访问过的页面,也就是页面4,所以页面5淘汰页面4;之后页面1和2进来,物理块中已有,即不缺页;之后页面3进来,物理块中没有,即缺页,淘汰页面5、1、2这段时间中最久没有被访问过的页面,由于刚刚访问过1和2,所以这里应该要淘汰的是页面5;之后页面4进来,物理块中没有,即缺页,淘汰页面3、1、2这段时间中最久没有被访问过的页面,也就是页面1,所以页面4淘汰页面1;最后页面5进来,物理块中没有,即缺页,淘汰页面3、4、2这段时间中最久没有被访问过的页面,也就是页面2,所以页面5淘汰页面2。这就是页面置换算法中的最近最久未使用算法的整个过程!!!


# 4.文件管理

# 4.1 索引文件结构

这道题中,物理块号50对应逻辑块号0,物理块号67对应逻辑块号1,物理块号68对应逻辑块号2,物理块号78对应逻辑块号3,物理块号89对应逻辑块号4,这五个采取的是直接地址索引;而物理块号90和91采取的是一级间接地址索引,90→58对应的是逻辑块号5,所以逻辑块号5对应的物理块号为58。

因为题目中说每个地址项的大小为4字节,而对于一级和二级间接地址索引,每个物理块可以存1024字节的内容,所以在每个一级、二级间接地址索引中,有1024/4=256个地址项。所以在物理块号90中,存放的是从5~260(5+256-1);在物理块号91中,存放的就是从261~516(261+256-1),所以逻辑块号261对应的物理块号为187。

观察上图可知,101号物理块显然采取的是二级间接地址索引的方式,所以其中存放的是二级地址索引表。

# 4.2 树形目录结构

重点掌握相对路径和绝对路径的表示方法!!!

# 4.3 空闲存储空间管理——位示图法

这道例题,首先物理块是从0开始编号的,系统中字长为32位(相当于一个字中包含了32个物理块),那么对于4195号物理块,实际上是第4196个物理块,那么,每个字的长度均为32位,所以4196/32=131.125,表示的是超过第131个字了,要将前131个字都填满,而当前物理块是在第132个字中描述,第一空选D。

第二空问系统应该怎么样?既然要将物理块分配给某文件,必须取值为1(1表示占用),所以排除A和C;我们再来看,前131个字所表示的物理块范围是0~131×31:0~4191,所以第132个字中,第0位置表示4192,第1位置表示4193,第2位置表示4194,第3位置表示4195,所以在第132个字的第3位置对应上了4195号物理块。所以第二空选B。


# 5.设备管理

# 5.1 数据传输控制方式

详细内容请查看博主的这篇博文:https://blog.csdn.net/weixin_43823808/article/details/108002550 (opens new window)

# 5.2 虚设备与Spooling技术


# 6.微内核操作系统

本文转自 https://blog.csdn.net/weixin_43823808/article/details/108254765 (opens new window),如有侵权,请联系删除。

上次更新: 7/31/2022, 3:31:29 PM