清华大学《操作系统》(十二):临界区与锁

多进程并发运行,导致多个进程间有资源共享,比如CPU、内存,因此存在不确定性和不可重现,可能导致多次运行结果不一致。因此操作系统需要利用同步机制在并发执行的同时,保证一些操作是原子操作。

  • 互斥是指一个进程占用了某个资源,其他进程都不能使用该资源;
  • 死锁是指多个进程各占有了一部分资源,形成了循环等待;
  • 饥饿是指其他进程轮流占用资源,一个进程一直得不到资源。

临界区

为解决进程间同步导致的这些问题,提出了一些方案。临界区是指进程中访问临界资源的一段需要互斥执行的代码。进入临界区之前需要判断能否进入,进入时需要改变标志阻止其他进程进入,进入的进程执行完成后退出时修改标志。

临界区访问规则:

  • 空闲则入,没有进程进入时可以进城;
  • 忙则等待,有进程在临界区时其他进程均不可进入;
  • 有限等待,等待进入临界区的进程不能无限制等待;
  • 让权等待,不能进入的进程应释放CPU进入阻塞状态。

临界区实现方式:

  • 禁用中断,进入临界区后不响应中端;
  • 软件方式,共享变量协调;
  • 借用操作系统提供高级的抽象方法。

显然第三种方式是可取的,其他两种都有明显的缺陷。下面对第三种方式进行介绍。

方法一:禁用中断

缺点:

  • 禁用中断后,进程无法被停止。整个系统都会为此停下来,可能导致其他进程处于饥饿状态
  • 临界区可能很长,无法确定响应中断所需的时间(可能存在硬件影响)

方法二:软件中断

       

缺点:

  • 需要两个进程间的共享数据项
  • 需要忙等待,浪费CPU时间

方法三:原子操作指令

更高级的抽象方法实际是借助硬件的同步原语来实现的。

  • 硬件提供了一些同步原语,包括中断禁用、原子操作指令等,从硬件上保证多个操作的原子性。
  • 操作系统提供更高级的编程抽象来简化进程同,。实现方式有锁、信号量。

锁是一个抽象的数据结构,由一个二进制变量(锁定/解锁)和两个操作原语(锁的请求和锁的释放)组成。二进制变量用于标志锁的状态,锁的请求使锁在被释放前一直等待,并且使进程得到锁,这两者是原子的,释放锁时唤醒其他等待锁的进程。

内部基于CPU体系结构提供的一些特殊的原子操作指令,这些指令把若干个指令合并为一次原子操作,保证不会出现部分执行的状态。这些原子操作指令包括测试和置位指令(Test-and-Set,即TS指令,返回内存地址中的值,并将其置为1)、交换指令(交换内存中的两个值)。

基于TS指令可以实现如下图所示的自旋锁,自旋锁的缺点是线程等待时消耗CPU时间。

      

针对自旋锁的问题,出现了无忙等待锁,当锁已经被占用时,将自身线程放入等待队列,并调用调度程序。当其他线程释放锁时会将所有等待中的线程重新唤醒。

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

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

相关文章

清华大学《操作系统》(十八):管程于信号量

信号量与管程也是进程间通信的方式。信号量是与锁在同一层级实现的,是操作系统提供的一种协调共享资源访问的方法。信号量由操作系统管理,操作系统作为管理者地位是高于进程的。 一、信号量 1、信号量(semaphore):是操…

Iptalbes自动封杀暴力破解(Qmail邮件系统)者的IP地址

今天发现Qmail邮件系统的maillog里面有大量的“user not found”信息,通过下面的日志不难发现,是来自同一IP的很多不同的用户连接Qmail邮件系统认证失败的信息。黑客试图通过这种方式来破解Qmail邮件系统的用户名和密码,从而来发送大量的垃圾…

安装Postman

在web和移动端开发时,常常会调用服务器端的restful接口进行数据请求,为了调试,一般会先用工具进行测试,通过测试后才开始在开发中使用。 这里介绍一下如何在chrome浏览器利用postman应用进行restful api接口请求测试。 因为&#…

清华大学《操作系统》(二十):死锁和进程通信

一、死锁 死锁:一组阻塞的进程(两个或多个),持有一种资源,等待获取另一个进程所占有的资源,而导致谁都无法执行。 可重复使用的资源: 在一个时间只能一个进程使用,且不能被删除。…

清华大学《操作系统》(二十二):文件系统

文件系统和文件: 文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能,组织、检索、读写访问数据。文件是具有符号名,由字节序列构成的数据项集合,是文件系统的基本数据单位,文件名是文件…

卡巴绿杀6 By Moshow魔手

卡巴绿杀6 By Moshow魔手 Kaspersky Anti-Virus Move-edition 6 (-_-b汗Move Edition...)【这是卡巴斯基绿色移动版本推荐用于u盘】By Moshow魔手 [url]Http://Hi.baidu.com/MoshowGame[/url]祝o(∩_∩)o...天下无毒)拥有全球最全的病毒库)拥有最快的全球剿毒反应速度) 基于稳定…

清华大学《操作系统》(二十三):I/O子系统

常见设备接口类型: 1、字符设备:键盘鼠标、串口 a.以字节为单位顺序访问 b.I/O命令通常使用文件访问接口和语义 2、块设备:磁盘、磁带、光驱 a.均匀的数据块访问 b.I/O命令通常使用文件系统接口,也可以使用内存映射访问 3、网络…

百度地图 Android SDK - 个性化地图

什么是百度个性化地图Android SDK? 百度个性化地图Android SDK是一套基于Android 2.2及以上版本号设备的应用程序接口,您能够通过该套接口实现主要的地图功能,而且能够定制地图样式,实现个性化地图。 该接口提供下面功能&#xff…

mysql读写分离_MySQL基于amoeba读写分离实验

主从复制只是一个同步数据的方式读写分离:只在主的上面写,只在从的上面读读写分离方案:【1】基于程序代码内部 (生产环境中应用最广泛,性能最好,需要开发人员来实现)【2】基于中间代理层的实现amoeda 是阿里巴巴使用的…

Django models模型

Django models模型 一. 所谓Django models模型,是指的对数据库的抽象模型,models在英文中的意思是模型,模板的意思,在这里的意思是通过models,将数据库的借口抽象成python自己的一个类。然后在python Django框架其他代…

Python内存管理以及垃圾回收机制

垃圾回收:用通俗点的语言解释就是内存管理和垃圾回收的过程. 大管家refchain 在Python的C源码中有一个名为refchain的环状双向链表,这个链表就比较厉害了,因为Python程序中一旦创建对象都会把这个对象添加到refchain这个链表中。也就是说他…

【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net

Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件,包含有丰富的Ajax运用,其前身是Coolite。 下载地址:http://www.ext.net/download/ 示例地址:http://examples.ext.net/ 1.首先下载Ext.Net,地…

面试之操作系统

基本特征 1. 并发 并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。操作系统通过引入进程和线程,使得程序能够并发运行。 2. 共享 共享是指…

mysql新增列并同时增加数据_图解MySQL | [原理解析] MySQL 为表添加列 是怎么quot;立刻quot;完成的...

在上一期图解 图解MySQL | MySQL DDL为什么成本高?中,我们介绍了:传统情况下,为表添加列需要对表进行重建腾讯团队为 MySQL 引入了 Instant Add Column 的方案(以下称为 "立刻加列" 功能)可以快速完成 为表添加列 的任务…

GCC for Win32开发环境介绍

GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器。不过,现在GCC也有了许多Win32下的移植版本。所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西…

reg型变量怎么赋值_UiPath变量介绍和使用

1 变量变量主要用于存储数据,它在RPA中扮演重要的数据传递角色,是RPA编程不可或缺的一部分。它包括变量名称和变量的值,变量的值支持多种数据类型,包括从通用值,文本,数字,数据表,时…

深度学习之概述

深度学习的应用场景 1、图像应用: 1.1 大规模(大数据量)图片识别(聚类/分类),如人脸识别,车牌识别,OCR等。人脸识别算法:① faceID ② faceNet 1.2 以图搜图,图像分割 1.3 目标检测&#xff0…

如何根据对象获取到对应的表名_Excel VBA 常用对象二

下面继续讲解上一节中未讲完的内容:Excel VBA编程中常常使用的那些对象到底是什么,如何在代码中表示它们。Worksheet对象Worksheet对象代表工作表。工作簿中的每个工作表都是一个Worksheet对象,所有Worksheet对象构成了Worksheets集合。我们使…

深度学习之 BP 算法

神经网络的一种求解W的算法,分为信号“正向传播(FP)”求损失,“反向传播(BP)”回传误差;根据误差值修改每层的权重,继续迭代。 BP算法也叫做δ算法。以三层的感知器为例(假定现在隐层和输出层均存在相同类型的激活函数…

深度学习之 RBF神经网络

RBF神经网络通常只有三层,即输入层、中间层和输出层。其中中间层主要计算输入x和样本矢量c(记忆样本)之间的欧式距离的Radial Basis Function (RBF)的值,输出层对其做一个线性的组合。 径向基函数: RBF神经网络的训练…