当前位置: 首页 > news >正文

2.13、进程互斥的硬件实现方法

image-20230201220123976

1、中断屏蔽方法

利用 “开/关中断指令” 实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况)

image-20230201220233739

优点:简单、高效

缺点:

  • 不适用于多处理机(多个处理机访问同一个临界区,导致其中剩余的处理机会一值等待);

  • 只适用于操作系统内核进程

  • 不适用于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)

2、TestAndSet

简称 TS 指令,也有地方称为 TestAndSetLock 指令,或 TSL指令

TSL 指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是用 C 语言描述的逻辑

image-20230201221855703

若刚开始 lock 是 false,则 TSL 返回的 old 值为 false,while 循环条件不满足,直接跳过循环,进入临界区。若刚开始 locktrue,则执行 TLSold 返回的值为 truewhile 循环条件满足,会一直循环,直到当前访问临界区的进程在退出区进行 “解锁”。

相比软件实现方法,TSL 指令把 “上锁” 和 “检查” 操作用硬件的方式变成了一气呵成的原子操作

优点

  • 实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;

  • 适用于多处理机环境

    其他进程会卡在 ts 循环里面

缺点

  • 不满足 “让权等待” 原则,暂时无法进入临界区的进程会占用 CPU 并循环执行 TSL 指令,从而导致 “忙等” 。

3、Swap指令

有的地方也叫 Exchange 指令,或简称 XCHG 指令。
Swap 指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是用 C 语言描述的逻辑

image-20230201222829718

逻辑上来看 SwapTSL 并无太大区别,都是先记录下此时临界区是否已经被上锁(记录在 old 变量上),再将上锁标记 lock 设置为true,最后检查 old,如果 old 为false则说明之前没有别的进程对临界区上锁,则可跳出循环,进入临界区。

优点

  • 实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;

  • 适用于多处理机环境

    其他进程会卡在 ts 循环里面

缺点

  • 不满足 “让权等待” 原则,暂时无法进入临界区的进程会占用 CPU 并循环执行 Swap 指令,从而导致 “忙等” 。

4、整体框架

image-20230201223231647

http://www.lryc.cn/news/4609.html

相关文章:

  • Leetcode力扣秋招刷题路-2335
  • C语言深度解剖-关键字(6)
  • [多线程进阶]CAS与Synchronized基本原理
  • 【Linux系统编程】02:文件操作
  • 华为OD机试 - 去除多余空格(Python)| 真题+思路+代码
  • 百趣代谢组学分享,补充α-酮酸的低蛋白饮食对肾脏具有保护作用
  • json对象和formData相互转换
  • 【c++面试问答】常量指针和指针常量的区别
  • Ubuntu18下编译android的ffmpeg经验
  • Spring Security in Action 第十三章 实现OAuth2的认证端
  • 本文章提供中国国界、国界十段线原始数据以及加载方法
  • 一文带你搞懂,Python语言运算符
  • JAVA集合专题4 —— Map
  • 二叉树进阶--二叉搜索树
  • 牛客网Python篇数据分析习题(三)
  • Java开发常见关键词集绵
  • 解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题
  • 为什么子进程要继承处理器亲缘性?
  • 【算法】高精度
  • 计算机网络-基本概念
  • 你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得
  • 【设计模式】我终于读懂了代理模式。。。
  • 每天10个前端小知识 【Day 2】
  • 帮助中心在线制作工具推荐这4款,很不错哟!
  • rabbitMQ相关文章汇总
  • 【C++】异常
  • @Validated注解不生效问题汇总
  • 华科万维C++章节练习2_4
  • 17万字数字化医院信息化建设大数据平台建设方案WORD
  • Android 11系统签名修改