进程通信
进程间通信(补充材料)

• msgp //用来存放欲接收消息的用户数据结构的地址
• size //指示msgp中数据数组的大小
• type //为0接收该队列的第一个消息;为正,接收类型为 type的第一个消息;为负,接收小于或等于type绝对值 的最低类型的第一个消息
• flag //规定倘若该队列无消息,核心应当做什么事。若设 置 IPC_NOWAIT , 则 立 即 返 回 ; 若 在 flag 中 设 置 MSG_NOERROR,且所接收的消息大学大于size,核心 截断所接收的消息。
1. Linux的共享存储区
• 创建或打开共享存储区(shmget):依据用户给出的整数值key, 创建新区或打开现有区,返回一个共享存储区ID。
• 连接共享存储区(shmat):连接共享存储区到本进程的地址空间, 可以指定虚拟地址或由系统分配,返回共享存储区首地址。父 进程已连接的共享存储区可被fork创建的子进程继承。
• 拆除共享存储区连接(shmdt):拆除共享存储区与本进程地址空 间的连接。
• 共享存储区控制(shmctl):对共享存储区进行控制。如:共享存 储区的删除需要显式调用shmctl(shmid, IPC_RMID, 0);
• 头文件:sys/types.h, /sys/ipc.h, sys/shm.h
• flag // 本 身 由 操 作 允 许 权 和 控 制 命 令 值 相
“或”得到,如:IPC_CREAT|0400表示是否
该队列应被创建,IPC_EXCL|0400表示该队
列的创建应是互斥的。
• msgqid是该系统调用返回的描述符,失败则 返回-1
int msgsnd(int id, struct msgbuf *msgp,
进程通信的几种方法

进程通信的几种方法进程通信是指在操作系统中,不同的进程之间进行数据交换和信息传递的过程。
在现代操作系统中,进程通信是非常重要的,因为多个进程之间的协作可以提高系统的性能和效率。
本文将介绍几种常见的进程通信方法。
1.管道通信管道通信是一种单向、半双工的通信方式,通过创建一个管道,将一个进程的输出连接到另一个进程的输入,从而实现数据的传输。
管道通信一般用于具有父子关系的进程之间或者具有共同祖先的进程之间。
2.消息队列通信消息队列通信是一种通过操作系统内核来传递消息的机制。
进程可以将消息发送到消息队列,其他进程则可以从消息队列中接收消息。
消息队列通信具有高效、可靠、灵活等特点,常用于进程之间传递数据量较大的情况。
3.共享内存通信共享内存通信是一种进程间共享内存区域的方式。
多个进程可以访问同一块内存区域,从而实现数据的共享。
共享内存通信的优点是速度快,因为进程之间不需要进行数据的复制,但是需要进程之间进行同步和互斥操作,以避免数据的冲突。
4.信号量通信信号量通信是一种通过操作系统提供的信号量机制来实现进程间同步和互斥的方式。
进程可以通过信号量来进行互斥操作,以确保共享资源的安全访问。
信号量通信常用于进程之间共享资源的管理和同步。
5.套接字通信套接字通信是一种通过网络进行进程通信的方式,常用于不同主机之间的进程通信。
套接字通信可以通过TCP或UDP协议来实现,具有跨平台、可靠性高等特点。
总结起来,进程通信是操作系统中非常重要的一部分,不同的进程之间可以通过各种方式进行数据的交换和信息的传递。
管道通信、消息队列通信、共享内存通信、信号量通信和套接字通信是常见的几种进程通信方法。
不同的通信方法适用于不同的场景,开发人员需要根据具体需求选择合适的通信方式。
进程通信的正确使用可以提高系统的性能和效率,确保系统的稳定运行。
操作系统进程通信

进程通信-----消息传递通信的实现方式
通信链路:
第一种方式(主要用于计算机网络中):由发送进程在通信 之前用显式的“建立连接”命令请求系统为之建立一条通 信链路,在链路使用完后拆除链路。
第二种方式(主要用于单机系统中):发送进程无须明确提 出建立链路的请求,只须利用系统提供的发送命令(原 语),系统会自动地为之建立一条链路。
邮箱特点: (1)每一个邮箱有一个唯一的标识符; (2)消息在邮箱中可以安全保存,只允许核准的用户随时
读取; (3)利用邮箱可以实现实时通信,又可以实现非实时通信。
进程通信-----信箱通信
信箱结构:
信箱定义为一种数据结构,在逻辑上可以分为:
• 1,信箱头,用以存放有关信箱的描述信息,如信箱标识符,信箱的 拥有者,信箱口令,信箱的空格数等;
基于共享存储区的通信方式。在存储器中划出了一 块共享存储区,各进程可通过对共享存储区中的 数据的读和写来实现通信。适用于传输大量数据。
进程通信-----消息传递系统
消息传递机制 : 进程间的数据交换以消息为单位,程序员利用系统的通信原语(要
进行消息传递时执行send;当接收者要接收消息时执行receive)实 现通信。这种通信方式属于高级通信 。
b 接 收 区
原语描述
二、实例—消息缓冲队列通信机制
1、通信描述
PCB(B)
进程 A
进程 B
send (B,a)
mq mutex
sm
receive(b)
Emphead
a 发 sender: A 送 size:5 区 text:Hello
sender : A size : 5
i Text:Hello next: 0
操作系统进程通信

P1:count=R1
结果:虽然P1和P2进程各自都执行了对count加1的操作 段,但结果count只增加1。
原因分析:变量count就是临界资源,P1、P2访问count 的两个程序段就是临界区。但是两个进程同时进入了临 界区执行了。
8
19
用中断机制保证锁的安全性
用中断机制保证测试锁状态和关锁操作的原子性。
在测试锁状态前关闭中断; 如果测试不通过,开中断,然后重新测试。 如果测试通过,关锁,然后开中断,进入临界区。
优缺点:
中断关闭时间短,只两条指令。不会影响到中断处理 效率,也不会影响进程的并发特性。
不能用于多CPU系统。
24
刚进入临界区: wanted_in[self] = TRUE CASE1: Wanted_in[other] == FALSE, observer == self CASE2: Wanted_in[other] == TRUE, observer == other, CASE3: Wanted_in[other] == FALSE,且 observer == other(实际上不可能出现)
不在临界区,也没参与竞争临界区:wanted_in[self] == FLASE;
参与竞争临界区,但还没有设置观察进程(刚执行完 wanted_in[self] = TRUE):
刚设置了观察进程,但还没有执行测试进入: wanted_in[self] == TRUE
处于循环等待态: wanted_in[other] = TRUE 并且 observer == self
20
2-4、锁机制的软件实现
背景:
硬件实现需要代价比较大 移植性差,依赖具体的硬件平台 在多处理环境下有些硬件实现方式不使用,如中
进程通信的基本内容

进程通信的基本内容进程通信是指在操作系统中,不同进程之间进行数据交换和信息共享的过程。
在现代操作系统中,进程通信是必不可少的,因为一个系统通常由多个并发运行的进程组成,这些进程之间需要进行协调和合作来实现各种功能。
进程通信的基本内容包括进程创建、数据传输、共享内存和信号等。
首先,进程的创建是进程通信的前提。
在操作系统中,一个进程可以通过创建新的进程来实现与其他进程的通信。
通常,一个进程可以通过调用系统调用fork()或者exec()来创建新的进程。
通过fork()系统调用,当前进程可以创建一个与自己完全相同的子进程,这样子进程就可以直接继承父进程的所有资源和状态。
而通过exec()系统调用,进程可以在创建新进程的同时,将自己的代码和数据替换成新的程序的代码和数据。
其次,进程通信的主要方式是数据传输。
在进程通信中,数据可以通过多种方式进行传输,包括管道、消息队列、共享内存和套接字等。
管道是一种单向的、字节流的通信方式,可以在父子进程之间或者兄弟进程之间进行通信。
消息队列是一种可以在不同进程之间传递消息的通信方式,进程可以通过发送和接收消息来实现通信。
共享内存是一种将内存空间映射到多个进程地址空间的通信方式,不同进程可以直接读写共享内存中的数据。
套接字是一种网络通信的方式,可以在不同主机之间进行进程通信。
另外,进程通信还可以通过共享内存来进行数据共享。
共享内存是一种高效的通信方式,它可以使得多个进程可以直接访问同一块物理内存,而不需要进行数据拷贝。
通过共享内存,不同进程可以在内存中创建共享的数据结构,进程对这些数据结构的读写操作都可以被其他进程所感知。
最后,进程通信还可以通过信号来实现。
信号是一种异步的通信方式,它可以用于进程之间的事件通知和处理。
一个进程可以向另一个进程发送一个信号,另一个进程可以通过注册信号处理函数来处理这个信号。
常见的信号包括SIGINT(中断信号)和SIGTERM(终止信号)等。
深入理解操作系统中的进程间通信机制

深入理解操作系统中的进程间通信机制进程间通信(Inter-Process Communication,IPC)是操作系统中实现不同进程之间数据传输、共享资源、协同工作的一种机制。
在多进程环境下,各个进程相互独立运行,因此需要一种机制来实现它们之间的通信与协调。
本文将深入探讨进程间通信的概念、分类以及常用的实现方式。
一、进程间通信的概念进程间通信是指在操作系统中,不同进程之间通过一定的方法来交换数据和信息的过程。
它是为了满足进程之间资源共享、信息传递、任务协作等需求而设计的。
通过进程间通信,进程可以相互发送数据、接收数据,实现数据共享、同步、互斥等功能。
二、进程间通信的分类根据通信时是否需要借助操作系统来实现,进程间通信可以分为以下两类:1.隐式通信隐式通信是指不需要借助操作系统提供的特殊通信机制,而是通过共享的文件、数据库、内存等资源来实现进程之间的数据交换。
这种通信方式通常适合于处于同一主机上的进程通信,无需操作系统进行干预。
2.显式通信显式通信是指需要借助操作系统提供的通信机制来实现进程间通信。
其中常见的通信机制包括管道、消息队列、信号量、共享内存等。
这些通信机制是操作系统提供的API,用于实现进程间数据传输和共享资源。
三、常用的进程间通信方式在显式通信中,有多种方式可以实现进程间通信。
下面介绍几种常用的方式:1.管道(Pipe)管道是一种半双工的通信方式,用于在两个进程之间传递数据。
它基于文件描述符实现,包括有名管道和无名管道。
有名管道可以在不相关的进程之间进行通信,而无名管道仅用于相关进程之间的通信。
2.消息队列(Message Queue)消息队列是一种可以在不同进程间传递、保存消息的机制。
它采用先进先出的方式,保证消息的有序发送和接收。
通过消息队列,进程可以发送和接收各种类型的消息,实现数据传递和同步。
3.信号量(Semaphore)信号量是一种用于进程间同步和互斥的机制。
它通常用于解决多个进程之间对共享资源的访问问题。
进程通信的实验报告

一、实验目的1. 理解进程通信的概念和作用。
2. 掌握进程通信的常用方法,包括管道、消息队列、信号量等。
3. 通过编程实践,加深对进程通信机制的理解和应用。
二、实验环境操作系统:Linux开发环境:gcc三、实验内容1. 管道通信2. 消息队列通信3. 信号量通信四、实验步骤及分析1. 管道通信(1)实验步骤1)创建一个父进程和一个子进程;2)在父进程中创建一个管道,并将管道的读端和写端分别赋给父进程和子进程;3)在父进程中,通过管道的写端发送数据给子进程;4)在子进程中,通过管道的读端接收父进程发送的数据;5)关闭管道的读端和写端;6)结束进程。
(2)实验分析通过管道通信,实现了父进程和子进程之间的数据传递。
管道是半双工通信,数据只能单向流动。
在本实验中,父进程向子进程发送数据,子进程接收数据。
2. 消息队列通信(1)实验步骤1)创建一个消息队列;2)在父进程中,向消息队列中发送消息;3)在子进程中,从消息队列中接收消息;4)删除消息队列;5)结束进程。
(2)实验分析消息队列是一种进程间通信机制,允许不同进程之间传递消息。
消息队列的创建、发送、接收和删除等操作都是通过系统调用实现的。
在本实验中,父进程向消息队列发送消息,子进程从消息队列接收消息,实现了进程间的消息传递。
3. 信号量通信(1)实验步骤1)创建一个信号量;2)在父进程中,对信号量执行P操作,请求资源;3)在子进程中,对信号量执行V操作,释放资源;4)结束进程。
(2)实验分析信号量是一种用于实现进程同步的机制。
在进程通信中,信号量可以用来协调多个进程对共享资源的访问。
在本实验中,父进程和子进程通过信号量实现了对共享资源的同步访问。
五、实验结果1. 管道通信实验结果:父进程成功向子进程发送数据,子进程成功接收数据。
2. 消息队列通信实验结果:父进程成功向消息队列发送消息,子进程成功从消息队列接收消息。
3. 信号量通信实验结果:父进程成功获取资源,子进程成功释放资源。
进程通讯管理实验报告(3篇)

第1篇一、实验目的1. 理解进程通信的概念和原理;2. 掌握进程通信的常用机制和方法;3. 能够使用进程通信机制实现进程间的数据交换和同步;4. 增强对操作系统进程管理模块的理解。
二、实验环境1. 操作系统:Linux2. 编程语言:C3. 开发环境:GCC三、实验内容1. 进程间通信的管道机制2. 进程间通信的信号量机制3. 进程间通信的共享内存机制4. 进程间通信的消息队列机制四、实验步骤1. 管道机制(1)创建管道:使用pipe()函数创建管道,将管道文件描述符存储在两个变量中,分别用于读和写。
(2)创建进程:使用fork()函数创建子进程,实现父子进程间的通信。
(3)管道读写:在父进程中,使用read()函数读取子进程写入的数据;在子进程中,使用write()函数将数据写入管道。
(4)关闭管道:在管道读写结束后,关闭对应的管道文件描述符。
2. 信号量机制(1)创建信号量:使用sem_open()函数创建信号量,并初始化为1。
(2)获取信号量:使用sem_wait()函数获取信号量,实现进程同步。
(3)释放信号量:使用sem_post()函数释放信号量,实现进程同步。
(4)关闭信号量:使用sem_close()函数关闭信号量。
3. 共享内存机制(1)创建共享内存:使用mmap()函数创建共享内存区域,并初始化数据。
(2)映射共享内存:在父进程和子进程中,使用mmap()函数映射共享内存区域。
(3)读写共享内存:在父进程和子进程中,通过指针访问共享内存区域,实现数据交换。
(4)解除映射:在管道读写结束后,使用munmap()函数解除映射。
4. 消息队列机制(1)创建消息队列:使用msgget()函数创建消息队列,并初始化消息队列属性。
(2)发送消息:使用msgsnd()函数向消息队列发送消息。
(3)接收消息:使用msgrcv()函数从消息队列接收消息。
(4)删除消息队列:使用msgctl()函数删除消息队列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
remove(m)描述如下: remove(m): begin local x P(mesnum) 选择满格x 把满格x中的消息取出放m中 置格x标志为空 V(fromnum) end
3.7.5 管道通信系统 管道是用于连接读进程和写进程的文件以实现 它们之间通信的共享文件,称pipe文件。向管道 提供输入的进程(称写进程),以字符流的形式 将大量数据送入管道,而接收管道输出的进程 (读进程)可从管道中接收数据。该方式首创于 UNIX,它能传送大量数据,被广泛采用。
优点:同前两法相比,其资源利用率和系统吞 吐量有较明显的改善 缺点:进程实际需要资源的顺序不一定与资源 的编号一致,因此仍会造成资源浪费;对资 源的分类编号也消耗一定的系统开销,破坏 设备无关性。
3.8.2.1 死锁预防 结论: 从上面所学习的来看,显然,死锁预防所 采用的策略,都施加了较强的限制条件. 不实用!
进程A ①申请输入设备 ②申请输出设备 ③释放输入设备 ④释放输出设备 则发生死锁。
进程B ①申请输出设备 ②申请输入设备 ③释放输出设备 ④释放输入设备
如果执行次序为:进程A①→进程B①...,
B在干什么?
A 输入设备
A在干什么?
竞 争 外 设 死 锁 示 例
输出设备
B
3.8.1 死锁的概念 1. 死锁举例 例 2: 在生产者-消费者问题中将生产者进程的两个P 操作颠倒时会发生死锁(如果缓冲区中数据 满)。 将消费者进程的两个P操作颠倒时也会发生 死锁。 因此要注意P操作的执行次序
3.破坏部分分配条件 缺点: (1) 在许多情况下,一个进程在执行之前不可能 提出它所需要的全部资源。 (2) 无论所需资源何时用到,一个进程只有在所 有要求资源都得到满足之后才开始执行。 (3) 对于那些不经常使用的资源,进程在生存过 程期间一直占用它们是一种极大的浪费。 (4) 降低了进程的并发性。
邮箱的结构:
邮箱通信的实现:
设发送进程调用deposit(m)将消息发送到邮 箱,接收进程调用remove(m)将消息m从邮箱 中取出 信号量fromnum为发送进程的私用信号量, 记录空格数,初值为信箱的空格数n mesnum为接收进程的私用信号量,记录消息 个数,初值为0
deposit(m) 描述如下: deposit(m): begin local x P(fromnum) 选择空格x 将消息m放入空格x中 置格x的标志为满 V(mesnum) end
3.8.1 死锁的概念 2. 死锁定义 死锁,是指各并发进程彼此互相等待对方 所拥有的资源,且这些并发进程在得到对方的资 源之前不会释放自己所拥有的资源。从而造成大 家都想得到资源而又都得不到资源,各并发进程 不能继续向前推进的状态。
3.8.1 死锁的概念 3. 死锁的起因 死锁的起因是并发进程的资源竞争 根本原因在于系统提供的资源个数少于并发 进程所要求的该类资源数 由于资源的有限性不可能为所有要求资源的 进程无限制的提供资源,但是可以采用适当的资
2.安全状态
如 果 系 统 能 按 某 种 顺 序 ( 如 P4 , P1,…,Pn, 称为安全序列)为每个进程分 配其所需的资源,直至所有进程都能运行 完成,称系统处于安全状态。 若不存在这样一个安全序列称系统处 于不安全状态。
3. 我们通过一个例子来说明安全性。假定系 统中有三个进程 P1 、 P2 和 P3 ,共有 12 台磁带机。进 程 P1总共要求 10台磁带机, P2 和 P3分别要求 4台和 9 台。假设在T0时刻,进程P1、P2和P3已分别获得5台、 2 台和 2 台磁带机,尚有 3 台空闲未分配,如下表所 示:
源分配算法,以达到消除死锁的目的
关于死锁的一些结论:
参与死锁的进程最少是两个 (两个以上进程才会出现死锁) 参与死锁的进程至少有两个已经占有资源 参与死锁的所有进程都在等待资源 参与死锁的进程是当前系统中所有进程的子集 如果死锁发生,会浪费大量系统资源,甚至导致系 统崩溃
3.8.1 死锁的概念
2. 消息缓冲通信
发送进程的描述: Send(m): begin 向系统申请一个消息缓冲区 P(mutex) 将发送区消息m送入新申请的消息缓冲区 把消息缓冲区挂入接收进程的消息队列 V(mutex) V(SM) end
2. 消息缓冲通信
接受进程的描述: Receive(n): begin P(SM) P(mutex) 摘下消息队列中的消息n 将消息n从缓冲区复制到接收区 释放缓冲区 V(mutex) end
3.7.1进程的通信方式
1. 主从式通信
主从式通信系统的主要特点是: ① 主进程可自由地使用从进程的资源或 数据; ② 从进程的动作受主进程的控制; ③ 主进程和从进程的关系是固定的。 主从式通信系统的典型例子是终端控制进程 和终端进程。
3.7.1进程的通信方式
2. 会话式通信
会话式通信系统的特点: ① 使用进程在使用服务进程所提供的服务之前, 必须得到服务进程的许可; ② 服务进程根据使用进程的要求提供服务,但 对所提供服务的控制由服务进程自身完成。 ③ 使用进程和服务进程在通信时有固定连接关 系。
3.7.1进程的通信方式
2. 会话式通信
用户进程与磁盘管理进程之间的通 信是会话系统的一个例子。 各用户进程向磁盘管理进程提出使用要求并得到 许可之后,才可以使用相应的存储区。而且,由磁 盘管理进程自身完成对磁盘存储区的管理和控制。 另外,用户进程与磁盘管理进程之间,只有在用户 进程要求使用磁盘存储区时才有通信关系。
消息缓冲通信就是一种直接通信方式
3.7.2 消息传递系统 间接通信方式 发送进程将消息发送到某种中间实体中 (信箱),接收进程从中取得消息。 信箱通信就是一种间接通信方式。信箱通信 广泛用于计算机网络,即电子邮件系统。
3.7.2 消息传递系统 思考:
两种方式的主要区别? 前者需要两进程都存在,后者不需要。
2、避免死锁: 不事先采取限制去破坏产生死锁的条件,而 是在资源的动态分配过程中,用某种方法去防止 系统进入不安全状态,从而避免死锁的发生。
实现较难
1. 死锁避免策略: 在系统运行过程中,对进程发出的每 一个系统能够满足的资源申请进行动态检 查,并根据检查结果决定是否分配资源, 若分配后系统可能发生死锁,则不予分配, 否则予以分配。 在检查是否死锁时,主要时检查系 统是否处于安全状态还是不安全状态。
解决死锁的方法一般可分为: • 预防死锁 • 避免死锁 • 检测与恢复
3.8.2 死锁的排除方法 1、预防死锁: 预防是采用某种策略,限制并发进程对资 源的请求,从而使得死锁的必要条件在系统 执行的任何时间都不满足。
较易实现,广泛使用,但由于所施加 的限制往往太严格,可能导致系统资源 利用率和系统吞吐量的降低。
3.7.3. 邮箱通信
邮箱通信就是由发送进程申请建立一与 接收进程链接的邮箱。发送进程把消息送往邮 箱,接收进程从邮箱中取出消息,从而完成进 程间信息交换。
邮箱实际式发送进程与接收进程之间的大
小固定的私有数据结构
只有一发送进程和一接收进程使用的邮 箱需满足的条件:
• 发送进程发送消息时,邮箱中至少要 有一个空格能存放该消息 • 接收进程接收消息时,邮箱中至少要 有一个消息存在
管道按FIFO方式传送消息,且只能单向传送消息
3.8 死锁问题
3.8.1 死锁的概念 3.8.2 死锁的排除方法
让路! 让路!
让路! 让路!
交 通 死 锁 的 示 例
3.8.1 死锁的概念 1. 死锁举例
例1:
设系统有一台打印机和一台扫描仪, 进程P1、P2并发执行,在某时刻T,进程P1和 P2 分别占用了打印机和扫描仪。在时刻 T1 ( T1>T ), P1 又要申请扫描仪,但由于扫描 仪 被 P2 占 用 , P1 只 有 等 待 。 在 时 刻 T2 ( T2>T ), P2 又申请打印机,但由于打印机 被 P1 占用, P2 只有等待。如此两进程均不能 执行完成。称这种现象为死锁。
2. 消息缓冲通信
3) 消息缓冲通信的实现 主要还是采用P,V操作实现
设公用信号量mutex 为控制对缓冲区访问 的互斥信号量,其初值为1 。设SM为接收进程 的私用信号量,表示等待接收的消息个数,其 初值为0 。设发送进程调用过程send(m)将消息 m 送往缓冲区,接收进程调用过程Receive(m) 将消息m从缓冲区读往自己的数据区
3.7 进程通信 进程通信的概念 进程之间的信息交换称为进程通信 进程通信按通信内容可分为: 控制信息的传送 大批量数据传送
把进程间控制信息的交换称为低级通信, 把进程间大批量数据的交换称为高级通信。
3.7.1进程的通信方式 在单机操作系统中,进程间通信可 分为4种形式:
主从式; 会话式; 消息或邮箱机制; 共享存储区方式。
4.破坏环路条件
系统中的所有资源都有一个确定的唯一号码, 所有分配请求必须以序号上升的次序进行 例如:系统中有下列设备:输入机(1),打印 机(2),穿孔机(3),磁带机(4),磁盘 (5)。有一进程要先后使用输入机、磁盘、打 印机,则它申请设备时要按输入机、打印机、磁 盘的顺序申请
4.破坏环路条件
3.7.1进程的通信方式 4. 共享存储区方式 共享存储区方式不要求数据移动。两个需要 互相交换信息的进程通过对同一共享数据区 (shared memory)的操作来达到互相通信的 目的。这个共享数据区是每个互相通信进程的 一个组成部分。 如生产者-消费者问题中的有界 缓冲区
3.7.2 消息传递系统
死锁的预防策略: 1.在系统设计时确定资源分配算法,保
证不发生死锁
2.具体的做法是破坏产生死锁的四个必 要条件之一
1. 破坏资源的互斥条件
例如允许进程同时访问某些资源等
不能解决那些不允许被同时访问的资源 时所带来的死锁问题,比如打印机等