优先级反转

这往往出现在一个高优先级任务等待访问一个被低优先级任务正在使用的临界资源,从而阻塞了高优先级任务;同时,该低优先级任务被一个次高优先级的任务所抢先,从而无法及时地释放该临界资源。这种情况下,该次高优先级任务获得执行权。

原因:

在操作系统中,一般情况下,

  1. 进程分优先级,高优先级进程需要执行时可打断现正在执行的低优先级进程;
  2. 普通的临界资源使用方法,如果一个临界资源被获取了,则其它想要获取此资源的程序被阻塞,直到此资源被释放;
  3. 有三个进程(其优先级从高到低分别为T1、T2、T3),有一个临界资源CS(T1与T3会用到)。这时,T3先执行,获取了临界资源CS。然后T2打断T3。接着T1打断T2,但由于CS已被T3获取,因此T1被阻塞,这样T2获得时间片。直到T2执行完毕后,T3接着执行,其释放CS后,T1才能获取CS并执行。这时,我们看T1与T2,虽然T1优先级比T2高,但实际上T2优先于T1执行。这称之为优先级逆转。

疑惑:低优先级的进程获取了资源,并处于就绪态,也会占用资源吗?不应该只有运行态才会占用资源?

解答:

临界区

在同步的程序设计中,临界区块(Critical section)指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源有无法同时被多个线程访问的特性。

当有线程进入临界区块时,其他线程或是进程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区块的进入点与离开点实现,以确保这些共用资源是被互斥或的使用,例如:semaphore

只能被单一线程访问的设备,例如:打印机

一个最简单的实现方法就是当线程/线程(Thread)进入临界区块时,禁止改变处理器;在uni-processor系统上,可以用"禁止中断(CLI)"来完成,避免发生系统调用(System Call)导致的上下文交换(Context switching);当离开临界区块时,处理器恢复原先的状态。

就绪态 指的是进程已经具备了运行的条件 但是由于没有空闲的CPU,所以这个进程暂时还不能运行 ;

等待态 比如说你要去读盘 一个进程要去到磁盘读数据 在数据还没有读完之前,没有读到内存之前,这个进程 暂时是不能运行的

怎么解决这个问题呢?

有三种解决方案

首先呢,是设置优先级的上限 那么这种方法实际上是说,凡是进入临界区的进程 我给它的优先级都是最高的。 你不在临界区的进程 优先级都会比这个进入临界区的这个,进程优先级要低 这样的话呢,它就可以执行完成,然后把临界区还回去 啊,

那么第二种方案呢,就是优先级的继承 如果一个低优先级的进程,阻碍了一个高优先级进程执行,那么 它可以临时地继承这个高优先级的这个进程的优先级 它可以一下子把自己优先级继承到这个高优先级的这个程度 那么它就可以去运行,然后呢把临界区还回去

第三种方案呢,就叫禁止中断 凡是进入临界区的进程,那么就不再响应中断的(就不会被中优先级的抢占)。 直到它 出临界区才响应中断,这样的话呢就保护了这个进程,让它 继续去执行。 所以呢这三种方案都可以解决优先级的反转问题

错题

有三个进程P1、P2和P3,运行时间均为50ms。假设时间片大小为10ms,且不考虑上下文切换的开销。采用时间片轮转(RR)算法执行完这三个进程,其平均完成时间是多少?

50ms

100ms

140ms

150ms

完成时间 = 处理时间 + 等待时间

一个进程的等待时间为它完成前的所有其他进程的执行时间。

print(['A', "B", "C"] * 5)
['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C']
A的等待时间: (B + C) * 4 = 80
A的等待时间: A + (A + C) * 4 = 90
A的等待时间: (B + C) * 5 = 100
总的等待时间 80 + 90 + 100 = 270
总的处理时间 50 * 3 = 150
所以平均时间为 (270 + 150) / 3 = 140

  

采用下列哪一个调度算法会产生“饥饿”现象?

最高响应比优先(HRRN)

时间片轮转(RR)

多级反馈队列(Feedback)

先来先服务(FCFS)

饥饿:进程一直得不到 CPU 的资源。我认为更好的说明是,是否存在某些情况,使某个进程一直得不到执行。

比如,多级反馈队列(Feedback),首先执行优先级高的队列,新加入的进程进入最高优先级队列,所以如果一直有任务加入,那么低优先级的队列会一直执行不到;

先来先服务(FCFS): 不管怎么样,加入了队列就会被执行到。

coursera 《现代操作系统》 -- 第四周 处理器调度的更多相关文章

  1. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

  2. 机器学习公开课笔记(4):神经网络(Neural Network)——表示

    动机(Motivation) 对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多学习参数过多,从而复杂度太高. 神经网络(Neural Network) 一个简单的神经网 ...

  3. coursera 《现代操作系统》 -- 第十三周 期末考试

    一些概念在书上不好找,可以通过谷歌搜索,比如搜索中断向量, site:coursera.org 中断向量   3  下列关于中断和异常的叙述中,哪一个是错误的? x86系列处理器提供的4个处理器特权级 ...

  4. coursera 《现代操作系统》 -- 第九周 文件系统(1)

    文件的定义 文件名-> 路径名 磁盘结构 磁臂转还是那根柱子转? 盘片被轴带动旋转,磁头读取经过的扇区的数据. 典型的磁盘结构 一块盘呢由若干个盘片组成 每个盘片呢实际上有两个面啊,两个盘面 每 ...

  5. coursera 《现代操作系统》 -- 第八周 存储模型(2)

    名词解释 页面: 页面大小: 页表: 页表项: 以上名词解释见: coursera <现代操作系统> -- 第七周 存储模型(1) 页表项大小: 问:以上是怎么计算出来的? 32位指什么? ...

  6. coursera 《现代操作系统》

    什么是独占设备技术?为什么说 “SPOOLing不是独占设备的”? 百度百科没有解释,从教材中找到了:  第二章 取数指令 load To load a value from memory, you ...

  7. coursera 《现代操作系统》 -- 第十一周 IO系统

    本周要求 错题 下列I/O控制方式中,哪一个不需要硬件支持? 中断方式 轮询方式 DMA方式 I/O处理机方式 中断方式:中断控制器 轮询方式:CPU不断查询设备以了解其是否就绪 DMA:使用到了   ...

  8. coursera 《现代操作系统》 -- 第十周 文件系统(2)

    身份验证 Authentication 知道用户是谁.通过账号密码.Id 这样的识别出来. 访问控制 Permission 知道用户是谁后. 主动控制 记录用户ID和对应的访问权限 --> 记录 ...

  9. coursera 《现代操作系统》 -- 第七周 存储模型(1)

    虚拟地址 隔离进程,便于管理. 问:为什么不直接划分物理地址为一块一块,直接管理,而要做一层虚拟地址的映射呢? 栈和堆 Differences between Stack and Heap Stack ...

随机推荐

  1. mui.fire() 和 mui.trigger()

    导读:添加自定义事件监听操作和标准js事件监听类似,可直接通过window对象添加,通过mui.fire()方法可触发目标窗口的自定义事件 监听自定义事件 添加自定义事件监听操作和标准js事件监听类似 ...

  2. Photoshop - 描边

    描边在后期的UI制作的时候会比较少用,因为有一些缺陷,可以用选取收缩 1.快捷键E + S  (菜单栏-编辑-描边.photoshop cc) 2.使用图层样式进行描边(双击图层列表区域,图层缩略图的 ...

  3. 浅谈Android移动开发程序员的职业发展之路

    现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...

  4. 【Java】Java_02环境配置

    JDK是什么?JRE是什么?JDK和JRE的区别? Java Runtime Environment (JRE) 包含: Java虚拟机.库函数.运行Java应用程序和Applet所必须文件 Java ...

  5. BASE64Decoder的引用

    project---->properties--->Libraries--->JRE System Library--->Access rules--->Edit---& ...

  6. 解决window10系统电脑插入耳机之后没有声音的问题

    其实办法也是从百度百科上查到的 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄     可能是因为自己某个不小心的操作更改了设置 1. 首先要点开设置按钮,在搜索栏输入控制面板 (当然知道控制面板在哪里的小伙伴就不用 ...

  7. 【LeetCode】two num 利用comparable接口 对对象进行排序

    题目two num 题意:给定一个整数数组和一个目标值.要求在数组中找到两个数.使得它们的和相加等于目标值.而且返回两个数的下标 思路:1.假设使用暴力,时间复杂度为O(n^2) 2.能够先将全部数进 ...

  8. unity, get Canvas Scaler referenceResolution

    需要using UnityEngine.UI; 然后就可以访问到CanvasScaler组件. float width=GetComponent<CanvasScaler> ().refe ...

  9. mongo aggregate

    https://cnodejs.org/topic/59264f62855efbac2cf7a2f3 背景 现有1000条学生记录,结构如下: { name:String,//名称 clazz:{ty ...

  10. discuz添加管理员,找回管理员方法

    增加创始人方法: 第一步:打开现在创始人的后台,将你所需要增加的创始人设置为管理员,并且给予后台副站长权限,这两部一定要做到位,先把这两步做完之后再做下面的! 具体设置管理员和给予后台副站长权限请查看 ...