【重学计算机】操作系统D6章:并发程序设计
1. 并发程序的基本概念
- 程序顺序性
- 内部顺序性:CPU严格按照顺序执行指令
- 外部顺序性:程序员设计程序时往往用顺序设计的思想
- 顺序程序特性
- 程序执行的顺序性
- 计算环境的封闭性: 程序执行时犹如独占资源
- 计算结果的确定性
- 计算过程的可再现性
- 并发进程
- 无关的并发进程:一组并发进程,在不同变量集上运行
- 交往的并发进程:一组并发进程,共享某些变量,相互影响
- 并发进程制约关系
- 进程互斥:争夺某一个资源
- 进程同步:共同完成某一个任务,协调先后顺序
- 发生问题:
- 与时间有关的错误:结果错误、永远等待
- 临界区:
- 临界资源:一次只能被一个进程使用的资源(互斥共享变量)
- 临界区:是个程序段,是并发进程中与互斥共享变量相关的程序段
- 相关的临界区:两个进程的临界区有相同的临界资源(必须互斥进入)
- 问题:
- 多个并发进程访问临界资源存在制约关系
- 如果两个进程同时处在相关的临界区,会发生与时间有关的错误
- 临界区管理的要求:
- 一次至多允许一个进程停留在相关临界区
- 一个进程不能无限制停留在临界区内
- 一个进程不能无限制等待进入临界区内
- 临界区嵌套使用
2. 并发程序控制和问题
- 临界区管理实现:
- 思路:判断锁和获取锁要作为原子操作,不然会死锁或时间错误
- 实现:
- 原子指令:测试并建立锁指令、对换指令(忙式等待,效率不高)
- 中断控制:进出临界区时开关中断,这样临界区执行时就不会被中断,自然实现了原子性
- 这个时操作系统的原语,是操作系统解决这个问题的办法
- 不建议用户程序使用,因为无法保证程序员设计出短小精悍的原语
- PV操作:用信号量,“申请-等待队列-中断恢复”
- 生产者消费者问题:
- 进程间通信
- 信号量:低级通信方式
- 信件:进程通信机制(直接通信、间接通信)
- 基于流:多个进程共同使用一个缓冲区
- RPC:远程过程调用
- 死锁
- 概念:两个进程分别等待对方占有的资源
- 死锁的产生
- 互斥:进程互斥地使用资源
- 占有和等待:一个进程得不到资源,就等待且不释放已有资源
- 不剥夺:进程不能从另一个进程抢走资源
- 循环等待:每个进程都等待它前一个进程所持有的资源
- 死锁的防止
- 破坏上述四个条件之一即可
- eg. 层次分配:资源分成多个层次,一个进程获得某个资源后只能获得比他层次更高的资源
- 死锁的避免:银行家算法
- 死锁的检测:
算法:warshall闭包
【重学计算机】操作系统D6章:并发程序设计的更多相关文章
- 【重学计算机】操作系统D1章:计算机操作系统概述
1. 计算机软硬件系统 冯诺伊曼结构 以运算单元为核心,控制流由指令流产生 程序和数据存储在主存中 主存是按地址访问,线性编址 指令由操作码和地址码组成 数据以二进制编码 其他:参考<重学计算机 ...
- 【重学计算机】操作系统D3章:存储管理
1. 存储管理的基本概念 逻辑地址:用户地址,从零开始编号 一维逻辑地址:(地址) 二维逻辑地址:(段号: 段内地址) 主存储器的复用方式 按分区:主存划分为多个固定/可变分区,一个程序占一个分区 按 ...
- 重学js之JavaScript 面向对象的程序设计(创建对象)
注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基 ...
- 【重学计算机】操作系统D4章:设备管理
1. IO的控制方式 演进过程:轮询 --> 中断 --> DMA --> IO通道 经典布局:南北桥 PS:详见<计算机组成原理> 2. IO的实现 软件实现层次:硬件 ...
- 【重学计算机】操作系统D2章:处理器管理
1. 指令与处理器模式 指令执行周期:取指.译码.执行 指令分类(根据权限) 特权指令:只能被操作系统内核使用(启动IO,置PC值) 非特权指令:所有程序都能使用 处理器模式: 共有四种:0内核模式, ...
- 【重学计算机】操作系统D5章:文件系统
1. 文件系统 文件系统概述 文件的组织: 逻辑结构:流式.记录式 物理结构:顺序.连接.直接.索引 文件的存取:顺序.直接.索引 文件的控制:逻辑控制.物理控制 文件的使用:打开.关闭.读.写.控制 ...
- 【重学计算机】机组D6章:中央处理器
1. CPU的组成与功能 2. 数据通路 概念:执行部件间传送信息的路径,分共享通路(总线)和专用通路 抽象模型:时钟驱动下,A --> 组合逻辑 --> B D触发器定时模型: 时钟触发 ...
- 【重学计算机】机组D4章:存储系统
1. 存储系统层次结构 主存速度缓慢的原因:主存增速与CPU不同步,执行指令期间多次访问主存 主存容量不足的原因: 存在制约主存容量的技术因素:如由CPU.主板等相关技术指标规定了主存容量 应用对主存 ...
- 【重学计算机】计组D1章:计算机系统概论
1.冯诺依曼计算机组成 主机(cpu+内存),外设(输入设备+输出设备+外存),总线(地址总线+数据总线+控制总线) 2.计算机层次结构 应用程序-高级语言-汇编语言-操作系统-指令集架构层-微代码层 ...
随机推荐
- SublimeText3常用快捷键和优秀插件
SublimeText3常用快捷键和优秀插件 SublimeText是前端的一个神器,以其精简和可DIY而让广大fans疯狂.好吧不吹了直入正题 -_-!! 首先是安装,如果你有什么软件管家的话搜一下 ...
- 谈谈书本《c#物联网程序设计基础》中的技术瑕疵,如果你将要读本书,请进来看看!
今天去书店看到一本名为<c#物联网程序设计基础>的书,对物联网感兴趣的我抓起来就看,书中的项目都是上位机开发项目,较简单,如果物联网开发只是这样,看起来我做物联网开发也是绰绰有余.这边书我 ...
- ElasticSearch本地调测环境构建
ElasicSearch版本:6.0.0:https://github.com/elastic/elasticsearch.git 1:安装JVM(JVM1.8以上) 2:安装gradle(3.3以上 ...
- Python_正则表达式样例
''' 正则表达式是字符串处理的有力工具和技术,正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串, 主要用于字符串处理,可以快速.准确地完成复杂的查找.替换等处理要求. 正则表达式由元字符 ...
- Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载)
Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载) 业务需求: 对于一个B2B的生鲜电商平台,对于买家而言,他需要更加快速的购买到自己的产品,跟自己的餐饮店不相关的东西,他是不关心的,而 ...
- JS方法:数字转换为千分位字符
/** * 数字转为千分位字符 * @param {Number} num * @param {Number} point 保留几位小数,默认2位 */ function parseToThousan ...
- SSM-Spring-10:Spring中cglib动态代理
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 何为动态代理,就不扯皮了,上一篇博客刚刚提到,那cglib动态代理又怎么写,我拿个和上个例子相似的案例来写 具 ...
- 数据结构 之 并查集(Disjoint Set)
一.并查集的概念: 首先,为了引出并查集,先介绍几个概念: 1.等价关系(Equivalent Relation) 自反性.对称性.传递性. 如果a和b存在等价关系,记 ...
- 基于Emit实现的C#版本的BeanCopier
在java的技术栈当中,著名的Cglib库里面有一个BeanCopier,这个类的功能就是可以完成两个对象的属性复制工作(哪怕属于两个不同的类). 今天本人通过.net内置的System.Reflec ...
- Yii 1.1 请求报400错误
Yii的action可以带参数,比如: class PostController extends CController { public function actionCreate($categor ...