苏州大学操作系统第六章课案.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chap 6 进程同步 内容 背景 临界区问题 软件和硬件解决方法 信号量 经典同步问题 管程 同步实例 1、背景 数据的不一致性 多个进程并发或并行执行 可在任何时候被中断,部分代码连续执行 对共享数据的并发/并行访问可能导致数据的不一致性 不可再现性 保证并发进程正确执行顺序的机制-同步 例子:解决有界缓冲问题的共享内存方法中使用n个缓冲区的问题 增加变量counter 初始化为0 每次向缓冲区增加一个新项时,counter递增 每次从缓冲区中移去一项时,counter递减 Shared data #define BUFFER_SIZE 10 typedef struct { . . . } item; item buffer[BUFFER_SIZE]; int in = 0; int out = 0; int counter = 0; 有界缓冲区 生产者进程 item nextProduced; while (1) { while (counter == BUFFER_SIZE) ; /* do nothing */ buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; counter++; } 有界缓冲区enter() 消费者进程 item nextConsumed; while (1) { while (counter == 0) ; /* do nothing */ nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; counter--; } 有界缓冲区remove() 下列语句必须被原子性地执行 counter++; counter--; 原子操作意味着一个操作在整个执行期间没有中断。 有界缓冲区 语句 “count++”可按如下方式以机器语言实现: register1 = counter register1 = register1 + 1 counter = register1 语句“count--”可按如下方式来实现: register2 = counter register2 = register2 – 1 counter = register2 初时count = 5: S0: producer execute register1 = counter {register1 = 5} S1: producer execute register1 = register1+1 {register1 = 6} S2: consumer execute register2 = counter {register2 = 5} S3: consumer execute register2 = register2–1 {register2 = 4} S4: producer execute counter = register1 {counter = 6 } S5: consumer execute counter = register2 {counter = 4} 有界缓冲区 如生产者和消费者试图并发地更新缓冲区,汇编语句可能交叉执行 交叉取决于生产者和消费者进程如何被调度 竞争条件: 多个进程并发访问和操作同一数据的情况。共享数据的最终结果取决于最后操作的进程 为了防止上述竞争条件,并发进程必须同步 竞争条件(Race Condition) 同步(Synchronization) 同步:对多个相关进程在执行次序上进行协调,使并发执行的进程间能有效地共享资源和相互合作,使程序执行具有可再现性,保证数据一致性 进程间有两种同步形式: 访问独占资源-互斥 协调执行次序-同步 P1 P2 P1 P2 Printer1 2、临界区 临界资源和临界区 Critical resource(临界资源) 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量 Critical-Section(临界区) 涉及到临界资源的代码段叫临界区 item nextConsumed; while (1) { while (counter == 0) ; /* do nothing */ nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; counter--; } 临界区 临界资源 临界区 是代码 进程内的代码 一段或多段 不一定连续 不一定相同

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档