目录
1.操作系统概述
- 什么是操作系统
操作系统是管理计算机硬件与软件资源的计算机程序,它也提供一个让用户与系统交互的操作界面。
2.进程管理
- 进程是并发执行的程序在执行过程中分配和管理资源的基本单位。由于程序在并发执行时,可能会造成执行结果的不可再现,所以用“程序”这个概念已无法描述程序的并发执行,所以必须引入新的概念——进程来描述程序的并发执行,并要对进程进行必要的管理,以保证进程在并发执行时结果可再现。
- 进程具有动态性、并发性、独立性、异步性。
2.1 进程状态转换图
-
进程状态
在进程状态转换图的三态模型中,进程被划分为三种状态,即:
运行态:进程占用 C P U CPU CPU资源正在运行。
就绪态:进程具备运行条件,等待系统分配 C P U CPU CPU资源以便运行。
等待态:进程不具备运行条件,正在等待某个事件的完成,又称阻塞态。
在一个实际的系统里进程的状态及其转换比三态模型的叙述更为复杂,而五态模型比三态模型更为详细地阐述了进程状态转换间的关系。五态模型中将就绪态划分为活跃就绪与静止就绪,将阻塞态(即等待态)分为活跃阻塞与等待阻塞。静止就绪即是在已经获得 c p u cpu cpu资源的状态下由于人为操作被替换或暂时挂起的状态,如听歌时转接电话,进程由运行状态变为就绪态。(阻塞)等待态是由于某种原因(如等待 i / o i/o i/o或其他设备)进程被阻塞,而静止阻塞与活跃阻塞的区别在于前者在外存,后者在内存中。
2.2 前驱图
-
前驱图,即有向无环图。它用于描述进程之间执行的先后顺序。图中每一个结点可以用来表示一个进程或者程序段,乃至一条语句,结点间的有向边则表示两个结点之间存在的偏序或者前驱关系。如在包饺子中,包饺子的各个程序的次序存在并行和约束的关系。
对于上述流程,可以采用顺序执行的方式,但其效率并不高。而观察到上述 A 、 B 、 C A、B、C A、B、C操作可以在同一时刻并行,于是就可以做出如图的前驱图来提高整个程序的运行效率。
-
在操作系统中常与的 P 、 V P、V P、V操作相联系。
2.3 进程的同步与互斥
-
临界资源
各进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等。 -
同步:
同步也称为直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。便于理解的讲,就是跑的快的进程停下来等跑的慢的进程。 -
互斥
互斥也成为间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待, 当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。
简单的互斥同步模型:生产者消费者问题。生产者消费者问题中体现的同步互斥:
互斥:在单缓冲区中,市场可以视作一个临界资源,它不允许同时存在生成者生成放入的操作和消费者拿走消费的操作,同一时刻只允许一种操作进行。同步:多缓冲区中,生产者和消费者同步进行。消费者不能在空的缓冲区中拿走产品进行消费,也就是需要停下脚步等待生产者生成的操作。同样,生产者不能无限地生产产品放入缓冲区,它需要等待消费者将缓冲区中的产品消费至非满状态。两者的操作可以看作进程之间的同步。
2.4 进程的 P 、 V P、V P、V操作
-
临界区、信号量
每个进程中访问临界资源的那段代码称为临界区(临界区指的是代码块)。
信号量是一种用于 P 、 V P、V P、V操作的特殊的变量。
设表示某一临界资源的使用情况的信号量为 S S S。进程在对该临界变量访问时, P 、 V P、V P、V操作如下图所示。对于 P P P操作。 P P P操作可以视作进程向系统申请临界资源。进程进入到 P P P操作,首先向 S S S 申请资源, S S S 的数值可以视作可使用的临界资源数量。对于 S = S − 1 S=S-1 S=S−1操作的结果,若它小于 0 0 0 则说明该临界资源暂时被占用,于是进入到进程队列等待。若对于自减的操作 S S S的值仍大于等于 0 0 0,则说明成功申请到该临界资源,进行下一步的操作。
对于 V V V操作。 V V V 操作可以视作释放 / / /解锁临界资源。在一个进程运行完后,应该释放掉该临界资源。因此,对 S S S 进行自加操作,若自加之和 S S S 的值小于等于 0 0 0,则说明有需要用到该临界资源的进程被阻塞,于是进入进程队列中找到它。否则说明该临界资源尚还有剩余,直接执行下一步操作。
以单缓冲区生产者-消费者问题为例。
其中, S 1 S1 S1 初值为 1 1 1, S 2 S2 S2 初值为 0 0 0. 分别表示单缓冲区队空 (可以理解为 S 1 S1 S1 = 1 1 1为缓冲区为空,可以申请到该临界资源资源并将产品送入缓冲区,0则反之) 与队中产品的个数(单缓冲区只有1或0个)。
当两个程序并行时,假设从生产者程序进入开始。生产者执行生产操作后进入到 P ( S 1 ) P(S1) P(S1)操作,此时 S 1 = 1 > 0 S1 =1 >0 S1=1>0,执行自减操作表示尝试申请临界资源并成功申请到。接着将产品送入到缓冲区,此时缓冲区有一个产品,于是将 S 2 S2 S2 执行 V V V操作,表示缓冲区产品个数加一。整个程序跑完一次之后,再次运行生产者的程序时,生产者生产一个产品后 P P P 操作里由于( S 1 − 1 = − 1 < 0 S1-1=-1<0 S1−1=−1<0)表示该临界资源暂时不可用,于是进程被阻塞,将其压入到进程队列进行等待。到了消费者程序中,按一样的理解,运行消费者程序时通过 P P P 操作申请临界资源、消费产品、再释放 S 2 S2 S2 这一信号量对应的队空资源、进入进程队列等待的进程继续执行。一系列操作之后便进行了生产者与消费者“放”与“取”的互斥并行。
2.5 P 、 V P、V P、V操作与前驱图
PV操作常常也与前驱图结合起来考察。技巧便是看箭头的指入与指出,指出的为 P P P操作,指入的为 V V V操作。
这个过程可以理解为有向无环图的拓扑排序,从叶子节点出发层层解锁进程。对于一个点表示的进程,我们都要在执行这个点所有入度表示的进程,即在这个点所在的程序写下 P P P 操作。同理,也要解锁在这个点的出度所指向下一个进程,即写下 V V V 操作。
2.6 死锁问题
- 死锁
进程管理是操作系统的核心,但如果设计不当,就会出现死锁问题。如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。
例:系统有三个进程: A 、 B 、 C A、B、C A、B、C。这三个进程都需要五个系统资源。则系统至少有多少个资源,则不可能发生死锁。
如图,为确保进程不发生死锁,直观上需要十五个系统资源可以保证进程不死锁,但这样做会造成资源的浪费。而最少只需要五个即可让进程不发生死锁,但在某些情况下,如 A 、 B A、B A、B分得两个资源, C C C 得到一个资源这样的情况下, A 、 B 、 C A、B、C A、B、C都无法完成,于是发生了死锁。事实上,在确保不发生死锁的情况下并尽可能地减少系统资源的个数,我们可以使用13个资源。在最坏情况下,进程 A 、 B 、 C A、B、C A、B、C都能分得四个系统资源,而最后一个资源无论分配到哪个进程,都能顺利地完成进程以释放系统资源。
这样,对于这一类型的问题便有了通法,假设有 n n n个进程,每个进程需要 k k k个系统资源,则保证不发生进程死锁的情况下最少需要
( k − 1 ) × n + 1 (k-1)\times{n}+1 (k−1)×n+1个资源。
- 死锁的必要条件:(即缺一不可)
1.互斥:一个资源每次只服务于一个进程。
2.保持和等待:各个进程保持自己已获得的资源,并等待其他进程释放更多的资源。
3.不剥夺:进程已获得的资源在未使用完之前不能被其他进程强行剥夺。
4.环路等待:若干个进程之间形成一种头尾相接的循环等待资源关系。 - 预防死锁
预防死锁的方法就是打破死锁的四大必要条件。如使用共享的资源、打破等待僵局,将已拥有的资源分配出去、能剥夺其他进程的资源、打破环路等待。 - 避免死锁
1.有序资源分配法:资源利用率低。
2.银行家算法.
2.7 银行家算法
银行家算法分配资源的原则:
1.当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该程序。
2.进程可以分期请求资源,但请求总数不能超过最大需求量。
3.当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。
截了视频上的例题供参考一下:
分析:
这里,系统状态是安全的就说不发生死锁。
首先,将可用的资源数减去所有进程已经分配到的资源数得到
T
0
T0
T0时刻剩余的可用资源数分别为:
(
R
1
=
1
,
R
2
=
1
,
R
3
=
0
)
(R1=1,R2=1,R3=0)
(R1=1,R2=1,R3=0),可以计算对于此时的所有进程还需要的资源数为:
P
1
P1
P1需要
(
R
1
,
R
2
,
R
3
)
(R1,R2,R3)
(R1,R2,R3) 的资源数分别为
(
6
−
1
=
5
,
4
−
1
=
3
,
2
−
1
=
1
)
(6-1=5,4-1=3,2-1=1)
(6−1=5,4−1=3,2−1=1)个;
P
2
P2
P2需要
(
R
1
,
R
2
,
R
3
)
(R1,R2,R3)
(R1,R2,R3) 的资源数分别为
(
2
−
1
=
1
,
2
−
1
=
1
,
2
−
1
=
1
)
(2-1=1,2-1=1,2-1=1)
(2−1=1,2−1=1,2−1=1)个;
P
3
P3
P3需要
(
R
1
,
R
2
,
R
3
)
(R1,R2,R3)
(R1,R2,R3) 的资源数分别为
(
8
−
1
=
7
,
1
−
1
=
0
,
1
−
1
=
0
)
(8-1=7,1-1=0,1-1=0)
(8−1=7,1−1=0,1−1=0)个;
P
4
P4
P4需要
(
R
1
,
R
2
,
R
3
)
(R1,R2,R3)
(R1,R2,R3) 的资源数分别为
(
2
−
1
=
1
,
2
−
1
=
1
,
1
−
1
=
0
)
(2-1=1,2-1=1,1-1=0)
(2−1=1,2−1=1,1−1=0)个;
P
5
P5
P5需要
(
R
1
,
R
2
,
R
3
)
(R1,R2,R3)
(R1,R2,R3) 的资源数分别为
(
3
−
1
=
2
,
4
−
1
=
3
,
2
−
1
=
1
)
(3-1=2,4-1=3,2-1=1)
(3−1=2,4−1=3,2−1=1)个;
因此,只有进程
P
2
P2
P2能够在给定的资源下完成运行,故优先运行
P
2
P2
P2进程,运行完成后并释放掉
P
2
P2
P2进程。如此按照这样的原则进行进程调度,就能确定最终进程的执行顺序。故最终的顺序为:
P
2
→
P
1
→
P
4
→
P
5
→
P
3
P2→P1→P4→P5→P3
P2→P1→P4→P5→P3.
3.存储管理
3.1分区存储组织
某计算机系统的内存大小为 128 k 128k 128k,采用可变分区分配方式进行内存分配,当前系统的内存分块情况如下图所示,现有作业 4 4 4申请内存 9 k 9k 9k,几种不同的存储分配算法在分配中,会产生什么样的结果呢?
3.2 页式存储、段式存储、段页式存储
-
页式存储
页式存储:将程序与内存划分为同样大小的块,以页为单位将程序调入内存。
在高级程序语言中使用逻辑地址(逻辑页),在内存中使用物理地址(物理块)
逻 辑 地 址 = 页 号 + 页 内 地 址 逻辑地址=页号+页内地址 逻辑地址=页号+页内地址
物 理 地 址 = 页 块 + 页 内 地 址 物理地址=页块+页内地址 物理地址=页块+页内地址
以上图为例,假如在页式存储系统中,每个页的大小是 4 k b 4kb 4kb, 一进程要访问的逻辑地址为 2 A 29 H 2A29H 2A29H 地址则对应的物理地址各是多少。
分析:每个页 4 k b 4kb 4kb 的大小,则需要共 4 ∗ 2 10 = 2 12 4*2^{10}=2^{12} 4∗210=212位来表示改内存地址。而逻辑地址中,一个十六进制数表示 4 4 4位二进制数。那么逻辑地址中后三位 A 29 A29 A29为页内地址,故直接找到逻辑地址中页号 2 2 2所对应的页块 6 6 6,则物理地址为 6 A 29 6A29 6A29.页式存储的优缺点:
优点:利用率高,碎片小,分配及管理简单。
缺点:增加了系统开销(查找页表和定位的时间开销);可能产生抖动现象。 -
段式存储
段式存储按逻辑结构划分内存(如main函数做一个段,函数1做一个段、函数2做一个段),段所占用的内存不一。
-
段页式存储
结合页式存储和段式存储两种存储方式中和而成,将内存先分段再分页。
-
快表
快表是一块小容量的相联存储器,由高速缓存器( C a c h e Cache Cache)组成,速度快,并且可以在硬件上保证按内容并行查找,一般用来存放当前最频繁的少数活动页面的页号。
页面淘汰算法
-
页面置换算法
1.最优算法:理论上的算法,没有普遍规律。
2.随机算法:不稳定。
3.先进先出算法( F I F O FIFO FIFO):有可能产生“抖动”(抖动:即使用了更多的系统资源却产生了负的收益)。例如,432143543215序列,用3个页面,比4个缺页要少。
4.最近最少使用算法 ( L R U ) (LRU) (LRU):不会“抖动”。(刚刚被访问不会被淘汰)
例题:
在一台按字节编址的8位计算机系统中,采用虚拟页式存储管理方案,页面的大小为1K,且系统中没有使用快表(或联想存储器)。下图所示的是划分成6个页面的用户程序。
swap A,B”是16位的指令,A和B表示该指令的两个16位操作数。swap指令存放在内存的1023单元中,操作数A存放在内存的3071单元中,操作数B存放在内存的5119单元中。执行swap指令需要访问 ( ) 次内存,将产生 ( ) 次缺页中断。
分析:一条 s w a p swap swap指令包括两个操作数,横跨了六个页面,而在不使用快表的情况下,每次访问一个页面需要在内存上查表(第一次访问内存)定位到其物理地址(第二次访问内存),此过程共访问两次内存。因此共访问 2 ∗ 6 = 12 2*6=12 2∗6=12次内存。在软考约定俗成的有:横跨两个页的情况下,指令只会缺页一次,而数据会缺页两次,因此共产生 5 5 5次缺页。
4.文件管理
4.1 索引文件结构
-
文件索引
索引结构分为多级索引。一般情况下(题目没有特殊声明),索引有13个结点。前10个索引(0~9)直接对应物理盘块,称为直接索引。每一个物理盘块对应了一个索引文件的内容。索引10、11、12则对应了间接索引(一级、二级、三级),多级间接索引实际上就是一种索引套索引,索引里只存储下一级索引的地址,只有索引到底才为物理盘块。
计算:假设物理盘块的地址大小为 4 4 4个字节,而一个物理盘块的大小为 4 k 4k 4k, 则可以计算出共划分出了 4 k / 4 b = 1024 4k/4b=1024 4k/4b=1024个物理盘块地址,因此该索引可以存储的文件大小为 1024 ∗ 4 k 1024*4k 1024∗4k。
虽然分级越多存储的内容越多,但相应的,效率也会更低。
4.2 树形目录结构
绝对路径:指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。
相对路径:相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
文件属性:
R
R
R 只读文档属性
A
A
A 存档属性
S
S
S 系统文件
H
H
H 隐藏文件
文件名的组成:
驱动器号,路径,主文件名,扩展名。
4.3 空闲存储空间管理
-
空闲区表法
用一个表记录空闲的区域以便将其管理。 -
空闲链表法
将空闲区域用链表链接起来。再需要分配空间时,从链表中划分出一部分即可。 -
位示图法
将所有存储区域分成若干个个( n ∗ m n*m n∗m的数表)物理块,利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已经分配(或反之)。
例:
分析:能读懂题的话实际上就是计算一个小学数学题,第4195号物理块实际上就是第4196个物理块,所以该物理块所在行数为: ⌊ 4196 / 32 ⌋ = 131 \lfloor 4196/32 \rfloor=131 ⌊4196/32⌋=131,所在列数为 4196 4196 4196 m o d mod mod 32 = 4 32=4 32=4.而列下标从 0 0 0开始,所以第 4195 4195 4195号物理块实际上是处于 131 131 131行的第 4 − 1 4-1 4−1列(下标从 0 0 0开始),故选 C 、 B C、B C、B.
-
成组链接法
4.4 数据传输控制方式
主要指内存和外设之间的数据传输控制问题。主要有:程序控制方式、程序中断方式、DMA方式、通道、输入输出处理机。
-
程序控制方式
也称为程序查询方式,最低级也是cpu介入最多的一种机制。这种方式大多下以cpu介入到数据的传输控制,由cpu主动发出指令查询,导致外设不会主动反馈信息。 -
程序中断方式
相似于程序控制方式但增加了中断方式。它运行外设主动打断cpu运行并请求服务。 -
DMA方式
DMA方式中,有专门的控制器管控外设和内存之间的数据交换过程,cpu只需再开始时做一些如初始化等操作的介入。 -
设备管理
五个层次自上而下:用户进程、与设备无关的系统软件、设备驱动程序、中断处理程序、硬件。
5.虚设备与 S P O O L I N G SPOOLING SPOOLING技术
-
S
P
O
O
L
I
N
G
SPOOLING
SPOOLING技术:
它的核心思想是以联机的方式得到脱机的效果。通过 S P O O L I N G SPOOLING SPOOLING技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备。如多人远程共享一台打印机,建立中间缓冲区让用户排队变为缓冲区里排队,从而运行多个用户共享打印,即提高了打印效率又使得用户的操作界面变得友好。
6.微内核操作系统
即将内核做的更小的操作系统,提高了可靠性、稳定性、安全性,降低了故障的发生率。