DJ2-4 进程同步(第一节课)
创始人
2025-05-31 08:29:15
0

目录

2.4.1  进程同步的基本概念

1. 两种形式的制约关系

2. 临界资源(critical resource)

3. 生产者-消费者问题

4. 临界区(critical section)

5. 同步机制应遵循的规则

2.4.2  硬件同步机制

1. 关中断

2. Test-and-Set 指令

3. Swap 指令

4. 小结


进程的异步性必然导致若干进程对系统资源进行无序争夺,从而导致系统混乱。为保证多个进程能有条不紊地运行,在多道程序系统中,必须引入进程同步机制。

进程同步进制的主要任务:是使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

2.4.1  进程同步的基本概念

1. 两种形式的制约关系

1)间接相互制约关系。由于共享系统资源。

2)直接相互制约关系。由于进程之间的相互合作。  

2. 临界资源(critical resource)

一次仅允许一个进程访问的资源为临界资源 。

3. 生产者-消费者问题

1)问题描述

有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有 n 个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。

2)解决方法

变量定义如下:

int in = 0;        //数组单元输入指针
int out = 0;       //数组单元输出指针
int count = 0;     //记录缓冲池产品数
item buffer[n];    //具有n个缓冲区的缓冲池

缓冲池是被组织成循环缓冲的。

在生产者进程中使用一个局部变量 nextp,用于暂时存放每次刚刚生产出来的产品;而在消费者进程中,则使用一个局部变量 nextc,用于存放每次要消费的产品。

生产者

void producer() {while(1) {//produce an item in nextpwhile(count == n);      //缓冲池已满,do no-opbuffer[in] = nextp;     //放入产品in = (in + 1) % n;      //指向下一个数组单元count = count + 1;      //缓冲池产品数加一}
}

消费者

void consumer() {while(1) {while(count == 0);      //缓冲池已空,do no-opnextc = buffer[out];    //取出产品out = (out + 1) % n;    //指向下一个数组单元count = count - 1;      //缓冲池产品数减一//consume the item in nextc}
}

3)存在问题

虽然上面的生产者程序和消费者程序在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发执行时就会出现差错,问题就在于这两个进程共享变量 count 。

假设 count 初值为 5 。生产者对它做加 1 操作,消费者对它做减 1 操作,这两个操作在用机器语言实现时,分别可用以下形式描述。

reg1 = count;       |reg2 = count;
reg1 = reg1 + 1;    |reg2 = reg2 - 1;
count = reg1;       |count = reg2;

祖传计组图。

实际执行时,由于时间片完可能导致两段程序中各语句穿插执行。

reg1 = count;        (reg1=5)
reg1 = reg1 + 1;     (reg1=6)
reg2 = count;        (reg2=5)
reg2 = reg2 - 1;     (reg2=4)
count = reg1;        (count=6)
count = reg2;        (count=4)

倘若再将两段程序中各语句交叉执行的顺序改变,将可看到其它答案。这表明程序的执行已经失去了再现性。为了预防产生这种错误,解决此问题的关键是把变量 count 作为临界资源处理,亦即,令生产者进程和消费者进程互斥地访问变量 count 。

4. 临界区(critical section)

把在每个进程中访问临界资源的那段代码称为临界区。

把一个访问临界资源的循环进程描述如下:

while(true) {进入区:检查有无进程进入。临界区:进程访问临界资源。退出区:将访问标志复位。剩余区:其它部分的代码。
}

5. 同步机制应遵循的规则

1)空闲让进

当无进程处于临界区时,应允许一个请求进入临界区的进程立即进入自己的临界区。

2)忙则等待

当已有进程进入临界区时,其它试图进入临界区的进程必须等待。

3)有限等待

对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入 “死等” 状态。

4)让权等待

当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入 “忙等” 状态。

2.4.2  硬件同步机制

利用计算机硬件指令来解决临界区问题。对临界区管理时,将标志看作一把 “锁” 。

  • 初始时锁是打开的。
  • 进入临界区前,进程必须先进行 “锁测试” 。
  • “锁开” 则进入,“锁关” 则等待。
  • “锁开” 进入时,应立即将其锁上,以防止其它进程进入。
  • “锁测试” 和关锁操作必须是连续的(原子操作)。

计算机硬件提供了三大指令:关中断、Test-and-Set 指令、Swap 指令。

1. 关中断

原理:在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。这样,进程在临界区执行期间,计算机系统不响应中断,从而不会引发调度。

缺点:

  • 滥用关中断权利可能导致严重后果(与系统安全相关的中断无法被响应)
  • 关中断时间过长会影响系统效率
  • 不适用于多 CPU 系统(这个关了还有那个)

2. Test-and-Set 指令

TS 指令的一般性描述如下:

boolean TS(boolean * lock) {boolean old;old = * lock;* lock = true;return old;
}

利用 TS 指令实现互斥的循环进程结构可描述如下:

do {//...while TS(&lock);    //entry section//...               //critical sectionlock = false;       //exit section//...               //remainder section
} while(true);

do ... while ... 记得最后的分号。

在进入区,若恒有 lock == true,则代表临界区已上锁,其它试图进入临界区的进程必须等待。

3. Swap 指令

Swap 指令在 8086/8088 中又称为 XCHG 指令,用于交换两个字的内容。

Swap 指令的一般性描述如下:

void swap(boolean * a, boolean * b) {boolean temp;temp = * a;* a = * b;* b = temp;
}

为每个临界资源设置一个全局的 boolean 变量 lock,其初值为 false(代表没有上锁)。再设置一个局部的 boolean 变量 key 。利用 Swap 指令实现互斥的循环进程结构可描述如下:

do {key = true;do {                //entry sectionswap(&lock, &key);} while(key != false);//...               //critical sectionlock = false;       //exit section//...               //remainder section
} while(true);

由于 lock 的初值为 false,因此第一个进入临界区的进程内循环一次即退出循环。此时,lock 值为 true,其它试图进入临界区的进程将一直在内循环中循环。直到第一个进入临界区的进程执行到退出区,lock 值被设置为 false 。

4. 小结

利用上述硬件指令能有效地实现进程互斥,但当临界资源忙碌时,其它访问进程必须不断地进行测试,处于一种 “忙等” 状态,不符合 “让权等待” 原则,造成处理机时间的浪费,同时也很难将它们用于解决复杂的进程同步问题。

相关内容

热门资讯

泸州老窖董事长刘淼“重回前三”... 运营商财经网 周颖/文 在中国白酒行业中,茅台与五粮液行业龙头的地位非常稳固,但“老三之争”却从未停...
为什么越简单的人活的越高级?极... 作品声明:个人观点、仅供参考 在现代社会,物质极大丰富,信息爆炸增长,人们却常常感到疲惫,焦虑和迷茫...
张江半导体企业,完成数亿元融资... 01 融资综述 加冕研究院据张通社Link数据库统计,1月19日–1月25日,上海企业共发生19起融...
港股异动 | 智谱午后拉升 近... 1月27日,智谱午后拉升,一度涨超12%,随后涨幅回落。截至15时21分,该股涨7.56%,报233...
2025年国内一级市场募投状况... 2025年,国内一级市场募投状况有所升温。从投中数据近期公布的内容来看,年内投资数量及基金规模同比均...
龙湖集团销售额同比降37.54... 运营商财经网 章少霞/文 根据龙湖集团披露的这两年的财报,龙湖集团可谓中国最赚钱的房地产企业之一,董...
新网银行取得快速回溯数据专利 国家知识产权局信息显示,四川新网银行股份有限公司取得一项名为“一种快速回溯数据的方法及装置”的专利,...
锂、铜、铝、DRAM全在涨!中... 财联社1月27日讯(编辑 潇湘)有迹象显示,中国电动汽车行业当前正面临多重成本因素同时发酵所带来的前...
昔日丘栋荣所管产品如今多失意,... 作者:闵晓强 编辑:李 鑫 今年一月的倒数第二周,内地公募基金四季报落下帷幕,按照圈内的传统,拥有明...
特朗普:中国正在接管加拿大!话... 美国新闻报道称,美国总统特朗普发表了一篇措辞极为激烈的文章,声称:中国正在成功且彻底地接管加拿大,这...
港股异动丨南华期货股份创上市新... 延续昨日涨势,南华期货股份(2691.HK)今日盘中再度涨近10%至12.5港元,股价创上市新高。消...
马化腾员工大会讲话:金融科技不... 来源:市场资讯 (来源:北京商报) 北京商报讯(记者 廖蒙)1月26日,腾讯召开2025年度员工大会...
成交破1亿创历史新高!“重仓有... 1月27日,红利板块整体调整。数据显示,截至14时50分,“重仓有色”的中证红利质量ETF(1592...
爱芯元智通过港交所聆讯,掘金边... 2026年开年以来,港股IPO市场持续火热,AI赛道尤其耀眼,多只登陆港交所的新股上市后实现连续上涨...
东阳光药联手晶泰控股布局“AI... 上证报中国证券网讯(记者 孔令仪)1月26日,东阳光药与晶泰控股正式宣布签署战略合作协议。据悉,在此...
欧瑞博CEO王雄辉入选福布斯新... 2026年1月23日,欧瑞博创始人兼CEO王雄辉入选 “2025福布斯中国新时代颠覆力创始人” 榜单...
小红书爆款心法:吃透人性,轻松... 为啥精心打磨的干货没人看,随手发的日常却爆火?小红书流量逻辑的核心,从来都是对人性的精准拿捏。 一、...
浩天助力海港创投完成史河科技的... 浙江史河科技有限公司(以下简称"史河科技")宣布于2025年12月完成C轮融资(以下简称"本轮融资"...
商务部:2026年将进一步释放... 来源:滚动播报 (来源:上观新闻) 2025年中国社会消费品零售总额首次突破50万亿元,增长平稳,...
黄金白银价格齐创新高,牛市还能... 机构认为,黄金短期仍处于强势区间,金融属性仍在强势回归中,但需警惕交易过热后的波动加剧风险,白银短期...