《Linux/UNIX系统编程手册》第43章 进程间通信简介
2. 通信工具
通信工具可以分为两类:
数据传输工具:区分这些工具的关键因素是写入和读取的概念。为了进行通信,一个进程将数据写入到IPC工具中UNIX 通信工具,另一个进程从中读取数据。
2. 通信工具 通信工具可以分为两类: 数据传输工具:区分这些工具的关键因素是写入和读取的概念。为了进行通信,一个进程将数据写入到IPC工具中UNIX 通信工具,另一个进程从中读取数据。 这些工具要求在用户内存和内核内存之间进行两次数据传输:一次传输是在写入的时候从用户内存到内核内存,另一次传输是在读取的时候从内核内存到用户内存。 共享内存:共享内存允许进程通过将数据放到有进程共享的一块内存中已完成信息的交换。内核通过将每个进程中的页表条目指向同一个RAM分页来实现这一功能。一个进程可以通过将数据放到共享内存块中使得其他进程读取这些数据。 共享内存相比进程间通信优点是:数据不经过内核,少一次拷贝;而且不用陷入退出内核。因此速度非常快。 2.1 数据传输 字节流:管道、FIFO、以及流socket交换的数据是一个无分隔符的字节流。 消息:通过System V消息队列、POSIX消息队列以及数据报socket交换的数据是以分隔符分隔的消息。 伪终端:特殊情况下使用的通信工具。 2.2 共享内存 三种形式:System V共享内存、POSIX共享内存、内存映射。 使用共享内存注意点: 3. 同步工具 UNIX系统提供了下列同步工具: 信号量:一个信号量是一个由内核维护的整数,其实永远不会小于0。一个进程可以增加或减小一个信号量的值。如果一个进程试图将信号量的值减小到小于0,那么内核会阻塞该操作直至信号量的值增长到允许执行该操作的程度。 文件锁:文件锁是设计用来协调操作同一个文件的多个进程的动作的一种同步方法。它可以用来协调对其它共享资源的访问。文件锁分为两类:读(共享)锁和写(互斥)锁。Linux通过flock()和fcntl()系统调用来提供文件加锁工具。 互斥体和条件变量:互斥量帮助线程同步对共享资源的使用;条件变量允许线程相互通知共享变量的状态发生了变化。 4. IPC工具比较IPC对象标识和打开对象的句柄 功能 数据传输和共享内存之间差异: 各种数据传输工具比较: 关于进程同步工具: 网络通信 socket一般用于两个域中:一个是UNIX domain,它允许位于同一系统上的进程进行通信;另一个是Internet domain,它允许位于通过TCP/IP网络进行连接的不同主机上的进程进行通信。 可移植性 System V IPC可移植性要优于POSIX IPC。 System V IPC设计问题 POSIX IPC对象记录打开的引用数,简化了何时删除对象的策略;POSIX IPC提供的接口更加简单且与传统的UNIX模型也更加一致。 可访问性 权限模型控制着哪些进程能够访问对象: 持久性 持久性指一个IPC工具的生命周期: 5. 总结 Linux提供通信工具包括:管道、FIFO、socket、消息队列、共享内存。 Linux提供的同步工具包括:信号量和文件锁。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |