AIX的进程通信
IBM互联网服务器部 杨雪松
进程通信是操作系统内核层极为重要的部分。本文试图从用户的角度探讨AIX的进程通信的有关内容。
按照每次通信时交换信息的多少,可将AIX进程之间的通信分为两类:简单通信和大信息量通信。下面简单介绍它们的有关概念及实现方法。
1. AIX进程的简单通信
简单通信又称为低级通信,是指进程之间的通信是通过传递简单的控制信号来实现的。主要有以下三种方式:
-
利用睡眠SLEEP()和唤醒WAKEUP()实现进程之间的同步/互斥。SLEEP用来使调用它的进程以指定的优先级在某个队列上睡眠,而WAKEUP则用来唤醒在指定队列上睡眠的进程。二者都是由系统提供的。
-
利用系统调用WAIT()和EXIT()实现父子进程之间的同步。WAIT等待子进程运行结束,而EXIT则用来终止一个进程或程序,并把状态返回给它的父进程。
-
利用软中断信号实现同一用户的各进程之间的通信。AIX中设置了22个软中断信号(其中包括两个用户自己定义的信号),它们的符号名及功能如下表所示。
| 软中断号 |
符号名 |
功能 |
软中断号 |
符号名 |
功能 |
| 1 |
SIGHUP |
远端挂断 |
12 |
SIGSYS |
系统调用错误 |
| 2 |
SIGINT |
键入DELETE |
13 |
SIGPIPE |
PIPE只有写者无读者 |
| 3 |
SIGQUIT |
键入QUIT |
14 |
SIGALRM |
报警信号 |
| 4 |
SIGILL |
非法指令 |
15 |
SIGTERM |
软件终止信号 |
| 5 |
SIGTRAP |
断点或跟踪指令 |
16 |
SIGUSR1 |
用户定义 |
| 6 |
SIGIOT |
IOT指令 |
17 |
SIGUSR2 |
用户定义 |
| 7 |
SIGEMT |
EMT指令 |
18 |
SIGCLD |
子进程消亡 |
| 8 |
SIGFPE |
浮点溢出 |
19 |
SIGPWR |
电源失效 |
| 9 |
SIGKILL |
要求终止该进程 |
20 |
SIGWINCH |
窗口变换 |
| 10 |
SIGBUS |
总线超时 |
21 |
SIGURG |
紧急的SOCKET条件 |
| 11 |
SIGSEGV |
段违例 |
22 |
SIGPOLL |
I/O流事件信号 |
|
2. 能交换大量信息的通信
在AIX中,能交换大量信息的通信方式有以下四种:
管道通信(PIPE)
管道通信方式的中间介质是文件,通常称这种文件为管道文件。两个进程利用管道文件进行通信时,一个进程为写进程,另一个进程为读进程。写进程通过写端(发送端)往管道文件中写入信息;读进程通过读端(接收端)从管道文件中读取信息。两个进程协调不断地进行写、读,便会构成双方通过管道传递信息的流水线。
利用系统调用PIPE()创建一个无名管道文件,通常称为无名管道或PIPE;利用系统调用MKNOD()创建一个有名管道文件,通常称为有名管道或FIFO。
PIPE是一种非永久性的管道通信机构,当它访问的进程全部终止时,它也将随之被撤消;它也不能用于不同族系的进程之间的通信。而FIFO是一种永久的管道通信机构,它可以弥补PIPE的不足。
管道文件被创建后,便可对它进行读写操作,通过系统调用WRITE()和READ()来实现。通信完毕后,可将管道文件关闭,用CLOSE()来实现。
消息通信(MESSAGE)
消息通信方式以消息缓冲区为中间介质,通信双方的发送和接收操作均以消息为单位。在存储器中,消息缓冲区被组织成队列,通常称之为消息队列。
创建消息队列用系统调用MSGGET()来实现,这一步工作也被称为消息队列的初始化。在进行通信时,消息队列的发送和接收分别用系统调用MSGSND()和MSGRCV()来实现。在需要改变队列的使用权限及其它一些特性时,用MSGCTL()来实现。
共享存储段通信(SHARED MEMORY)
共享存储段通信方式允许多个进程在外部通信协议或同步/互斥机制的支持下使用同一个内存段(作为中间介质)进行通信,它是一种最有效的数据通信方式。
在进行通信之前,先创建一个共享内存段。创建共享内存段用系统调用SHMGET()来实现。映射和分离操作分别用系统调用SHMAT()和SHMDT()来实现。在需要改变共享内存段的存取权限及其它一些特性时,用系统调用SHMCTL()来实现。
信号量(SEMAPHORE)
信号量通信方式是借助一组可共享的信号量(一般情况下为25个)来实现进程之间的通信。
初始化操作用系统调用SEMGET()来实现,其目的是建立一个需要的信号量组。对信号量进行增值、减值和测试等操作时,用系统调用SEMOP()来实现。在需要改变信号量集的存取权限及其它一些特性时,用系统调用SEMCTL()来实现。
小结:
上文介绍的AIX的进程通信机制,是AIX系统内部通信的基础。在AIX中,多个进程可协同工作,共同完成同一任务,这些进程之间需要共享数据和相互交换信息。AIX的进程之间通信的手段有多种,包括简单通信和大信息量通信等。
 |