没有合适的资源?快使用搜索试试~ 我知道了~
16030199025-张俊华-PriorityInversion1
需积分: 0 0 下载量 58 浏览量
2022-08-03
18:15:02
上传
评论
收藏 430KB PDF 举报
温馨提示
试读
12页
一、实验内容 二、分析与设计 三、具体实现
资源详情
资源评论
资源推荐
西安电子科技大学
操作系统课程设计
(2018 年度)
实
验
报
告
实验名称: Priority-Inversion
班 级: 1603019
姓 名: 张俊华
学 号: 16030199025
西安电子科技大学《操作系统课程设计》实验报告 2018 年度
一、实验内容
操作系统中存在优先级反转问题——当一个高优先级线程通过信号量机制访问
共享资源时,该 信号量已被一低优先级任务占有,而这个低优先级任务在访问
共享资源时,可能又被其他一些中等 优先级任务抢先,因此造成高优先级任务
被许多低优先级任务阻塞,实时性难以保证。 我们的任务是:解决由锁(Lock)
造成的优先级反转问题,解决策略是优先级捐赠。
二、分析与设计
优先级捐赠
所谓的优先级反转,出现在高低优先级线程对锁 (Lock)的竞争之中。为了避
免高优先级任务被许多低优先级任务阻塞,就需要提高占有锁的进程的优先级,
将高优先级线程的优先级赋予低优先级线程,就是题目要求的优先级捐赠。
根据老师的提示,和检查 Pintos 的测试样例,可以看到优先级捐赠的典型情况有下面三种
仔细观察发生优先级捐赠的情况,可以意识到,若想完成优先级的捐赠,在两个线程之间,
需要有一个用于交换优先级的媒介。自然地,锁(lock)作为两个进程之间都需要获取的目
标,就可以承担起传递优先级的重任。
实现
要让锁来传递优先级,就需要对锁现有的数据结构进行改造。需要为锁引入优先
级的概念。
锁引入了优先级之后,要表示线程和锁之间的关系,还需要对线程的结构进行改造。同时,
由于线程在优先级捐赠过程结束之后需要恢复原始优先级,因此还需要增加一个字段,记录
线程原始的优先级。
Lock 优先级
Priority
线程原始优先级
Old_priority
Locks_holding
线程当前持有的
锁
Lock_waiting
线程当前等待的
锁
Lock Thread
在数据结构准备完毕之后,仔细观察三种捐赠类型,寻找优先级捐赠过程中不变的特征。可
以发现,不管是多么复杂的捐赠过程,其核心之处在于,在线程的并发流程中,始终保持
线
西安电子科技大学《操作系统课程设计》实验报告 2018 年度
程的优先级,和其所拥有的锁的最高优先级相同。
(锁的优先级是指,占有该锁的线程中
的最高优先级)
。
意识到这点之后,我们就可以绘制出优先级捐赠的核心实现流程:
thread_check_pri
ority
线程拥有
locks
Locks
中的优先级比
线程自身的优先级高
优先级为
Locks
中的最高优先级
优先级为线程原始
优先级
否
是
是
否
优先级捐赠的核心,就是比较线程的优先级和其占有锁的优先级。并根据比较结果,对线程
自身的优先级进行实时调整。可以把这个比较过程封装成函数
thread_check_priority ,于是,整个优先级捐赠的关键,也是最复杂的部分,就是在
于调用
thread_check_priority ,完成捐赠的时机。
调用 thread_chec k_priority 的时机
由于之前分析的,线程的优先级和其所持有锁的优先级时时相关。因此,自然地,
调用 thread_check_priority 的时机就在线程的优先级或其持有锁的优先级
改变之时。
什么时候锁的优先级会被改变?——当其他优先级的线程也对同一个锁进行了请求的时候。
因此,我们需要对
lock_acquire 函数,进行改造。需要调用 thread_check_priority
的时机就在这里。
剩余11页未读,继续阅读
熊比哒
- 粉丝: 31
- 资源: 292
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0