(29)-4.7 进程间通信-信号量、消息队列、共享内存_第1页
(29)-4.7 进程间通信-信号量、消息队列、共享内存_第2页
(29)-4.7 进程间通信-信号量、消息队列、共享内存_第3页
(29)-4.7 进程间通信-信号量、消息队列、共享内存_第4页
(29)-4.7 进程间通信-信号量、消息队列、共享内存_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.7进程间通信

--信号量、消息队列、共享内存信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信。信号量本身只是一种外部资源的标识。它在此过程中负责数据操作的互斥、同步等功能。当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。对信号量的值进行的增减操作均为原子操作。信号量是用来解决进程之间的同步与互斥问题的一种进程间通信机制。-2-(一)信号量是什么?-3-(二)为什么要使用信号量?多个进程可能为了完成同一个任务会相互协作,形成进程间的同步关系不同进程之间为争夺有限系统资源会进入竞争状态,形成进程间的互斥关系进程间的互斥与同步:临界资源:临界资源是在同一个时刻只允许有限个(通常只有一个)进程可以访问(读)或修改(写)的资源。访问临界资源的代码叫做临界区,临界区本身也会成为临界资源。-4-(三)信号量工作原理P操作:有可用资源(信号量值>0),则占用一个资源(给信号量值减1);没有可用资源(信号量值等于0),则被阻塞到,直到系统将资源分配给该进程。V操作:在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程。如果没有进程等待它,则释放一个资源(给信号量值加1)。信号量包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。信号量对应于某一种资源,取一个非负的整型值。信号量值指的是当前可用的该资源的数量,若它等于0则意味着目前没有可用的资源。PV原子操作的具体定义:-5-(四)信号量常用APILinux提供了一组信号量接口来对信号量进行操作,它们声明在头文件sys/sem.h中semget函数--创建一个新信号量或取得一个已有信号量semop函数--改变信号量的值semctl函数--用来直接控制信号量信息可通过man手册查看相关函数的具体使用方法-6-(五)信号量编程创建信号量或获得在系统已存在的信号量,此时需要调用semget()函数。不同进程通过使用同一个信号量键值来获得同一个信号量。初始化信号量,此时使用semctl()函数的SETVAL操作(SETVAL设置信号量集中的一个单独的信号量的值)。当使用二维信号量时,通常将信号量初始化为1。进行信号量的PV操作,此时调用semop()函数。这一步是实现进程之间的同步和互斥的核心工作部分。如果不需要信号量,则从系统中删除它,此时使用semclt()函数的IPC_RMID操作(IPC_RMID将信号量集从内存中删除)。消息队列是消息的链表,存放在内存中,由内核维护并由消息队列标识符表示。消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接受者接受的数据块可以有不同的类型。-7-(六)什么是消息队列?-8-(七)消息队列特点①只有内核重启或人工删除消息队列时,该消息队列才会被删除。②消息队列可以实现消息的随机查询。③消息队列可以双向通信,允许一个或多个进程向它写入或者读取消息。④从消息队列中读出消息,消息队列中对应的数据都会被删除。⑤消息队列的标识符在整个系统中是唯一的。-9-(八)消息队列常用函数msgget()函数语法要点消息队列的实现:创建或打开消息队列、添加消息、读取消息和控制消息队列-10-(八)消息队列常用函数msgctl()函数语法要点-11-(八)消息队列常用函数msgsnd()函数语法要点-12-(八)消息队列常用函数msgrcv()函数语法要点-13-(九)共享内存及特点共享内存指两个或多个进程共享一个给定的存储区共享内存是最快的一种IPC,因为进程是直接对内存进行存取。因为多个进程可以同时操作,所以需要进行同步。信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。共享内存特点:-14-(十)共享内存实现步骤创建共享内存,这里用到的函数是shmget,也就是从内存中获得一段共享内存区域;映射共享内存,也就是把这段创建的共享内存映射到具体的进程空间中去,这里使用的函数是shmat;使用不带缓冲的I/O读写命令对其进行操作;撤销映射的操作,其函数为shmdt。可通过man手册查看相关函数的具体使用方法-15-(十一)小结信号量+消息队列+共享内存,其实质都是通过内核提供的公共内存进行通信的。信号量(semaphore)实质就是个计数器,本质即一个可以用来计数的变量,用于实现进程间的互斥与同步。消息队

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论