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

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

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

并发中,为了确保并发下的数据完整性,我们有一系列的同步方法,其实这些就是为了实现互斥性!对临界区程序的互斥性。有三种方法:
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)的更多相关文章

  1. 操作系统精髓与设计原理(九)——I/O管理和磁盘调度

    文章目录 I/O设备 I/O功能组织 直接存储器访问 操作系统设计问题 设计目标 IO功能的逻辑结构 I/O缓冲 单缓冲 双缓冲 循环缓冲 缓冲的作用 磁盘调度 磁盘性能参数 磁盘调度策略 先进先出 ...

  2. 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记

        系列文章目录:     <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介  CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...

  3. MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  4. 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍

    1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...

  5. 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术

    在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...

  6. 深入探索Android热修复技术原理读书笔记 —— 资源热修复技术

    该系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 1 普遍的实现方式 Android资源的热修复,就 ...

  7. 深入探索Android热修复技术原理读书笔记 —— so库热修复技术

    热修复系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 深入探索Android热修复技术原理读书笔记 ...

  8. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  9. Java并发编程的艺术读书笔记(1)-并发编程的挑战

    title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...

随机推荐

  1. JQuery之事件处理

    JQuery不支持捕获模型 冒泡模型解析 <body> <div> <input id="bntShow" type="button&quo ...

  2. Unity插件 - MeshEditor(六) 变形动画状态机

    变形动画状态机--MeshAnimator,是针对MeshAnimation的状态管理器,有大量类似Unity animator的功能,但MeshAnimator操作会更加简便,更加直观,居家旅(zh ...

  3. Oracle 总账年终结算流程

     1.Oracle 总账应用中年终结算流程包含在开启/关闭期间程序里.当用户开启新一年的第一个期间,开启/关闭期间程序中的"gloire" 流程会完成传送所有收入及支出(损益表 ...

  4. 查看LOV对应查询语句的研究

    一.获取当前会话id 1.方法一 tools: Help > About 2.方法二 打开个性化定义界面(如果没有权限,到系统配置文件设置中,查看是否是"隐藏诊断菜单"被设置 ...

  5. Material Design Library 23.1.0的新变化与代码实战

    Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView ...

  6. Unity StrangeIoC HelloWorld

    unity有一个叫StrangeIoC的框架插件,这里写了一个使用StrangeIoC的HelloWorld,比他自带的demo更为简单,方便理解 1.插件下载,在Asset Store直接搜索Str ...

  7. 12.3、Libgdx的图像之截屏

    (官网:www.libgdx.cn) 接下来的示例说明怎样进行截屏并且保存为PNG格式. public class ScreenshotFactory { private static int cou ...

  8. Demand Side Platform

    DSP特点: DSP不是从网络媒体那里包买广告位,也不是采用CPD(Cost Per Day)的方式获得广告位:而是从广告交易平台(AdExchange)来通过实时竞价的方式获得对广告进行曝光的机会, ...

  9. PA 项目关联项目经理

    ---- 项目关联项目经理 DECLARE p_project_id NUMBER := 155233; l_project_role_id NUMBER := ''; p_employee_id N ...

  10. 06_Android中ArrayAdapter的使用

     1 目标界面 2 编写AndroidManifest.xml文件 <?xml version="1.0" encoding="utf-8"?> ...