<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(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: 读书笔记 --- ...
随机推荐
- 【VSTS 日志】VSTS 所有功能,看这个页面就够了!
随着Connect();//2015大会的结束,一大波的好消息随之而来.今天小编刚刚发现了Visual Studio Team Services / Team Foundation Server 的完 ...
- Oracle EBS R12文件系统结构(学习汇总网上资料)
Oracle EBS R12在服务器端文件结构如下: 顶层目录下面分为 1)inst --–跟ebs整个实例(instance)相关的配置信息以及其他信息 2) db ---主要存储DB层的信息 ...
- LINUX0.11 内核阅读笔记
一.源码目录 图1 二.系统总体流程: 系统从boot开始动作,把内核从启动盘装到正确的位置,进行一些基本的初始化,如检测内存,保护模式相关,建立页目录和内存页表,GDT表,IDT表.然后进入main ...
- Cocos2D:塔防游戏制作之旅(九)
炮塔哲学:敌人,攻击波和路径点 在创建敌人之前,让我们先为它们"铺路".敌人将沿着一系列的路径点前进,这些路径点互相连接,它们被定义为敌人在你创建的世界中移动的路径. 敌人将在第一 ...
- 实战项目:通讯录 UI—第十一天
1.推出视图的两种方式: 1.通过导航控制器push到下一个界面,使用pop返回到上一个界面 2.通过模态的形式推出视图,不需要依赖于导航控制器,通过使用present到下一个界面,通过dismi ...
- web多语言url的设计
因为项目要支持国际化,最近跟一个同事在讨论多语言版本下面url如何设计,假如我们需要支持en和cn的版本. 他倾向于支持如下的url格式,后续以格式1指代: /en/group/abc.html /c ...
- OJ题:成绩排序
题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 例示: jack 70 peter 96 Tom 70 smit ...
- ubuntu 开发环境配置及安装 nodejs
ubuntu 开发环境配置及安装 nodejs 1 安装nodejs $ sudo apt-get install build-essential $ sudo apt-get install gcc ...
- 《java入门第一季》之ArrayList集合小案例
案例一:去除集合里面的重复元素 package cn.itcast_04; import java.util.ArrayList; /* * ArrayList去除集合中字符串的重复值(字符串的内容相 ...
- Css详解之(选择器)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...