操作系统期末备考-分析简答专题(适合有一定基础的同学快速扫盲)

2022.05.06.15:32分,刚考完考完操作系统的期末考试。虽然最后一道大题没做出来,总的来说也算顺利啦。把自己这两天(东拼西揍)整理的部分复习资料和大家分享一下。

以便同学们复习时快速扫盲!!!

二元信号量

二元信号量(Binary Semaphore)是最简单的一种锁,它只用两种状态:占用与非占用。它适合只能被唯一一个线程访问的资源。当二元信号量处于非占用状态时,第一个试图获取该二元信号量的线程会获得该锁,并将二元信号量置为占用状态,此后其他的所有试图获取该二元信号量的线程将会等待,知道该锁被释放。

信号量

对于允许多个线程并发访问的资源,多元信号量简称为信号量(Semaphore),它是一个很好的选择。一个初始值为N的信号量允许N个线程并发访问

线程访问资源的时候首先获取信号量,进行如下操作:

■将信号量的值减1。

■如果信号量的值小于0,则进入等待状态。否则继续执行。

访问资源之后,线程释放信号量,进行如下操作:

■将信号量的值加1。

■如果信号量的值小于1,唤醒一个等待中的线程。

互斥量(Mutex)

和二元信号量很类似,即资源仅同时允许一个线程访问,但和信号量不同的是,信号量在整个系统可以被任意线程获取并释放,也就是说,同一个信号量可以被系统中的一个线程获取之后由另一个线程释放。而互斥量则要求哪个线程获取了互斥量,哪个线程就要负责释放这个锁,其他线程越俎代庖去释放互斥量是无效的。

临界区(Critical Section)

是比互斥量更加严格的同步手段。在术语中,把临界区的锁的获取称为进入临界区,而把锁的释放称为离开临界区。临界区和互斥量与信号量的区别在于,互斥量和信号量在系统中任何进程里都是可见的,也就是说,一个进程创建了一个互斥量或信号量,另一个进程试图去获取该锁时合法的。然而,临界区的作用范围仅限于本进程中,其他的进程无法获取该锁(类似于静态全局变量对全局变量)。除此之外,临界区具有和互斥量相同的性质。

读写锁(Read-Write Lock)

致力于一种更加特定的场合的同步。对于一段数据,多个线程同时读取总是没问题的,但假设操作都不是原子型,只要有任何一个线程试图对这个数据进行修改,就必须使用同步手段来避免出错。如果我们使用上述信号量、互斥量或临界区中的任何一种来进行同步,尽管可以保证程序争取,但对于读取频繁,而仅仅偶尔写入的情况,会显得非常低效。读写锁可以避免这个问题。对于同一个锁,读写锁由两种获取方式,共享的(Shared)独占的(Exclusive)。当锁处于自由的状态时,试图以任何一种方式获取锁都能成功,并将锁置于对应的状态。如果锁处于共享状态,其他线程以共享的方式获取锁仍然会成功,此时这个锁分配给了多个线程。然而,如果其他线程试图以独占的方式获取已经处于共享状态的锁,那么它必须等待锁被所有的线程释放。相应地,处于独占状态的锁将阻止任何其他线程获取该锁,不论它们试图以哪种方式获取。

读写锁的行为可以总结为如下表:

批处理系统、分时操作系统和实时操作系统的区别和联系

一、批处理系统

在批处理系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”。然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。

特点:

    多道:在内存中同时存放多个作业,一个时刻只有一个作业运行,这些作业共享CPU和外部设备等资源。

    成批:用户和作业之间没有交互性。用户自己不能干预自己的作业的运行,发现作业错误不能及时改正。

    批处理系统的目的是提高系统吞吐量和资源的利用率(系统吞吐量是指系统在单位时间内所完成的总工作量。能提高系统吞吐量的主要原因是仅当作业完成时或运行不下去时才进行切换,系统开销小)。

    

二、分时操作系统

分时系统一般采用时间片轮转的方式,使每一台计算机为多个终端用户服务。分时系统与多道批处理系统之间有着截然不同的性能差别,它能很好地将一台计算机提供给多个用户同时使用,提高计算机的利用率。分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。(一个系统可以同时为两个或两个以上的账户服务)。

特点:

    同时性:计算机系统能被多个用户同时使用;

    独立性:用户和用户之间都是独立操作系统的,在同时操作时并不会发生冲突,破坏,混淆等现象;

    及时性:系统能以最快的速度将结果显示给用户;

    交互作用性:用户能和电脑进行人机对话。

三、实时操作系统

所谓“实时”,是表示“及时”,而实时系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致的运行。其应用需求主要在实时控制和实时信息处理

特点:

    高精度计时系统:计时精度是影响实时性的一个重要因素。在实时应用系统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作系统实现的高精度计时功能。

    多级中断机制:一个实时应用系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处理。因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件进行及时响应和处理。

    实时调度机制:实时操作系统不仅要及时响应实时事件中断,同时也要及时调度运行实时任务。但是,处理机调度并不能随心所欲的进行,因为涉及到两个进程之间的切换,只能在确保“安全切换”的时间点上进行,实时调度机制包括两个方面,一是在调度策略和算法上保证优先调度实时任务;二是建立更多“安全切换”时间点,保证及时调度实时任务。

    实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。

    例如,可以为确保生产线上的机器人能获取某个物体而设计一个操作系统。在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。在“软”实时操作系统中,生产线仍然能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。

四、分时系统和实时系统的比较

实时操作系统,它是可抢占性的内核。高优先级任务就绪而低优先级任务正在执行没有sleep的时候,高优先级任务会打断低优先级任务而立即得到执行。

分时系统中,CPU是不可抢占的,即便高优先级的任务就绪了,也不能马上中断低优先级任务而得到执行,必须要等到低优先级任务主动挂起(sleep)或者时间片结束才能得到执行。所以我们在使用PC的时候经常会遇到应用程序无响应的问题。即硬件资源被其他任务占用,本任务得不到立即执行。

用户级线程和内核级线程的区别和联系

线程的实现可以分两类:用户级线程,内核级线程和混合式线程。

用户级线程是指不需要内核支持而在用户程序中实现的线程,它的内核的切换是由用户态程序自己控制内核的切换,不需要内核的干涉。但是它不能像内核级线程一样更好的运用多核CPU。

优点:

(1) 线程的调度不需要内核直接参与,控制简单。

(2) 可以在不支持线程的操作系统中实现。

(3) 同一进程中只能同时有一个线程在运行如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起,可以节约更多的系统资源。

缺点:

(1) 一个用户级线程的阻塞将会引起整个进程的阻塞

(2) 用户级线程不能利用系统的多重处理,仅有一个用户级线程可以被执行。

内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态。可以很好的运用多核CPU,就像Windows电脑的四核八线程,双核四线程一样。

优点:

(1)当有多个处理机时,一个进程的多个线程可以同时执行。

(2) 由于内核级线程只有很小的数据结构和堆栈,切换速度快,当然它本身也可以用多线程技术实现,提高系统的运行速率。

缺点:

(1) 线程在用户态的运行,而线程的调度和管理在内核实现,在控制权从一个线程传送到另一个线程需要用户态到内核态再到用户态的模式切换,比较占用系统资源。(就是必须要受到内核的监控)

关联性

(1) 它们之间的差别在于性能

(2) 内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。

(3) 用户级线程的创建、撤消和调度不需要OS内核的支持

(4) 用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。

(5) 在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。

(6) 用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。

常见的磁盘调度算法

1)先来先服务(FCFS,First-Come First-Served)
此算法根据进程请求访问磁盘的先后次序进行调度。
(2)最短寻道时间优先(SSTF ,ShortestSeekTimeFirst)
该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。
(3)扫描(SCAN)算法
SCAN算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。
(4)循环扫描(CSCAN)算法
CSCAN算法规定磁头单向移动,避免了扫描算法导致的某些进程磁盘请求的严重延迟。
(5) N-Step-SCAN和FSCAN调度算法
1) N-Step-SCAN算法。为克服前述SSTF、SCAN、CSCAN等调度算法都可能出现的磁臂停留在某处不动的情况即磁臂粘着现象,将磁盘请求队列分成若干个长度为N的子队列,按先来先服务算法依次处理这些子队列,而各队列分别以扫描算法进行处理。
2) FSCAN算法
FSCAN算法实质上是N步SCAN算法的简化。它只将磁盘请求访问队列分成两个子队列。一是当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按SCAN算法进行处理。另一个队列则是在 扫描期间,新出现的所有请求磁盘I/O进程的队列,放入另一等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。

操作系统--进程调度专题

什么是进程调度

我们的计算机内有很多很多个进程,但是处理机数量又是很少的,这就导致这些进程之间会争夺处理机资源。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。这就是进程调度。

进程调度类型

进程调度分为三个类型,分别是长程调度、中程调度和短程调度

我们先来看一下进程之间的状态转换图:

在这里插入图片描述

长程调度:用于决定将外存上处于后备队列中的哪些作业调入内存,处于内存的就绪队列,准备执行。主要用来控制内存中进程的数量。

对照上面的图来说就是新建进程的允许进入的两个箭头,说明进程已经进入到内存中来了。

中程调度:对应挂起状态进程的调度,是把内存中的进程挂起和被挂起的进程换进内存的过程。

对照上面的图来说就是换入换出的过程。

短程调度:按照某种策略和算法将处理机分配给一个处于就绪状态的进程,分为抢占式和非抢占式。

对应上图中的就绪状态到运行状态的箭头部分。

调度方式:上面的短程调度中已经提到了,调度的方式分为抢占式和非抢占式:

抢占式

也就是正在运行的进程,强制把它阻塞或者挂起,强制的不让他继续运行,这就是抢占式的。

例如:突然来了一个现在立刻必须要做的事情(闹钟到点了),也就是现在CPU不管在运行哪个进程,这个进程都要给闹钟的进程让路,这个正在运行的进程就会被强制终止。

抢占的原则有:短作业(进程)优先原则、时间片原则、优先权原则。

非抢占式

和抢占式相反,是进程自己放弃CPU。 一旦占用CPU,直至完成或阻塞。

例如,进程运行到一定的时候,需要IO设备或者运行完成,自己放弃CPU。

不利用实时任务,不利用短作业;使用于批处理系统 。

进程调度算法

1.FCFS 先来先服务算法

在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。

FCFS调度算法属于非抢占式算法 。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。

FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

2.时间片轮转算法

系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行,此方法是抢占式算法。时间片轮转调度算法主要适用于分时系统。

在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。

时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。

3.短进程优先算法

短作业(进程)优先调度算法SJ§F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

短作业优先调度算法是一个非抢占策略,他的原则是下一次选择预计处理时间最短的进程,因此短进程将会越过长作业,跳至队列头。该算法即可用于作业调度,也可用于进程调度。但是他对长作业不利,不能保证紧迫性作业(进程)被及时处理,作业的长短只是被估算出来的。

4.最短剩余时间优先

最短剩余时间是针对最短进程优先增加了抢占机制的版本。在这种情况下,进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,他可能比当前运行的进程具有更短的剩余时间,因此只要新进程就绪,调度程序就能可能抢占当前正在运行的进程。像最短进程优先一样,调度程序正在执行选择函数是必须有关于处理时间的估计,但是进程剩余运行时间估计是很难确定的,并且存在长进程饥饿的危险。

5.高响应比优先调度算法

根据比率:R=(w+s)/s (R为响应比,w为等待处理的时间,s为预计的服务时间)

如果该进程被立即调用,则R值等于归一化周转时间(周转时间和服务时间的比率)。R最小值为1.0,只有第一个进入系统的进程才能达到该值。调度规则为:当前进程完成或被阻塞时,选择R值最大的就绪进程,它说明了进程的年龄。当偏向短作业时,长进程由于得不到服务,等待时间不断增加,从而增加比值,最终在竞争中赢了短进程。和最短进程优先、最短剩余时间优先一样,使用最高响应比策略需要估计预计服务时间。

高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。

在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。但是因为依旧很难预计进程的服务时间而且对上面的计算公式计算的话,对机器的开销也是很大的。

根据公式可知:

当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业(短进程)

当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。

对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。

6.优先级调度算法

优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。

在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为:

1)非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。

2)剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:

1)静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。

2)动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据为进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

7.多级反馈队列调度算法

多级反馈队列算法,不必事先知道各种进程所需要执行的时间,它是当前被公认的一种较好的进程调度算法。

多级反馈队列调度算法的实现思想如下:

1.设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。

2.赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片就越小。例如,第2级队列的时间片要比第1级队列的时间片长一倍, ……第i+1级队列的时间片要比第i级队列的时间片长一倍。

3.当一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样地按FCFS 原则等待调度执行;如果它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第 n 级队列后,在第 n 级队列中便釆用时间片轮转的方式运行。

4.仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1 ~ (i-1)级队列均为空时,才会调度第i级队列中的进程运行。如果处理机正在执行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

多级反馈队列的优势有:

终端型作业用户:短作业优先。

短批处理作业用户:周转时间较短。

长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。

猜你喜欢

转载自blog.csdn.net/m0_68399221/article/details/124612324