期末操作系统之HXL所给知识点(速成)

(说明:仅适用于帮助大家将知识点梳理一遍,想要通过考试还是要结合题目进行自主复习,查漏补缺。

###祝大家期末操作系统都能取得理想的成绩!!!)

 一、死锁的概念和死锁的原因、死锁的必要条件

        1、死锁概念

                1.1概念:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

                1.2原因:(1)系统提供的资源有限;(2)进程推进顺序不当。

                1.3必要条件: (1)互斥条件、(2)不可剥夺条件、(3)请求和保持条件、(4)循环等待条件。

        2、解决死锁的方法

                ●预防死锁(最容易实现):

                        (1)摒弃“请求和保持”条件

                        (2)摒弃“不剥夺”条件

                        (3)摒弃“环路等待”条件

               ● 避免死锁(银行家算法

               ● 检测和解除死锁

二、进程的基本状态分析

        1、进程的定义:指一个具有独立功能的程序对某个数据集在处理机上的执行过程和分配资源的基本单位

          PS:进程和程序有什么区别和联系?

        (1进程是一个动态概念,而程序是一个静态概念,程序是指令的有序集合,无执行含义,进程强调执行的过程。

        (2)进程具有并行特征,程序没有

        (3)进程是竞争计算机系统资源的基本单位

        (4)不同的进程可以包含同一个程序,同一程序也可产生多个进程

        2、三种基本状态

        由于多个进程在并发执行时共享系统资源,致使它们在运行过程中呈现间断性的运行规律,所以进程在生命周期内可能具有多种状态。一般而言,每一个进程至少应处于以下三种状态之一:

        (1)就绪状态:进程已获得除CPU外的所有必要资源,只等待CPU时的状态。一个系统会将多个处于就绪状态的进程排成一个就绪队列。

        (2)执行状态:进程已获CPU,正在执行。单处理机系统中,处于执行状态的进程只一个;多处理机系统中,有多个处于执行状态的进程。

        (3)阻塞状态:正在执行的进程由于某种原因而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程执行受阻。(这种状态又称等待状态封锁状态

        

       3、创建状态和终止状态

       (1) 创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。

       (2) 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行。

这里写图片描述

          ( PS:如果进程运行时间片使用完也会进入就绪状态)

        4、挂起操作和进程状态的转换

        为用户观察需要,进程还有挂起激活两种操作。挂起后进程处于静止状态进程不再被系统调用,与挂起操作对应的操作是激活操作。


        4.1挂起操作引入原因:

        (1)终端用户的需要:当终端用户在自己的程序运行期间发现有可疑问题,希望暂停自己的程序的执行,使之停下来,以便研究修改。

        (2)父进程请求:有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。

        (3)负荷调节的需要:当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。

        (4)操作系统的需要:操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。


        4.2引入挂起原语操作后三个进程状态的转换:

        在引入挂起原语 Suspend 和激活原语 Active 后,在它们的作用下,进程将可能发生以下几种状态的转换:
        (1) 活动就绪一静止就绪:当进程处于未被挂起的就绪状态时,称此为活动就绪状态,表示为 Readya ,此时进程可以接受训度。当用挂起原语 Suspend 将该进程挂起后,该进程便转变为静止就绪状态,表示为 Readys ,处于 Readys 状态的进程不再被调度执行。
        (2) 活动阻塞一静止阻塞:当进程处于未被挂起的阻塞状态时,称它是处于活动阻塞状态,表示为 Blockeda 。当用 Suspend 原语将它挂起后,进程便转变为静止阻塞状态,表示为 Blockeds 。处于该状态的进程在其所期待的事件出现后,它将从静止阻塞变为静止就绪 Readys 状态。
        (3) 静止就绪一活动就绪:处于 Readys 状态的进程若用激活原语 Active 激活后,该进程将转变为 Readya 状态。
        (4) 静止阻塞一活动阻塞:处于 Blockeds 状态的进程若用激活原语 Active 激活后,进程将转变为 Blockeda 状态。图2-7示出了具有挂起状态的进程状态图。

        4.3引入挂起操作后五个进程状态的转换:

        如图2-8示出了增加了创建状态和终止状志后具有挂起状态的进程状态及转换图。
        如图2-8所示,引进创建和终止状态后,在进程状态转换时,与图2-7所示的进程五状态转换相比较,要增加考虑下面的几种情况:
        (1) NULL 一创建:一个新进程产生时,该进程处于创建状态。

        (2)创建一活动就绪:在当前系统的性能和内存的容量均允许的情况下,完成对进程创建的必要操作后,相应的系统进程将进程的状态转换为活动就绪状态。
        (3)创建一静止就绪:考虑到系统当前资源状况和性能的要求,不分配给新建进程所需资源,主要是主存,相应的系统将进程状态转为静止就绪状态,被安置在外存,不参与调度,此时进程创建工作尚未完成。
        (4)执行一终止:当一个进程已完成任务时,或是出现了无法克服的错误,或是被 OS 或是被其他进程所终结,此时将进程的状态转换为终止状态。

三、利用信号量进行资源的同步和互斥操作伪程序设计

        3.1信号量

        信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程,信号量的值表示相应资源的使用情况。

        信号量 S>=0 时,S 表示可用资源的数量,执行一次P操作意味着请求分配一个资源,因此 S 的值减 1 ;

        信号量 S<0 时,表示已经没有可用资源S 的绝对值表示当前等待该资源的进程数,请求者必须等待其他进程释放该类资源才能继续运行,而执行一个V操作意味着释放一个资源,因此 S 的值加 1 ;

        若 S<0 ,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

        信号量的值只能通过PV操作来改变。


        3.2PV操作

        PV操作:一种实现进程互斥与同步的有效方法,包含P操作与V操作。

        P操作:使 S=S-1 ,若 S>=0 ,则该进程继续执行,否则排入等待队列。

        V操作:使 S=S+1 ,若 S>0 ,唤醒等待队列中的一个进程。

        临界资源:同一时刻只允许一个进程访问的资源,与上面所说的 S 有关联。


        3.3互斥变量

        为使多个变量能互斥地进行访问某临界资源,只需要为该资源设置一互斥变量mutex,并设其初始值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。

        wait(mutex)和signal(mutex)必须成对出现。缺少wait(mutex)将会导致系统混乱,不能保证对临界资源的互斥访问;而缺少signal(mutex)将会使临界资源永远不被释放,从而使因等待该资源而阻塞的进程不能被唤醒。

        (此处建议结合超市出入口的题目进行理解)

四、银行家算法

        4.1银行家算法中的数据结构        

        为了实现银行家算法,在系统中必须设置这样四个数据结构,分别用来描述系统中可利用的资源、所有进程对资源的最大需求、系统中的资源分配,以及所有进程还需要多少资源的情况。
  (1) 可利用资源向量 Available。这是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果 Available[j] = K,则表示系统中现Rj类资源K个。
  (2) 最大需求矩阵Max。这是一个n x m的矩阵,它定义了系统中n个进程中的每个进程对m类资源的最大需求。如果Max[i,j] = K,则表示进程i需要Rj 类资源的最大数目为K。
  (3) 分配矩阵 Allocation。这也是一个n x m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果 Allocation[i,j] = K,则表示进程i当前己分得Rj类资源的数目为K。
  (4) 需求矩阵Need。这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j] = K,则表示进程i还需要Rj类资源K个方能完成其任务。
上述三个矩阵间存在下述关系:
              Need[i,j] = Max[i,j] - allocation[i, j]

        4.2算法示例

        期末不挂科之银行家算法解题步骤(一)_哔哩哔哩_bilibili

       操作系统之期末不挂科-银行家算法解题步骤(二)_哔哩哔哩_bilibili

五、作业调度的基本算法

         常用计算基础时间公式:

        周转时间=作业完成时刻—作业到达时刻;

        带权周转时间=周转时间/服务时间;

        平均周转时间=作业周转总时间/作业个数;

        平均带权周转时间=带权周转总时间/作业个数;

        5.1先来先服务算法(FCFS)

        既可用于作业调度,也可用于进程调度。采用该算法时,系统将按照作业到达的先后次序来进行调度。

        只考虑专作业的等待时间,而忽视了作业的运行时间。


        5.2短作业优先调度算法(SJF)

        以作业的长短来计算优先级,作业越短,优先级越高。作业的长短以作业所要求的运行时间来衡量。SJF算法可以分别用于作业调度和进程调度。

        只考虑作业的运行时间,而忽视了作业的等待时间。

        缺点

        (1)必须预知作业的时间。

        (2)对长作业非常不利,长作业的周转时间会明显地增长。

        (3)采用SJF算法时,人—机无法实现交互。

        (4)该调度算法完全未考虑作业的紧迫程度,故不能保证紧迫性作业能得到及时处理。


        5.3优先级调度算法(PSA)

        基于作业的紧迫程度,由外部赋予作业的优先级,调度算法根据该优先级进行调度。

        既可作为作业调度算法,也可作为进程调度算法。


        5.4高响应比优先调度算法(HRRN)

        每个作业引入一个动态优先级,即优先级是可以改变的,令它随等待时间延长而增加,这使长作业的优先级在等待期间不断地增加。

        优先权=(等待时间+要求服务时间)/要求等待服务时间

        由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先级又相当于相应比Rp。据此,优先又可表示为:

        Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间

      =(等待时间/要求服务时间)+1

        由此可以看出:        

        (1)如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,类似于SJF算法,有利于短作业。

        (2)当要求服务的时间同时,作业的优先权又决定于其等待时间,因而又类似于FCFS算法。

        (3)对于长作业的优先级,可以随等待时间的增加而增高。

六、页式虚拟存储管理机制的三种基本置换算法

       6.1最佳置换算法和先进先出置换算法

        最佳置换算法(OPT):选择淘汰的页面将是以后永远不再使用,或者是在将来最长时间内不再被访问的页面,这样产生的缺页中断次数是最少的。

        先进先出置换算法(FIFO):总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。


       6.2最近最久未使用和最少使用置换算法

       最近最久未使用算法(LRU):根据页面调入内存后的使用情况做出决策,选择最近最久未使用的页面予以淘汰。

       最少使用置换算法(LFU):选择在最近时间使用最少的页面作为淘汰页。


       6.3Clock置换算法

        

 (此处要求会计算缺页率、缺页中断次数)

七、计算访问一个物理单位的时间

       7.1虚拟地址和物理地址的转换

       例:若页面大小L(页面大小是2的整数幂1K字节,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E。
        等价描述:某系统按字节寻址,逻辑地址结构中,页内偏移量占10位(说明一个页面的大小为2^10 B=1KB),页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E。
        ①计算页号、页内偏移量
        页号P=A/L=2500/1024=2;页内偏移量W=A%L=2500%1024=452
        ②根据题中条件可知,页号2没有越界,其存放的内存块号b=8(容易被忽略的步骤)
        ③物理地址E=b*L+W=8*1024+452=8644在分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。因此,页式管理中地址是一维的。即,只要给出一个逻辑地址,系统就可以自动地算出页号、页内偏移量两个部分,并不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位。

参考学习:
王道计算机考研 操作系统_哔哩哔哩_bilibili


       7.2内存访问时间的概念 

       基本分页存储管理:

       假设访问一次内存的时间为t,在基本分页存储管理方式中,有效访问时间分为第一次访问内存时间(即查找页表对应的页表项所耗费的时间t)与第二次访问内存时间(即将页表项中的物理块号与页内地址拼接成实际物理地址所耗费的时间t)之和:

        EAT=t+t=2t


        包含快表(TLB)的分页存储管理:

        在引入快表的分页存储管理方式中通过快表查询可以直接得到逻辑页所对应的物理块号,由此拼接形成实际物理地址,减少了一次访问内存的时间,缩短了进程访问内存的有效时间。但是,由于快表的容量限制,不可能将一个进程的整个页全部装入快表,所以在快表中查找所需表项存在命中率的问题。

        命中率:使用快表并在其中成功找到所需页面的表项的比率。

        引入快表的分页存储管理方式中,有效访问时间计算公式即为:

        EAT=a*λ+(t+λ)(1-a)+t=2t-t*a

上式中,λ表示查找快表所需要的时间a表示命中率t表示访问一次内存所需要的时间

        a*λ:刚好在快表中找到所需表项;

        (t+λ)(1-a):在快表中未找到所需表项,需要在快表外查找花费时间t,概率为1-a;

        t:拼接成实际物理地址花费时间。

        :一具有快表的分页系统中,逻辑地址访问内存的时间是100毫秒,访问快表的时间是20毫秒。

   问:设从快表中查找到所需页表项的概率为85%,计算CPU存取一个数据时的有效访问时间。

   ETA = α x λ + ( t + λ )( 1 - α ) + t

        = 20 x 0.85 + ( 100 + 20 )( 1 - 0.85 ) + 100

        = 135

或     ETA = 2t + λ -t x α

        = 2 x 100 + 20 - 100 x 0.85

           = 135

八、外部设备缓冲区的原理和计算

        8.1引入缓冲区的原因:

        (1)缓和CPU与I/O设备间速度不匹配的矛盾;

        (2)减少CPU的中断频率,放宽对CPU中断响应时间的限制;

        (3)解决数据粒度不匹配的问题;

        (4)提高CPU和I/O设备之间的并行性。


        8.2单缓冲

     每当用户进程发出一个I/O请求时,操作系统便在主存中为之分配一个缓冲区,假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理(计算)的时间为C,由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M+T,反之,为M+C,系统对每一块数据的处理时间为Max(C,T) + M


        8.3双缓冲

        为了加快输入和输出的速度,提高设备利用率,人们又引入了双缓冲区机制,称为缓冲对换,在设备输入时,先将数据送入第一个缓冲区,装满后便转向第二个缓冲区,此时操作系统可以从第一缓冲区中移出数据,并送入用户进程,接着由CPU对数据进行计算,在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T),如果C<T,可使块设备连续输入,如果C>T,则可使CPU不必等待设备输入。对于字符设备,若采用行输入方式,则采用双缓冲通常能消除用户的等待时间,即用户在输入完第一行后,在CPU执行第一行中的命令时,用户可继续向第二缓冲区输入下一行数据。

         8.4循环缓冲区(环形缓冲区)

        循环缓冲区的组成如下:

          ① 多个缓冲区,在循环缓冲区中包括多个缓冲区,每个缓冲区的大小相同,作为输入的多缓冲区可分为三种类型,用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的先行工作缓冲区C

          ② 多个指针,作为输入的缓冲区可设置三个指针,用于指示计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti、以及用于指示计算进程正在使用的缓冲区C的指针Current。

       

         计算进程和输入进程可以利用下述两个过程来使用循环缓冲区(循环缓冲的使用)。

  ① Getbuf过程,当计算进程要使用缓冲区中的数据时,可调用Getbuf过程,该过程将由指针Nextg所指示的缓冲区提供给进程使用,相应的,须把它改为现行工作缓冲区,并将Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区,类似地,当输入进程要使用空缓冲区来装入数据时,调用Getbuf过程,由该过程将指针Nexti所指示的缓冲区提供给输入进程使用,同时将Nexti指针移向下一个R缓冲区。

  ② Releasebuf过程,当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过程,将缓冲区C释放,此时,把该缓冲区由当前(现行)工作缓冲区C改为空缓冲区R,类似地,当输入进程把缓冲区装满时,也应该调用Releasebuf过程,将该缓冲区释放,并改为G缓冲区。

  使用输入循环缓冲,可使输入进程和计算进程并行执行(进程同步),相应地,指针Nexti和指针Nextg将不断地沿着顺时针方向移动,这样就会出现如下两种情况。

  ① Nexti指针追赶上Nextg指针,这意味着输入进程的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用,此时,输入进程应该阻塞,直到计算进程把某个缓冲区中的数据全部提取完,使之成为空缓冲区R,并调用Releasebuf过程将它释放时,才将输入进程唤醒,这种情况称为系统受计算限制

  ② Nextg指针追赶上Nexti指针,这意味着输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据,这时,计算进程应该阻塞,直至输入进程又装满某个缓冲区,并调用Releasebuf过程将它释放时,才去唤醒计算进程,这种情况称为系统受I/O限制

        8.5缓冲池

        上述的缓冲区仅适用于某特定的I/O进程和计算进程,因而它们属于专用缓冲,当系统较大时,将会有许多这样的循环缓冲,这样会消耗大量的内存空间,而且利用率不高,为了提高缓冲区的利用率,引入缓冲池,在池中设置了多个可供若干个进程共享的缓冲区。

   对于既可以用于输出的共用缓冲池,其中至少包含有一下三种类型的缓冲区。

  ① 空(闲)缓冲区。

  ② 装满输入数据的缓冲区。

  ③ 装满输出数据的缓冲区。

        为了管理方便,将相同类型的缓冲区链成一个队列,形成了空缓冲队列emq、输入队列inq、输出队列outq。还具有四种工作缓冲区,用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区。

  缓冲区可以工作在收容输入、提取输入、收容输出、提取输出四种工作方式下。

       ① 收容输入,在输入进程需要输入数据时,便调用Getbuf(emp)过程,从空缓冲队列的队首取出一个空缓冲区,把它作为收容输入工作缓冲hin,然后,把数据输入其中,装满后再调用Putbuf(inq,hin)过程,将该缓冲区挂在输入队列上。

  ② 提取输入,当计算进程需要输入数据时,调用Getbuf(inq)过程,从输入队列队首取出一个缓冲区,作为提取输入工作缓冲区sin,计算进程从中提取数据,计算进程用完该数据后,再调用Putbuf(emq,sin)过程,将该缓冲区挂到空缓冲队列emq上。

  ③ 收容输入,当计算进程需要输出时,调用Getbuf(emq)过程从空缓冲区队列emq的队首取出一个空缓冲区,作为收容输出工作缓冲区hout,当其中装满输出数据后,又调用Putbuf(outq,hout)过程,将该缓冲区挂在outq末尾。

  ④ 提取输出,由输出进程调用Getbuf(outq)过程,从输出队列队首取出一个装满输出数据的缓冲区,作为提取输出工作缓冲区sout,在数据提取完后,再调用Putbuf(emq,sout)过程,将该缓冲区挂在空缓冲队列末尾。

参考学习:

王道计算机考研 操作系统_哔哩哔哩_bilibili

九、磁盘寻道的四种基本调度算法

        9.1一次磁盘读/写操作需要的时间

        寻找时间(寻道时间) Ts:在读/写数据前,将磁头移动到指定磁道所花的时间。

        启动磁头臂是需要时间的。假设耗时为s;
        移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。则: 寻道时间Ts=s+ m*n
        延迟时间Tp:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。

        设磁盘转速r (单位: 转/秒,或转/分),则

  平均所需的延迟时间Tp=(1/2)*(1/r)= 1/2r

        (1/r就是转一圈需要的时间。找到目标扇区平均需要转半圈,因此再乘以1/2)

        传输时间T:从磁盘读出或向磁盘写入数据所经历的时间

        假设磁盘转速r,此次读/写的字节数b每个磁道上的字节数N。则:

                                                传输时间Tt=(1/r)*(b/N)=b/(rN)

   总的平均存取时间Ta =Ts + 1/2r + b/(rN)

        延迟时间传输时间与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间,但是操作系统的磁盘调度算法会直接影响寻道时间
 

        9.2先来先服务算法(FCFS)

        根据进程请求访问磁盘的先后顺序进行调度。

        9.3最短服务时间优先算法(SSTF)

        磁头总是先访问距离当前磁道最近的磁道。

        9.4扫描算法(电梯算法)(SCAN)

        优先考虑的是磁头的当前移动方向,类似于电梯的单程移动,直到寻道到距离最远的磁道,再返程寻道最近的磁道。

        9.5循环扫描算法(CSCAN)

        磁道移动只有一个方向,从需要访问的最小磁道号移动到需要访问的最大磁道号,当没有更大的磁道号需要访问时,移动到需要访问的最小磁道号。   

 本题表说明参考:

(3条消息) 【操作系统】磁盘的四种基本调度算法(图表说明)_和我一起学习-CSDN博客_磁盘调度算法流程图

        /*     期末操作系统,考神附体!!!   */

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isxhyeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值