5.同步互斥机制
来源:互联网 发布:淘宝试用申请成功 编辑:程序博客网 时间:2024/06/05 22:41
5.1进程并发执行
并发是所有问题产生的基础,并发是操作系统设计的基础。
从进程的特征出发:(1)并发:a.进程的执行是间断性的;b.进程的相对执行速度不可预测
(2)共享:进程/线程共享某些资源,使用过程中,会产生制约性
(3)不确定性:进程执行的结果与其执行的相对速度有关,是不确定的
5.2进程互斥
竞争条件:两个或多个进程在读写某些共享数据的时候,而最后的结果取决于进程运行的精确时序。
进程互斥:由于各进程要求使用共享资源(变量、文件等),而这些资源需要排他性使用,各进程之间竞争使用这些资源,这一关系成为进程互斥。
临界资源(critical resource):系统中某些资源一次只允许一个进程使用,这样的资源成为临界资源或互斥资源或共享变量。
临界区(互斥区)(critical section):各个进程中对某个临界资源(共享变量)实施操作的程序片段。
例:当进程A在临界区中时,进程B不能进入临界区。
临界区使用原则:
(1)没有进程在临界区时,想进入临界区的进程可进入
(2)不允许两个进程同时处于其临界区中
(3)临界区外运行的进程不得阻塞其他进程进入临界区
(4)不得使进程无限期等待进入临界区
实现进程互斥的方案:
(1)软件方案:Dekker解法,Peterson解法
a.Dekker算法:
P: Q:... ... ... ...pturn=true; qturn=true;while(qturn){ while(pturn){ if(turn==2){ if(turn==1){ pturn=false; qturn=false; while(turn==2); while(turn==1); pturn=true; qturn=true;}} }}临界区 临界区turn=2; turn=1;pturn=false; qturn=false;... ... ... ...在两个进程都想进又都谦让的时候,让turn决定谁进CPU。
b.Peterson算法——解决了互斥访问的问题,而且克服了强制轮流法的缺点,可以完全正常地工作
进程i想进入临界区时,调用enter_region(i)判断是否可以安全进入临界区,如果可以,则当前函数执行完进入临界区,调用时,使用进程号,执行完成后,调用leave_region(i);
(2)硬件方案:屏蔽中断、TSL(XCHG)指令
a.“开关中断”指令:执行“关中断”指令——临界区操作——执行“开中断”指令。
特点:简单高效,代价高,限制CPU并发能力(临界区大小),不适用于多处理器,适用于操作系统本身,不适于用户进程。
b.“测试并加锁”指令。TSL指令:TEST AND SET LOCK。
c.交换指令。
5.3进程同步——协作关系
进程同步:系统中多个进程中发生的时间存在某种时序关系,需要相互合作,共同完成一项任务。具体地说,一个进程运行到某一点时,要求另一伙伴进程为他提供消息,在未获得消息之前,该进程进入阻塞态,获得消息后被唤醒进入就绪态。
5.4一种经典的进程同步机制——信号量及P\V操作
信号量:一个特殊变量,用于进程间传递信息的一个整数值。定义如下:
structure semaphore
{
int count;
queueType queue;
}
信号量说明:semaphore s;对信号量可实施的操作:初始化,p和v(P,V分别是荷兰语的test和increment)。
(1)P操作:
P(s)
{s.count--;
if(s.count<0)
{该进程状态置为阻塞状态;
将该进程插入相应的等待队列s.queue末尾;
重新调度;
}
}
(2)V操作
V(s)
{s.count++;
if(s.count<=0)
{唤醒相应等待队列s.queue中等待的一个进程;
改变其状态为就绪态,并将其插入就绪队列;
}
}
有关说明:P,V操作为原语操作。
用P,V操作解决进程间互斥问题:
(1)分析并发进程的关键活动,划定临界区;
(2)设置信号量mutex,初值为1;
(3)在临界区前实施P(mutex)
(4)在临界区之后实施V(mutex)。
5.5 用信号量解决读者 /写者问题
问题描述:多个进程共享一个数据区,这些进程分为两组:(1)读者进程:只读数据区中的数据(2)写者进程:只往数据区写数据;
要求满足条件:
(1)允许多个读者同时执行读操作;
(2)不允许多个写者同时操作;
(3)不允许读者、写者同时操作。
解决问题时,必须要明确是哪一类读者写者问题。
第一类读者写者问题:读者优先。则
(1)如果读者执行:
a.无其他读者、写者,该读者可以读;
b.若已有写者等,但有其他读者正在读,则该读者也可以读;
c.若有写者正在写,该读者必须等。
(2)如果写者执行:
a.无其他读者、写者,该写者可以写;
b.若有读者正在读,该写者等待;
c.若有其他写者正在写,该写者等待。
- 5.同步互斥机制
- 同步互斥机制1
- DPDK-同步互斥机制
- linux ------ 资源互斥与同步机制
- 多线程中的互斥与同步机制
- 内核机制之互斥与同步
- 线程的同步、互斥机制
- 同步互斥机制2 进程通信机制
- 同步互斥机制2-进程通讯机制
- VxWorks操作系统指南(1.4) 通信、同步和互斥机制
- Java中的同步与互斥机制--synchornized学习
- 进程线程同步互斥的控制机制
- Java中的同步与互斥机制--synchornized学习
- 从同步互斥机制到智能指针使用成本
- 全面解析Linux内核的同步与互斥机制
- Linux 线程同步机制:互斥、读写锁、条件变量
- 线程同步机制有临界区、互斥、信号量优缺点
- 解析Linux内核的同步与互斥机制(一)
- 同步,异步,阻塞,非阻塞概念理解
- 人工智能与机器学习
- JS实现计算器(简易版)_作业1
- 回头再学Java系列-前言
- 【剑指offer】面试题16:数值的整数次方
- 5.同步互斥机制
- Socket 长连接 短连接 心跳 JAVA SOCKET编程
- DRBD详解
- 使用少量数据构建强大图像分类模型
- app自动化测试6--常用的api
- Scrapy爬虫局部Selector的选取办法
- 循环语句
- MVC原理和MVC模式的优缺点
- 变量的声明、定义、extern、static总结