精华内容
下载资源
问答
  • 2021-07-21 15:59:31

    一、页面置换算法

    1. 先进先出置换算法(FIFO):
      每次选择淘汰的页面是最早进入内存的页面。
      实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头,页面队列的最大长度取决于系统为进程分配了多少个内存块。
      FIFO算法虽然实现简单,但是该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最经常被访问。

    2. 最近最久未使用置换算法(LRU):
      每次淘汰的页面是最近最久未使用的页面。
      当需要置换一页时,选择在最近一段时间里没有使用过的页面予以置换。
      LRU代码实现

    二、进程调度算法

    1. 先来先服务 first-come first-serverd(FCFS)
      非抢占式的调度算法,按照请求的顺序进行调度。
      有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。
    2. 短作业优先 shortest job first(SJF)
      非抢占式的调度算法,按估计运行时间最短的顺序进行调度。
      长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。
    3. 时间片轮转
      将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。
    4. 优先级调度
      为每个进程分配一个优先级,按优先级进行调度;为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。

    三、磁盘调度算法

    读写一个磁盘块的时间的影响因素有:
      旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上);
      寻道时间(制动手臂移动,使得磁头移动到适当的磁道上);
      实际的数据传输时间。

    其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。

    1. 先来先服务算法:
      按照磁盘请求的顺序进行调度。
      优点是公平和简单。
      缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。

    2. 最短寻道时间优先算法:
      优先调度与当前磁头所在磁道距离最近的磁道。
      虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。

    3.电梯扫描算法:
      电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。
      电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了最短寻道时间优先算法的饥饿问题。

    更多相关内容
  • 计算机操作系统中常用算法总结

    千次阅读 2019-01-28 17:53:51
    操作系统中常用算法总结 一.动态分区分配算法: 1.首次适应算法(最先适应算法):按照分区的先后次序,从头开始查找,找到符合要求的第一个分区 2.循环首次适应算法(下次适应算法):按照分区的先后次序,从...

    计算机操作系统中常用算法总结

    一.动态分区分配算法:

    1.首次适应算法(最先适应算法):按照分区的先后次序,从头开始查找,找到符合要求的第一个分区
    2.循环首次适应算法(下次适应算法):按照分区的先后次序,从上次已分配的分区起查找(到达最后一个分区时再回到开头),以此找到符合要求的第一个分区
    3.最佳适应算法:寻找大小与要求相差最小的空闲分区,从个别来看,外碎片较小,但是从整体来看,会形成较多外碎片,较大的空闲分区可以保留
    4.最坏适应算法:寻找最大的空闲分区

    二.页面置换算法:

    1.随机置换算法
    2.先进先出算法(FIFO):有Belady现象(分配的页面数增多,缺页率反而提高)
    例如:
    在这里插入图片描述在这里插入图片描述3.最近最久未使用算法(LRU):淘汰最近一段时间较久未被访问的页面
    例如:
    在这里插入图片描述4.时钟页面置换算法(Clock Policy):它是LRU和FIFO算法的折中
    5.最佳置换算法(OPT):淘汰“未来不再使用的”或者“离当前最远位置出现的”页面,这是一种理想情况,是实际执行中无法预知的,因而不能实现,可以用做性能评价的依据。
    例如:
    在这里插入图片描述

    三.调度算法

    1.先来先服务算法(FCFS):按照作业的先后次序进行调度

    最简单的调度算法,对于短作业不利(平均周转时间延长),非抢占式

    处理过程:
    (1)按照作业提交的先后次序,分配CPU执行;
    (2)当前作业占用CPU,直到执行完或阻塞(如申请I/O)让出CPU;
    (3)作业被唤醒后(如I/O执行完成),不立即恢复执行,等待当前作业让出CPU后才可恢复执行。

    2.短作业优先算法(SJF):按照作业的长短顺序进行调度,短作业优先

    对FCFS算法的改进,目的是减少平均周转时间,非抢占式

    优点:
    (1)相比于FCFS改善平均周转时间和平均带权周转时间;
    (2)缩短作业的等待时间;
    (3)提高系统的吞吐量。
    缺点:
    (1)对于长作业不利,可能长时间得不到执行;
    (2)难以准确估计作业(进程)的执行时间,从而影响调度性能;
    (3)未能依据作业的紧迫程度来划分执行的优先级。

    3.最短剩余时间优先(SRT):允许比当前剩余时间更短的进程来抢占

    短作业优先算法的变形,也称为抢占式的短作业优先算法,抢占时机为新作业加入队列时

    4.最高响应比优先算法(HRRN):从就绪队列中选出响应比最高的作业投入执行

    FCFS和SJF的折中

    (1)响应比=(等待时间W+要求执行时间T)/(要求执行时间T)
    (2)优点:既考虑了短作业,也考虑了先后顺序
    (3)缺点:每次调度要调用响应比计算,增加了系统开销

    5.基于优先数的调度算法(HPF):用户提交作业时,根据急迫程度规定适当的优先数,作业调度程序根据JCB优先数决定进入内存顺序

    欢迎各位批评指正!

    展开全文
  • 1.算法 1.1进程调度算法 先来先服务调度算法 时间片轮转调度算法 优先级调度算法 多级反馈队列调度算法 ...2.系统设计 进程调度算法模拟设计 先来先服务调度算法 算法核心思想 先来先服务(FCFS)调度算法

    系统实现操作系统的一些算法,使用的是JavaWeb。

    目录

    1.算法

    1.1进程调度算法

    1.2磁盘调度算法

    1.3请求分页页面置换算法

    2.系统设计

    2.1进程调度算法模拟设计

    2.1.1先来先服务调度算法

    2.1.2时间片轮转调度算法

    2.1.3优先级调度算法

    2.1.4多级反馈队列调度算法

    2.1.5高响应比优先调度算法

    2.1.6短作业优先调度算法

    2.2磁盘调度算法模拟设计

    2.2.1先来先服务调度算法

    2.2.2最短寻道时间优先调度算法

    2.2.3扫描调度算法

    2.2.4循环扫描调度算法

    2.3请求分页页面置换算法模拟设计

    2.3.1先进先出页面置换算法

    2.3.2最近最久未使用页面置换算法

    2.3.3最少使用置换算法

    2.3.4轮转置换算法

    3.系统展示(部分)

    3.1首页

    3.2进程调度算法模拟实现

    3.3盘调度算法模拟

    3.4请求分页页面置换算法模拟


     

    1.算法

    1.1进程调度算法

    • 先来先服务调度算法
    • 时间片轮转调度算法
    • 优先级调度算法
    • 多级反馈队列调度算法
    • 高响应比优先调度算法
    • 短作业优先调度算法

    1.2磁盘调度算法

    • 先来先服务调度算法
    • 最短寻道时间优先调度算法
    • 扫描算法(SCAN)
    • 循环扫描算法(CSCAN)

    1.3请求分页页面置换算法

    • 先进先出页面置换算法
    • 最近最久未使用页面置换算法
    • 最少使用置换算法
    • 轮转置换算法

    2.系统设计

    2.1进程调度算法模拟设计

    2.1.1先来先服务调度算法

    (1)算法核心思想

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

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

    (2)系统参数设计

    • 输入数据参数:进程名称、进程到达时间、进程运行时间;
    • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

    (3)算法设计

    系统对用户输入的进程数据,每一个进程的数据作为一个OSProcess类的对象,将其添加进ArrayList<OSProcess>链表;然后系统将进程按照到达时间递增顺序进行排序,如果到达时间相同,则先输入者在前。至此,前面所做的工作称作对数据的预处理,下文称预处理,不再详细描述。系统对排序后进程序列的开始执行时间和结束执行时间进行迭代更新。

    2.1.2时间片轮转调度算法

    (1)算法核心思想

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

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

    (2)系统参数设计

    • 输入数据参数:时间片长度、进程名称、进程到达时间、运行时间;
    • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

    (3)算法设计

    先进行数据的预处理。系统设置一个队列作为就绪队列queue存放处于就绪状态的进程。设置一个参数t0表示当前时刻,初始值为第一个进程开始运行的时刻。将到达时间小于等于t0的进程按照到达时间递增次序进队列,选择队首的进程,给其分配处理机。如果该进程在一个时间片内未完成,则释放处理机,再次进入就绪队列,但如果此刻有新的进程进入就绪队列,则新进程优先进入,该进程后进入队列;若该进程在此时间片内完成,则进行标记完成。如果就绪队列为空时,处理机空转,时间递增,直到进程全部完成。

    为详细直观的呈现模拟结果,系统除展示最终模拟结果外,还通过表格形式呈现详细的进程的时间片调度过程,另外,还通过动画的形式,分步演示进程的调度过程。

    2.1.3优先级调度算法

    (1)算法核心思想

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

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

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

    • 非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时,才把处理机分配给更为重要或紧迫的进程。
    • 剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更为重要或紧迫的进程。

    (2)系统参数设计

    • 输入数据参数:进程名称、进程到达时间、运行时间、进程优先级;
    • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间、进程优先级。

    (3)算法设计

    先进行数据的预处理。系统设置3个不同优先级就绪队列,优先级分别为1、2、3,1为最高优先级,3为最低优先级,系统采用剥夺式优先级调度。系统将进程数据按照优先级分别分配到三个队列,按照优先级顺序由高到低的顺序依次分配处理机执行。当低优先级进程运行过程中,如果有高优先级进程进入,则低优先级进程被中断,高优先级进程先运行,高优先级进程运行完成后,被中断的低优先级进程继续运行。

    2.1.4多级反馈队列调度算法

    (1)算法核心思想

    多级反馈队列调度算法是时间片轮转和优先级调度算法的综合发展。该算法的实现思想如下:

    • 设置多个就绪队列,并为每个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其他以此类推。
    • 赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片越小。一般低一级的队列中时间片大小是紧邻高一级队列时间片大小的二倍。
    • 当一个新进程进入内存后,首先将它放入低级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如果它能在该时间片内完成,便可撤离系统;如果它在一个时间片内尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样按FCFS原则仅从执行;以此类推。
    • 仅当高优先级的队列为空时,调度程序才调度第2级队列中的进程运行。如果处理机正在执行第i级队列中的某个进程时,又有新进程进入优先级较高的队列(第1~(i-1)中的任何一个队列),则此时新进程会抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

    (2)系统参数设计

    • 输入数据参数:进程名称、进程到达时间、运行时间、时间片长度;
    • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

    (3)算法设计

    先进行数据的预处理。系统设置3个不同优先级就绪队列,优先级分别为1、2、3,1为最高优先级,3为最低优先级。所有进程到达后先进入最高优先级的队列q1,然后取q1中的队首进程,为其分配处理机,获得时间片大小为q。当时间片结束后,该进程仍未完成,则进程进入低一级优先级队列q2的队尾;当高优先级队列为空时,低优先级队列中的进程依次获得时间片长度为2*q;如果时间片结束,该进程进入最低一级优先级队列q3的队尾,运行时获得4*q的时间片长度,如果时间片结束后,该进程仍未完成,则进入当前优先级队列的队尾,等待运行。当低优先级进程运行时,有高优先级进程到达,低优先级进程被迫释放处理机,进入当前优先级队列的队尾,高优先级进程获得处理机运行。

    2.1.5高响应比优先调度算法

    (1)算法核心思想

    高响应比优先调度算法时对先来先服务(FCFS)调度算法和短作业优先(SJF)调度算法的综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列每个作业的响应比,从中选出响应比最高的作业投入运行。

    响应比的计算公式可描述为

    响应比Rp=等待时间+要求服务时间要求服务时间 

    • 当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
    • 当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
    • 对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾长作业。

    (2)系统参数设计

    • 输入数据参数:进程名称、进程到达时间、运行时间、时间片长度;
    • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

    (3)算法设计

    先进行数据的预处理。建立一个链表存储就绪队列中的进程,每次执行前,先计算队列中所有进程的响应比,选择响应比最高的进程,为其分配处理机,该进程运行完成后,时刻表更新,再重新计算就绪队列中各进程的响应比,继续运行。

    2.1.6短作业优先调度算法

    (1)算法核心思想

    短作业优先(SJF)算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行, 直到完成或发生某件事而阻塞时,才释放处理机。

    (2)系统参数设计

    • 输入数据参数:进程名称、进程到达时间、运行时间;
    • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

    (3)算法设计

    先进行数据的预处理。对就绪队列中的进程按照执行时间的长度递增序列进行排序,选择执行时间最短的进程,为其分配处理机。新的进程到达后,进入就绪队列,每次计算,按照上述方式运行进程。

    2.2磁盘调度算法模拟设计

    2.2.1先来先服务调度算法

    (1)算法核心思想

    FCFS算法根据进程请求访问磁盘的先后顺序进行调度。具有公平性,但是算法性能往往接近于随机调度。

    (2)系统参数设计

    • 输入数据参数:磁头初始位置、磁道名称、磁道号;
    • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

    (3)算法设计

    系统设置ArrayList<OSTrack>链表,用来存储磁盘信息,按照用户的输入顺序进行磁针的移动,每次移动磁针时计算磁针移动距离,并且记录下来,模拟结束,计算平均寻道时间。

    2.2.2最短寻道时间优先调度算法

    (1)算法核心思想

    SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。该算法不能保证平均寻找时间最小,还可能会产生“饥饿”现象。

    (2)系统参数设计

    • 输入数据参数:磁头初始位置、磁道名称、磁道号;
    • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

    (3)算法设计

    系统设置ArrayList<OSTrack>链表,用来存储磁盘信息,将磁盘按照磁道号递增顺序进行排序,选取距离磁头最近的磁道,将磁针移向该磁道,并且更新磁针记录,每次移动磁针时计算磁针移动距离,并且记录下来,模拟结束,计算平均寻道时间。

    2.2.3扫描调度算法

    (1)算法核心思想

    SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向。

    (2)系统参数设计

    • 输入数据参数:磁头初始位置、磁道名称、磁道号;
    • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

    (3)算法设计

    系统设置ArrayList<OSTrack>链表,用来存储磁盘信息,将磁盘按照磁道号递增顺序进行排序,从此时磁针位置开始向磁道号递增方向扫描链表中的磁道到达最外层磁道后,再向磁道号递减方向扫描,访问磁道;到达最内层刺刀后,再次转向磁道号递增方向进行磁道扫描。每次移动磁针时计算磁针移动距离,并且记录下来,模拟结束,计算平均寻道时间。

    2.2.4循环扫描调度算法

    (1)算法核心思想

    在扫描算法的基础上规定磁头单向移动来提供服务回返时直接快速移动至起始端而不服务任何请求。

    (2)系统参数设计

    • 输入数据参数:磁头初始位置、磁道名称、磁道号;
    • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

    (3)算法设计

    该算法与上述扫描调度算法类似,唯一不同的地方是磁针移动方向一直为磁道号递增方向,到达最外层磁道后,磁针直接返回到最内层需要访问的磁道,再次向磁道号递增方向进行扫描。

    2.3请求分页页面置换算法模拟设计

    2.3.1先进先出页面置换算法

    (1)算法核心思想

    优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法可能会出现Belady现象。

    (2)系统参数设计

    • 输入数据参数:页表大小、页号;
    • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

    (3)算法设计

    系统设置两个ArrayList<OSPage>链表,分别用来存放所需访问页面信息,另一个用来存放页表内页面的信息。系统按照用户输入顺序访问页面,先判断所访问页面是否再页表中,如果该页面在页表中,直接访问该页面;如果该页面不在页表中, 如果页表未满,则将该页调入页表;如果页表已满,则选择目前页表中最先进入页表的页面,将其换出,将新页面存放在该位置。

    2.3.2最近最久未使用页面置换算法

    (1)算法核心思想

    该算法选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内为访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。

    (2)系统参数设计

    • 输入数据参数:页表大小、页号;
    • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

    (3)算法设计

    系统设置两个ArrayList<OSPage>链表,分别用来存放所需访问页面信息,另一个用来存放页表内页面的信息。页表中的没页面设置一个参数p,表示距离该页面最后一次被访问的时间差,页面调入页表时,该参数设置为1,每访问一次页面,页表中所有页面的p参数加一。系统按照用户输入顺序访问页面,先判断所访问页面是否再页表中,如果该页面在页表中,直接访问该页面;如果该页面不在页表中, 如果页表未满,则将该页调入页表;如果页表已满,选择页表中最久未被访问(即参数p值最大)的页面,将其换出,将新页面存放在此处。

    2.3.3最少使用置换算法

    (1)算法核心思想

    该算法为内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。页面置换时,选择在最近时期使用最少的页面作为淘汰页。

    (2)系统参数设计

    • 输入数据参数:页表大小、页号;
    • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

    (3)算法设计

    该算法与上述最近最久未使用算法类似,不同的是,在本算法中,参数p表示该页面调入页表后被访问的次数。当有新的页面被访问时,选择也表中被访问此次数最少(即p参数最小)的进程,将其换出。

    2.3.4轮转置换算法

    (1)算法核心思想

    该算法为每页设置移位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问为置1。置换算法在选择一页淘汰时,只需检查页的访问页。如果是0,就选择该页换出,若为1,则重新将它置0,暂不换出,给予该页第二次驻留内存的机会,再按FIFO算法检查下一个页面当检查到队列中的最后一个页面时,若其访问页为1,则返回到队首去检查第一个页面。

    (2)系统参数设计

    • 输入数据参数:页表大小、页号;
    • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

    (3)算法设计

    系统设置两个ArrayList<OSPage>链表,分别用来存放所需访问页面信息,另一个用来存放页表内页面的信息。对页表中的每个页面设置一个标志位p,当p=0时,将该页换出;若p=1,将p置为0,继续检查下一个页面。当扫描到页面的尾部时,再转到页表首位继续对页面进行扫描。

     

    3.系统展示(部分)

    3.1首页

     

    3.2进程调度算法模拟实现

    3.3盘调度算法模拟

    3.4请求分页页面置换算法模拟

     

    下附源代码:

    链接:https://pan.baidu.com/s/1Q9XvA2OptaTObFfCa41PKA 
    提取码:bchw

    展开全文
  • 操作系统 银行家算法及相关例题

    千次阅读 多人点赞 2020-11-02 18:58:05
    Dijkstra的银行家算法是最具有代表性的避免死锁的算法,这个算法因能用于银行系统现金贷款的发放而得名。 安全状态 所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称<P1,P2,…,Pn>为安全序列)...

    银行家算法

    Dijkstra的银行家算法是最具有代表性的避免死锁的算法,这个算法因能用于银行系统现金贷款的发放而得名。

    安全状态

    所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称<P1,P2,…,Pn>为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。
    避免死锁的实质在于:系统进行资源分配时,如何使系统不进入安全状态。

    系统处于不安全状态后,不一定进入死锁状态,但是,只要系统处于安全状态,系统便一定不会进入死锁状态。

    相关数据结构

    Available ——可利用的资源数 Available[j]=K 表示系统中现有Rj类资源K个
    Max ——资源最大需求数 Max[i,j]=K 表示进程i需要Rj类资源的最大数目为K
    Allocation ——已分配资源数 Allocation[i,j]=K 表示进程i当前已分得Rj类资源的数目为K
    Need ——还需资源数 Need[i,j]=K 表示进程i还需要Rj类资源K个
    存在关系 —— Need[i,j] = MAx[i,j] - Allocation[i,j]

    银行家算法

    Request_i[j] = K,表示进程Pi需要K个Rj类型的资源.当Pi发出资源请求后,系统按如下步骤进行检查:

    1. 如果Request_i[j] ≤ Need[i,j],便转向步骤2;否则认为出错,因为他所需要的资源数超过它所宣布的资源最大需求数。
    2. 如果Request_i[j] ≤ Available[i,j],便转向步骤3;否则,表示尚无足够资源,Pi必须等待。
    3. 系统试探着把资源分配给进程给Pi,并修改下面数据结构中的数值:
      Available[j]: =Available[j]- Request_i[j];
      Allocation[i,j]: =Allocation[i,j]+ Request_i[j];
      Need[i,j]: =Need[i,j]- Request_i[j];
    4. 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
      银行家算法
    安全性算法(设置向量)
    1. 首先设置两个向量: ① ** Work ** 表示系统可以提供给进程继续运行所需的各类资源数目。在执行安全算法开始时,Work:=Available。 ②** Finish ** 表示系统是否有足够的资源分配给进程,使之运行完成。开始时Finish[i]:=false;当有足够资源分配给进程时,令Finish[i]:=true。

    2. 再从进程集合中找到一个能满足下述条件的进程: ① Finish[i] = false; ② Need[i,j] ≤ Work[i]; 若找到,执行步骤3,否则,执行步骤4。

    3. 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行 :
      Work[j]:= Work[i]+ Allocation[i,j] ; Finish[i]:= true ;
      go to step 2;

    4. 如果所有进程的Finish[i] = true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。
      安全性算法

    银行家算法例题

    在银行家算法中,若出现下述资源分配情况:

    ProcessAllocationNeedAvailable
    P00 0 3 20 0 1 21 6 2 2
    P11 0 0 01 7 5 0
    P21 3 5 42 3 5 6
    P30 3 3 20 6 5 2
    P40 0 1 40 6 5 6

    试问:
    (1)该状态是否安全?
    (2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

    题目中的资源数应当看作是对四种资源的不同请求数,例如对于‘Available’=‘1 6 2 2’,我们应理解为系统当前四种资源可用个数分别为‘1’、‘6’、‘2’、‘2’。
     
    解题思路:

    • 首先明白各个表头的含义,Allocation——该进程已分配的资源数;Need——该进程还需要的资源数;Available——系统当前可分配的资源数。
    • 目前系统中的可用资源为‘1 6 2 2’,与各个进程还需要的资源数进行比较,寻找可为其进行资源分配的进程。
    • 试探性地为进程分配资源,若系统存在安全序列,则证明安全。

    解:(1)

    进程\资源WorkNeedAllocationWork + AllocationFinish
    P01 6 2 20 0 1 20 0 3 21 6 5 4true
    1. 首先根据目前系统中可用资源为‘1 6 2 2’,只满足P0还需要的资源数,故第一步先为P0分配资源。P0获得运行所需的全部资源后,完成执行,归还资源,此时系统中可用资源为‘Work + Allocation’=‘1 6 5 4’,即为下一步中的‘Work’。
    进程\资源WorkNeedAllocationWork + AllocationFinish
    P01 6 2 20 0 1 20 0 3 21 6 5 4true
    P31 6 5 40 6 5 20 3 3 21 9 8 6true
    1. 此时系统中可用资源为‘1 6 5 4’,再查看各个进程的‘Need’,只满足P3,故为P3分配资源。P3执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘1 9 8 6’。
    进程\资源WorkNeedAllocationWork + AllocationFinish
    P01 6 2 20 0 1 20 0 3 21 6 5 4true
    P31 6 5 40 6 5 20 3 3 21 9 8 6true
    P11 9 8 61 7 5 01 0 0 02 9 8 6true
    1. 此时系统中可用资源为‘1 9 8 6’,再查看各个进程的‘Need’,可以发现P1和P4均可满足,此时我们可以任选一进程为其分配资源,此处笔者选择P1进行资源分配。P1执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘2 9 8 6’。
    进程\资源WorkNeedAllocationWork + AllocationFinish
    P01 6 2 20 0 1 20 0 3 21 6 5 4true
    P31 6 5 40 6 5 20 3 3 21 9 8 6true
    P11 9 8 61 7 5 01 0 0 02 9 8 6true
    P22 9 8 62 3 5 61 3 5 43 12 13 10true
    1. 此时系统中可用资源为‘2 9 8 6’,再查看各个进程的‘Need’,可以发现P2和P4均可满足,此时我们仍然是可以任选一进程为其分配资源,此处笔者选择P2进行资源分配。P2执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘3 12 13 10’。
    进程\资源WorkNeedAllocationWork + AllocationFinish
    P01 6 2 20 0 1 20 0 3 21 6 5 4true
    P31 6 5 40 6 5 20 3 3 21 9 8 6true
    P11 9 8 61 7 5 01 0 0 02 9 8 6true
    P22 9 8 62 3 5 61 3 5 43 12 13 10true
    P43 12 13 100 6 5 60 0 1 43 12 14 14true
    1. 此时系统中可用资源为‘3 12 13 10’,再查看各个进程的‘Need’,可以发现P4可满足,为P4进行资源分配。P4执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘3 12 13 10’。
    2. 至此全部进程均已成功分配资源并运行结束。并且所有进程的‘Finish’=true都满足,系统处于安全状态,且系统的一个安全序列为<P0,P3,P1,P2,P4>。 该系统不止一个安全序列。

    (2)

    解题思路:按照银行家算法对该请求进行比较、判断。

    • Request ≤ Need? 若不成立,则出错,因为请求的资源超过其最大资源需求。
    • Request ≤ Available? 若不成立,则等待,因为系统可供分配的资源个数无法满足该进程。
    • 尝试分配,并将‘Available’、‘Allocation’、‘Need’进行修改,判断安全性。
    • Available = Available - Request
    • Allocation = Allocation + Request
    • Need = Need - Request
    1. Request(1,2,2,2)≤ Need(2,3,5,6)成立
    2. Request(1,2,2,2)≤ Available(1,6,2,2)成立
    3. 做出如下修改:
      Available = Available - Request 即Available =(0,4,0,0)
      Allocation = Allocation + Request 即Allocation =(2,5,7,6)
      Need = Need - Request 即Need =(1,1,3,4)
      在尝试分配的过程中,我们可以发现若满足P2提出的请求Request(1,2,2,2),此时无进程的‘Need’可被‘Available’满足,该系统不存在一个安全序列。因此系统不会将资源分配给P2。该类型题目一般是重复问题(1)的步骤,但是这道题目比较简单,不用列表就可以看出
    展开全文
  • 操作系统中常见算法

    千次阅读 2018-08-27 13:54:36
    一、五种进程调度算法 1、时间片轮转调度算法(RR):给每个进程固定的执行时间,根据进程...适用于分时系统。 2、先来先服务调度算法(FCFS):根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,会...
  • 操作系统课程实验,C/C++实现四种进程调度算法。包括先到先执行、优先级原则、短作业优先、时间片轮转。本篇主要讲述整体框架及几个调度算法的具体实现。之所以说是C/C++是因为程序整体框架为C结构化没有使用面向...
  • 操作系统之调度算法的六种实现

    千次阅读 2018-12-29 18:22:19
    一般来说,如果调度算法使得平均周转时间减少,则用户满意度和系统效率会提高。 等待时间 :指进程处于等处理机状态时间之和,等待时间越长,用户满意度越低 平静等待时间。n个进程的等待时间的平均值。如果一个...
  • 山东大学操作系统实验

    万次阅读 多人点赞 2020-03-24 09:25:35
    实验报告第一部分 操作系统命令实验第二部分 操作系统算法实验三. 推荐博客和教程 “推荐博客和教程”虽然放到了最后面,是为了前面的简洁。实际上,我认为这个对于学习有很大的帮助 一. 配置问题 我的系统是...
  • 操作系统Clock算法

    千次阅读 热门讨论 2021-05-07 23:36:42
    由于LRU算法对于硬件要求很高,它的近似算法通常是更好的选择,Clock算法就是用的比较多的一种LRU近似算法。 Clock算法的理解 话不多说,直接进入正题! 简单Clock置换算法 例题:页面流 7 0 1 2 0 3 0 4 2 3 0 3 2 ...
  • 总结一下操作系统里面的几个算法

    千次阅读 2018-06-15 09:06:44
    1.作业调度算法 2.进程调度算法 3.银行家算法 ...4.页面置换算法 ...5.磁盘调度算法 ...1.作业调度算法 ... (3)优先级调度算法(PSA) ... 在批处理系统中,fcfs算法所考虑的只是作业等待时间,而忽视了...
  • 主宰操作系统的经典算法

    万次阅读 多人点赞 2020-07-24 15:22:50
    此篇文章带你梳理一下操作系统中都出现过哪些算法 进程和线程管理中的算法 进程和线程在调度时候出现过很多算法,这些算法的设计背景是当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争 ...
  • 山东建筑大学操作系统实验三、磁盘调度算法的设计 实验目的: 通过对磁盘调度算法的设计,深入理解提高磁盘访问速度的原理。 实验内容: 模拟实现磁盘调度算法:最短寻道时间优先(SSTF)和扫描(SCAN)算法。 ...
  • 大学操作系统期末考试复习经典计算题快速回顾

    千次阅读 多人点赞 2021-03-19 12:59:07
    操作系统期末考试经典计算题(共八道,建议收藏) 1.银行家算法 在银行家算法的例子中,如果出现下述资源分配情况,试问: Process  Allcation   Need   Available P0    0 0 3 2   0 0 1 2   1 6 2...
  • 操作系统——银行家算法

    千次阅读 2022-04-23 20:26:44
    银行家算法操作系统中最有代表性的死锁避免方案,操作系统作为裸机上安装的第一层软件,起着控制和管理计算机内部软硬件资源,合理组织计算机工作流程,提高计算机工作效率,用户和计算机硬件接口的重要作用。...
  • 短小精悍,一篇文章掌握三种算法!!!
  • 操作系统 进程调度-银行家算法实验报告

    千次阅读 多人点赞 2020-06-19 09:56:25
    死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,...
  • 以洛谷P1540题为例,深入理解操作系统LRU算法
  • 继续重温操作系统系列知识,页面置换的三种常见算法为:LRU(最近最久未使用)、FIFO(先进先出)、最佳置换。 部分公司的面试会考到LRU的知识。 LRU置换算法 所谓LRU置换算法,单看字面意思较为麻烦,实际上在...
  • 银行家算法操作系统

    千次阅读 2021-04-01 17:13:01
    前言:银行家算法就真的是银行家...在资源分配前,判断系统是否处于安全的状态。若处于安全的状态,就把资源分配给申请的进程,如果处于不安全的状态则令申请资源分配的进程阻塞,不响应其资源申请。 安全状态:就.
  • 操作系统第三章:银行家算法

    千次阅读 2021-10-22 22:13:48
    由于该算法能用于银行系统现金贷款的发放而得名的。 1. 银行家算法中的数据结构 设系统中有m类资源,n个进程 (1)可利用资源向量Available。含有m个元素的一维数组,每个元素代表一类可利用的资源数目。 如果...
  • 操作系统银行家算法模拟实现(C语言版)

    万次阅读 多人点赞 2020-05-23 11:12:44
    目录 一、实验目的 二、实验内容 ...(1)模拟一个银行家算法: 设置数据结构 设计安全性算法 (2) 初始化时让系统拥有一定的资源 (3) 用键盘输入的方式申请资源 (4)如果预分配后,系统处于安全...
  • 操作系统】RR算法

    千次阅读 2021-11-01 15:19:00
    文章目录一、调度算法 一、调度算法 时间片 q=1 和 时间片 q=2 和 时间片q=4的平均周转时间和平均带权周转时间 q=1 进程名 A B C D E 平均 到达时间 0 2 4 6 8 服务时间 3 6 4 5 2 完成时间 4 18 17 ...
  • 可利用银行家算法避免死锁,请设计银行家算法,参考教材依据教材《计算机操作系统(第四版)》P120页 二、算法分析 此银行家算法即为用利用一维数组与二维数组来记录系统当前资源量与进程所需资源量及其持有资源量,...
  • 操作系统——动态分配 写的时间早了,有些许漏洞和不足,请大家不要介意 分配方式可分为四类:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配算法四种方式,其中动态分区分配算法就是此实验的...
  • 学习操作系统心得体会

    千次阅读 2019-12-16 23:00:47
    学习操作系统心得体会 很快的,一个学期的《操作系统》课程就要结束了,在这个学期,通过老师的传授和课本以及课下的阅读学习,让我对计算机操作系统的一些实现原理和简单的操作过程有了基本的了解。 在学习操作系统...
  • 操作系统进程调度算法C语言代码 本算法包含四种调度:先到先服务,短作业优先,时间片轮转,优先级优先!
  • 操作系统时钟(CLOCK)置换算法

    万次阅读 多人点赞 2020-01-14 20:08:44
    时钟(CLOCK)置换算法流程 注意:红色为访问位,蓝色为内存数据 箭头处开始 第一步: 第一个页面走向为3,此时内存中没有数据,且访问位为0,于是将3放入内存,并修改访问位为1,指针下移,得到如下图 ...
  • 操作系统-银行家算法(Java实现)

    万次阅读 多人点赞 2020-12-31 10:39:13
    银行家算法是最著名的死锁避免算法,其思想是:将操作系统视为银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源...
  • 最佳(OPT)置换算法 #include <iostream> int accessPage[20] = { 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 }; int flagOPT[3] = { -1,-1,-1 }; // 用来在OPT算法中标记三个物理块是否有页面;-1:物理...
  • 操作系统:LRU置换算法实现

    千次阅读 2020-12-17 20:20:21
    最近最久未使用(LRU)置换算法原理 就是:当需要淘汰某页面时,选择当前一段时间内最久未使用过的页先淘汰, 即淘汰距当前最远的上次使用的页。 例如: 分配给该进程的页块数为3,一个20长的页面访问序列为 :12560,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,047,086
精华内容 418,834
关键字:

操作系统 算法

友情链接: spi.rar