操作系统备考学习 day6(2.3.2 - 2.3.4)

news2025/1/19 20:25:09

操作系统备考学习 day6

  • 第二章 进程与线程
    • 2.3 同步与互斥
      • 2.3.2 实现临界区互斥的基本方法
        • 单标记法
        • 双标志先检查法
        • 双标志后检查法
        • Peterson算法
      • 进程互斥的硬件实现方法
        • 中断屏蔽方法
        • TestAndSet指令
        • Swap指令
      • 2.3.3 互斥锁
      • 2.3.4 信号量
        • 整型信号量
        • 记录型信号量

第二章 进程与线程

2.3 同步与互斥

2.3.2 实现临界区互斥的基本方法

在这里插入图片描述

单标记法

算法思想:两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予

在这里插入图片描述
该算法可以实现“同一时刻最多只允许一个进程访问临界区”

双标志先检查法

算法思想:设置一个布尔型数组flag[],数组中各个元素用来标记各进程想进入临界区的意愿,比如“flag[0] = ture”意味着0号进程P0现在想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志flage[i]设为true,之后开始访问临界区
在这里插入图片描述
双标志先检查法的主要问题是:违反“忙则等待”原则
原因在于,进入区的“检查”和“上锁”两个处理不是一气呵成的。“检查”后,“上锁”前可能发生进程切换

双标志后检查法

算法思想:双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先“上锁”后“检查”的方法,来避免上述问题。
在这里插入图片描述
因此,双标志后检查法虽然解决了“忙则等待”的问题,但是又违背了“空闲让进”和“有限等待”原则,会因各进程都长期无法访问临界资源而产生“饥饿”现象

Peterson算法

算法思想:结合双标志法、单标志法的思想。如果双方都争着想进入临界区,那可以让进程尝试“谦让”。做一个有礼貌的进程。
在这里插入图片描述
在这里插入图片描述
Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则

进程互斥的硬件实现方法

在这里插入图片描述

中断屏蔽方法

利用“开/关中断指令”实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况)
在这里插入图片描述
优点:简单、高效
缺点:不适用于多处理机;只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)

TestAndSet指令

简称TS指令,或者TSL(TestAndSetLock)指令
TSL指令是用硬件实现的,执行过程不允许被中断,只能一气呵成。以下仅是用c描述的逻辑
在这里插入图片描述
若刚开始lock是false,则TSL返回的old值为 false,while循环条件不满足,直接跳过循环,进入临界区。若刚开始lock是true,则执行TLS后old返回的值为true,while循环条件满足,会一直循环,直到当前访问临界区的进程在退出区进行“解锁”。
相比软件实现方法,TSL指令把“上锁”和“检查”操作用硬件的方式变成了一气呵成的原子操作。
优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境
缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致“忙等”

Swap指令

有的地方也叫Exchange指令,或简称XCHG指令
Swap指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是c描述的逻辑
在这里插入图片描述
逻辑上来看Swap和TSL并无太大区别,都是先记录下此时临界区是否已经被上锁(记录在old变量上),再将上锁标记lock设置为true,最后检查old,如果old为false则说明之前没有别的进程对临界区上锁,则可跳出循环,进入临界区。
优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,
优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞;适用于多处理机环境
缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用cpu并循环执行tsl指令从而导致“忙等”。

2.3.3 互斥锁

解决临界区最简单的工具就是互斥锁。一个进程在进入临界区时应获得锁;在退出临界区时释放锁。函数acquire()获取锁,而函数release()释放锁。
每个互斥锁有一个布尔变量available,表示锁是否可用。如果锁是可用的,调用acquire()会成功,且锁不再可用。当一个进程试图获取不可用的锁时,会被阻塞,直到锁被释放。
在这里插入图片描述
acquire()或release()的执行必须是原子操作,因此互斥锁通常采用硬件机制来实现。
互斥锁的主要缺点是忙等待,当有一个进程在临界区中,任何其他进程在进入临界区时必须连续循环调用acquire()。当多个进程共享同一个CPU时,就浪费了CPU周期。因此,互斥锁通常用于多处理器系统,一个线程可以在一个处理器上等待,不影响其他线程的执行。
需要连续循环忙等的互斥锁,都可称为自旋锁(spin lock),如TSL指令、swap指令、单标志法

特性:

  • 需忙等,进程时间片用完才下处理机,违反“让权等待”
  • 优点:等待期间不用切换进程上下文,多处理器系统中,若上锁的时间短,则等待代价很低
  • 常用于多处理器系统,一个核忙等,其他核照常工作,并快速释放临界区
  • 不太适用于单处理机系统,忙等的过程中不可能解锁

在这里插入图片描述

2.3.4 信号量

在这里插入图片描述
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步

信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量

原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题

一对原语:wait(S)原语和signal(S)原语,可以把原语理解为我们自己写的函数,函数名分别为wait和signal,括号里的信号量S其实就是函数调用时传入的一个参数。

这两个原语经常简称为P、V操作。因此常把这两个操作分别写为P(S)、V(S)

整型信号量

用一个整数型的变量作为信号量,用来表示系统中某种资源的数量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

记录型信号量

即记录型数据结构表示的信号量
在这里插入图片描述
P(S)、V(S),这对原语可用于实现系统资源的“申请”和“释放”
S.value的初值表示系统中某种资源的数目

对信号量S的一次P操作意味着进程请求一个单位的该类资源,因此需要执行S.value–,表示资源数减一,当S.value<0时表示该类资源已分配完毕,因此进程应调用block原语进行自我阻塞(当前运行的进程从运行态-》阻塞态),主动放弃处理机,并插入该类资源的等待队列S.L中。可见,该机制遵循了“让权等待”原则,不会出现“忙等”现象

对信号量S的一次V操作意味着进程释放一个单位的该类资源,因此需要执行S.value++,表示资源数加一,若加一后仍是S.value <=0,表示依然有进程在等待该类资源,因此应调用wakeup原语唤醒等待队列中的第一个进程(被唤醒进程从阻塞态->就绪态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安利上榜福布斯中国客户服务企业

9月25日至27日&#xff0c;福布斯中国、中国电子商会、保定市人民政府联合主办的“数智化服务产业发展论坛暨2022福布斯中国客户服务企业Top 100评选”在保定举办。活动通过剖析企业经营能力、企业服务能力、客服运营能力、企业发展潜力等多方面数据和信息&#xff0c;对数智化…

CH34X-MPHSI高速Master扩展应用—I2C设备调试

一、前言 本文介绍&#xff0c;基于USB2.0高速USB转接芯片CH347&#xff0c;配合厂商提供的USB转MPHSI&#xff08;Multi Protocol High-Speed Serial Interface&#xff09;Master总线驱动&#xff08;CH34X-MPHSI-Master&#xff09;为系统扩展I2C总线的用法&#xff0c;除…

python字符串前加r、f、u、l 的区别

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&#xff0c;直接在文末名片自取就可 f-strings 是…

Kubernetes基础(三)-Service外部网络访问方式

1 概述 NodePort、LoadBalancer 和 Ingress 都是将集群外部流量导入到集群内的方式&#xff0c;只是实现方式不同。以下是三种方式的工作原理 注意&#xff1a;这里说的每一点都基于Google Kubernetes Engine。如果用 minikube 或其它工具&#xff0c;以预置型模式&#xff08…

基于nodejs+vue学生成绩动态追踪管理系统_x3ime-

这个功能模块用来让工作人员进行后端登录。管理人员通过网站。在输入自己的用户名和密码、角色进行登录&#xff0c;登录后管理人员就可以对后台的信息相关的操作。 首先&#xff0c;设计后端管理的登陆页面。对页面的各个板块进行详细的设计&#xff0c;规划它们的字体大小&am…

数据存储——(探究内存里的秘密)

内存中的数据是代码的基因&#xff0c;相当于人体中的DNA。 你看代码就是看内存&#xff0c;因此了解内存中的数据存储十分有必要。 内容较多&#xff0c;制作不易&#xff0c;多多点赞支持一下&#xff0c;我自己会总结科班和it培训班的精华共享。 下面的图片有代码和解释 内…

钡铼BL302与PLC:提升酿酒业效率与品质的利器

啤酒是人类非常古老的酒精饮料&#xff0c;是水和茶之后世界上消耗量排名第三的饮料。 啤酒在生产过程中主要有制造麦芽、粉碎原料、糖化、发酵、贮酒後熟、过滤、灌装包装等工序流程。需要用到风选机、筛分机、糖化锅、发酵设备、过滤机、灌装机、包装机等食品机械设备。这些食…

西门子S7协议及报文格式详解

一、简介 S7Comm&#xff08;S7 Communication&#xff09;是西门子专有的协议&#xff0c;是西门子S7通讯协议簇里的一种。 S7通信协议是西门子S7系列PLC内部集成的一种通信协议&#xff0c;是S7系列PLC的精髓所在。 它是一种运行在传输层之上的&#xff08;会话层/表示层/应…

广州华锐互动:VR结绳逃生训练模拟真实火灾场景,增强训练沉浸感

随着科技的发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已被广泛应用到各个领域&#xff0c;其中包括消防训练。VR消防结绳训练是一种创新的消防训练方式&#xff0c;它通过虚拟现实技术模拟真实的灭火场景&#xff0c;使消防人员能够在无风险的环境中进行高强度的…

stable diffusion和gpt4-free快速运行

这是一个快速搭建环境并运行的教程 stable diffusion快速运行gpt快速运行 包含已经搭建好的环境和指令&#xff0c;代码等运行所需。安装好系统必备anaconda、conda即可运行。 stable diffusion快速运行 github: AUTOMATIC1111/稳定扩散网络UI&#xff1a;稳定扩散网页用户界…

2024新款进销存系统erp管理系统

环境要求 服务器系统 Linux、Unix、Mac、Windows web服务器 Apache、Nginx、IIS、其他 MySQL版本 5.7 PHP版本 8.0 采购价格 当前商品如进行过采购&#xff0c;则采购价格列内会出现价格信息&#xff0c;及采购的历史价格&#xff0c;点击后面的图标进入历史信息页面。 库存…

OJ练习第182题——字典树(前缀树)

字典树&#xff08;前缀树&#xff09; 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接&#xff1a;208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…

SPI—读写串行FLASH

一、SPI协议简介 SPI协议是由摩托罗拉公司提出的通讯协议&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;即串行外围设备接口&#xff0c;是一种高速全双工的通信总线。它被广泛的使用在ADC、LCD等设备与MCU之间&#xff0c;要求通讯速率比较高的场合。 SP…

实验室信息管理系统(LIMS)全套源码,ASP.NET Dotnet 3.5 +EXT.NET+MSSQL 2018

实验室信息管理系统&#xff08;LIMS)源码 检测实验室LIMS系统全套源码 技术架构&#xff1a;ASP.NET Dotnet 3.5 EXT.NETMSSQL 2018 实验室信息管理系统&#xff08;LIMS)能够完成实验室数据和信息的收集、分析、报告和管理的系统。它是现代实验室综合管理的一种理念、技术、方…

【Nuxt】01 什么是SSR 服务端渲染

前言 在当前的前端开发工作中&#xff0c;我们见到最多的三种渲染方式&#xff0c;如下&#xff1a; CSR&#xff1a;Client Side Rendering&#xff0c;客户端&#xff08;通常是浏览器&#xff09;渲染&#xff1b;SSR&#xff1a;Server Side Rendering&#xff0c;服务端…

如何一键提取微信背景图?

微信图文中的背景图&#xff0c;就像室内装修中的墙纸。使用不同颜色、图案的背景图能让文章更有质感&#xff0c;更立体&#xff0c;能给读者带来不一样的视觉体验。那看到其他公众号用的背景图很好看&#xff0c;自己也想用&#xff0c;怎么办&#xff1f;&#xff08;以速排…

国货疯抢流量,B站接连爆发800万播放实现破圈

近日&#xff0c;“79元商战”的消息洗刷全平台&#xff0c;众多国货品牌的“不容易”开始被越来越多的消费者注意到&#xff0c;消费者们自发性地开始重新审视真正做产品的国货品牌们&#xff0c;并为之全力支持。有网友笑称&#xff1a;这“泼天的富贵”终于落到了国货品牌的…

软信天成:元数据的干货分享!建议点赞收藏

元数据&#xff08;Metadata&#xff09;为描述数据的数据&#xff08;data about data&#xff09;&#xff0c;主要是描述数据属性&#xff08;property&#xff09;的信息&#xff0c;用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。简单来讲&#xff0c;元数…

golang工程——grpc一元请求与流请求

唉&#xff0c;难顶&#xff0c;像块砖一样到处搬。又跑去golang技术栈的项目俩月 本篇博客多有参考&#xff0c;记录一下近期学习 rpc、grpc原理 grpc 是一项进程间通信技术&#xff0c;可以用来连接、调用、操作和调试构建分布式程序&#xff0c;调用过程如同调用函数一样&…

【剑指Offer】77.按之字形顺序打印二叉树

题目 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#xff1a;0≤n≤1500,树上每个节点的val满足 ∣val∣<1500 要求&#xff1a;空间复杂度…