<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(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个等。
<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)的更多相关文章
- 操作系统精髓与设计原理(九)——I/O管理和磁盘调度
文章目录 I/O设备 I/O功能组织 直接存储器访问 操作系统设计问题 设计目标 IO功能的逻辑结构 I/O缓冲 单缓冲 双缓冲 循环缓冲 缓冲的作用 磁盘调度 磁盘性能参数 磁盘调度策略 先进先出 ...
- 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记
系列文章目录: <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介 CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...
- MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...
- 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术
在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...
- 深入探索Android热修复技术原理读书笔记 —— 资源热修复技术
该系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 1 普遍的实现方式 Android资源的热修复,就 ...
- 深入探索Android热修复技术原理读书笔记 —— so库热修复技术
热修复系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 深入探索Android热修复技术原理读书笔记 ...
- Java并发编程的艺术读书笔记(2)-并发编程模型
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...
- Java并发编程的艺术读书笔记(1)-并发编程的挑战
title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...
随机推荐
- 14 Fragment 碎片总结
Fragment 碎片 一, Fragment是什么? Android 3.0以后出现的 Api11 以上 Activity的组成部分 Fragment(小的Activity) Fragment可以显 ...
- ExtJS学习(一)Ext自定义类实现
工作中项目需要extjs,所以学习一下,做个笔记防止遗忘了.以后回忆起来也方便. 首先下载extjs官网地址:http://extjs.org.cn/ 下载以后的目录结构: 先写一个入门的程序吧自定义 ...
- UNIX网络编程——带外数据小结
TCP没有真正的带外数据,不过提供紧急模式和紧急指针.一旦发送端进入紧急模式,紧急指针就出现在发送到对端的分节中的TCP首部中.连接的对端收取该指针是在告知接收进程发送端已经进入紧急模式,而且该指针指 ...
- python的u'字符串"(字符编码):字符串前有u,表示字符串以unicode格式存储
举个例子 >>> s = u'\u6ce8\u91ca' >>> s u'\u6ce8\u91ca' >>> print s 注释 >> ...
- Android初级教程进程间的通信AIDL
在介绍跨程序进程间通信AIDL前,先看一下本程序activity与某个服务是怎么绑定在一起进行交互的. 需求:服务有两个方法.分别是播放音乐与停止播放音乐.该程序的活动要访问这两个方法,在activi ...
- 【Unity Shaders】Vertex & Fragment Shader入门
写在前面 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface Shader中实现描边效果的弊端,也就是只对表面平缓的模型有效.这是因为我们是依赖法线和视角的点乘结果来进行描边判 ...
- 安卓中的事件分发机制之View控件
前言:Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent e ...
- [译]百里挑一:21个优质Swift开源App
Mybridge AI根据代码质量和start排名从900多个开源项目中选出21个开源项目. 1:Firefox iOS [Official] Firefox iOS app built in Swi ...
- 1021. Deepest Root (25) -并查集判树 -BFS求深度
题目如下: A graph which is connected and acyclic can be considered a tree. The height of the tree depend ...
- unity实现玻璃效果
一.使用Cubemap,做一个假反射 shader代码如下: Shader "Custom/glassShader" { Properties { _MainColor(" ...