软件设计师【软考中级】复习笔记 —— 第三章(操作系统基本原理)

3.1 操作系统概述

在这里插入图片描述
操作系统:用来管理整个计算机软硬件资源的。对于人和计算机而言,接口往往就是命令
在这里插入图片描述

3.2 进程状态转换图

3.2.1 进程管理-进程的状态

在这里插入图片描述
进程状态:指在操作系统当中, 对进程进行管理的时候,为进程指定了几种状态,以便于给进程分配相应的资源,把它管理起来。

最初:进程分为运行态,就绪态,等待态这三种状态。
运行态:指该进程所需要的所有资源都已经配足,并且给它了CPU资源。
就绪态:指除CPU之外的所有资源都以配足。
等待态:除缺CPU资源以外,还缺其他的资源。

三种状态无法涵盖我们常见的各种情况,比如:人为的希望把某个进程先暂停下来,三态模型无法做到这点。 于是便有了五态模型;

3.3 前趋图

在这里插入图片描述
前趋图:表达要完成的一系列活动的先后约束关系。即哪些任务可以并行,哪些任务有先后关系。

3.4 进程的同步与互斥

在这里插入图片描述
同步与互斥是进行PV操作分析的前提;
互斥:在同一时刻,只允许某一个进程去使用某个资源;同一个资源不能同时服务于多个进程。
同步与互斥不是互为反义词:互斥对共享,同步对异步。

PV操作中的经典问题,生产者和消费者中的同步与互斥的问题:
在这里插入图片描述
单缓冲区情况:
互斥问题:对于市场的操作,不能是既有生产者存东西,也有消费者去搬东西。同一时刻,只允许一个人进入市场去操作。这就是互斥,市场就是一个互斥资源。

同步问题:生产者把东西放入市场,市场就满了,不允许再往市场放东西,只有等到消费者把市场中的东西消费掉,才允许生产者再往市场放东西,这个过程,其实就是生产者停下脚步等消费者消费完这个商品,生产者才能继续往市场放东西。

多缓冲区情况:多缓冲区类似,只是同步时候,放的步子大一点而已。

这就是生产者和消费者问题中的同步与互斥的问题,对于PV操作,需要分析清楚同步在哪些地方,互斥在哪些地方,才能够准确的定位哪里要写P操作,哪里要写V操作。

3.5 PV操作

在这里插入图片描述
信号量:经常看到的P(S)、V(S),其中的S就是信号量。
是一种特殊的变量;特殊是因为主要应用于PV操作当中的一种专属变量。

PV操作就是两大原子操作的一个组合。

P操作:假设执行P(S)操作,首先将信号量S做自减1的操作(S=S-1);
在判断S是否小于0,如果S小0,会阻塞S当前继续执行的状态,将当前拥有P(S)操作的进程阻塞起来,然后将该进程放到进程队列中去,此时该进程就属于等待状态。如果S不小于0,会继续执行当前程序。

V操作:反向操作;首先会将信号量自加1(S=S+1),然后再来判断S是否小于等于0, 如果S<=0条件成立,就会在系统的进程队中,拿出一个进程来唤醒它,让该进程继续执行,否则就继续往下走了。
在这里插入图片描述
过程分析:PV操作的价值与意义;
假设没有PV操作,在运行过程中,将面临什么样的问题?
单缓冲区,生产者消费者问题描述,该问题中,生产者负责生产产品并将产品送到缓冲区;消费者负责从缓冲区取产品并将产品消费。
假设生产者进程先执行,生产一个产品送到缓冲区,没有问题,此时消费者进程还没有执行,然后当生产者进程在次执行时,生产产品并送到缓冲区过程中,因为原来缓冲区的产品还未消费,会产生溢出问题;
当消费者进程先执行时,首先从缓冲区取产品,此时缓冲区是空的,没有产品可取,会出错,所以,当没有PV操作时候,无论从生产者进程开始执行,还是从消费者进程开始执行,都有会产生一定的问题。

当引入PV操作之后:
S1初值为1,S2初值为0;
生产者进程生产一个产品,执行P(S1)操作,S1自减1为0,判断0不满足0<0条件(F),这该进程继续执行,此时,执行将产品送到缓冲区操作,然后执行V(S2)操作,S2自加1为1,判断1不满足1<=0的条件(F),此时不执行消费者进程,继续执行生产者进程;
生产一个产品,然后执行P(S1)操作,由于当前时刻S1已经等于0了,所以S1自减1为-1,-1满足S<0的条件(T),当前进程就会被放入到进程的等待队列,并将当前状态阻塞起来;说明我们加入PV操作以后,第二次生产的产品在第一次的产品还没有消费完之前,是不会送到产品缓冲区的,这样就不会产生溢出了,这种情况是可以顺利执行下去的。

在生产者进程阻塞起来之后,来分析消费者进程是否能够执下去;首先执行P(S2)操作,此时S2=1,执行完P(S2)操作之后,S2自减1等于0,判断0不满足0<0条件(F),这继续执行消费者进程,从缓冲区中取出产品,取出之后,缓冲区又变空了;然后V(S1),将S1自加1为0(S1刚才等于-1),S<=0为T,就会在等待队列中找到一个进程激活,激活的其实就是刚才被阻塞起来的生产者进程,此时就相当于把生产者进程给唤醒了,所以就可以继续往地下执行了。

假设一开始执行的不是生产者进程,而是消费者进程,则同上分析。

所以PV操作所解决的问题其实是某些并发进程之间某些约束关系的问题的解决。
P操作有阻塞操作,V操作不具备阻塞操作。

3.6 PV操作练习题

在这里插入图片描述
该题需要我们分析进程之间的一些约束关系:在哪些位置应该要阻塞起来,等待另外的一个进程来进行相关的操作,等他们操作之后,在进行下一步的流程。

过程分析:书店最多允许n个购书者进入,如何做到:进入时把信号量减1,一直减到负数时,阻塞别人进入(P操作所进行的流程)。S<0时,当前进程将被阻塞,阻塞会如何被唤醒,被激活的状态,就是当有人离开书店时,进行V操作,就将资源释放出来了,所以,进入书店之前有个P(Sn),在离开书店之前有个V(Sn),这一对PV的操作,所实现的功能,就是该书店最多允许n个购书者的进入,因为n+1个进来时会被阻塞。

其中付款操作不是购书者个人单一能够完成的动作,需要有收银员来做收费的操作。需要两个人配合完成,所以,在这里面会有同步的操作在里面。同步关系的关键点就在于a1、a2,b1、b2,要填的内容。

收银员进程,会有一个P操作处于阻塞等待状态,这个操作由购书者进程的V操作负责唤醒。
选A、C

3.7 PV操作与前趋图

在这里插入图片描述
前趋图主要用来表达,需要进行的活动他们之间的一张依赖关系,把一个前趋图转成PV操作的形式,实际上就是把前趋图的每一个活动,都转成相应的进程,然后为了让这些进程在并发执行时,依然按前趋图的约束关系的先后顺序去执行,所以加入了相应的PV操作。

A、B、C、D、E这些活动都对应了相应的进程,代表要完成的相应的一系列的任务。对于A、B、C活动而言,在它之前是没有其他活动的,它一开始就能够执行,所以它并不受依赖约束,但对于D而言,一开始没法执行,因为要执行D,必须先要完成A、B、C这些。而要完成E,必须先要完成D活动。
这种依赖关系,用PV操作如何表达?
在D进程开始的位置,就要写上P(Sa)、P(Sb)、P(Sc),代表A、B、C都没哟执行完情况下,是不能够开始后面的搅拌工作的,而对于A、B、C而言,在它们之后需要对进程D的P操作的锁进行解锁操作。这时如果一开始执行D活动,会被P(Sa)、P(Sb)、P(Sc),阻塞起来。

3.8 例题

在这里插入图片描述
每一条箭线就对应了一个信号量,所以在每一条箭线上面标出信号量,遵循原则:从左到右,从上到下。箭头的起点位置为V操作,箭头的末尾位置为P操作。

3.9 死锁问题

在这里插入图片描述
进程的死锁需要掌握的几个问题:
1、给定一定数量的进程,已知每个进程需要多少资源,需要计算最少系统有多少个这类资源,就不可能发生死锁。
2、涉及死锁的预防和避免的问题。这里会涉及到银行家算法。
死锁:所谓死锁是指系统中有一系列的资源,有一系列需要用到这些资源的进程,这些进程需要系统给它分配资源才能够运行,如果说系统在某一时刻,发现所有的可用资源都已经分配出去了,而所有的进程都没有办法完成它本身的职责任务,从而释放已占有的资源,就会产生死锁。即:所有的进程都在等待其他进程再给它释放资源,而自己又不远释放自己的资源给别人用。就会造成系统无法正常完成一些列的任务。

3.9.1 例题

在这里插入图片描述
例题:最少需要13个资源就不可能发生死锁。
即:先给每个进程分配它所需的总数减1个资源,然后系统中还有一个资源就不会产生死锁。
所以公式为:如果每个进程需要n个资源,总共有k个进程。
则系统不发生死锁所需的最少资源数:k * ( n - 1 ) + 1。

3.10 银行家算法

3.10.1 死锁的预防与避免:

在这里插入图片描述
死锁四大条件,缺一不可,缺少任何一个就不会产生死锁。
1:互斥:必须是互斥的。
2:保持和等待:保持自己的资源并且等待别人释放更多的资源给自己。
3:不剥夺:系统不会把分配给某个系统的资源剥夺掉分配给其他进程。
4:环路等待:A、B、C三个进程,不能是A等B给它释放资源,B等C给它释放资源,C等A给它释放资源,如此就形成了环路等待。

解决死锁问题有两种方案:
1:死锁的预防:打破四大条件。(考查并不多)

2:死锁的避免:
2.1:有序资源分配先将资源分配给A进程,再分配给B进程,再分配给C进程,依次类推。这样资源的利用率比较低。所以更加灵活有效,采取更多的是银行家算法。
2.2:银行家算法:基本思想:以银行家放贷的思路来做资源分配。银行家手头的资源就是钱,他分配这些资源出去,也就是放贷出去时, 他要考虑这个资源能否按时收回。如果评估这个资源不能按时收回,银行家就不会放这笔贷款出去。

如果该资源分配给某个进程之后,依旧无法执行完自己的程序,就会造成一定的风险,系统就不会给该进程分配这资源。
在这里插入图片描述

3.10.2 例题

在这里插入图片描述
系统状态时安全的,即没有发生死锁状态。
解决该类问题,首先计算出,当前系统还剩多少资源:R1还剩2个,R2剩1个,R3剩0个
在这里插入图片描述
在这里插入图片描述

3.11 分区存储组织

在这里插入图片描述
从软件的层次来考虑存储的管理机制:不同的存储管理的分配算法,这些分配算法是在什么样的场景下进行应用的:有一块存储区域, 这块存储区域除了给操作系统用,还有大的部分是给用户使用的大的一块内存空间,这块空间开始是一块连续的大的空白区域,等到有一些用户程序要运行时,系统就会将用户需要的大小提交到分配组织中去,然后给程序分配相应的需求所匹配大小容量的内存。

作业4的9K的空间要从哪个空间去切割?
首次适应算法:从首次能够容纳9 k空间的地方切一个9 k的块出来,所以原来的25 k就切成了9 k +16 k。顺次找到符合需求的空间就分配。

最佳适应算法:将空闲区块按大小顺序连城一个链,10 k、25 k、28k;首先用空闲空间最小的10k的空间和9k比,发现比该空间已经够9k,就从10k中切9k的空间,分配给作业4。

最佳适应算法的缺陷:会产生很多内存碎片。

最差使用算法:最佳适应算法有它的缺陷,也就是最佳适用算法的逆向思维。

循环首次适应算法:将空闲区域连城状,然后顺次的来分配。

3.12 页式存储、段式存储、段页式存储

段页式存储在操作系统中的应用十分广泛,基本上现在所有的操作系统,都会支持这样的机制。

需要的最为主要的:页式存储当中逻辑地址与物理地址之间的转化。除此,还需要了解,页式存储,段式存储和段页式存储的基本特点以及它运作的基本方式。

3.12.1 页式存储

在这里插入图片描述
在这里插入图片描述
问题:超越内存容量的应用无法一次性调入内存从而无法运行,而且运行内存中内存碎块化,内存区域不连续。

页式存储:把用户程序分成相等份大小的块,每一个块称为一个页,把内存当中的存储区,也分为等份大小的块;当需要调入程序在内存中来运行时,不在将整个的应用一次性调入,而是采取要用哪些块,就把哪些块调入进来,把哪些页调入进来,这样就需要有一个页表来记录他们之间的映射关系。即:用户程序的多少页,对应着内存中的多少号块,这种方式就可以解决超越内存容量的应用无法运行的问题。
在这里插入图片描述

3.12.1.1 逻辑地址和物理地址之间的转换

在运行过程中需要用到逻辑地址和物理地址之间的转换,逻辑地址和物理地址两者页内地址是相同的,页号不一样;因为逻辑地址的页号对应了物理地址的块号,页号和块号一般不相等。页号和块号要通过查表才能得知。
因为我们调入时候是以页为单位,所以以页为单位的偏移量不会有变化,所以页内地址是一样的。

如果通过逻辑地址来求物理地址,首先要知道逻辑地址当中哪一部分是页号,哪一部分是页内地址。然后将页内地址直接写下来,就是物理地址的页内地址;然后在通过页号去查找块号,把两部分拼接起来就得到了物理地址。

3.12.1.2 习题

在这里插入图片描述
过程分析:先要把逻辑地址当中的逻辑页号和页内地址分开,如何分开?
通过页面大小参数分析得知,页面大小4K,4K写成二进制是2^12次方。说明一个页的页内地址是12位,那么高于12位的地方就是页号;这12位是二进制的12位,2进制转成16进制,每一个16进制转成4个二进制位,所以12个二进制位,对应3位16进制,即A29(十六进制0-9,A-F),所以,页内地址是A29,从而得知页号是5,则对应的物理块号可以通过查表得知为6。(物理块号有多种叫法,有时也叫页帧号)。将6和A29拼接起来,就是物理地址。
页面淘汰只能淘汰在内存中的页面,从0、1、2、5中找一个淘汰,刚刚被访问过的,访问位为1,不能淘汰,只有访问位为0的才可以淘汰。所以应该淘汰1号页。

3.12.2 段式存储

在这里插入图片描述
段式存储包括段号和段内地址两部分;
段式存储合适按逻辑结构来划分的,意思就是一个程序当中,main主函数划一个段,第一个子函数做一个段,第二个子函数又做一个段,段的大小不要求一致(页式存储中是不允许的,规定了页的大小,所有页就都是该大小,不能够有区别),而段是可以有区别的,有些段长,有些段短,按这种逻辑方式来划分,便于共享。
段式存储中段表存的是段号,段长(因为不等长),还存了基地址,就是该段在内存中是从哪一个地址开始的一个连续空间。

3.12.3 段页式存储

在这里插入图片描述
结合段式和页式两种综合形成的,先分段,再分页,典型的中庸之道的产物。折中,将两者优点结合起来。

3.12.4 快表

在这里插入图片描述
快表放在cache当中,慢表放在内存当中。

3.13 页面淘汰算法

3.13.1 页面置换算法

页面置换算法广泛应用于分层的存储体系当中;
Cache数量有限,当cache块都被占了,要调入新的块时,就涉及页面置换的问题;
在这里插入图片描述
最优算法:是一种理论层面上的页面淘汰算法;

随机算法:随机淘汰一个,性能不稳定。

先进先出算法:将最先进入内存的最先淘汰;

最近最少使用算法:根据使用情况来看,刚刚被访问过的是不会淘汰出去的。

3.13.2 先进先出算法实例

在这里插入图片描述

3.13.3 先进先出算法和最近最少使用算法的区别

在这里插入图片描述

3.14 页面淘汰算法练习题

在这里插入图片描述
分析:没有使用快表,说明每读一次程序的块,需要现在内存上查一下表,然后才能够读取相应的内存块;所以每一块需要进行两次内存的访问;总共有6个块,所以会产生12次对内存的访问。
缺页中断的次数:
约定:指令无论占几个块,都会一次性调入。
swap指令跨了两个页,因为可以通过题目得知,swap指令存放在内存的1023单元中,一个块1k,每一个单元其实就是1字节,那么第一个块的字节是0到1023字节,1023本来就是一个块的最后一个单元,只能存一半,还有一半放在1号页的最开始的单元当中;垮了两个页,按常规情况就会产生两次缺页中断,但实际上对于指令而言是会一次性读入,只产生一次缺页中断;而数据类型的A,在2号页中有一半,在3号页中也有一半,会产生两次缺页中断, B也是4号页一半,5号页一半,会产生两次缺页中断,总共产生5次缺页中断;

3.15 索引文件结构

在这里插入图片描述
一般的索引文件结构有13个结点,编号从0~12号。
在索引结点的文件结构当中,分成了直接索引,一级间接索引,二级间接索引,三级间接索引,分几级间接索引,主要考虑文件本身容量的扩展问题;
如:一个物理盘块是4k的大小,假设13个块都是直接索引,那么这一个文件最大13*4=52k,容量只有52k,所以想了个办法进行扩展;
如何扩展:
规定:0~9,前10个地址对应的是直接索引,所谓直接索引就是这一个地址直接对应物理盘块,物理盘块存了索引文件的内容,前面的索引结点就是存的13个地址。地址对应的盘块,盘块再去存内容。

第10个结点指向的物理盘块不在存索引文件的直接内容,而是存的是物理盘块的地址;每一个地址假设占4个字节,一个4k的物理盘块可以存1024个地址。说明10 号索引结点的地址对应的物理盘块存1024个物理盘块的地址,每一个地址对应一个物理盘块,这个物理盘块才存索引文文件的内容,这称为一级间接索引。
一级间接可以存储文件的容量大小:4K*1024

二级间接可以存储文件的容量大小:4K10241024

三级间接可以存储文件的容量大小:4K10241024*1024

所以,索引文件结构就是用这种方式来扩充自己的容量的,当然,间接的级别越多,访问的效率越低;

3.15.1 例题

在这里插入图片描述
逻辑块号是从0开始的。
在这里插入图片描述
逻辑块号5对应的物理块号看图可知;

逻辑块号261对应的物理块号:因为一个地址占4字节,而一个块为1KB,所以一个块只能存256个地址,即i-addr[5]中只能有256个物理块,加上前面的5个块,共261块,但是逻辑块号是从0开始,所以i-addr[5]中最多排到260块号,261块号只能排到下一个物理块中,即物理块号187的块。
101物理块号存的是二级地址索引表。、

3.16 树型目录结构

3.16.1 文件和树形目录结构

主要考察相对路径和绝对路径的概念
在这里插入图片描述

3.17 位示图法

3.17.1 空闲存储空间的管理

在这里插入图片描述
空闲区表法(空闲文件目录):用以表来记录哪些地方是空闲的,以便把它管理起;
空闲链表法:将空闲区以链表的形式链起来,需要进行空间分配时,从这条链表上划出相应的空间来。
成组链接法:分组也分链的方式。

3.17.2 位示图法

画个位视图,然后位示图当中1表达的区域代表已经被占用,0表达的区域代表还是空闲的,将整个的存储空间分成了很多个物理块,就能够直观的表达出哪些物理是被占用的,哪些物理块是空闲的。
位示图的应用非常广泛:比如买电影票时,红的表示已占用的,空白表示未占用的。
买机票选座位,也是用位示图。

主要掌握位示图如何计算:尺度,标准是怎样的。
在这里插入图片描述
分析:4195号物理块,其实是第4196个物理块,因为是物理块是从0开始编号的,而每一个字长为32位,所以用4196/32=131.125;即超过131了,说明要把前131个都要填满,并且当前的物理块所占的位是在第132个字当中。

要占用物理块肯定是要置为1的。
在这里插入图片描述
注意:第多少个字是从1开始算,多少位置是从0位开始算。

3.18 数据传输控制方式

所谓数据传输控制方式,主要指内存和外设之间的数据的传输控制问题:
在这里插入图片描述
程序控制方式:又称程序查询方式,最为低级,也是CPU介入最多的一种机制,就是整个数据传输控制,很多时候都需要CPU的介入,在这种方式中,外设处于非常被动的方式,不会主动反馈信息,比如:传输是否完成,情况怎么样,不会主动反馈,而是由CPU发出相应的查询指令,查询看有没有传输完,没有传输完,继续传输,传输完之后,进行下一步的工作。

程序中断方式:和程序控制方式很多方面一样,但是主动性强一点,它会有中断机制在里面,如果说外设完成了相应的数据的传输和发布,这时,它会发一个中断出来,系统就会做下一步的处理,效率比查询方式高。

DMA方式:也称为直接存储控制方式,有专门的DMA控制器,只要是外设和内存之间的数据交换,过程中会由这个控制器进行管控,CPU只要在开头时候做一些介入,整个过程中都由DMA的控制器来完成,监管。完成之后由CPU接手过来,进行后续工作。效率最高。

3.19 虚设备与Spooling技术

Spooling的核心就是开辟了缓冲区,把要输出或输入的数据,先缓存起来,这样子就解决了外设的低速和内部系统高效之间的瓶颈差异。
一般系统都内置了Spooling。
在这里插入图片描述

3.20 微内核操作系统

在这里插入图片描述
把内核做的更小的操作系统。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值