四、应试经验与解题技巧
考生若想在考试中取得好成绩,除了需要牢固掌握知识点外,还需要快速、准确地对一些题目作出判断和处理。因此,考生平时要多归纳和总结一些通用的答题技巧,这有助于考生更好地应对考试,提高复习效率。
1.关键词法
在全国统考中,因为时间有限,在选择题作答过程中,应做到尽快确定答案,然后稍作验证和确认,将更多的时间留给综合应用题的作答。如果能够抓住题目和选项中的关键词,就能快速锁定可能的答案,锁定答案之后,再将答案和题干一起验证,确保正确即可,没有必要花费过多的时间在其他选项上。
【全国统考2014】下列调度算法中,不可能导致饥饿现象的是( )。
A.时间片轮转
B.静态优先级调度
C.非抢占式短任务优先
D.抢占式短任务优先
【解析】本题主要考查调度算法。
本题的关键词是“饥饿”,考生在读到这个关键词之后,应该马上想到“有优先,就会有饥饿”,也就是在学习的过程中,要将“饥饿”这个关键词与“优先”这个关键词绑定在一起。那么根据关键词法的技巧,就可以初步锁定答案——A选项。进一步验证,时间片轮转算法的特点是将CPU时间片分为一个一个时间片,每个就绪进程轮流执行,每个进程都会在一次调度周期内得到执行,确实不会产生饥饿现象。所以,确定A选项为正确答案。
【答案】A
2.理解易混淆的知识点
在全国统考中,有很多知识点相互关联,但各有侧重点。考生在准备不充分的时候,往往会混淆这些概念,导致无法正确答题。这就要求考生在复习阶段,对这些易混淆的概念重点掌握,明确其区别。
【全国统考2015】若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是( )。
Ⅰ.S1会限制用户申请资源的顺序,而S2不会
Ⅱ.S1需要进程运行所需资源总量信息,而S2不需要
Ⅲ.S1不会给可能导致死锁的进程分配资源,而S2会
A.仅Ⅰ、Ⅱ
B.仅Ⅱ、Ⅲ
C.仅Ⅰ、Ⅲ
D.Ⅰ、Ⅱ、Ⅲ
【解析】本题主要考查死锁避免、死锁检测、死锁预防的概念。
S1采用的是死锁避免方法,Ⅰ限制用户申请资源的顺序,也就是顺序资源分配法,这是为了破坏“循环等待条件”,属于死锁预防的范畴,并非死锁避免;死锁避免的方法主要采用的是银行家算法,所以需要知道进程运行所需资源的总量信息,在分配资源时,会进行安全检查,如果资源分配可能导致死锁,则不会给进程分配资源。S2采用死锁检测方法,死锁检测对资源分配不作限制,而是对是否发生死锁进行检测,进而决定如何解除死锁。综上所述,Ⅱ、Ⅲ叙述正确,正确答案是B选项。
【答案】B
3.理解操作系统的动态变化
操作系统是动态运行的,它在不同的情况下会以不同的方式运行和响应。仅仅掌握操作系统的静态概念是不够的,因为真实的操作系统在不同的负载、并发和资源分配条件下会有不同的行为。操作系统的调度算法、内存管理、进程同步等方面的问题通常涉及操作系统在实时环境中的行为。只有通过理解操作系统如何根据不同的负载情况调整资源分配、调度任务及处理各种竞争条件,才能正确地回答与操作系统实际运行相关的问题。
【全国统考2017】下列有关基于时间片的进程调度的叙述中,错误的是( )。
A.时间片越短,进程切换的次数越多,系统也越大
B.当前进程的时间片用完后,该进程状态由执行态变为阻塞态
C.时钟中断发生后,系统会修改当前进程在时间片内的剩余时间
D.影响时间片大小的主要因素包括响应时间、系统开销和进程数量等
【解析】本题主要考查进程调度。
题目看似只是在考查基于时间片的进程调度,但实际上考查的是与进程调度、切换,以及进程状态变化等有关的诸多知识点。要正确解答本题,需要对进程调度的各种细节有充分的了解。这也就是我们强调的动态变化,考生需要明确知道进程调度的流程及细节。B选项中,当前进程的时间片用完后,该进程状态由执行态变为阻塞态是错误的,在这种情况下,进程应该切换到就绪态。
【答案】B
4.综合应用题:掌握常见题目的解题技巧
在全国统考中,操作系统的综合应用题有两道,题目主要涉及进程管理、文件管理和内存管理等内容。其中,在进程管理中进程同步与互斥的考核频率很高,主要考核方向为前驱关系、进程同步与互斥等。考生在备考时,需要明确综合应用题的考核形式。综合应用题的考核形式基本稳定,所以考生只要多做题,多总结解题方法与思路,往往就能做到胸有成竹。
以考核频率最高的进程同步与互斥为例,可以总结出以下几点。
(1)P操作又名wait,V操作又名signal。
(2)用于互斥的信号量,初始值为1。
(3)用于保护资源的同步信号量,初始值为资源的总量。
(4)用于表示前驱关系的信号量,事件未发生,信号量初始值为0。
(5)在互斥保护时信号量的P操作和V操作应该成对出现。
(6)要查看或者修改一个变量的值,都需要使用互斥信号量保护。
(7)“前V后P”。在进程同步时,信号量的P操作和V操作通常在不同的进程中出现,前面的操作之后,使用V操作对信号量加1,在操作之后,需要使用P操作对信号量减1。例如,只有生产了商品之后,才能销售商品,商品存放的仓库容量为N,则定义信号量Full的初始值为0,生产商品后需要使用V(Full)操作让仓库中的商品数量加1,商品销售后,使用P(Full)操作让商品数量减1。当然,细心的考生应该在此场景下发现另外一个同步关系,即只有仓库有空间时,才能生产新的商品,这就意味着需要定义信号量Empty的初始值为N,在销售出商品后,使用V(Empty)操作来将Empty加1,在生产商品之后,使用P(Empty)操作对Empty减1。
(8)前驱关系。前驱关系是一种特别特殊的同步关系。
【全国统考2022年】某进程的两个线程T1和T2并发执行A、B、C、D、E和F共6个操作,其中T1执行A、E和F,T2执行B、C和D。如图表示上述6个操作的执行顺序所必须满足的约束:C在A和B完成后执行,D和E在C完成后执行,F在E完成后执行。请使用信号量的wait()、signal()操作描述T1和T2之间的同步关系,并说明信号量的作用及其初值。
【解析】进程T1要执行A、E、F,T2要执行B、C、D。由图可知,T2执行C必须在T1执行完A之后,T1执行E必须在T2执行完C之后。所以,有两对同步关系。
这是一道典型的前驱关系题目,每一对同步关系都可以设置一个信号量,将其值初始化为0,表示前一事件默认未开始,比如定义信号量a的初始值为0,表示A事件暂未发生。当A执行后,应该执行V(a)操作,而在A的后续操作C之前,必须执行P(a),等待A事件发生,这就是我们所说的前V后P。
【答案】信号量的定义和同步关系的描述如下所示。
semaphore a = 0; //信号量a表示A过程是否执行,初始为0表示默认未执行
semphore c = 0; //信号量c表示C过程是否执行,初始为0表示默认未执行
thread T1() {
执行A;
signal(a); //告知线程T2已经执行完A过程
wait(c); //等待线程T2执行完C过程
执行E;
执行F;
}
thread T2() {
执行B;
wait(a); //等待线程T1执行完A过程
执行C;
signal(c); //告知线程T1已经执行完C过程
执行D;
}