基于UNIX的操作系统内核——BSD管道等
2008-04-24 14:23
417 查看
BSD管道
管道通常建立在父进程建立子进程时。管道中的数据被缓冲并以先进先出(FIFO)的方式读取。您可以使用pipe函数建立父进程和子进程之间的匿名管道,它被定义在/usr/include/unistd.h。这个函数是建立管道的最简便的方法,它将父子进程关联起来。
命名管道可以建立任意两个进程之间的通讯。一个命名管道由一个被叫做“FIFO特殊文件”的系统文件表示。一个命名管道的名字必须是对放送方和接收方都可知的。
注意,您要合理地取命名管道的名字,以防止不必要的名字冲突。
管道是进程通讯的有效方式。但是一般而言,流较管道效率更高。CFStream支持Run Loop,使得它支持进程之间的多重连接,而不仅仅是如管道一般一对一的。
需要CFStream的更多信息,请看CFNetwork Program-ming Guide(http://developer.apple.com/documentation/Networking/Conceptual/CFNetwork/Introduction/chapter_1_section_1.html)。
共享内存
共享内存是一段内存区域,它被一个进程创建并可以被其它进程读取或写入。有很多建立共享内存的方法,一种方法是使用/usr/include/sys/shm.h头文件中的shm_open,shm_unlink,和mmap函数。共享内存的读取由POSIX信号量实现,它实现了一种锁定(locking)的机制保持资源的一致性。相比其它进程通讯方法,共享内存具有如下优势:
• 任何进程具有足够权限都可以访问共享内存区域
• 数据被进程直接读取,而不是被拷贝
• 性能佳
共享内存的缺点在于它比较脆弱。当一个数据结构损坏时,所有的进程都会受到影响。从安全性上考虑,共享内存也仅适合于单个用户会话的情况。所以,共享内存仅仅适合于保存源(raw)数据,如像素或音频,作为一种比其它通讯方式更为方便的手段。
要更多的了解shm_open,shm_unlink和mmap函数,请看shm_open,shm_unlink和mmap的man page。
Apple Event
Apple Event是一种从语义上较为高层的事件,它可以向应用程序本身发送,向远程计算机发送或向本地计算机的其它应用程序发送。Apple Event是Mac OS X上应用程序之间通讯和实现脚本(scripting)的主要手段。应用程序可以使用Apple Event向其它程序请求服务,也可以在接受Apple Event时通过Apple Event处理器(handler)提供服务。
Apple Event有一个定义良好的数据结构,支持可扩展的,层次化的数据类型。为了让脚本编写人员和其它编程人员更方便的接受这些信息,你的应用程序应该支持Apple定义的标准的Apple Event。如果你要提供更多的功能,则可以自定义添加。
Apple Event是Application Services支援框架(umbrella framework)。更多信息,请看Apple Events Programming Guide。关于如何建立,发送和接受Apple Event,请看Apple Event Manager(http://developer.apple.com/documentation/Carbon/Reference/Apple_Event_Manager/index.html)。
Distributed Notification
Distributed Notification是一种进程向消息中心(notification center)投递的消息,然后由消息中心投递到其它需要这种消息的所有进程。一台计算机有一个消息中心,所有进程都可以都可以向其投递消息,然后由消息中心派发。这种消息包含有表示投递者的ID和一些附加的重要信息。Distributed Notification的机制由Core Foundation的CFNotificationCenter类和Cocoa的NSDistributedNotificationCenter类实现。
Distributed Notification适合于发送简单类型的消息。比如传递一个硬件的状态信息,包括网络接口或打印机等等。然而,你不应该使用它将一些特别重要的信息用这种方式传送。Mac OS X努力将所有消息投递到适合的接受者,但这一点并不保证。
Distributed Notification的接受者无法回复消息。也不能限制一部分进程不能接受一些特定的消息,所有接受者在消息中心注册过的消息都会被接受者接受。Distributed Notifi-cation使用字符串制定一组唯一的注册码以区别不同类型的消息,所以有可能会存在命名空间冲突。
关于Core Foundation中Distributed Notification的更多消息,请看CFNotificationCenter Reference。关于Cocoa对Distributed Notification的支持,请看Notification Program-ming Topics for Cocoa(http://developer.apple.com/documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html)。
管道通常建立在父进程建立子进程时。管道中的数据被缓冲并以先进先出(FIFO)的方式读取。您可以使用pipe函数建立父进程和子进程之间的匿名管道,它被定义在/usr/include/unistd.h。这个函数是建立管道的最简便的方法,它将父子进程关联起来。
命名管道可以建立任意两个进程之间的通讯。一个命名管道由一个被叫做“FIFO特殊文件”的系统文件表示。一个命名管道的名字必须是对放送方和接收方都可知的。
注意,您要合理地取命名管道的名字,以防止不必要的名字冲突。
管道是进程通讯的有效方式。但是一般而言,流较管道效率更高。CFStream支持Run Loop,使得它支持进程之间的多重连接,而不仅仅是如管道一般一对一的。
需要CFStream的更多信息,请看CFNetwork Program-ming Guide(http://developer.apple.com/documentation/Networking/Conceptual/CFNetwork/Introduction/chapter_1_section_1.html)。
共享内存
共享内存是一段内存区域,它被一个进程创建并可以被其它进程读取或写入。有很多建立共享内存的方法,一种方法是使用/usr/include/sys/shm.h头文件中的shm_open,shm_unlink,和mmap函数。共享内存的读取由POSIX信号量实现,它实现了一种锁定(locking)的机制保持资源的一致性。相比其它进程通讯方法,共享内存具有如下优势:
• 任何进程具有足够权限都可以访问共享内存区域
• 数据被进程直接读取,而不是被拷贝
• 性能佳
共享内存的缺点在于它比较脆弱。当一个数据结构损坏时,所有的进程都会受到影响。从安全性上考虑,共享内存也仅适合于单个用户会话的情况。所以,共享内存仅仅适合于保存源(raw)数据,如像素或音频,作为一种比其它通讯方式更为方便的手段。
要更多的了解shm_open,shm_unlink和mmap函数,请看shm_open,shm_unlink和mmap的man page。
Apple Event
Apple Event是一种从语义上较为高层的事件,它可以向应用程序本身发送,向远程计算机发送或向本地计算机的其它应用程序发送。Apple Event是Mac OS X上应用程序之间通讯和实现脚本(scripting)的主要手段。应用程序可以使用Apple Event向其它程序请求服务,也可以在接受Apple Event时通过Apple Event处理器(handler)提供服务。
Apple Event有一个定义良好的数据结构,支持可扩展的,层次化的数据类型。为了让脚本编写人员和其它编程人员更方便的接受这些信息,你的应用程序应该支持Apple定义的标准的Apple Event。如果你要提供更多的功能,则可以自定义添加。
Apple Event是Application Services支援框架(umbrella framework)。更多信息,请看Apple Events Programming Guide。关于如何建立,发送和接受Apple Event,请看Apple Event Manager(http://developer.apple.com/documentation/Carbon/Reference/Apple_Event_Manager/index.html)。
Distributed Notification
Distributed Notification是一种进程向消息中心(notification center)投递的消息,然后由消息中心投递到其它需要这种消息的所有进程。一台计算机有一个消息中心,所有进程都可以都可以向其投递消息,然后由消息中心派发。这种消息包含有表示投递者的ID和一些附加的重要信息。Distributed Notification的机制由Core Foundation的CFNotificationCenter类和Cocoa的NSDistributedNotificationCenter类实现。
Distributed Notification适合于发送简单类型的消息。比如传递一个硬件的状态信息,包括网络接口或打印机等等。然而,你不应该使用它将一些特别重要的信息用这种方式传送。Mac OS X努力将所有消息投递到适合的接受者,但这一点并不保证。
Distributed Notification的接受者无法回复消息。也不能限制一部分进程不能接受一些特定的消息,所有接受者在消息中心注册过的消息都会被接受者接受。Distributed Notifi-cation使用字符串制定一组唯一的注册码以区别不同类型的消息,所以有可能会存在命名空间冲突。
关于Core Foundation中Distributed Notification的更多消息,请看CFNotificationCenter Reference。关于Cocoa对Distributed Notification的支持,请看Notification Program-ming Topics for Cocoa(http://developer.apple.com/documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html)。
相关文章推荐
- 基于UNIX的操作系统内核——Mach、驱动程序支持、BSD
- 基于UNIX的操作系统内核——Cocoa中的Distributed Object
- 基于UNIX的操作系统内核——IPC和Notification机制等
- 基于UNIX的操作系统内核——目标文件格式、调试文件格式、运行时环境、安全
- 基于Linux操作系统内核汉化大揭秘
- Hadoop基于Shell命令与底层Unix操作系统的交互
- 两本讲述Unix和BSD内核设计原理的书
- 国产操作系统可以基于BSD开发再闭源吗?
- 解决基于NT内核的操作系统启动故障
- 基于Linux操作系统内核汉化大揭秘 (1)
- 操作系统(UNIX与Linux内核信息输出过程比较)[1]
- Hadoop基于Shell命令与底层Unix操作系统的交互
- Palm将推出基于Linux内核的新操作系统
- RTLinux—基于Linux内核的实时操作系统RTLinux
- 操作系统(UNIX内核代码笔记之malloc.c 二)
- 基于ARM9的32位高端嵌入式微处理器和嵌入式操作系统内核研究
- 基于 Linux 3.X 内核的专用操作系统秒开缓存系统
- 操作系统(UNIX与Linux内核信息输出过程比较)[2]
- 基于时间片轮转多道程序内核代码分析操作系统的工作过程
- 操作系统(UNIX内核代码笔记之malloc.c 一)