coursera 《现代操作系统》 -- 第四周 处理器调度
优先级反转
这往往出现在一个高优先级任务等待访问一个被低优先级任务正在使用的临界资源,从而阻塞了高优先级任务;同时,该低优先级任务被一个次高优先级的任务所抢先,从而无法及时地释放该临界资源。这种情况下,该次高优先级任务获得执行权。
原因:
在操作系统中,一般情况下,
- 进程分优先级,高优先级进程需要执行时可打断现正在执行的低优先级进程;
- 普通的临界资源使用方法,如果一个临界资源被获取了,则其它想要获取此资源的程序被阻塞,直到此资源被释放;
- 有三个进程(其优先级从高到低分别为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 《现代操作系统》 -- 第四周 处理器调度的更多相关文章
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
- 机器学习公开课笔记(4):神经网络(Neural Network)——表示
动机(Motivation) 对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多学习参数过多,从而复杂度太高. 神经网络(Neural Network) 一个简单的神经网 ...
- coursera 《现代操作系统》 -- 第十三周 期末考试
一些概念在书上不好找,可以通过谷歌搜索,比如搜索中断向量, site:coursera.org 中断向量 3 下列关于中断和异常的叙述中,哪一个是错误的? x86系列处理器提供的4个处理器特权级 ...
- coursera 《现代操作系统》 -- 第九周 文件系统(1)
文件的定义 文件名-> 路径名 磁盘结构 磁臂转还是那根柱子转? 盘片被轴带动旋转,磁头读取经过的扇区的数据. 典型的磁盘结构 一块盘呢由若干个盘片组成 每个盘片呢实际上有两个面啊,两个盘面 每 ...
- coursera 《现代操作系统》 -- 第八周 存储模型(2)
名词解释 页面: 页面大小: 页表: 页表项: 以上名词解释见: coursera <现代操作系统> -- 第七周 存储模型(1) 页表项大小: 问:以上是怎么计算出来的? 32位指什么? ...
- coursera 《现代操作系统》
什么是独占设备技术?为什么说 “SPOOLing不是独占设备的”? 百度百科没有解释,从教材中找到了: 第二章 取数指令 load To load a value from memory, you ...
- coursera 《现代操作系统》 -- 第十一周 IO系统
本周要求 错题 下列I/O控制方式中,哪一个不需要硬件支持? 中断方式 轮询方式 DMA方式 I/O处理机方式 中断方式:中断控制器 轮询方式:CPU不断查询设备以了解其是否就绪 DMA:使用到了 ...
- coursera 《现代操作系统》 -- 第十周 文件系统(2)
身份验证 Authentication 知道用户是谁.通过账号密码.Id 这样的识别出来. 访问控制 Permission 知道用户是谁后. 主动控制 记录用户ID和对应的访问权限 --> 记录 ...
- coursera 《现代操作系统》 -- 第七周 存储模型(1)
虚拟地址 隔离进程,便于管理. 问:为什么不直接划分物理地址为一块一块,直接管理,而要做一层虚拟地址的映射呢? 栈和堆 Differences between Stack and Heap Stack ...
随机推荐
- leetcode第一刷_Sudoku Solver
这道题简直是耻辱啊.竟然被吓得不敢做,最终開始写还犯下了各种低级错误,花了好久的时间. 事实上假设想明确81*9事实上是非常小的规模的话,早就想到用回溯法了,这不是跟八皇后全然一样的嘛.每次填入的时候 ...
- zabbix proxy 安装
### 前期准备 ``` # 直接yum安装 ``` ### 安装 ``` # 安装 sqlite zabbix-proxy-sqlite3 yum -y install sqlite sql ...
- [ci]gitlab安装配置(含gitlab邮件配置)
gitlab安装配置 参考: https://www.unixhot.com/article/48 原则:简单维护为准,故yum安装gitlab 1,gitlab安装 2,gitlab邮箱配置 1,g ...
- 160. Intersection of Two Linked Lists【easy】
160. Intersection of Two Linked Lists[easy] Write a program to find the node at which the intersecti ...
- Python内置函数之bool()
该函数是一个类对象 class bool([x]) bool()只能传入一个参数. bool()用来判断对象是否为True,返回值为True或者False. 下面看看例子: >>> ...
- Tomcat闲聊第二话
windows下安装Tomcat可以直接下载Installer,需要注意的是,先确保安装了Java虚拟机. 注:默认安装路径为 C:\Program Files\Apache Software Fou ...
- oracle 数据查询
1,读取从今天到1个月前之间的数据select * from tablewhere column between add_months(sysdate, -1) and sysdate;
- ini_set ini_get 可操作配置参数列表
为了使自己的程序在不同的平台中拥有更好的兼容性,很多时候我们都要获取当前Php的运行环境参数. 比如我们常用到的: 获取 magic_quotes_gpc 状态,来决定当表单提交时我们是否转义(add ...
- Python的实例方法,类方法,静态方法之间的区别及调用关系
如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...
- Windows下使用python
Windows下使用python,一般安装python就有IDLE了,再这个里面使用就好了,很方便 安装完之后.py的文件右键会有Edit with IDLE,可是我脑残想要默认打开就是IDLE,结果 ...