互斥,同步,信号量,管程概述
来源:互联网 发布:网络三字经全文解释 编辑:程序博客网 时间:2024/05/21 17:48
本文为阅读操作系统原理及网上博客的笔记及自己的总结,以备查阅回顾
操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。
互斥:多个进程不能同时使用同一个资源;竞争使用临界资源;导致死锁(两进程临界资源相互依赖却同时被占用),饥饿(有些进程永远执行不到)
同步:一个进程的执行受其他进程的影响,需要其他进程的某些内容作为继续执行的依据;
异步:两进程执行完全不相互影响;
通信:多个进程间交换信息;比如互斥的信息,同步的信息;
临界(互斥)资源:一次只允许一个进程使用的资源
临界区:进程中访问临界资源的代码段
进入区:检查临界资源,设置标志
退出区:恢复访问标识
剩余区:上述三区之外
互斥和同步并不对立,互斥也是一种同步;
实现进程互斥的同步机制准则:空闲让进,忙则等待,有限等待,让权等待
互斥实现的硬件方法:
1. 禁止中断,代价高,多CPU中对其他CPU不起作用
2. 专用机器指令
TS指令(Testand Set),类似酒店房间门口需打扫标志,有的,才可以进去打扫
描述函数:int ts(int lock)
{
Int ts =lock;
Lock=1;
Return ts;
}
Swap指令
增加了一个管理员老大爷,保管者唯一的钥匙,取到钥匙才可以进去(),用完退回老大爷
硬件方法的优点:适用范围广,简单,支持多临界区
缺点:会死等,有可能饥饿死锁
软件方法:
简单的设置一个标识是不妥当的,有可能同时进入需增加额外的标识,麻烦,且面对多进程时表述困难
信号量(信号灯 semaphore)引入:Dijkstra提出,(熟悉不,想想著名的Dijkstra算法)
是一个结构体,包含信号量的值与指向等待该信号的队列的指针
其由操作系统维护,用户只能初始化,与使用两原语(前面介绍过原语)
P原语:执行信号量减一,小于0,进程阻塞,插入等待队列
V原语:信号量加一,小于等于0,唤醒等待队列进程
注意,信号量不止表示资源的占用情况,还可以表示等待队列中进程的数目(信号量小于0时,其绝对值表示)
管程:
PV操作分散在多个进程中,管理不便,使用有可能不当
引入新的进程同步工具-----管程
其定义了一个包含资源的数据结构,和一组操作,能同步进程,改变数据(挺像C++的类的)
管程内部数据只由内部函数访问,函数分内外;外部函数(entry)是对外接口
管程每次只允许一个进程进入;故管程入口处有一入口等待队列
管程内部的唤醒,出现多个等待进程,组成紧急等待队列,优先级高于入口队列,且最新唤醒的先执行
管程的互斥访问由编译程序在编译时自动添加。是一个语言成分,是操作系统的固有成分
管程内部不同等待原因的变量c可以进行操作
cwaitn(c)操作:紧急等待队列有进程,调出执行第一个,否则释放管程互斥权,本进程进入c变量等待队列
csignal(c)操作:C非空,唤醒第一个等待进程,本进程进入紧急等待队列尾部
- 互斥,同步,信号量,管程概述
- 操作系统清华大学版笔记(十) 信号量、管程、条件互斥、经典同步问题(读者写者、哲学家问题)
- 多进程同步,信号量、管程
- 多进程同步,信号量、管程
- 信号量和同步互斥
- 信号量的互斥同步
- 线程同步(信号量,互斥,条件变量)
- C++ 信号量 多线程同步互斥
- PV操作、信号量、同步与互斥
- linux 线程互斥同步By信号量
- C++ 信号量 多线程同步互斥
- 信号量------线程的同步与互斥
- linux信号量---互斥与同步
- 信号量的互斥与同步
- linux互斥与同步 之 信号量 读写信号量
- 操作系统(四)同步互斥机制&管程&进程间通信
- 并发与同步、信号量与管程、生产者消费者问题
- 互斥与同步——概述
- Android融云会话及会话列表的实现
- C/C++ 中const关键字总结
- 数字图像处理:基于MATLAB的车牌识别项目
- Linux常用命令学习----(初级命令)
- 442. Find All Duplicates in an Array--找到数组中出现两次的数字
- 互斥,同步,信号量,管程概述
- Java面试题集(第一部分)(1-50)
- HTML==小试牛刀
- [Cordova/Phonegap] 一位程序猿朋友封装的Cordova插件
- BZOJ 1192-鬼谷子的钱袋
- linux部署服务器遇到的问题(一)
- 巧用短路逻辑优化代码质量
- Android蓝牙健康设备开发:Health Device Profile(HDP)
- jq的函数调用!!