一、概要说明

当多个任务访问同一个资源(数据)是就会引发竞争条件问题,这不仅在进程间会出现,在操作系统和进程间也会出现。由竞争条件引发的问题很难复现和调试,这也是其最困难的地方。本实验的目的在于了解竞争条件和死锁现象,并掌握处理这些问题的初步方法等。

二、实验原理

1. 死锁的出现与简单处理表1展示了我们系统(当前状态)如果在_start函数和中断处理函数中都调用打印宏(println!)可能出现死锁的情况。_start函数与中断处理函数(interrupt_handler)之间因为竞争资源而可能出现死锁。这是因为_start函数占有WRITE 锁且请求在CPU上运行,而中断处理函数占有CPU请求WRITE锁,构成死锁。

为了防止出现死锁,一个简单的办法是在使用锁时禁止中断。但需要注意的是禁用中断会增加中断响应延迟,而中断响应延迟一个非常重要的性能指标。所以只能在短时间内禁用中断。

2. 竞争条件所谓竞争条件是指多进程并发访问(操作)同一个数据时执行的结果依赖于进程之间执行的顺序。参见教材第6章(第7版)

三、硬件中断

1. 死锁

现在内核中存在一种并发的情形:定时器中断是异步发生的,因此它们可以随时中断我们的_start函数。幸运的是,Rust的所有权系统可以在编译时防止许多种类型的与并发相关的错误。但死锁是一个值得注意的例外。如果一个线程试图获取一个永远不会释放的锁,就会发生死锁。这样,线程将会无限期地处于挂起状态。

• 当前我们的内核中已经可以引发死锁。请注意,我们的println宏调用vga_buffer::_print 函数,它使用自旋锁来锁定一个全局的WRITER类。

它锁定WRITER,调用write_fmt,并在函数的末尾隐式地解锁。现在,我们设想一下&#x

rust键位失灵_用Rust写操作系统(四)——竞争条件与死锁相关推荐

  1. 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

    自己动手写操作系统(开篇) 自己动手写操作系统(字符显示) 说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多 了解过计算机启动的同学肯定知道,当计算机启动的时 ...

  2. 操作系统原理实验(四)深渊:竞争条件与死锁(硬件中断)

    硬件中断 中断控制器 启动中断 处理定时器中断 死锁 竞争条件 HLT指令 键盘输入 中断控制器 中断提供了一种从附加硬件设备通知CPU的方法.这个英特尔8259是1976年推出的可编程中断控制器(P ...

  3. 【操作系统】竞争条件与临界区

    Race Condition 多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,称为竞争条件(Race Condition). 为了防止上述竞争条件,需要确保一段时间内只有一个进程能操 ...

  4. rust高级矿场_高级 Rust 所有权管理

    暨 Repository 简介 引子Rust 在处理数据时表现第一好情况的是处理树状数据,第二好的情况是数据能够看作有向无环图,但是其中执行数据变化的修改脉络路径仍然能看作是树形,同样好的也还有粗粒度 ...

  5. ios 腐蚀rust手游_使用 Rust 开发 iOS 应用(粗糙版)

    日常碎碎念最近经常有人问我怎么用 Rust 在 iOS 上开发. 那就完整地讲一下吧. 还有个事, 我的 17 款 MacBook Pro 使用流畅程度居然没有 16 款的好, 17 款动不动就吹鼓风 ...

  6. ios 腐蚀rust手游_用 Rust 开发 iOS 应用(粗糙版)

    把环境搞定 在搞事情之前, 我们先把 Rust 环境配好, 这个很简单, 直接用官网的这条命令. curl https://sh.rustup.rs -sSf | sh 复制代码 随便装一个版本, 稳 ...

  7. rust队友开挂_腐蚀RUST判断开挂玩家方法说明 怎么识别玩家是否外挂

    <腐蚀RUST>无论是私服还是官服都有玩家开挂,这样影响其他玩家体验.有些还很难被识别出来.本次巴士小编就给大家带来<腐蚀RUST>开挂玩家识别方法,希望对给为玩家有所帮助. ...

  8. 腐蚀rust服务器命令_腐蚀Rust游戏指令大全 全游戏指令一览

    今天小编要为大家带来得是腐蚀Rust游戏指令大全,腐蚀Rust是一款第一人称僵尸生存网络游戏,在游戏中玩家需要防范动物.僵尸.玩家的袭击,并依靠各类物品进行生存. 全游戏指令一览 基本指令 (以下在聊 ...

  9. rust 飞天指令_腐蚀RUST代码大全 腐蚀RUST指令代码一览

    腐蚀(RUST)是一款开放世界生存游戏,在游戏中玩家可以使用指令代码来简便自己的游戏,下面就来分享一下腐蚀RUST指令代码大全. 腐蚀RUST指令代码一览 基本指令 (以下在聊天框内输入) /msg ...

最新文章

  1. IDEA出现import org.junit.Test飘红解决方案
  2. Mybatis的增删改查操作(包含动态代理,动态SQL标签,缓存,#与$的使用传入多参数,获取自增id等基本操作)
  3. 改变服务器控件的显示属性,2.6.1 设置Style特性和其他属性
  4. 单片机搭建环境烧录方法_单片机仿真器的工作原理解析
  5. DDD专家张逸:复杂与架构演进的关系
  6. 带你深入了解何为TeamViewer视频通话
  7. 怎么在不重启tomcat服务器的情况下更新修改过的后台代码,修改类不用重启Tomcat加载整个项目...
  8. XHR 和 Fetch 的使用详解和区别总结
  9. 【斗地主代码分析】(2)-斗地主逻辑-客户端与服务端
  10. 阿里服务器配置随笔记 centos 服务器 Linux 部分命令合集
  11. 阿里云被攻击的处理方法
  12. docker部署微服务
  13. 更好玩的跑步机,还有丰富课程资源,赤兔Air跑步机体验
  14. XJTU大计基第十周编程作业
  15. 小明种苹果(100分)
  16. 商业虚拟专用网络技术四数据传输安全技术
  17. 做个小推广-风景优美的旅游胜地
  18. MATLAB---回归分析
  19. 细胞信号通路详解:B细胞受体复合物
  20. mysql数据库实验报告三

热门文章

  1. 网络基础 -- 网络分层与三次握手、四次挥手
  2. Flutter学习笔记 —— 完成一个简单的新闻展示页
  3. CUDA矩阵乘法优化
  4. 告别高墙铁窗,AI或将终结传统监狱模式
  5. Assigned 函数
  6. python web项目打包部署_打包package
  7. 面试笔记@MySQL
  8. 关于MFC中Ribbon界面如何修改标题属性问题
  9. springboot项目本地运行无问题,Linux系统报错org.thymeleaf.exceptions.TemplateInputException
  10. 神经网络(六)循环神经网络