- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
104 第3章 进程之间的并发控制和死锁 本章主要内容 并发进程的特点 进程之间的低级通信:互斥、同步、信号量和P/V操作、经典IPC问题 管程 进程的高级通信:消息传递,共享内存 死锁:多进程竞争有限资源 3.1 并发进程的特点 (1)对资源的共享引起的互斥关系 进程之间本来是相互独立的,但由于共享资源而产生了关系。间接制约关系,互斥关系。 (2)协作完成同一个任务引起的同步关系 一组协作进程要在某些同步点上相互等待发信息后才能继续运行。直接制约关系。同步关系。 (3)进程之间的前序关系 由于进程之间的互斥同步关系,使得进程之间具有了前序关系,这些关系决定了各个进程创建和终止的时间。 (a) S(P1,P2,P3) (b) P(P1,P2,P3,P4) (c) S(P1,P(P2,S(P3,P7),S(P4,P5,P6)),P8) 3.2 进程之间的低级通信 进程之间交换信息被称为进程间通信。 进程间的低级通信:通过信号量实现进程之间的互斥和同步关系。 进程间通信问题——IPC问题 (Inter Process Communication, IPC) 3.2.1 进程之间的互斥 共享资源:①慢速的硬设备,如打印机;②软件资源,如共享变量、共享文件等。 临界资源:就是一次仅允许一个进程使用的资源。 临界区(critical section):就是并发进程访问临界资源的那段必须互斥执行的程序。 不能同时有两个进程在临界区内执行 等待进入临界区的进程,应释放处理机后阻塞等待 在临界区外运行的进程不可阻止其他进程进入临界区 不应使要进入临界区的进程无限期等待在临界区之外 解决进程之间互斥的方法 软件实现方法 硬件实现方法 临界区互斥软件实现方法 算法1: 设有两个进程Pi和Pj,共享变量 int turn; 当turn==i时,进程Pi允许在临界区内执行 。 执行顺序:Pi,Pj,Pi,Pj… 算法2:设有两个进程Pi和Pj,共享变量 boolean flag[2]; 初值,flag[i]=flag[j]=false 如果flag[i]==true,则该值表示Pi准备进入临界区。 死锁? 算法3: 设有两个进程Pi和Pj,共享两个变量: boolean flag[2]; int turn; 初值,flag[i]=flag[j]=false turn为i或j都行。 用硬件实现互斥的方法 (1) 关中断 最简单的方法。在进程刚进入临界区后,立即禁止所有中断;在进程要离开之前再打开中断。因为CPU只有在发生时钟中断或其它中断时才会进行进程切换。 优点:简单。 缺点:限制了处理机交叉执行程序的能力 把禁止中断的权力交给用户进程是不明智的。(若用户进程禁止中断之后不再打开中断,其结果将会如何?整个系统可能会因此终止)。 若是多处理机系统,则禁止中断仅仅对执行本指令的那个CPU有效。其他CPU仍将继续运行,并可以访问临界资源。 (2) 使用测试和设置硬件指令 锁位变量W :为每个临界资源设置一个,以指示其当前状态。W=0,表示资源空闲可用;W=1,表示资源已被占用。 testset指令可定义如下: Const int n=/*进程数 */ int w; void p(int i){ while(1){ while(!testset(w)); critical section w=0; remainder section }} 3.2.2 进程之间的同步 同步的原因:一组进程要合作完成一项任务。 [例]两个用户进程共享缓冲区。计算进程将计算结果送入共享缓冲区,打印进程从缓冲区取数据打印。缓冲区空时不取数据,满时不送数据。 由于计算进程与打印进程访问缓冲区的速度不匹配,需要进行同步处理。 为了使进程同步,需要引入信号量机制。 3.2.3 信号量和P、V操作 1965年,荷兰学者Dijkstra提出的一种同步机制。 基本原理:两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收到一个特定的信号。为了发信号,需要使用一个称作信号量的特殊变量。 typedef struct{ //信号量的类型描述 int value; //表示该类资源的可用数量 struct process *list; //等待使用该类资源的进程排成队列的队列头指针。 }semaphore, sem; P操作原语: //wait(s) ; void P (sem s) { s.value = s.value-1; //表示申请一个资源(或通过信号量s接收消息) if
您可能关注的文档
最近下载
- 2024-2025学年小学英语重大版三年级上册教学设计合集.docx
- (商务英语写作实训)chapter 7-sales letters.ppt
- 2023年沪教版五年级下册英语知识点归纳.doc VIP
- 六年级上册-语文一课一练.pdf VIP
- 部编版三年级上册教材解读及教学建议.ppt VIP
- 脑卒中偏瘫患者下肢深静脉血栓预防及护理.pptx VIP
- Daylight钢琴谱五线谱 完整版原版.pdf VIP
- 浙江省电力公司状态检修工作情.ppt VIP
- 2024-2025学年高二语文(选择性必修上)第一单元知识点归类(知识梳理).pdf VIP
- 2024-2025学年上海市徐汇区八年级下学期期末考试英语试卷含详解.docx VIP
文档评论(0)