分享
 
 
 

《操作系统概念(第六版)》第七章 进程同步 翻译

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

协作进程(cooperating process)不但影响系统中其它的进程,也受它们影响。协作进程之间可以直接共享一个逻辑地址空间(确切的说是代码和数据),也可以通过文件实现数据共享。前者通过轻量级进程或线程实现,我们在第5节讨论。对共享数据的并发访问可能会导致数据的不一致。在本章,我们要讨论各种确保共享逻辑地址空间的协作进程有序执行的机制,以此来维护数据的一致性。

7.1 背景知识

我们在第四章中讨论了由许多协作顺序进程(cooperating sequential process)组成的系统的模型,这些进程异步执行,并可能会共享数据。我们利用有限缓冲区来阐明这种模型,它代表操作系统。

让我们重新看一下4.4节在有限长度缓冲区问题中所描述的共享存储器方案。正如我们所指出的,在这个解决方案中最多允许同时有BUFFER_SIZE – 1个条目在缓冲区中。让我们修改这个算法以矫正这个缺陷。可以添加一个整形变量counter,初始化为0。每向缓冲区中添加一个新条目counter就加1,每移除一个就减1。生产者进程代码修改如下:

while (1) {

/* produce an item in nextProduced */

while (counter = = BUFFER_SIZE)

; /* do nothing */

buffer[in] = nextProduced;

in = (in + 1) % BUFFER_SIZE;

counter++;

}

消费者进程代码修改如下:

while (1) {

while (counter = = 0)

; /* do nothing */

nextConsumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;

counter--;

/* consume the item in nextConsumed */

}

虽然生产者和消费者程序可以独立正确执行,但是当他们并发执行时就有可能出问题。假设当前counter的值为5,生产者和消费者进程同时执行“counter++”和“counter--”。那么在这两个语句执行之后,变量counter的值可能是4、5或6!唯一正确的结果是counter = = 5,如果生产者和消费者独立执行可以正确的产生这个结果。

我们可以说明为什么counter的值可能出错。以机器语言实现语句“counter++”可能如下(在一个典型的机器上):

register1 = counter

register1 = register1 + 1

counter = register1

register1是一个CPU本地寄存器。类似的,语句“counter--”实现如下:

register2 = counter

register2 = register2 - 1

counter = register2

register2 是一个CPU本地寄存器。即使register1和register2可能是同一个物理寄存器(比如一个累加器),但是要注意,中断处理程序会保存并恢复这个寄存器的内容(2.1节)。

“counter++”和“counter--”并行执行等同于前述的低级语言语句以某些随机的顺序交叉执行(但是高级语言的执行顺序是保留的)。这是一种:

T0: producer execute register1 = counter { register1 = 5}

T1: producer execute register1 = register1 + 1 { register1 = 6}

T2: consumer execute register2 = counter { register2 = 5}

T3: consumer execute register2 = register2 - 1 { register2 = 4}

T4: producer execute counter = register1 {counter = 6}

T5: consumer execute counter = register2 {counter = 4}

我们得到了一个错误的结果“counter = = 4”,这指明有四个满缓冲区,而事实上有五个。如果我们颠倒语句T4和T5的顺序,那么我们得到“counter = = 6”。

之所以得到这个错误的结果是因为我们允许两个进程并行操作变量counter。像这样的情形,多个进程并行访问和操作同样的数据,其执行结果取决于具体的执行顺序,我们称之为竞争条件(race condition)。为了预防上述的竞争条件,我们要确保一次只有一个进程能够操作变量counter。为此,我们需要某些形式的进程同步。在操作系统中会频繁发生这样的情况,因为系统中的各个不同部分都要操作资源,而且我们不希望一处的变动会影响到另一处。本章的一个主要部分涉及到进程同步(process synchronization)和协调(coordination)。

详细内容请见 http://www.tulipsys.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有