操作系统复习笔记 07 Process Synchronization 进程同步

背景:
1.对共享数据的并发访问可能导致数据的不一致性。
2.要保持数据的一致性,就需要一种保证并发进程正确执行顺序机制。
3.解决有界缓冲区问题的共享内存方法在count上存在竞争条件。
4.进程间的制约关系:
——间接制约:有些资源需要互斥使用。
——直接制约:一个进程运行到某一点是需要另一伙伴进程为它提供消息。


对于临界资源,多个进程必须互斥对它们的访问。
临界区:进程中访问临界资源的一段代码。
——实现进程对临界资源的互斥访问:各进程互斥的进入自己的临界区。
——当一个进程在临界区执行的时候,其他进程都不能进入临界区。
——临界区的访问过程:
1.进入区
2.退出区
3.剩余区


entry section
critical section
exit section 


解决临界区问题的方案:
1.互斥
2.有空让进
3.有限等待


同步机制应该遵循的准则:
1.空闲则入
2.忙则等待
3.有限等待
4.让权等待


[硬件方法]
许多系统对临界区代码提供硬件支持:
——单处理器能够禁止中断,当前执行的指令不被抢占,但对于多处理器不适用。
——特殊的硬件指令:原子执行,因而保证读写操作不被中断。
Test-and-Set(Ts)指令 和 SWAP指令


利用TS指令:
boolean TS(boolean *lock){
boolean old;
old = *lock;
*lock = True;
return old;
}
应用:为每个临界资源设置一个公共布尔变量lock,初值为FALSE;
while( TS(&lock) );
critical section
lock = FALSE;
remainder section


利用SWAP指令:
应用:为每个临界资源设置一个公共布尔变量lock,初值为FALSE,每个进程设置一个私有布尔变量key。
key = TRUE;
do{SWAP(&lock,&key);}
while(key);
critical section
lock = FALSE;
remainder section


硬件方法优点:
1.适用于任意数目的进程,在单处理器或多处理器上

2.简单,容易验证其正确性。
3.可以支持进程内存在多个临界区,只需为每个临界区设立一个布尔变量

硬件方法缺点:
1.等待要耗费CPU时间,不能实现"让权等待"。
2.可能"饥饿":从等待进程中随机选择一个进入临界区,有的进程可能一直选不上。
3.可能死锁





信号量(Semaphore)
——信号量代表可用资源实体的数量。
——除了初始化之外,仅能通过两个不可分割的[原子]操作访问
P(S):while S<=0 do no-op;
S--;
V(S):S++;


存在忙等——自旋锁:进程在等待时自旋。


一种不需要忙等的实现方式:
P(S):
S--;
if(S < 0) do block;


V(S):
S++;
if(S <= 0) do wake-up;


信号量只能通过初始化和两个标准的原语来访问--作为OS核心代码执行,不受进程调度的打断

初始化指定一个非负整数值,表示空闲资源总数。
使用信号量描述互斥关系(初值为1)和前驱关系(初值为0)。


死锁 – 两个或多个进程无限期地等待一个事件的发生,而该事件正是由其中的一个等待进程引起的。
饥饿 – 无限期地阻塞。进程可能永远无法从它等待的信号量队列中移去。


生产者消费者问题:若干进程通过有限的共享缓冲区交换数据。其中,"生产者"进程不断写入,而"消费者"进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。


——每个进程中各个P操作的次序是重要的,先检查资源数目,再检查是否互斥――否则可能死锁。




生产者:
P(empty)
P(mutex)
one unit -> buffer
V(mutex)
V(full)


消费者
P(full)
P(mutex)
one unit <- buffer
V(mutex)
V(empty)


读者-写者问题
信号量机制:
信号量:Wmutex[允许写],初值为1
公共变量:Rcount[正在读的进程数],初值为0
信号量:Rmutex[表示对Rcount的互斥操作],初值为1


Writer:
P(Wmutex);
write;
V(Wmutex);


Reader:
P(Rcount);
if(Rcount == 0) P(Wmutex);
++Rcount;
V(Rmutex);
read;
R(Rmutex);
--Rcount;
if(Rcount == 0) V(Wmutex);
V(Rmutex);




信号量的物理含义: 
 S>0表示有S个资源可用
      
 S=0表示无资源可用
      
 S<0则| S |表示S等待队列中的进程个数
      
 P(S):表示申请一个资源 
      
 V(S):表示释放一个资源
      
 信号量的初值应该大于等于0




PV操作需要注意的地方:
PV操作必须成对出现
有一个P操作就一定有一个V操作


当为互斥操作时,它们处于同一进程


当为同步操作时,则不在同一进程中出现


对于前后相连的两个P(S1)和P(S2) ,顺序是至关重要的:同步P操作应该放在互斥P操作前,而两个V操作顺序则无关紧要






AND型信号量集:AND型信号量集用于同时需要多种资源且每种占用一个时的信号量操作。
基本思想:在一个原语中,将一段代码同时需要的多个临界资源,要么全部分配给它,要么一个都不分配。
——P原语变成了Swait(S1,S2,...,Sn)
——当某些资源不够时:进程进入第一个小于1的信号量的等待队列Sj.queue;阻塞调用进程。


——V原语变成了Signal(S1,S2,...,Sn)
——判断等待队列中的进程是否重新通过了检查,若通过了检查则把他们放回就绪队列。
——哲学家就餐解法
Swait (chopstick[(I+1) mod 5],chopstick[I]);
Eat;
Ssignal (chopstick[(I+1) mod 5],chopstick[I]);




——生产者消费者采用AND信号量集
Swait(empty,mutex);
Ssignal(full,mutex);


一般信号量集:一般信号量集用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理;
基本思想:在AND型信号量集的基础上进行扩充:进程对信号量Si的测试值为ti(用于信号量的判断,即Si >= ti,表示资源数量低于ti时,便不予分配),占用值为di(用于信号量的增减,即Si = Si - di和Si = Si + di)


Swait(S1, t1, d1; ...; Sn, tn, dn);


Ssignal(S1, d1; ...; Sn, dn);


一般“信号量集”的几种特殊情况:


Swait(S, d, d)表示每次申请d个资源,当少于d个时,便不分配;


Swait(S, 1, 1)表示互斥信号量;
Swait(S, 1, 0)作为一个可控开关


一般信号量集未必成对使用Swait和Ssignal:如:一起申请,但不一起释放;


信号量机制的缺点:
1.同步操作分散
2.易读性差
3.不利于修改和维护
4.正确性难以保证




管程(Monitors):管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块。
——基本思想:把信号量及其操作原语封装在一个对象内部。即:将共享变量以及对共享变量能够进行的所有操作集中在一个模块中。
——优点:引入管程可提高代码的可读性,便于修改和维护,正确性易于保证。
——任一时刻在管程中只有一个线程是能运行的。




管程的互斥:
——当进程需要访问管程中的临界资源的时候,可调用管程中的有关入口过程。
——但当几个进程都需调用某一管程的同一个或不同的入口过程时,仅允许一个进程调用进入管程,而其他调用者必须等待。 
入口等待队列:当一个进程试图进入一个已被占用的管程时它应当在管程的入口处等待,因而在管程的入口处应当有一个进程等待队列,称作入口等待队列。




条件变量:在管程机制中引起等待的原因很多,为了区别它们,引入了条件变量.
——每个条件变量表示一种等待原因,对应一个等待队列。


——例如:调用x.wait的线程将一直等待到有另一个线程调用x.signal。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】拔河比赛 (ssl 1638)

拔河比赛拔河比赛拔河比赛 Description 一个学校举行拔河比赛&#xff0c;所有的人被分成了两组&#xff0c;每个人必须&#xff08;且只能够&#xff09;在其中的一组&#xff0c;要求两个组的人数相差不能超过1&#xff0c;且两个组内的所有人体重加起来尽可能地接近。 In…

特长生考试相关

水一手游记 一大早起来像个那啥一样在校训石前等&#xff08;旁边一群看猴子一样&#xff09; 然后车上点个人就去公费旅游&#xff08;半个小时车程&#xff0c;甚至没有饭吃&#xff09; 然后到那边量完体温见了一下熟人就开始了 T1高精度&#xff0c;历年最难T1还要判负数然…

Build 2018,给你带来全新的开发者体验, .NET Core 3.0带来桌面支持

Build 2018 主旨演讲的主题是 Azure 云和 AI、物联网、AR等技术&#xff0c;以及开发者相关内容的宣布。在今天的Build大会上&#xff0c;微软宣布目前已有超过7亿台设备运行Windows 10系统。去年这个数字为5亿。Office 365目前每个月有1.35亿活跃的商业用户&#xff0c;去年为…

【动态规划】大厅安排 (ssl 1212)

大厅安排大厅安排大厅安排 Description 有一个演讲大厅需要GEORGE管理&#xff0c;演讲者们事先定好了需要演讲的起始时间和中止时间。GEORGE想让演讲大厅得到最大可能的使用。我们要接受一些预定而拒绝其他的预定&#xff0c;目标自然是使演讲者使用大厅的时间最长。为方便起…

《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版

前言到目前为止写过刚好两百来篇博客&#xff0c;看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路&#xff0c;从前言到话题最终到总结&#xff0c;本文依然是一如既往的套路&#xff0c;但是不是介绍技术&#xff0c;也可说是介绍技术&#xff0c;不过是介绍书中…

Loj#2035-[SDOI2016]征途【斜率优化】

正题 题目链接:https://loj.ac/problem/2035 题目大意 nnn个数字分成mmm段&#xff0c;要求方差最小。 解题思路 首先方差的公式∑i1n(xi−∣x∣)2\sum_{i1}^n(x_i-|x|)^2i1∑n​(xi​−∣x∣)2 其中∣x∣|x|∣x∣是不变的&#xff0c;定义w∣x∣w|x|w∣x∣ 设fi,jf_{i,j}fi,…

可持久化线段树小结

学了可持久化线段树有一段时间了&#xff0c;一直没拿出时间来整理一下&#xff0c;刚好今天有空&#xff0c;就写一写。 可持久化的含义是对于每次修改操作都将产生一个新版本的线段树&#xff0c;并且旧版本的线段树仍然保留可以随时访问。 基于这个目的&#xff0c;我们可…

【动态规划】 数字游戏 (ssl 1653)

数字游戏 题目大意&#xff1a; 有n个数&#xff0c;分别为a[1] (序号为1),a[2] (序号为2),a[3]…a[n]&#xff0c;让你选m个数&#xff0c;每选一个数&#xff0c;就要减去已选个数(不算当前数)*b[i] (i为当前值的序号)&#xff0c;所选数的最大值(要减去相应的b) 原题 小…

.NET Core玩转机器学习

ML.NET 专门为.NET开发者提供了一套跨平台的开源的机器学习框架。ML.NET支持.NET开发者不需要过度专业的机器学习开发经验&#xff0c;就能轻松地训练自己的模型&#xff0c;并且嵌入到自己的应用中。一切尽在.NET之中。ML.NET早期是由Microsoft Research开发&#xff0c;近十年…

P2900-[USACO08MAR]Land AcquisitionG【斜率优化】

正题 题目链接:https://www.luogu.com.cn/problem/P2900 题目大意 nnn块hi∗wih_i*w_ihi​∗wi​的土地&#xff0c;购买一组土地需要max(h)∗max(w)max(h)*max(w)max(h)∗max(w)&#xff0c;求购买所有土地的最小费用。 解题思路 首先如果hhh和www都小于另一块土地显然是不需…

二元运算 FFT+分治

题目&#xff1a; 4836: [Lydsy2017年4月月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MB Submit: 486 Solved: 162 [Submit][Status][Discuss] Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b &#xff0c;接下来有 q 次询问。…

【记忆化搜索】【线性化DP】滑雪 (ssl 1202/luogu 1434/pku 1088)

滑雪滑雪滑雪 ssl 1202 luogu 1434 pku 1088 题目大意&#xff1a; 有一个N*M的矩阵&#xff0c;每个位置都有一个数&#xff0c;可以从大的数走向小的数&#xff0c;问可走的路最长是多少 原题 Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获…

POJ2942-Knights of the Round Table【tarjan】

正题 题目链接:http://poj.org/problem?id2942 题目大意 有nnn个骑士&#xff0c;有mmm组讨厌关系&#xff0c;要求讨厌的不能坐相邻&#xff0c;而且要求每次会有都有奇数个人&#xff0c;求有多少个骑士一组会议都不能参加。 解题思路 首先构一个补图&#xff0c;然后求有…

UVA4671 K-neighbor substrings FFT+字符串hash

题解&#xff1a; 将字符串A、B中的a和b分别以1和-1表示&#xff0c;对字符串B进行反转。 将A和B看成多项式&#xff0c;求卷积&#xff0c;这样的话从结果区间的[lenB−1,lenA)[lenB−1,lenA)中的每一个点的值valval&#xff0c;(lenB−val)/2(lenB−val)/2代表当前位置的字串…

微软Build 2018展示Visual Studio功能:跨系统云编程

5 月 8 日凌晨消息&#xff0c;微软 Build 2018 开发者大会在今天正式来开帷幕。很明显整场发布会被分为了上下两个部分&#xff0c;上半场如果说是聊一些技术实现和愿景&#xff0c;那下半场就应该说是实战说明了。跨平台云端编程了解下微软在现场展示了 Visual Studio&#x…

【DP】花店橱窗布置 (ssl 1626/luogu 1854)

花店橱窗布置花店橱窗布置花店橱窗布置 ssl 1626 luogu 1854 题目大意&#xff1a; 有n朵花和m个花瓶&#xff0c;每一朵花插在不同的花瓶里会有不同的美丽度&#xff0c;花瓶和花必须按原来的顺序摆放&#xff0c;求最大的美丽值 Description 假设你想以最美观的方式布置…

P4819-[中山市选]杀人游戏【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4819 题目大意 nnn个人&#xff0c;一个杀手&#xff0c;搜查一个平民可以知道他认识的人的身份&#xff0c;搜查杀手就会死&#xff0c;求最优情况下警察的最低死亡概率。 解题思路 先用tarjantarjantarjan搜出强连通&…

hdu4609 3idiots 三角形计数 FFT

直接上代码 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; double pi acos(-1.0); struct complex{double re,im;complex(double r 0.0,double i 0.0):re(r),im(i…

利用Skywalking-netcore监控你的应用性能

SkywalkingSkyWalking开源项目由吴晟于2015年创建&#xff0c;同年10月在GitHub上作为个人项目开源。SkyWalking项目的核心目标&#xff0c;是针对微服务、Cloud Native、容器化架构&#xff0c;提供应用性能监控&#xff08;APM&#xff09;和分布式调用链追踪能力。2017年11月…

【背包】逃亡的准备 (ssl 1236)

逃亡的准备逃亡的准备逃亡的准备 ssl 1236 类似一样题目&#xff08;除数组范围外&#xff09;:ssl 2289&#xff08;庆功会&#xff09; 题目大意&#xff1a; 有n个物品&#xff0c;每个物品可以选l[i]个,每个的代价为a[i],价值为b[i]&#xff0c;在代价不大于m的情况下&a…