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 ...
随机推荐
- selenium从入门到应用 - 8,selenium+testNG实现多线程的并发测试
本系列所有代码 https://github.com/zhangting85/simpleWebtest本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下s ...
- ipv6 dns list
ip v6 DNS list: 将首选DNS服务器地址填上2001:778::37 备用DNS服务器地址填上2001:df8:0:7::1
- requireJS目录
前言 对于像我这种requireJS初学者而言,requireJS最难理解的部分应该是它的路径问题.晚上随便折腾了一下,算是稍微理清了这个目录问题吧. requireJS学习网址:requireJS中 ...
- pouchdb快速入门教程
a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2p ...
- nodejs 命令行获取入参
安装:npm install yargs --save-dev Example index.js const argv = yargs.alias('n', 'name').alias('p', 'p ...
- 在modelsim中加入quartus仿真库
找到modelsim安装目录下的modelsim.ini文件. 将modelsim.ini的只读属性去掉. 打开quartus软件.选择Launch Simulation Library Compil ...
- script
实例 链接一个外部脚本文件: <script type="text/javascript" src="myscripts.js"></scri ...
- 李洪强漫谈iOS开发[C语言-001]-开发概述
- wp8页面导向
一般打开的是MainPage.xaml需要打开另一个页面的时候,用NavigationService.Navigate(uri);当然uri要配置是相对路径还是绝对路径Uri uri = new Ur ...
- iOS 学习笔记六 【APP中的文字和APP名字的国际化多语言处理】
今天为新手解决下APP中的文字和APP名字的国际化多语言处理, 不多说了,直接上步骤: 1.打开你的项目,单机project名字,选中project,直接看图吧: 2.创建Localizable.st ...