coursera 《现代操作系统》 -- 第五周 同步机制(2)
分清紧急等待队列与条件等待队列(c 链)
条件等待队列:但是进入管程的这个进程可能由于对资源的操作的过程中发现条件不成熟, 那么它就不能够继续对资源进行相应的操作。 我们以生产者、 消费者为例。 如果生产者想要调用一个 insert 的过程,去把数据放到缓冲区里头,如果缓冲区满了,那这个 放到缓冲区动作是不能完成的,因此呢这个进程,生产者进程就应该等。 等,等在哪里?我们为等待不同条件的这样一个进程设置了条件变量,也就是说如果等,等在某个条件变量上。 通过什么样的操作呢?那我们刚说通过了 wait 操作。
紧急等待队列:当一个进程调用 wait 操作,那么会等在某个条件变量上。 刚才我们已经介绍过,当一个进程等在 条件变量上的时候,它应该把管程的互斥权放开,也就是把这个门打开。 让管程外的想进入管程的进程进入 我们刚才又介绍了说,如果后面进来的进程 它调用了这些过程去对资源进行 相应的操作,在操作过程中呢,发现条件成熟了,所以呢它调用了 signal 这样一个 函数,然后呢去唤醒某个等在条件变量上的一个进程。如果唤醒的是刚才等待的这个进程, 那么在管程里头,同时就有两个进程存在了。 那么两个进程存在,我们刚才说的,那么按照HOARE 管程的语义, 后面一个进程唤醒了前面一个进程, 那么前面这个进程执行,而唤醒其他进程的这个进程它呢等待。 那等在什么地方呢?那么就 专门为它设置了一个队列,在管程内设置了一个队列。 叫做紧急等待队列。
入口等待队列
管程是互斥进入的, 如果一个进程已经调用了管程当中的某一个过程去做相应的操作, 那么后续的进程就不能再进入管程了 我们这里头用一个比较形象,一个门,就是如果一个进程已经进到管程里头来, 做相应的操作,那么其他还想进管程的,调用管程过程的这些进程就只能在管程外面等。 所以我们呢很形象地在门口画了一个队列。 我们叫做入口等待队列
MESA 管程
相比于 HOARE 管程,减少了进程切换,增加了至少一次的条件检查。由于增加了条件检查,所以出错率更小。
增加了超时设定,防止notify的进程出错,而一直处于饥饿状态,收不到信号,减小了出错率。
notify
通知条件队列上的第一个,进入等待态
broadcast
通知所有条件队列上的,进入等待态
coursera 《现代操作系统》 -- 第五周 同步机制(2)的更多相关文章
- coursera 《现代操作系统》 -- 第五周 同步机制(1)
临界区块(Critical section)指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源有无法同时被多个线程访问的特性.(不是字面意思的一个区域,是程序片段的集合) ...
- Linux kernel 同步机制
Linux kernel同步机制(上篇) https://mp.weixin.qq.com/s/mosYi_W-Rp1-HgdtxUqSEgLinux kernel 同步机制(下篇) https:// ...
- Linux内核同步机制之(五):Read Write spin lock【转】
一.为何会有rw spin lock? 在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已.spin lock严格的限制只有一个 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第五周作业
<Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别 ...
- 锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁
spinlock在上一篇文章有提到:http://www.cnblogs.com/charlesblc/p/6254437.html 通过锁数据总线来实现. 而看了这篇文章说明:mutex内部也用到 ...
- 分析.Net里线程同步机制
我 们知道并行编程模型两种:一种是基于消息式的,第二种是基于共享内存式的. 前段时间项目中遇到了第二种 使用多线程开发并行程序共享资源的问题 ,今天以实际案例出发对.net里的共享内存式的线程同步机制 ...
- Linux内核同步机制
http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环 ...
- Linux内核的同步机制
本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...
- 201771010134杨其菊《面向对象程序设计(java)》第十五周学习
第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...
随机推荐
- js bind 绑定this指向
1.示例代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT ...
- hdu 4723 How Long Do You Have to Draw(贪心)
How Long Do You Have to Draw Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- Photoshop | 快速抠头发(调整边缘/选择并遮住)
———————————————————————————————————————————— Photoshop快速抠头发(CS6中调整边缘功能,CC2017中更名为选择并遮住) - - - - - - ...
- XPage的使用示范例子
代码地址如下:http://www.demodashi.com/demo/12975.html XPage [[api][apisvg]][api] 一个非常方便的fragment页面框架 特点 支持 ...
- freemarker相关
大部分引入:http://www.blogjava.net/alinglau36/archive/2011/02/23/344970.html Freemarker操作字符串 1.substring( ...
- Atitit.异常机制的设计原理
Atitit.异常机制的设计原理 缺陷 关键是只要知晓有一个异常表的存在,try 的范围就是体现在异常表行记录的起点和终点.JVM 在 try 住的代码区间内如有异常抛出的话,就会在当前栈桢的异常表中 ...
- 摄像头驱动_摄像头驱动程序必需的11个ioctl及摄像头数据的获取过程
摄像头驱动_摄像头驱动程序必需的11个ioctl及摄像头数据的获取过程 根据虚拟驱动vivi的使用过程彻底分析摄像头驱动// 1~2都是在v4l2_open里调用1. open2. ioctl(4, ...
- MyEclipse 2013安装后要做的几件事
一.Myeclipse 2013修改字体 MyEclipse 2013是基于Eclipse3.7内核,但在Eclipse的Preferences-〉general-〉 Appearance->C ...
- FAT32和NTFS最大支持的单个文件大小分别是多大?
以前,RAID控制器和文件系统都有2TB的限制.控制器上的限制,主要是指每个LUN不能大于2TB,而磁盘组一般则没有这个限制:文件系统的限制主要是指每个分区(partition)不能大于2TB,不过3 ...
- mysql存储引擎的种类与差别(innodb与myisam)
查找数据库的存数引擎: show engines show variables like '%storage_engine%' 更改数据库的引擎更改配置文件/etc/my.cnf 改动default- ...