手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Unix 多进程编程

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

能够让子进程退出系统.这种处理方式一般不要消息传递.
(2)信息协调方式
若是应用程式需要由多个进程协调处理完成,则能够生成这些进程,
通过消息在进程间的传递,使各个进程能相互协调,一起完成事务.这种处
理方式一般是用fork()生成几个进程后,用exec()调用其他程式文档,使
得不同的程式同时在系统内运行.然后通过IPC机制传送消息,使各个程式
能协调运行.
2.选择主体分叉点
(1)事件初始产生
对应于事件主控方式的程式结构.关键点在于以何种方式选择事件的
初始发生点,如网络程式给出的建链信息.主控程式在收到该消息后就认
为是个事件开始,则能够产生一个子进程处理后面的事务:接收交易信
息,事务处理,发送返回交易信息,关闭链接等,完成后将子进程退出系统.
(2)主程式自主产生
对应于信息协调方式的程式结构.主控程式只负责生成几个子进程,各
个子进程分别调用exec()将不同的执行文档调入内存运行,主控程式在生
成任何的子进程后即可退出系统,将子进程留在内存中运行.
3.进程间关系处理
(1)父子进程关系
. 进程组处理
进程组的概念是这样的,当系统启动时,第一个进程是init,其进程
组号等于进程号,由他产生的任何子进程的进程组号也相同,子进程
的子进程也继承该进程组号,这样,由init所生成的任何子进程都属
于同一个进程组.但是,同一个进程组的父子进程可能在信号上有相
互通讯,若父进程先于子进程退出系统,则子进程会成为一个孤儿进
程,可能变成僵死进程.从而使该子进程在其不"愿意"的情况下退出
运行.为解决这个问题,子进程能够自己组成一个新的进程组,即调
用setpgrp()和原进程组脱离关系,产生一个新的进程组,进程组号
和他的进程号相同.这样,父进程退出运行后就不会影响子进程的当
前运行.
. 子进程信号处理
但是,单做上述处理还不能解决另一个困难,即子进程在退出运行
时,很难找到其父进程(父进程已退出,子进程的父进程号改为1).发送
子进程退出信号后没有父进程做出响应处理,该子进程就不可能完
全退出运行,可能进入僵死状态.所以父进程在产生子进程前最好屏
蔽子进程返回信号的处理,生成子进程,在父进程退出运行后,子进
程返回则其进程返回信号的处理会由系统给出缺省处理,子进程就
能够正常退出.
(2)兄弟进程关系
. 交换进程号
对于信息协调方式的程式来说,各兄弟进程间十分需要相互了解进
程号,以便于信号处理机制.比较合理的方法是父进程生成一个共享
内存的空间,每个子进程都在启动时在共享内存中配置自己的进程
号.这样,当一个子进程要向另一个子进程发送信号或是因为其他原
因需要知道另一个子进程号时,就能够在共享内存中访问得到所需
要的进程号.
4.进程间通讯处理
(1)共享内存需要锁机制
由于共享内存在设计时没有处理锁机制,故当有多个进程在访问共享
内存时就会产生问题.如:一个进程修改一个共享内存单元,另一个进程在
读该共享内存单元时可能有第三个进程立即修改该单元,从而会影响程式
的正确性.同时更有分时系统对各进程是分时间片处理的,可能会引起不
同的正确性问题.按操作系统的运作方式,则有读锁和写锁来确保数据的
一致性.所以没有锁机制的共享内存,必须和信号量一起使用,才能确保共
享内存的正确操作.
(2)消息队列需要关键值
消息队列的操作在进程取得消息队列的访问权限后就必须通过关键
值来读消息队列中的相同关键值的消息,写消息时带入消息关键值.这样
能够通过不同的关键值区分不同的交易,使得在同一个消息队列能够供多
种消息同时使用而不冲突.若读消息队列使用关键值0则读取消息队列中
第一个消息,不论其关键值如何.
(3)信号需要信号处理函数配置和再配置
在用户进程需要对某个中断做自己定义的处理时,能够自己定义中断
处理函数,并配置中断处理函数和该中断相关联.这样,用户进程在收到该
中断后,即调用用户定义的函数,处理完成后用户进程从被中断处继续运
行(若用户定义的中断函数没有长跳函数或退出运行等会改变运行指令地
址的系统调用).在中断信号被处理后,该中断的处理函数会恢复成上次缺
省处理函数而不是保持用户定义函数,故在用户定义的中断处理函数中一
般都再定义该中断和函数自己的关联.
(4)IPC的权限配置
在消息队列,共享内存和信号量的访问时有用户访问权限配置,类同
于文档的访问权限的配置如(777表示rwxrwxrwx),用命令ipcs即可看到在
系统中生成的消息队列,共享内存和信号量的访问权限.其意义也类似于
文档访问权限.只是执行位无效.
在有名管道和文档方式共享内存中以系统文档的方式定义了用户的
访问权限.用命令ls -l能够看到他们以系统文档方式存在并具备访问权
限值,并能够看到有名管道的文档类型为p,文档方式共享内存的文档类型
为s.
(5)信号中断对系统调用一级有效
系统在设计系统调用时就考虑了中断处理问题.当进程运行到一个系
统调用时发生了中断,则进程进入该中断处理,处理完成后,进程会跳过该
系统调用而进入下一条程式指令.
应该注意的是中断发生在系统调用一级而不是子程式或函数一级.比
如一个程式在一个子程式被调用前配置了超时中断,并在子程式中收到超
时中断,系统在处理完超时中断后接着处理该子程式被中断的系统调用之
后的指令,而不是从调用该子程式名指令的后一条指令继续处理.
(6)各种IPC方式的特点
. 消息队列:
通过消息队列key值定义和生成消息队列.
任何进程只要有访问权限并知道key即可访问消息队列.
消息队列为内存块方式数据段.
消息队列中的消息元素长度可为系统参数限制内的任何长度.
消息元素由消息类型分类,其访问方式为按类型访问.
在一次读写操作前都必须取得消息队列标识符,即访问权.访问后即
脱离访问关系.
消息队列中的某条消息被读后即从队列中删除.
消息队列的访问具备锁机制处理,即一个进程在访问时另一个进程
不能访问.
操作时要注意系统资源和效率.
在权限允许时,消息队列的信息传递是双向的.

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!