操作系统 - 考试知识点
操作系统的目标
方便性、有效性、可扩充性、开放性。
操作系统的最基本的四个特征
分别是并发、共享、虚拟、异步。
操作系统基本功能
处理机管理、存储器管理、设备管理、文件管理(、作业管理)。
多道批处理系统、分时系统、实时系统为什么引入,以及特征?
为什么引入多道批处理系统:为了进一步提高资源的利用率和系统吞吐量。特点:(优点:)资源利用率高、系统吞吐量大、(缺点:)平均周转时间长、无交互能力。
为什么引入分时系统:为了满足用户对人—机交互的需求。特点:多路性、 独立性、及时性、交互性。
为什么引入实时系统:为了满足实时控制和实时信息处理两个领域的要求。特点:时间约束性、可预测性、可靠性、交互性、多路性、独立性、及时性。
发展:整型信号量、记录型信号量、信号量节机制。
进程同步机制四条基本准则,要明白其含义。
空闲让进、忙则等待、有限等待、让权等待。
- 空闲让进:当无进程进入临界区时,相应的临界资源处于空闲状态,因而允许一个请求进入临界区的进程立即进入自己的临界区。
- 忙则等待:当已有进程进入自己的临界区时,即相应的临界资源正被访问,因而其它试图进入临界区的进程必须等待,以保证进程互斥地访问临界资源。
- 有限等待:对要求访问临界资源的进程,应保证进程能在有限时间进入临界区,以免陷入“饥饿”状态。
- 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等。
记录型信号量PPT好好看看,理解信号量含义,PV具体操作 (重点复习)
信号量代表:可用资源实体的数量。
S是与临界区内所使用的的公有资源有关的信号量;
wait(s) :即P操作,表示申请一个资源;
signal(s):即V操作,表示释放一个资源;
初始化指定一个非负整数值,表示空闲资源总数;
在信号量经典定义下,信号量s的值不可能为负值;
S≥0时 S表示可供并发使用的资源数;
S<0时 其绝对值表示等待使用该资源的进程个数。
信号量是一种整型的特殊变量,只有初始化和P、V操作可以改变其值。通常,信号
量的初值表示可以使用资源的总数。信号量为0,表示资源已经分配完;信号量为负
值,表示有进程正在等待分配资源,且 等待的进程数 就是 信号量的绝对值 。
在信号量机制中,除了需要一个用于代表资源数目的整型变量value外,还有一个进程链表L,用于链接所有等待该信号量代表资源的进程。
记录型数据结构描述
typedef struct {
int value;
list of process *L;
}sem
wait操作(P操作)
申请一个资源,得到继续,得不到阻塞,可描述为
if(s.value>0)s.value--;
if(s.value≤0)s.value--;block(s.L);
简练为: s.value--;
if(s.value<0)block(s.L);
wait原语:
void wait(static semaphore s)
{
s.value--;
if (s.value<0)block(s.L);
}
signal操作(V操作)
释放一个资源,有进程等待则唤醒一个(被唤醒的进程进入就绪状态),可描述为
if(s.value≥0)s.value++;
if(s.value<0)s.value++;wakeup(s.L);
简练为: s.value++;
if(s.value≤0)wakeup(s.L);
signal原语
void signal(static semaphore s)
{
s.value++;
if (s.value≤0)wackup(s.L);
}


注意:P、V操作必须成对出现。缺少P操作,将导致系统混乱,无法保证互斥;缺少V操作,临界资源得不到释放,从而使因等待该资源而阻塞的进程不再被唤醒。一般互斥信号量初始值都设置为1。
信号量wait、signal操作,参考用记录型信号量解决生产者-消费者问题。(注意:英文单词统一小写,括号用英文括号。)(重点复习)
问题:
有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区投放产品。
注意:
生产者与消费者进程对资源信号量的申请与释放情况刚好相反(生产者是申请空,释放满;消费者是申请满,释放空)。
应先执行对资源信号量的申请,然后再对互斥信号量进行申请操作,否则会因起死锁(如果先申请互斥信号量再申请资源信号量,则可能发生一个进程申请互斥信号量成功,得到临界资源,再申请资源信号量失败,导致该进程带着临界资源进入阻塞状态,造成死锁)。
解答代码:
int in = 0, out = 0;//in: 输入指针, out: 输出指针;
item buffer[n];//n个缓冲区组成的数组;
semaphore mutex = 1, full = 0, empty = n;
//mutex: 互斥信号量, 生产者进程和消费者进程都只能互斥访问缓冲区;
//full: 资源信号量, 满缓冲区的数量;
//empty: 资源信号量, 空缓冲区的数量;//信号量不允许直接参与运算, 故都要定义;
//生产者程序;
void Producer() {
do {
生产者生产一个产品nextp;
wait(empty);//申请一个空缓冲区;
wait(mutex);//申请临界资源;
buffer[in] = nextp;//将产品添加到缓冲区;
in = (in + 1) % n;//类似于循环队列;
signal(mutex);//释放临界资源;
signal(full);//释放一个满缓冲区;
} while (TRUE);
}
//消费者程序;
void Producer() {
do {
wait(full);//申请一个满缓冲区;
wait(mutex);//申请临界资源;
nextc = buffer[out];//将产品从缓冲区取出;
out = (out + 1) % n;//类似于循环队列;
signal(mutex);//释放临界资源;
signal(empty);//释放一个空缓冲区;
消费者将一个产品nextc消费;
} while (TRUE);
}
死锁的概念,产生死锁的四个必要条件(充分理解),处理死锁的四种方法。
概念:死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 也就是说,一组等待的进程,其中每一个进程都持有资源,并且等待着由这个组中其他进程所持有的资源。这时这组进程就处于死锁状态。
定义:所谓死锁是指在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中的另一个进程所占有且永远不会释放的资源;这种现象称系统处于死锁状态,简称死锁。处于死锁状态的进程称为死锁进程。 死锁发生后,死锁进程将一直等待下去,发生死锁时死锁进程至少有两个;所有死锁进程都在等待资源,并且其中至少有两个进程已占有资源。死锁不仅会浪费大量系统资源,甚至会导致整个系统崩溃,带来灾难性后果。
产生死锁的四个必要条件:互斥、请求和保持、不可抢占、循环等待。
具体理解:
- 互斥:存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用。
- 持有:当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源。
- 不可剥夺:执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源。
- 环形等待:若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。
处理死锁的四种方法:目前处理死锁的方法可归结为五种:鸵鸟策略、预防死锁、避免死锁、检测死锁、 解除死锁。
响应比公式
响应比 =(等待时间+要求服务时间) / 要求服务时间
Q:一个作业8:00到达系统,估计运行时间为1小时,若10:00开始执行该作业,其响应比为( 3 )。
(2+1)/1=3
内碎片和外碎片
为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。
可以看一下这个博主写的:https://blog.csdn.net/gaojing303504/article/details/81532543
动态分区分配算法思想
由于动态分区分配不是事先划分好区域,而是“按需分配”,所以不会出现区域划分出去后无法完全得到利用的情况,也即不会产生内部碎片;但是可能出现内存空间太小而无法被分配出去的情况,也即可能产生外部碎片。(不一定对,我自己找的)
磁盘的3种文件物理结构,好好看看第八章PPT
文件的物理结构:文件在物理存储空间中的存放方法和组织关系。文件的物理结构与存储设备的特性有很大关系。文件的存储设备通常划分为大小相等的物理块,物理块是分配及传输信息的基本单位。一个物理块中可以存放若干个逻辑记录,一个逻辑记录也可以存放在若干个物理块中。
顺序/连续文件:将一个文件中逻辑上连续的信息存放到磁盘上的依次相邻的块上便形成顺序结构。文件控制块需要记录该文件第一个盘块的盘块号和文件长度。最简单的物理文件结构,它将逻辑上连续的文件信息依次存放在外存连续的物理块中。
优点:简单 支持随机存取和顺序存取、顺序存取速度快、所需的磁道寻道次数和寻道时间最少。
缺点:要求有连续的存储空间,出现许多外部碎片、必须事先知道文件的长度、不能灵活地删除和插入记录、不支持动态扩充。
链接/串联文件:顺序的逻辑记录被存放在不连续的磁盘块上,用指针把这些磁盘块按逻辑记录的顺序链接起来,则形成了文件的链接结构,链接结构的文件称为链接/串联文件。
优点:消除了外部碎片、显著地提高外存,空间的利用率、无需事先知道文件长度 、对文件的增、删、改很容易。
最大的缺点是不支持随机存取。
索引文件:
顺序结构支持随机存取,但有外碎片;链接结构没有外碎片,但不能直接存取; FAT可以随机存取,但需要占用较大的内存空间;事实上,打开某个文件时,只需知道该文件所在的盘块号;一个文件的信息存放在若干不连续物理块中,系统为每个文件建立一个索引表,并将这些块的块号存放在索引表中; 一个索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块 。
定义:为每个文件分配一个索引块(用来存放索引的盘块),把分配给该文件的所有盘块号都记录在该索引块中,按照这种分配方式存储的文件就是索引文件 。索引分配支持随机存取而没有外碎片,但需要索引表(索引表需要占内存空间)。
保持链接结构的优点,又克服了其缺点。
优点:既能顺序存取又能随机存取、满足了文件动态增长/插入删除要求、能充分利用外存空间。
缺点:较多的寻道次数和寻道时间、索引表本身带来了系统开销,如:内外存空间,存取时间 。
文件存储空间的管理概念,四种方法。
空闲表法:属于连续分配方式,它与内存的动态分配方式雷同,它为每个文件分配一块连续的存储空间。
空闲链表法:空闲盘块链:这是将磁盘上的所有空闲空间以盘块为单位拉成一条链,其中的每一个盘块都有指向后继盘块的指针; 空闲盘区链:这是将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。
位示图法:位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况。
成组链接法
程序的装入方式,好好看第四章PPT。
用户程序要在系统中运行,必须先将它装入内存,然后再将其转变为一个可以执行的程序,通常都要经过以下几个步骤:
(1) 编译,由编译程序对用户源程序进行编译,形成若干个目标模块;
(2) 链接,由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块;
(3) 装入,由装入程序将装入模块装入内存。
在将一个装入模块装入内存时,可以有如下三种装入方式:
绝对装入方式(单道程序环境);
静态可重定位装入方式(多道程序环境);
动态运行时装入方式(运动中移动位置)。
几种页面置换算法理解
最佳置换算法
方法:淘汰那些以后永不使用,或者是在最长时间内不再被访问的页。可以保证获得最低的缺页率。
实现:确定要替换的时刻t;找出主存中每个页将来要用到的时刻ti;ti -t最大的页将被替换。
特点:命中率高,但难于实现(必须运行一遍,才能知道未来的时刻ti),是理想算法,只能作为其它置换算法的衡量标准 。
先进先出(FIFO)页面置换算法
方法:最早装入主存的页作为被替换的页,即选择在内存中驻留时间最久的页面予以淘汰。
实现:只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总可以指向最老的页面。
特点:利用历史信息,但不反映程序的局部性(最先进入的页可能是现在经常使用的页)。
LRU(Least Recently Used)置换算法
方法:近期最久未访问过的页作为被替换的页。
实现:赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的页面予以淘汰。
特点:根据“历史”预测“未来”。 LRU算法是较好的一个算法,但是开销太大,要求系统有较多的支持硬件(移位寄存器或栈)。
最少使用(Least Frequently Used,LFU)置换算法
在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。
简单的Clock置换算法
当利用简单Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。
在将一个页面换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。换而言之,对于修改过的页面,在换出时所付出
的开销比未修改过的页面大,或者说,置换代价大。在改进型Clock算法中,除须考虑页面的使用情况外,还须再增加一个因素——置换代价。
改进型Clock置换算法
算法:对于修改过的页面,在换出时所付出的开销比未修改过的页面大,或者说,置换代价大。因此,对简单Clock置换算法进行了改进:增加了置换代价。选择换出页面时,既要是未使用过的页面,又要是未被修改过的页面,把同时满足两条件的页面作为首选被淘汰的页。
特点:该算法与简单Clock算法比较,可减少磁盘的I/O操作次数 ,但实现该算法本身的开销将有所增加。
页面缓冲算法
影响页面换进换出效率的若干因素:页面置换算法、写回磁盘的频率、读入内存的频率。
页面缓冲算法PBA
PBA算法的主要特点是:① 显著地降低了页面换进、换出的频率,使磁盘I/O的操作次数大为减少,因而减少了页面换进、换出的开销;② 正是由于换入换出的开销大幅度减
小,才能使其采用一种较简单的置换策略,如先进先出(FIFO)算法,它不需要特殊硬件的支持,实现起来非常简单。
1) 空闲页面链表
2) 修改页面链表
四种磁盘调度算法
例:若干个等待访问磁盘者依次要访问的磁道为20,44,40,4,80,12,76,假设每移动一个磁道需要3ms时间,移动臂当前位于40号磁道,请按下列算法分别计算为完成上述各次访问总共花费的寻道时间以及寻道次序。
(1)先来先服务算法;
(2)最短寻道时间优先算法。
(3)电梯SCAN调度
(4)CSCAN
请求分页系统,页面置换算法缺页率。
例:在一个请求分页存储系统中,一个进程的页面走向为4,3,2,1,4,3,5,3,2,1,设分配给该进程的内存块数M=4,采用FIFO和LRU页面置换算法(每调进一个新页认为发生一次缺页中断)。计算缺页次数和缺页率(写出计算过程)。
进程间各种状态转换流程图

引入挂起原语操作后三个进程状态的转换
在引入挂起原语Suspend和激活原语Active后,在它们的作用下,进程将可能发生以下几种状态的转换:
(1) 活动就绪→静止就绪。
(2) 活动阻塞→静止阻塞。
(3) 静止就绪→活动就绪。
(4) 静止阻塞→活动阻塞。
磁盘索引组织方式中混合式索引(直接、一级、二级索引)
例:某文件系统采用索引文件结构,设文件索引表的每个表目占3个字节,存放一个盘块的块号,磁盘块大小为512B。试问该文件系统采用直接、二级和三级索引能管理的最大磁盘空间为多少字节?
计算索引表项的大小,索引表项=512/3≈170个 。
直接索引,每项对应一个物理块,能管理的最大磁盘空间=170*512B=87040B=85KB 。
二级索引,能管理的最大磁盘空间=170*170*512B=28900*512B=7255KB 。
三级索引,能管理的最大磁盘空间=170*170*170*512B=4913000*512B=2456500KB 。
请求分页系统,页面置换算法缺页率 第五章
Q:在一个请求分页存储系统中,一个进程的页面走向为4,3,2,1,4,3,5,3,2,1,设分配给该进程的内存块数M=4,采用FIFO和LRU页面置换算法(每调进一个新页认为发生一次缺页中断)。计算缺页次数和缺页率(写出计算过程)。

详解:(是该题的变形,思路都一样的)
假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m<n)。
S:进程运行的过程中,访问页面的次数。
F:访问页面失败的次数为F。
A:该进程总的页面访问次数A=S+F。
那么该进程在其运行过程中的缺页率:f=F/A=F/(S+F) (失败/总访问)
FIFO先进先出页面置换算法:
最早装入主存的页被作为替换的页。(往回看,谁先进来把谁先换下来,从前往后看当碰到i的时候,往i的前面看而不是后面看)
页面置换看红色的数字个数。
LRU置换算法(最近最久未使用置换算法):
当需要淘汰一个页面时,选择现有页面中其t值最大的页面淘汰。
响应比 = (等待时间+要求服务时间) / 要求服务时间 = 响应时间 / 执行时间
四种磁盘调度算法 第六章
Q:若干个等待访问磁盘者依次要访问的磁道为20,44,40,4,80,12,76,假设每移动一个磁道需要3ms时间,移动臂当前位于40号磁道,请按下列算法分别计算为完成上述各次访问总共花费的寻道时间以及寻道次序(4个)。
详解:
-
FIFO先来先服务算法;
按照顺序
磁道访问顺序:20、44、40、4、80、12、76
寻道时间=(20+24+36+76+68+64+4)*3=876 -
SSTF最短寻道时间优先算法。
选择从当前磁头位置所需寻到时间最短的请求
(简单来说:每次选择与上一次距离最近的点,画图,最后相加)
磁道访问顺序:40、44、20、12、4、76、80
寻道时间=(4+24+8+8+72+4)*3 = 360 -
电梯SCAN调度
==扫描算法/电梯算法
与磁头当前移动方向一致,而且是离当前磁头最近的那个点。
指定了磁头朝磁道号减小的方向(0的方向)
磁道访问顺序:40、20、16、12、4、44、80
寻道时间=(20+4+4+8+40+36)*3 = 336 -
CSCAN 循环扫描算法
提供更均衡的等待时间。
和SCAN不同的是:当它到了另一端,就立刻回到磁盘开始处。
规定磁头朝着磁道号增加的方向移动。
磁道访问顺序:40、44、76、80、4、12、20
寻道时间=(4+32+4+76+8+8)*3=396
临界资源
一次仅允许一个进程使用的资源称为临界资源。输入机、打印机、磁带机等。
各进程采取互斥的方式,实现共享的资源称作临界资源。
在每个进程中访问临界资源的那段代码称为临界区。
动态分区分配算法
首次适应算法、循环首次适应算法、最佳适应算法:从最小的分区开始分配、最坏适应算法:从最大的分区开始分配、快速适应算法/分类搜索法:将空闲分区根据其容量的大小进行分类。
磁盘文件的物理结构
连续文件、顺序文件、链接文件(隐式链接、显式链接)、索引文件。
进程和程序
进程是程序的一次执行。
进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程特点:具有程序没有的PCB结构、动态性、并发性、独立性、异步性。
进程之间存在的两种形式制约关系
间接相互制约关系:间接相互制约源于资源共享。(资源:临界资源。)
直接相互制约关系:主要源于进程间的合作。
同步、互斥
同步:因合作进程之间协调彼此的工作而控制自己的执行速度,即因相互合作,相互等待而产生的制约关系。
互斥:进程之间竞争临界资源而禁止两个以上的进程同时进入临界区所发生的制约关系。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库