<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)

<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步

并发问题是所有问题的基础,也是操作系统设计的基础。并发包括很多设计问题,其中有进程间通信,资源共享与竞争,多个进程活动的同步以及分配给进程的处理器时间的。

和并发相关的关键术语:
原子操作: 一个或多个指令的序列,对外是不可分的;即没有其他进程可以看到其中间状态或者中断此操作。

并发中,为了确保并发下的数据完整性,我们有一系列的同步方法,其实这些就是为了实现互斥性!对临界区程序的互斥性。有三种方法:
1.软件方法,但是该方法被证明会增加开销与缺陷
2.硬件的支持: 专门的机器指令来处理
3.操作系统或程序设计语言提供某种级别的支持

先来讲讲专门的机器指令来处理吧。
在多处理器配置中,几个处理器共享内存。在这种情况下,不存在主从关系,处理期间的行为是无关的,表现出一种对等关系,处理器之间没有互斥的中断机制。
在硬件级别上,对存储单元的访问排斥对相同单元的其他访问。基于这一点,处理器的设计者提出了一些机器指令,用于保证两个动作的原子性,如在一个取指令周期中对一个存储器单元的读与写或者读和测试。在该指令执行的过程中,任何其它指令访问内存将被组织。而这些动作将在一个指令周期中完成。

比较和交换指令:

exchange指令

在这里说句题外话:我之前其实一直纳闷原子操作是怎么回事,原来这是处理器指令的功能,.Net中的CompareExchange()方法与上面的比较与交换指令是一样的功能,返回的约定也是一模一样。也算是解除了我的一个疑问!我写过一篇关于原子操作的文章<<使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断>>

信号量:
这是操作系统和用于提供并发性的程序设计语言机制。常用并发机制:

信号量: 用于进程间传递信号的一个整数值。在信号量上只有三中操作可以进行,初始化,递减,增加,这三中操作都是原子操作!递减可以用于阻塞一个进程,增加操作可以用于接触阻塞的一个进程。
上过操作系统的同学,如果有印象,那么应该还记得P/V操作,没有错,P/V操作就是我们的信号量。我还记得以前上课的时候,关于信号量最典型的一个示例就是生产者消费者模型,关于生产者消费者的实例应用,可以在我之前的博客里面找到。当时上课没有好好听,不以为然,听得还迷迷糊糊的,没有想到工作了的第一个项目就是应用它的场景....不说了。

关于信号量要说的只有两点:
1.
P操作: 递减
V操作: 递增

2.
生产者消费者应用:

可以看到,信号量的P/V操作是基于硬件处理器指令实现的。上图中的代码,我大概标注了下s, n , e变量的作用:
n: 是用来通知消费者的,因此初始化为0,是最合适的。
e: 限制缓冲区大小,如果生产者消费者队列为0或者已满就会阻塞相关线程
s: 一次允许多少个线程并发访问,这里设置的是1个,我们可以设置为10个等。

原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/8401214.html

时间: 2024-10-11 05:47:36

<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)的相关文章

操作系统精髓与设计原理(原书第6版)——学习笔记(9)

 2.5.4 客户/服务器模型 Windows操作系统服务.受保护子系统和应用程序都采用客户/服务器计算模型构造,客户/服务器模型是分布式计算中的一种常用模型. 客户/服务器结构的优点如下: 简化了执行体.可以在用户态服务器中构造各种各样的API,而不会有任何冲突或重复:可以很容易地加入新的API. 提高了可靠性.每个新的服务运行在内核之外,有自己的存储空间,这样可以免受其他服务的干扰,单个客户的失败不会使操作系统的其余部分崩溃. 为应用程序与服务间通过RPC调用进行通信提供了一致的方法,且

操作系统精髓与设计原理------调度概述

前言:操作系统必须为多个进程之间可能有竞争关系的请求分配计算机资源.对处理器而言,可分配的资源是处理器上的执行时间,分配的途径是"调度".调度功能必须设计成可以满足多个目标,包括公平.任何进程都不会产生饥饿.有效的使用处理器时间以及较低的开销,此外,调度中还需要考量优先级和实时期限方面.从根本上说,调度是属于队列管理,用来在排队环境中减少延迟和优化性能.(只记录了一些基本概念,细节还要回顾书) 一.调度类型 长程调度:决定加入到待执行的进程池中. 中程调度:决定加入到部分或全部在内存中

《操作系统精髓与设计原理》习题第三章

第三章习题 3.10.1关键术语 阻塞态:进程在某些事件发生之前不能执行,等待这种事件发生的状态. 退出态:操作系统从可执行进程组中释放出的进程,自身停止了,或者因某种原因被取消. 内核态:某些指令只能在特权状态下执行,而这种特权状态称为内核态. 子进程:由一个进程创建的进程,该进程的终止受父进程的影响. 中断:由外部事件引发进程挂起,CPU转而去处理发起中断的事件,并处理结束后恢复进程的执行. 模式切换:CPU由用户态和核心态之间相互切换. 新建态:进程创建时仅仅创建了对应的进程控制块而没有在

规模化微服务——《微服务设计》读书笔记

    系列文章目录:     <微服务设计>读书笔记大纲 改变思维的角度:故障无处不在 当微服务规模化后,故障是无可避免的,以往我们总是想尽力避免故障的发生,而当故障实际发生时,我们往往束手无策.我们花了很多时间在流程设计和应用设计的层面上来阻止故障的发生,但实际上很少花费时间思考如何第一时间从故障中恢复过来. 一些公司喜欢组织活动,活动当天系统会被关掉以模拟故障发生,然后不同团队演练如何应对这种情况.这些项目中最著名的是混乱猴子(Chaos Monkey),在一天的特定时间随机停掉服务器,

《微服务设计》读书笔记大纲

cha1:微服务的概念--<微服务设计>读书笔记 cha2:微服务架构师的职责--<微服务设计读书笔记> cha3:建模:确定服务的边界--<微服务设计>读书笔记 cha4:微服务集成--<微服务设计>读书笔记 服务的协作:服务间的消息传递--<微服务设计>读书笔记 cha5:拆分:分解单块系统--<微服务设计>读书笔记 cha6:部署:持续集成(CI)与持续交付(CD)--<微服务设计>读书笔记 cha7:测试--<

【重构:改善既有代码的设计】读书笔记——开篇

[重构:改善既有代码的设计]读书笔记总目录 1.重构原则 2.代码的坏味道[1] 3.代码的坏味道[2] 4.代码的坏味道[3] 5.代码的坏味道[4] 6.重构手法之Extrct Method(提炼函数).Inline Method(内联函数).Inline Temp(内联临时变量) 7.重构手法之Replace Temp With Query(以查询取代临时变量) 边写边更新吧...... 背景介绍 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码. 重构不只可以改善既有的

读书笔记-----Java并发编程实战(一)线程安全性

线程安全类:在线程安全类中封装了必要的同步机制,客户端无须进一步采取同步措施 示例:一个无状态的Servlet 1 @ThreadSafe 2 public class StatelessFactorizer implements Servlet{ 3 public void service(ServletRequest req,ServletResponse resp){ 4 BigInteger i = extractFromRequest(req); 5 BigInteger[] fact

《实时控制软件设计》读书笔记

读书笔记 在浅读过<构建之法:现代软件工程>第一章和邹欣老师的一些博文后,我对以下四个方面有了一些粗陋的认识. 一.      对软件工程的理解 <构建之法>第一章中对软件工程有着自己的理解.书中提到“软件=程序+软件工程”这一概念.同时,书中还指出软件工程包含软件需求分析.软件设计.软件构建.软件测试和软件维护这些领域.看过这些介绍后,我认为首先要弄请程序.软件.软件工程的区别.正如书中提到阿超的例子一样,程序只是完成某一项或几项简单任务的代码和数据结构集成:而软件则是能满足用户

操作系统精髓与设计--多处理器和实时调度

概述 对于多处理器调度,此处概述了多个处理器可能带来的问题和设计上的一些问题:对于实时调度,概述了两种调度方法:限时调度和速率单调调度. 1 多处理器调度 多处理器系统可以分为以下几类: 松耦合.分布式处理器.集群:有一系列相对自治的系统组成,每个处理器有自己的内存和I/O通道. 专门功能的处理器:I/O处理器时一个例子,此时有一个通用的主处理器,专门处理器受主处理器的控制,并给主处理器提供服务. 紧耦合多处理器:由一系列共享同一个内存并在操作系统完全控制的处理器组成,这里详细分析. 1.1 多