电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

进程通信范文

来源:文库作者:开心麻花2026-01-071

进程通信范文(精选7篇)

进程通信 第1篇

进程通常被定义为一个正在运行的程序的实例, 它由两个部分组成:一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。另一个是地址空间, 它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。他们工作在不同的地址空间中这也就限制他们之的通信, 而实际的开发中经常可能遇到后台系统需要通过回前台UI进程通知用户一些消息, 这样两个进程之间就不可避免地产生通信的需求。幸运的是Windows提供了很多进程间能通信的方法, 如:剪贴板、窗口消息、共享内存、管道、套接字等, 接下来只讨论共享内存方式进程间通信。

共享内存方式的进程间通信流程大体如下:

首先, 通过CreateFileMapping设定一块共享内存区, 下面是其函数原型:

通过CreateFileMapping产生一个file-mapping核心对象, 再通过:

其次, 用共享内存指针指向的内存在进程间传递数据。

最后, 清理 (Cleaning up)

下面就来看一个通过共享内存实现进程间通信的例子。

2 内存映射文件类设计

根据要实现的功能这里先设计一个管理内存映射文件的类。把对内存映射文件的基本操作封闭一下, 这样可以方便于实现进程间复杂的数据交换。现在来看一下这个类里面要实现的方法, 这里列出类的声明:

这里为内存映射文件设计了一个简单的文件格式:

文件的前四个字节很简单, 就是文件内存放消息的个数, 这样能知道要读取多少个消息。上面列出来类的功能方法, 接着再看几个关键方法的实现。

2.1 创建并打开文件 (CreateFile)

2.2 向文件写入指定字节的数据

2.3 从文件中读取指定字节的数据

2.4 关闭文件

有了这个自定义类的帮助, 下面消息的接收将会很方便, 现在再看看消息的接收控制类设计。

3 消息控制类设计

消息控制类用来控制消息的发送接收, 设计它的目的是为了将发送消息时与具体的进程间通信的方式隔离开, 能平滑地过渡到其他方式上去。消息的属性包括标题、内容、发送时间、序号、类型, 由此需要先定义一个结构用于存放消息, 下面来看一下类的具体声明与消息结构定义, 具体声明如下:

同样这里也列出几个关键的类方法实现, 具体看一下这些代码:

3.1 对象初始化

3.2 接收客户端服务进程序的消息

3.3 向客户端的服务进程序发送消息

上面是消息控制类的声明和部分实现它主要控制消息的接收与发送, 提供一个统一的接收发送消息的接口, 同样也可在其内部实现其它方法的进程间通信。

3.4 进程间通信的实现

这节具体来看一下怎么应用这个两个类。这里新建了一个简单的对话框工程, 在对话框面版上添加发送与接收数据的按钮, 这样就可以利用这两按钮向另一进程发送或接受另一进程发送的数据, 再添加两个与之对应的EDIT控件, 这就完成了测试程序的用户界面, 接下来看发送数据按钮事件里的代码:

再看一下接受数据按钮事件处理函数代码:

除了将刚才设计的两个类的文件加入工程, 同时还有一个地方需要添加一些代码, 那就是在StdAfx.h中添加如下代码:

需要注意#define PROCESS1, 这个预定义用来控制编译出两个程序。先把它注释掉, 编译出来一个RELEASE版本, 再把它放开来编译出一个DEBUG版本, 然后用这两个版本的程序来测试这两个类。

4 结语

进程间通信:信号量 第2篇

。{ cout<<“Come Over!”<SetStr(“this is semaphore message!!”); sleep(1);//让线程写的速度慢于线程读的速度,可以 //看到互斥等待访问并不影响正常的需求, } return (void*) 0;}void* Read(void *arg){ sem *sm = (sem *)arg; while(1) { cout<GetStr.c_str()<

//下面是Makefile

Linux进程间管道通信的研究 第3篇

对于多用户、多任务的操作系统, 资源的分配和管理是以进程为单位的。出于保护的目的, 进程间的资源必须相互独立。但为了能完成特定任务, 进程间也需要通信, 例如, 传递参数、发送消息或相互间执行同步操作, 因此进程间的通信机制可以说是操作系统中重要的组成部分之一, 它是整个系统得以有条不紊运行的基础。

Linux系统支持多种进程间通信 (Inter-Process Communication, IPC) 机制, 包括信号、管道、信号量、消息队列、共享内存区和套接字等。其中以管道通信最能体现Linux平台的特色。本文系统分析了Linux平台下管道通信的实现机制, 详细探讨了无名管道和有名管道的工作方式。

1管道技术简介

1.1管道基本概念

在进程间进行通信的最简单方法是通过文件, 其中一个进程写文件, 而另一个进程读文件。这种方法虽然简单, 但很容易在内存空间和读文件的时间上造成浪费。基于这些缺点, 出现了管道。管道实际上就是在进程间开辟一个固定大小的缓冲区, 把需要发布信息的进程运行写操作, 而需要接收信息时进行运行读操作。管道是进程之间的一个单向数据流, 把一个进程的标准输出和另一个进程的标准输入连接在一起。

在Linux中, 运行命令:

ls –l | sort

就可以建立了这样一个管道:获取ls的输出, 再将它作为sort命令的输入。可以形象说成是数据沿着管道从左边流到了右边。

管道最适合在进程之间实现生产者/消费者的交互, 有些进程往管道中写入数据, 而另外一些进程则从管道中读出数据。

1.2无名管道和有名管道

无名管道也称匿名管道, 它的存在是临时性的, 该类型管道在实际应用中会经常使用到。在Linux系统中使用pipe系统调用创建, 它可被同族进程共享存取, 当所有的进程都结束使用某个无名管道时, 内核便回收它的i节点。

有名管道也称FIFO, 使用mkfifo或mknod创建, 类似于一般的普通文件, 它和匿名管道的数据结构及操作非常类似。

FIFO与管道不同之处就在于它提供了一个路径名, 并以FIFO的文件形式存在于文件系统中。这样, 即使与FIFO的创建进程不存在亲缘关系, 只要访问该路径, 就能够彼此通过FIFO相互通信, 因此, 通过FIFO不相关的进程也能交换数据。

FIFO严格遵循队列的先进先出顺序, 即:对管道以及FIFO的读是从开始处返回数据, 对它们的写则把数据添加到末尾。它们不支持诸如lseek () 等文件定位操作。

1.3管道的特点

管道是Linux支持的最初Unix IPC形式之一, 具有以下特点:①管道是半双工的, 数据只能向一个方向流动;需要双方通信时, 需要建立起两个管道; ②只能用于父子进程或者兄弟进程之间 (具有亲缘关系的进程, 有名管道则突破了这一限制) ;③单独构成一种独立的文件系统:管道对于管道两端的进程而言, 就是一个文件, 但它不是普通的文件, 它不属于某种文件系统, 而是自立门户, 单独构成一种文件系统, 并且只存在于内存中;④数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾, 并且每次都是从缓冲区的头部读出数据。

2管道的实现机制

当进程创建一个管道的时候, 系统内核同时为该进程设立了一对流, 一个流从该管道获取数据 (read) , 另一个流用于管道的输出数据 (write) 。图1显示了进程和管道间的相互作用。

从图1中可以看到进程和管道是如何通过句柄进行数据交换的。首先进程通过句柄fd[0]向管道中写入数据 (write) , 同时通过fd[1]再从管道读出数据 (read) 。事实上, 在系统内核中, 每个管道都存在一个看不到的结点, 它是用一个inode结点来表示的。

如果管道只被用来与单个进程通信是没有任何意义的, 因为在实际应用中建立一个同自己通信的管道是没有用处的。为了解决这个问题, 在主进程中使用了fork函数, 用来创建一个自身的子进程, 用于子进程继承父进程打开所有文件的句柄。利用继承的句柄, 就可以实现父/子之间的通信。这个关系可以用图2来描述。

无名管道在创建时就自动打开, 并且生成内存inode节点 (这个节点不可见) 、dentry目录项对象和一个读操作、一个写操作, 其内存对象和普通文件一致, 所以读写操作使用的是同样的文件接口, 当然读写函数是专用的。因为无名管道不能显式打开, 所以只能由父子进程之间、兄弟进程之间或者其它有亲缘关系并且都继承了祖先进程的管道文件对象的两个进程间通信使用。

命名管道可由任意两个或多个进程间通信使用, 因为它有文件名和磁盘i节点。命名管道的使用方法与普通文件类似, 都存在打开、关闭、读、写这样的过程, 但读写的内部实现和普通文件不同, 而和无名管道一样。

3管道的操作

3.1无名管道

3.1.1 无名管道创建函数pipe

#include

int pipe (int fd[2])

返回两个文件描述符:一个向管道写入fildes[1], 一个从管道读出filedes[0]。失败返回-1, 导致比每个用户进程限制更多的文件描述符被打开 (errno=EMFILE) ;或内核的打开文件表溢出 (erro=ENFILE) 。在POSIX的定义中, 一个文件描述符使用之前另一个文件描述符必须关闭。而在Linux中提供了一个新的解决办法:每个管道的文件描述符仍然都是单向的, 但是在使用一个描述符之前不必把另外一个文件描述符关闭。

3.1.2 无名管道读函数read

ret = read (fd[0], p, n)

在管道的情况下, read方法在read_pipe_fops表项指向pipe_read () 函数。

利用read () 系统调用, 从一个管道大小 (要读取的管道缓冲区的字节数) 为p的管道中读取n个字节, 则可能有以下几种结果, 如表1所示。

这个系统调用可能以两种方式阻塞当前进程:①当系统调用开始时管道缓冲区为空;②管道缓冲区没有包含所有请求的字节, 写进程在等待缓冲区的空间时曾被置为睡眠。

读操作可以在非阻塞下完成, 在这种情况下, 只要所有可用的字节 (即使是0个) 被拷贝到用户地址空间中, 读操作即可完成。

只有在管道为空, 而且当前没有进程正在使用时, read () 系统调用才会返回0。

3.1.3 无名管道写函数write

ret = write (fd[1], p, n)

在管道的情况下, write方法在write_pipe_fops表项指向pipe_write () 函数。

利用write () 系统调用, 向已有p个未用字节的管道中写入n个字节的数据, 则可能有以下几种结果, 如表2所示。

如果两个或者多个进程并发地写入一个管道, 那么任何少于4 096个字节的写操作都必须是原子的, 而不能与其它进程对同一个通道的写操作交叉进行。但是, 超过4 096个字节的写操作可以不是原子的, 也可以强制调用进程睡眠。

如果管道没有读进程, 那么任何对管道执行的写操作都会失败。在这种情况下, 内核会向写进程发送一个SIGPIPE信号, 并停止write () 系统调用, 使其返回一个EPIPE出错码, 这个出错码就是损坏管道的意思。

3.1.4 无名管道关闭函数close

关闭写端则导致读端read调用返回0;关闭读端, 则导致写端write调用返回-1, errno设定为EPIPE, 在写端write函数退出前, 进程还会收到SIGPIPE信号 (默认处理是终止进程, 该信号可以被捕捉) 。

3.2有名管道

3.2.1 有名管道创建函数mkfifo

#include

#include

int mkfifo (const char * pathname, mode_t mode)

其中pathname为创建后FIFO的名字, 是一个普通的路径名。mode与打开普通文件的open () 函数中的mode参数相同。FIFO被创建后, 就可以使用普通的I/O系统调用来访问FIFO, 比如open () 、read () 、write () 和close () 等。

3.2.2 有名管道打开函数open

FIFO文件创建完成后, 要使用open系统调用打开该文件方可使用, open函数原型为:

int open (const char *path, int oflags)

其中, path参数指定文件的具体路径和文件名, oflags参数指定了打开方式, 传统打开方式有O_RDONLY、O_WRONLY和O_RDWR 3种, 对于FIFO文件来说, O_RDWR方式不可用, 因此, 若想实现进程之间的双向通信, 需要使用两条管道, 即创建两个FIFO文件方可进行。此外, 还有另外一个辅助的O_NONBLOCK标志常量, 使用时与O_RDONLY或O_WRONLY进行逻辑或运算后作为oflags参数值, 若使用该标志, 则将以非阻塞方式打开, 否则, 默认为使用阻塞方式打开。

当已有一个进程因为写而打开该FIFO时, 如果当前打开操作是为读而打开FIFO时, 则打开当前操作将成功返回;否则, 可能阻塞直到有相应进程为写而打开该FIFO (当前打开操作设置了阻塞标志) ;或者, 成功返回 (当前打开操作没有设置阻塞标志) 。

当已有一个进程因读而打开该FIFO时, 如果当前打开操作是为写而打开FIFO时, 则当前打开操作将成功返回;否则, 可能阻塞直到有相应进程为读而打开该FIFO (当前打开操作设置了阻塞标志) ;或者, 返回ENXIO错误 (当前打开操作没有设置阻塞标志) 。

3.2.3 有名管道读写和关闭函数

Linux在对有名管道进行读写的时候, 必须处理在写进程打开FIFO之前对该有名管道的打开, 同时也必须在写进程写数据之前处理读进程对管道的读。除此以外, FIFO几乎和管道的处理完全一样, 而且它们使用一样的数据结构和操作。

4管道的缺点

管道提供了从一个进程向另一个进程传输数据的有效方法, 但是, 管道还是存在一些不足:①因为读数据的同时也将数据从管道移去, 因此管道不能用来对多个接受者广播数据;②如果一个管道有多个读进程, 那么写进程不能发送数据到指定的读进程。同样, 如果有多个写进程, 那么没有办法来判别是它们中的哪一个发送的数据;③管道中的数据被当作数据流, 因此无法识别信息的边界。如果写进程发送不同长度的数据对象通过管道, 那么读进程不能确定发送了多少个对象, 或者它不能确定对象的边界;④虽然有名管道能使相互无关的进程通信, 但它们一般来讲不能用于跨越一个网络的进程, 也不容易为不同的进程建立多条通路。另外从效率上考虑, 因为管道线要生成多进程, 所以应当尽量避免使用不必要的管道线。例如如下两个命令虽然实现同样的功能, 但是管道的执行效率要低一些:

cat hello1 hello2 | lp

lp hello1 hello2;

⑤管道的缓冲区是有限的 (管道制存在于内存中, 在管道创建时, 为缓冲区分配一个页面大小) ;⑥管道所传送的是无格式字节流, 这就要求管道的读出方和写入方必须事先约定好数据的格式, 比如多少字节算作一个消息 (或命令、或记录) 等等。

5结束语

基于Linux平台下的进程之间通信方式很多, 其中以Linux平台的特色来说, 管道通信最能体现这种特色。文中详细讨论了Linux平台下的管道通信, 介绍了无名管道和有名管道, 指出了无名管道可用于具有亲缘关系进程间的通信;而有名管道不仅具有无名管道的所有功能外, 它还可以用于无亲缘关系进程间的通信。

参考文献

[1]DANIEL BOVET, MARCO CESATI.深入理解linux内核[M].陈莉君, 冯锐, 牛欣源, 译.北京:中国电力出版社, 2004.

[2]郑彦兴.Linux环境进程间通信——管道及有名管道[D].长沙:国防科技大学, 2002.

[3]毛德操, 胡希明.Linux内核代码情景分析[M].杭州:浙江大学出版社, 2001.

进程通信 第4篇

关键词:Linux,通讯方式

1. 进程通信的基本概念

进程间通信 (IPC) 指的是至少两个进程间传送数据或者信号的一些技术和方法, 进程是计算机系统分配资源的基本单位, 每个进程都有自己的一部分独立的系统资源, 彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作, 才有了进程之间的通信。

2. 进程通信的分类

操作系统中进程间传递的信息量有多有少, 因此根据进程通信时信息量大小的不同, 可以将进程通信划分为两大类型, 一种类型主要用于传递进程之间同步、互斥、终止、挂起等控制信息的传递, 由于进程互斥与同步交换的信息量较少, 并且每次通信传递的信息量固定且效率较低, 因此称这两种通信方式为低级通信方式, 主要方式有信号量。另一种类型在进程间以较高的效率传送大量数据, 被称为高级通信方式, 主要方式有管道, 共享内存和消息队列。下面对这四种通信方式进行简单的论述。

3. 信号量

信号量也叫信号灯, 是一个确定的二元组 (S, Q) , 其中S是个具有非负初置的整形变量, 表示的是临界资源的实体。信号量的值有以下两种情况:

1) 代表可用资源的数量, 此时Q的队列为空。

2) 代表由于等待此种资源而被阻塞的进程的数量, 也就是Q队列中进程的个数。

信号量的值仅能由P、V操作进行改变, 其中p操作和v操作是不可中断的程序段, 称为原语操作, 它是典型的同步机制之一。每执行一次P操作表示分配一个该类资源给执行P操作的进程, 因此P操作将信号量的值减1, 当信号量的值小于0时, 表示已经没有这类资源可供分配了, 所以请求资源的进程将被阻塞而被插入到Q的等待队列当中。此时, 信号量的绝对值等于Q队列中进程的个数, 即等待分配该类资源的进程数。执行一次V操作意味着进程释放出一个该类可用资源, 因而V操作是将信号量的值加1。因信号量的值小于等于0表示在该信号量的等待队列中有请求该类型而被阻塞的进程, 因而应把该信号量等待队中的队首的进程唤醒, 即进程的状态由阻塞状态变为活动就绪状态。

信号量的创建:Linux系统中使用semget (key, n Semes, flag) 来创建一个信号量, key是标识信号量的关键字, n Semes表示创建信号量的个数, flag表示为信号量存取权标志与建立标志。

信号量的操作:Linux系统中采用semop (semid, sops, nsops) 来实现对信号量的操作, semid为关键字值, 由semget返回得来, 第二个参数是指向将要操作的数组的指针, nsops为数组sops的大小。

4. 管道通信方式

管道是Linux支持的最初Unix IPC形式之一, 当两个进程利用管道进行通信时, 发送信息的进程称为写进程, 接收信息的进程称为读进程。管道通信方式的中间介质就是文件, 通常称这种文件为管道文件.它就像管道一样将一个写进程和一个读进程连接在一起, 实现两个进程之间的通信。写进程通过写入端 (发送端) 往管道文件中写入信息, 读进程通过读出端 (接收端) 从管道文件中读取信息。管道具有如下特点:

1) 管道是半双工的, 数据只能向一个方向流动, 数据只能由写的一方向读得一方流动。

2) 单独构成一种独立的文件系统:管道对于管道两端的进程而言, 就是一个文件, 成为管道文件, 但它不属于某种文件系统, 而是自立门户, 单独构成一种文件系统, 并且只存在与内存中。

3) 数据的读出和写入:管道建立时, 通信两端的任务都是被固定了的, 也就是说, 一端只能用于读, 而另一端只能用于写, 写入的内容每次都添加在管道缓冲区的末尾, 并且每次都是从缓冲区的头部读出数据。

5. 消息队列

消息队列的基本思想是:系统管理一组消息缓冲区, 并称之为消息缓冲池, 其中每个消息缓冲区存放一条消息。消息实际上就是一组信息。当一个进程要发送消息时, 首先向系统申请一个消息缓冲区, 写入消息后将其连接到接受进程PCB所指示的消息队列。接受进程在适当的时候从其消息队列中取得消息, 并立即释放该消息缓冲区, 交回给系统管理。

消息队列就是一个消息的链表。就是把消息看作一个记录, 并且这个记录具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读出消息。

Linux采用消息队列的方式来实现消息传递。这种消息的发送方式是:发送方不必等待接收方检查它所收到的消息就可以继续工作下去, 而接收方如果没有收到消息也不需等待。这种通信机制相对简单, 但是应用程序使用起来就需要使用相对复杂的方式来应付了。新的消息总是放在队列的末尾, 接收的时候并不总是从头来接收, 可以从中间来接收。

Linux中定义了一个名为msgbuf的数据结构来表示消息, 并利用MSGGET () 来创建一个消息队列, 然后返回这个消息队列的标识号, 然后调用MSGSND () 向一个消息队列发送一个消息, 接收进城通过MSGRCV () 来从一个消息队列中收到一个消息。在通信双方进行通信的过程中, 系统可以利用MSGCTL () 在消息队列上执行指定的操作, 更具参数的不同和权限的不同, 可以执行检索、删除等得操作。

共享的消息队列是一个临界资源, 针对同一消息队列的诸发送和接收进程必须保证互斥进入, 这种进程间的同步和互斥是由系统提供的系统调用自动实现的, 所以用户在使用时不需要再考虑它们之间的同步关系, 非常方便。

6. 共享内存

除上述几种通信方式之外, Linux还提供了正文段, 也就是程序段的共享, 当若干进程需要对公共数据区中的数据进行频繁操作时, 共享内存的通信方式是一种很有用的通信机制, 而且是以一种效率较高的进程通信机制。其基本思想是:系统管理一组共享内存控制块, 当用户程序进程需要使用共享内存段时, 使用SHMGET () 系统调用申请一个共享内存段, 系统位置分配存储空间和建立有关的数据结构, 并返回该共享内存段的标识符shmid, 然后系统调用SHMAT () 将由标识符shmid标识的共享内存段附加到进程地址空间, 一旦将一个共享内存段连接到进程逻辑地址空间后, 进程可以像访问其私有数据段一样存取该共享内存段中的数据。当不在使用共享内存时, 由系统调用SHMDT () 将由参数定位的共享内存段脱离调用进程的数据段。在此期间, 可以使用系统调用SHMCTL () 查询由shmid标识的共享内存段的状态和设置有关参数, 对共享内存段进行控制。

共享内存通信与消息缓冲通信有很多类似之处:都是使用一个id来标识一个IPC目标, 通过使用GET (msgget, shmget) 来建立一个IPC目标, 都要进行权限检查等来实现通信。不同点是:共享内存一旦附接后就作为进程地址空间的一部分提供给进程使用对于该共享内存的读写操作如同对进程私有的缓冲区一样。操作系统不再关心进程间是如何使用这个共享内存, 更无法进行干预。

7. 各种通信方式的比较和优缺点。

如果用户传递的信息较少。或是需要通过信号来触发某些行为, 信号量不失为一种简捷有效的进程间通信方式。但若是进程间要求传递的信息量比较大或者进程间存在交换数据的要求, 就需要考虑高级通信机制。无名管道简单方便。但局限于单向通信的工作方式, 并且只能在创建它的进程及其子孙进程之间实现管道的共享。有名管道虽然可以提供给任意关系的进程使用, 但是由于其长期存在于系统之中, 使用不当容易出错.所以普通用户一般不建议使用。

消息缓冲可以不再局限于父子进程, 而允许任意进程通过共享消息队列来实现进程间通信, 并由系统调用函数来实现消息发送和接收之间的同步, 从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题, 使用方便, 但是信息的复制需要额外消耗CPU的时间, 不适宜于信息量大或操作频繁的场合。共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息, 无须复制, 快捷、信息量大是其优点。但是共享内存的通信

1概述

在列车的信号控制系统方面, 因为轨道的信号所处的环境比较差, 因此它的传输速率会比较低, 还不可以支持高速铁路的快速发展。其中信号系统指能够保证高铁列车的安全和加快运行的速率。而信号系统是指控制着列车指挥与运行的设备, 虽然它的投资总额在整个高速铁路工程中占的比率比较小, 然而在一些方面有着十分关键的作用, 比如加强通行力度、确定高速铁路的安全和提高工作者的坏境等。

在80年代, 国外就着手于开发利用无线通信技术的高速铁路信号系统, 并且能够经过无线通信可以实现一些功能, 比如可以减少系统的成本、降低能源的利用、减少高铁列车的时间间隔、提高高铁的管理职能。在高铁的列车速度加快以后, 要想确保高铁的安全, 一定要增多信号的数量, 必须加大资金的投入。而在高速铁路的交通之中运用一些十分先进的信号系统会是一种积极的方法, 还有在全球的一些发达国家中的交通运行方面可以表明:在高铁中仅仅具有着比较好的信号系统才会十分好的来实现另外的技术设备能力。

2无线通信技术的高速铁路信号系统中的特征及问题

当前先进的无线通信技术为:红外、蓝牙、2.4GHz以及433MHz频段, 在速度比较高的高铁列车上, 当距离比较小时, 就能够利用以上这些无线通信技术;然而假如距离比较远的时候, 那么同时也要无线通信的距离比较远, 这样就能够实现少用或者不用中继。

高速铁路信号系统可以作为列车指挥的控制系统, 在高铁列车运行的时候, 能够经过全球定位系统和信标来完成高铁列车中速度与位置的保证, 当高铁车站中的无线接收设备得到信息之后, 可以把这些信息送到执行控制的计算机中完成任务, 那么在利用通信技术的高铁信号系统的特征有:

(1) 在重要的控制系统中, 高铁列车能够根据本身及其操作状态来调节, 从而完成电脑的辅助调整, 加大高速铁路信号系统的管理职能。

(2) 在重要的控制系统中, 能够更加稳定地控制高铁列车的运行, 这样不仅可以避免高铁列车在运作的情况下进行多余的发动及加快速度, 而且还能够节约资源。

(3) 去掉了一些地面上的信号装备, 从而减少了信号系统中装备的维护以及修整的资金。

(5) 自动实现高速铁路中列车次号的改变。要想完成通过通知高铁列车来改变车次号, 该系统必须有车次号及其机号的情况, 将这些情况传送到集群系统。之后该系统能够依据以前保存的车次号及其机号的情况, 因此这些就可以自动完成车次号及车机号交方式是通过将共享的内存缓冲区直接附加到进程的虚拟地址空间中来实现的。

不同的进程通信方式有不同的优点和缺点。因此, 对于不同的应用问题, 要根据问题本身的情况来选择进程间的通信方式

(4) 信号系统具有极强的适用能力, 能够加快高铁列车的速度, 可以调节软件系统中的一些参数。

然而在利用了无线通信技术的高速铁路信号系统中, 也存在着一些问题: (1) 在信号系统中使用环线设备和应答器件来得到一些数据资料, 但是它的缺陷是:只有在高铁列车运行过接下来的应答器之后, 其中一些信息获取更新, 此时时刻上的延迟可能会为高铁列车的运作带来非常不好的影响。 (2) 利用轨道之间的电缆电线来完成高铁列车与地面之间的双向传输, 其缺点在于存在着较为困难的防盗系统、一些装备具有较高的成本费用。 (3) 在高铁信号系统中利用轨道电路的缺陷有:比较差的传送环境、很小的传送频率, 比较小的传输量, 因此使得电码的传送速率与高速铁路列车的运行速度不太符合。

3无线通信在高铁信号系统中的实际应用

在实际中的一些应用有:

(1) 自动实现通话组之间的变动。由于经过工作站来实现通话组之间的变动, 所以在移动台中的通话组变换可以自动完成。目前, 当高速铁路中的一些列车台属于列车运行的范围内时, 会管理这个列车范围段, 但是如果它处于正规的路线范围内时, 就应该作为高速铁路列车的调度管理范围, 所以高铁列车中的通话组列车台就能够实现变换。

(2) 中继器。首先将无线基站设置在所有的高速铁路中, 这样就能够增多成本, 还有这样一点意义也不存在, 所以最后可以运用中继器来实现基站能够管理一些路线及车站。其中基站不仅能够管理该基站区域里面的场强, 而且能够经过中继器可以将一些射频的信号送到管理的站区, 反之也可以实现。

(3) 经过移动的终端把在维修处的一些系统中用到维修部与防护部, 在重要的控制系统中把一些数据存储在高速铁路的列车上面。只有在高速铁路中的列车与这些点比较相近的时候, 他们经过一些地面上的系统, 将重要的一些报警信息传入移动的终端。

(4) 在高速铁路中的列车定位中涉及到了无线通信技术, 比如应答器、GPS以及雷达等实现定位的方法。

浅析无线通信技术的高速铁路信号系统中的应用

陈艳斌

(北京通信段秦皇岛车间, 河北秦皇岛066001)

要:目前随着高速铁路不断向智能信息化进行发展, 那么铁路信号系统就会在无线通信技术领域提出比较严格的要求。同时无线通信不仅能够减少高速铁路信号系统的成本, 还可以确保高速铁路的安全。文中首先分析了利用无线通信技术在高速铁路信号系统中的特点以及问题所在, 然后重点分析了无线通信技术在高速铁路信号系统中的应用。摘

关键词:无线通信;高速铁路;信号系统;轨道

中图分类号:U238

文献标识码:A

换, 这些使得客户的呼叫有了很大的好处。

(6) 实现集中的调度。在系统的调度之中, 仅仅依据一段区域中的闭塞分区以及高铁列车车站的使用状况, 多数情况下要了解高铁列车的运作状况。但是在无线通信技的重要控制系统中能够比较准确的了解所有高速铁路列车的速度及其位置, 根据线路的信号系统情况, 能够与所有的高铁列车实现双向的数据通信, 并且传送一些控制指令, 从而能够控制着高速铁路的列车速度, 且能够实时的来掌握高铁中的列车情形, 也确保了高铁列车能够在最短的时间间隔内实现安全、稳定且快速地来运作。

(7) 实现微机的联锁。通过一些接口单元来接收全部从重要的控制系统中发来的操作执令, 首先约束着道岔以及一些在信号机中的行为, 然后再把获得的道岔和信号机的情况传递给重要的控制系统。再经过无线的信道、装备与电缆之间的连接以及控制系统中的关系, 这样就能够约束一些具有辅助作用的系统。其中无线通信技术能够用到微机的联锁中, 首先在正在使用的装备处必须要安置无线的接收以及发送设备, 而且这样就会加大资金投入, 然后由于大型高速铁路列车车站内的信号机及道岔的数量比较繁多, 而且还具有很多的障碍物和干扰物, 因此这些对于无线控制方面十分不利。

结束语

如果能够在高速铁路中的列运用无线通信, 这样就不仅可以降低工作力度以及很好的减少费用, 而且还能够使得建设高速铁路信号系统的步伐加速。现在高速铁路中对于无线通信的运用仍然处于初期, 然而由于高速铁路信号系统在列车信号系统以及系统安全等领域的要求越来越高, 因此无线通信将会十分好的用于高速铁路信号系统之中。

参考文献

[1]Wolfgang Kink.无线通信实现控制方案高效化[J].现代制造, 2009, (30) .

[2]陈永生, 徐金祥.上海轨道交通信号制式的多样性及其对策[J].城市轨道交通研究, 2002

[3]徐昕.浅析我国高速铁路的现状与发展[J].新疆石油教育学院学报, 2009, (06) .

[4]陈莎莎, 杨宁, 田辉等.利用中继提高小区高数据速率覆盖的研完[J].无线电工程, 2008 (2) [5]程纪平, 傅勇.铁路中间站无线通信系统[J].铁道通信信号, 2010 (10) .

[6]于修舜, 孙广富.无线数字通信网络在交通管理中的应用[J].电信技术, 2003 (11) .

参考文献

[1]史杏荣, 杨寿宝.操作系统原理与实现技术[M].北京:中国科学技术大学, 1997.

[2]陆静, 胡明庆, 几种进程通信方法的研究和比较[J].福建电脑, 2007.

[3]Tanenbaum.Modern Operating Systems[M].2009年.

进程通信 第5篇

关键词:posix,IPC,消息队列,minix,微内核

在支持并发的操作系统中,进程间通信是必不可少的功能之一。在诸多“类unix操作系统”中,就提供了如:管道、信号、共享内存、信号量、消息队列等方式。

著名的微内核操作系统minix目前正在不断发展之中,其社区不断壮大,也有一些国内大学参与其中[1]。minix期待做成posix兼容的系统,然而,minix相对于其他“类unix系统”(如linux)而言,还不完善;其进程间通信功能尚有欠缺,比较明显的是:没有提供posix“消息队列”功能与接口。这自然会影响到unix环境下应用程序在minix系统下的兼容性。

本文的意义在于:一方面,提供posix消息队列接口,能很大程度上提高minix操作系统的软件可移植性;另一方面,在微内核环境下实现这一功能,将须要面对“地址空间隔离”等在宏内核下不曾遇到的问题,而解决这些问题正是本文的重点。

Minix是一款著名的微内核操作系统,是由荷兰Vrije大学的Tanenbaum教授领导开发的一个类unix操作系统,最早发布于1987年。起初,minix只是面向教学用途,Tanenbaum教授在其著作中作为范例。如今、已经发展到了minix3版本(当前为3.1.8),Tanenbaum教授及其团队正致力于将minix发展成为具备高可靠性的实用操作系统。

minix3相比之前的版本经过了大幅度的改造,已经把驱动程序和大部分系统功能移到内核之外以服务进程的形式存在,内核被精简到约4千行代码的规模,内核本身只负责中断处理和消息等(其结构如图1所示)。操作系统的各种功能,如“内存管理”“文件系统”“进程调度”等等以及各“驱动程序”都被独立出来,成为单独的进程。而相互之间的通信,必须通过minix提供的“消息”机制。

经过快速发展,minix已经得到很大程度的完善。但是,仅就“进程间通信”而言,尽管增加了“异步消息”,但是这种消息机制与之前的“同步消息”模型一样,都仅限于“用户进程”与server进程之间,或者各server相互之间的通信时使用。换言之,这种“消息”主要是作为系统调用的途径。并且在操作系统编译时便被固定了,用户进程之间无法使用。

本文所设计的“消息队列”为minix提供了一种非常有效的IPC方式,能很大程度上提高minix的软件兼容性及可移植性。

因为文中涉及两种“消息”的概念,为避免混淆,下文将用message表示minix本身的底层“消息”,而本次新增的“消息队列”相关的“消息”则保持不变。

1 消息队列模块设计与实现

要在微内核环境下实现消息队列,并不像在Linux等宏内核中一样简单。总体上看,设计消息队列,似乎只要用“链表”等数据结构管理消息,在此链表上进行消息的插入、取出等操作就可以了。事实并非如此。要实现这一模块,有几个关键问题需要解决:

(1)在微内核结构中增加诸如mq_open等消息队列相关系统调用的方法;

(2)同样是由于微内核结构的特殊性,必须解决消息发送、接收过程中,消息内容在两个地址空间之间拷贝的问题;

(3)由于posix标准的要求,“消息队列”需要有“文件”特性。这又增加了模块间的依赖。

1.1 追加系统调用

Minix中的系统调用有其特殊性,必须依靠kernel提供的message机制。用户进程通过库函数产生一个特定格式的message,发送给特定的server进程,serve调用相应的函数完成此系统调用功能,再返回message给用户进程。所以,实际上minix真正的系统调用只有send、receive、send_rec三个message相关的调用,用户见到的“系统调用”,实际上是对message的封装罢了[7]。

我们很自然地将“消息队列”模块放在“IPC”这个服务进程当中(以下简称IPC),因为这里已经包含了“共享内存”和“信号量”功能。每追加一个系统调用,需要增加一种“message格式”,并增加对应于此message的执行函数。

1.2 实现消息拷贝

在宏内核结构的Linux中,当执行mq_send向某消息队列插入消息时,内核代码可以同时访问内核与用户进程的“地址空间”,可以直接完成消息的拷贝工作。可是,在minix中情况却大不相同。因为IPC进程有自己的地址空间,并且处于“用户态”,要将用户进程的消息复制到本进程,显然不是简单的“内存拷贝”可以完成的。经过分析,有如下方案存在一定的可行性:

(1)一种想法是:此类问题是“微内核”特殊结构所引起的。如果相关的功能在真正的kernel(内核)下完成,问题也就不存在了。这样我们需要设计一个真正以“软中断”方式实现的系统调用,并把执行函数放在kernel中。对于一些不得不在“内核态”完成的动作,这种方案也有其合理性。

(2)用户的地址对于IPC进程“不可见”,那么修改页表映射使得它“可见”便是一个可行的方案。minix中的VM进程是负责“虚拟内存管理”的server进程(以下简称VM),通过它,实现了对虚拟内存“映射关系”的控制。所以,我们可以向VM发送“请求”,将用户进程中消息内容所在的内存区域映射到本进程中。完成拷贝操作后,紧接着再“解除映射”。一次消息拷贝需要两次请求VM的服务。

(3)还有另外一种方案,既然VM管理了所有进程的“内存映射”,那么,有一种很直接的想法:将“拷贝”的任务交给VM去完成。尽管在VM的内部,也需要进行“重映射”等操作,但是可以将向VM发送消息的机会减少到一次,相对前一方案效率上有改进。

最终我们选择了第二种方案,主要是出于符合“minix设计思想”的考虑。minix的kernal力求简单,像“进程管理”、“内存管理”等工作都在kernel之外完成。为了更好地保持这种“微内核”的特性,我们不应该随意地将功能添加进内核;在VM进程中添加与“虚拟内存管理”这一主题不相关的事情,也不符合模块的功能划分。性能上的考虑相对而言并不关键,为了完成一个用户请求,而在minix内部的几个server间产生多次相互调用的情况在并不少见。

至此,一个mq_send的执行方式已经清楚了(如图2)。但是还有一个关键问题需要解决,就是“重映射”问题。尽管VM中原先已经提供了remap接口,但此接口实际上是为“共享内存”功能设计的,要求映射的地址必须是所在段的首地址,并且此内存段应该是带有VR_SHARED标记的“共享内存段”,可见我们并不能直接使用它。所以,我们仿造remap接口,去除上述的限制条件,实现了面向“消息队列”服务的remap_mq接口(以及对应的unmap接口)。其原型如下:

1.3 伪文件系统实现

熟悉Posix IPC的都知道,与System V很不同,它并不用一个唯一的数值ID来代表一个对象,而是用“名字”来标识一个“IPC对象”[8]。每个“消息队列”都关联一个文件(inode),当然,此文件并不实际存在于磁盘上。所以,Posix的消息队列实际上也是一个存在于内存中的伪文件系统。每次对某一消息队列的操作,都得通过“名字”定位到inode,再间接找到队列结构(mq_inode_info)本身。用户也可以通过标准的文件系统操作,比如ls命令,查看某一队列的大小等参数(如图3中黑色箭头所示)。

VFS进程是minix3中的文件系统抽象层(以下简称VFS),等同于Linux中的“虚拟文件系统”层。为符合Posix标准,我们须要在“消息队列”模块中,管理“超级块”、inode、dentry等结构,还要实现与VFS的交互。增加VFS调用接口本来是一件费时费力的工作。好在,minix3提供了VTreeFS框架。VTreeFS为实现伪文件系统提供了一套基本接口框架,minix中的ProcFS、DevFS都是基于它实现的。通过VTreeFS,我们可以接受和处理来自于VFS的访问请求。这样一来,我们的工作变得轻松许多。我们只需要实现一部分必须的回调函数,比如,用于挂载文件系统的init_hook,用于查询inode的read_hook等。有关VTreeFS的具体内容,可参阅minix3相关文档[9]。

主要的数据结构如图4所示。每个mq_inode_info结构体包含一个inode结构体。当VFS通过VTreeFS接口找到inode之后,可以“反向计算偏移量”,得到mq_inode_info的首地址,而此结构体包含了一个队列的大部分参数、状态信息。这些信息被当做此队列“文件”的内容向用户显示。

1.4 异步事件通知

Posix消息队列支持“异步事件通知”;即,当有消息被放到一个原来为空的队列时,可以通知特定进程;通知方法包括:产生一个信号,或创建一个线程来执行指定的函数。由于System V版本的消息队列并不支持这一特性,“异步事件通知”可以说是Posix的一个优势,能很大程度上简化应用程序的设计。可以使用户进程(线程)避免阻塞于msgrcv调用。

由于Solaris等许多unix系统都不支持“启动线程”通知,并且目前minix对线程的支持也不足。所以,我们仅实现了“信号通知”方式,这使我们的设计简化不少。

2 分析评估

我们成功实现了minix下的“消息队列”,目的已经达到;相对而言,性能与速度并不是考虑的重点;保持minix的模块功能独立性,同样是我们设计的出发点。

对于minix而言,在各个模块间的“message依赖”是影响效率的重要因素。在我们实现中,mq_send相对来说复杂程度较高,其间要产生3次message通信。这样的系统调用对于minix来说并不算复杂。

3 结论

我们的工作,从一开始就希望能够借鉴Linux中的相关实现。然而,我们的实现却无法像Linux的实现那样简单。因为模块间的隔离,我们经常需要处理模块间的依赖和通信。这可能也是minix目前缺少开发者和使用者的原因之一。但是,这种隔离,带来的好处是显而易见的,其稳定性、灵活性都值得人们期待,我们期待着minix能得到广泛应用。

参考文献

[1]陆冠群,胡光,涂时亮.基于Minix的进程间通信系统的设计与实现.计算机系统应用,2010;19(7):1—5

[2]刘海鹏,张根度.Minix新增系统调用的设计与实现.小型微型计算机系统,2002;23(4):489—491

[3]刘福岩,尤晋元.一种提高微内核效率的有效方法.上海交通大学学报,2000;34(7):952—959

[4] Tanenbaum A,Woodhull A,陈渝,操作系统设计与实现(上册)(第3版).北京:电子工业出版社,2007

[5] Love R,陈莉君.Linux内核设计与实现(第2版).北京:机械工业出版社,2006

[6] Tanenbaum A,Appuswamy R,Bos H.Minix 3:status report and cur-rent research.http://www.usenix.org/publications/login/2010-06/opeopenp/tanenbaum.pdf.June 2010

[7] Herder J N,Bos H,Gras B.Modular system programming in minix 3.The USENIX Magazine April 2006,Volume 31,Number 2

[8] IEEE,Standard for Information Technology—Portable Operating Sys-tem Interface(POSIX).http://standards.ieee.org/develop/wg/POSIX.html 2004

进程通信 第6篇

一个优秀的冶金过程控制系统,可以为用户提供一个敏捷、有弹性、精细化的生产环境,帮助企业降低成本和提高产品质量。冶金过程控制系统开发过程中,由于涉及到不同的工艺流程和种类繁多的硬件类型,系统按照功能和作用范围被划分为一个全局资源管理系统和若干功能高度内聚的子系统,这些系统通过通信网络连接在一起,服从统一的管理,协调工作,共同完成生产任务,因此,在这个系统中,进程之间高效率、高可靠性的通信至关重要。

进程通信,简单来说就是在不同进程之间传播或交换信息。在过程控制系统开发中,进程间通信有如下两种类型:

第1种是核心服务进程间通信,通信时不但需要快速交换大量数据,而且通信过程中往往隐含进程同步的要求。通常的做法是,使用共享内存来实现进程间大量数据的交换,同时使用互斥量来避免资源的访问冲突。另外,还需要使用信号量机制来保证进程同步。

第2种是核心服务进程与用户进程间的通信,这种通信通常不需要交换大量的数据,对通信速度要求也不高,但是它往往需要跨越计算机边界。解决这种通信问题时,以往的做法是要么借助公共数据库,在数据库中建立事件表,用户进程通过对表的查询来获取所需事件;要么使用Socket套接字编程,用户进程通过TCP/IP协议实现与核心服务进程的通信。

由此可见,为了满足以上两种不同类型进程间通信的需求,在系统开发过程中,开发人员至少需要使用两种以上的进程通信技术,而且这些技术本身难度就很高,掌握并熟练使用这些技术并不是每个开发人员都能做到的,更何况他们还需要关注与控制过程相关的业务逻辑。因此,根据以往的经验,在开发该类系统的时候,要在相同或者相似的问题上消耗开发团队大量的时间和精力,而且开发出来的产品往往还存在可靠性、可复用性、兼容性等方面的问题[1]。

为了简化进程间的通信过程,统一进程通信接口标准,降低冶金过程控制系统开发难度并提高软件产品质量,在使用Windows操作系统的计算机上,我们选择使用中间件技术开发进程通信中间件,以满足核心服务进程间通信和进程同步的要求;同时,为了实现使用Windows操作系统的多台计算机(核心服务进程与用户进程)之间的进程通信,在进程通信中间件的基础上,开发了分布式进程通信代理器,搭建起分布式进程通信系统,从而屏蔽了分布式通信时网络环境和底层技术的复杂性,使开发人员面对简单而统一的开发环境,减少了程序设计的复杂性,缩短了开发周期,减少了系统维护、运行和管理的工作量。分布式进程通信系统如图1所示,图中1~n和a~m是进程的唯一身份标志[2]。

2010年,北京首钢自动化信息技术有限公司自主研发的分布式进程通信系统在京唐钢铁公司和首秦金属材料公司连铸过程控制系统中得到了应用,系统稳定,效果良好。

下面就分布式进程通信系统的关键组成部分中间件和通信代理器的开发设计进行介绍。

1进程通信中间件的开发

1.1技术的比较与选择

在进程通信中间件的开发中,我们先后使用不同的技术手段,开发了多个通信中间件原型,比较典型的是基于COM+松散耦合事件(LCE)的进程通信中间件和基于Windows API(应用程序编程接口)函数的通信中间件。其中,基于COM+松散耦合事件的进程通信中间件,在使用 Microsoft Visual Studio 2008 C++ 动态模板库(ATL)开发时效率很高,但是在分布式系统部署时却遇到了非常棘手的问题。由于COM+通信安全依赖于Windows操作系统的安全策略,在面对多样的网络结构和不同硬件环境时,即使全部都使用Windows操作系统,仍然会因为系统版本的不同、域或工作组的不同等导致中间件工作异常,而网络和硬件的差异又不可能消除,因此这给维护和部署工作带来了很大的麻烦。相比之下,使用Windows API函数进行中间件开发时,更容易在异构网络和硬件平台下解决通信问题;同时,使用 API 函数也可为日后在非Windows操作系统环境中开发通信中间件积累更多的经验,为分布式进程通信系统留出足够的可扩展空间[3]。因此,我们最终选择使用Windows API函数进行中间件开发。

1.2进程通信中间件设计

当一个进程与另一个进程通信时,通常需要具备3个基本要素:(1)通信对象识别,负责确定通信双方的身份和权限;(2)数据传递,负责将调用参数和执行结果在通信双方间传递;(3)时序控制,负责协调通信过程中的时序控制。 为此,我们在中间件设计中,将每个可以与其他进程进行通信的进程定义为一个服务,为每个服务设置一个固定的身份标志;定义一个类库LServiceCell,以标准化数据输入输出过程;为每个通信服务提供一组时序控制标志,它由1个服务互斥量、1个请求互斥量和2个信号量组成。图2给出了我们设计的进程通过中间件通信的时序关系。

在图2中,我们使用PowerDesigner面向对象模型中的时序图画法:服务进程(当一个进程对外提供可调用接口时,该进程被称为服务进程)、进程通信中间件、客户进程为通信对象,用方框表示;服务声明、输入参数、服务应答为消息传递过程,用实线加空心箭头表示;调用服务为调用过程,用实线加实心箭头表示;输出参数为返回过程,用虚线加空心箭头表示。具体操作如下:(1)服务声明,创建服务进程通信所需的时序控制标志;(2)调用服务,客户进程锁定请求互斥量;(3)输入参数,触发事件调用信号量;(4)服务应答,触发事件应答信号量;(5)输出参数,将服务进程的处理结果返回给客户进程并重置控制标志。

中间件产生的初衷是为了减少程序设计的复杂性,因此,我们设计的进程通信中间件接口也很简捷,只有4个:初始化接口(Initialize())、服务监听接口(WaitApply())、服务调用接口(ApplyService())和服务响应接口(SendReply())。

接口实现的核心内容是如何在接口中封装来自不同进程间的数据交换操作,并实现操作过程的同步与互斥。我们的设计思想是:使用由中间件自主管理的共享内存作为数据交换的缓冲池,在中间件内部使用互斥量控制数据访问,并使用事件量实现事件的等待机制和应答机制。这样,通过使用进程通信中间件,共享内存、互斥量和事件量以及过程同步等原本复杂的操作过程现在对于需要实现通信的进程双方来说几乎是透明的,进程的设计者就像调用进程内某一对象的公共函数一样来调用另一个进程。

通过初始化接口(Initialize()),进程声明自身所承载的、为下一步进程通信所做的必要的准备工作,如创建通信资源并对这些资源初始化。

初始化工作完成后,进程调用服务监听接口(WaitApply())进入事件等待状态,以接受客户进程的调用。调用此接口时,有定时等待和永久等待两种等待模式,通常可能得到三种结果:等待事件发生、等待超时、有错误发生(如内存分配失败等)。参照该接口的返回状态,进程可以选择执行相应的操作。WaitApply()流程图如图3所示。

当服务处于事件等待状态时,客户进程可以调用服务调用接口(ApplyService()),将服务进程的身份标志和输入参数传递给中间件,中间件将数据写入缓冲池,然后触发相应的事件量。ApplyService()流程图如图4所示。

服务进程收到客户进程的调用请求并从缓冲池提取相应的输入参数后,执行预定的处理过程,然后通过服务响应接口(SendReply())将处理结果返回给客户进程,完成数据传递后重置控制标志。SendReply()流程图如图5所示。

2分布式进程通信代理器的开发

分布式系统是若干个子系统的集合,子系统间应该可以平行地相互作用,并且具有高度的网络透明性和功能内聚性。为此,在进程通信中间件的基础上我们设计了分布式进程通信代理器,实现分布在不同计算机上的进程之间的通信功能。通过通信代理器的使用,网络拓扑对于进程是透明的,需要通信的进程间只需要知晓彼此的身份标志即可。

简单来说,通信代理器是一个基于TCP连接的对象请求程序,它本身也是进程通信中间件的一个应用,代理器通过通信请求服务表(简称服务表)来识别对象的物理位置,而这个服务表通常由全局资源管理系统来统一维护。

通信代理请求分为2种:(1)本地请求,本地计算机上的进程请求与另一计算机上的进程通信;(2)远程请求,另一计算机上的进程请求与本地计算机上的进程通信。

代理器启动时,首先根据服务表,确认并登记本地服务;然后,它自动与系统中其他代理器建立连接,连接成功后,把本地服务表广播给其他代理器,并从其他代理器获取对方的本地服务表;之后,代理器将所有获得的远程服务声明为由自己处理。

代理器收到本地请求时,执行以下步骤:(1)确认请求有效性;(2)打包并将数据发送给远程代理器;(3)等待远程代理器返回;(4)解包将结果返回给进程通信中间件。代理器本地工作流程图如图6所示。

代理器收到远程请求时,执行以下步骤:(1)确认请求有效性;(2)解包并完成服务调用过程;(3)等待服务进程返回;(4)打包并将数据发送给远程代理器。远程代理请求流程图如图7所示。

无论是本地请求过程还是远程请求过程,对于服务进程和客户进程来说网络都是透明的,通信中间件与通信代理器的连接、代理器与其他代理器的连接通过配置参数自动完成,客户进程可以与网络中任意位置的服务进程通信,而不必关心这个服务究竟运行在何处[4]。

3应用效果

进程通信中间件开发完成后,于2010年7月在京唐钢铁联合有限公司全自动高效连铸机过程控制系统中得到了应用。2010年10月,在首秦金属材料公司2号连铸机过程控制(二级)系统中,我们使用了进程通信中间件和分布式进程通信代理器,基于Windows 操作系统,搭建了分布式进程通信网络。以上中间件和通信代理器的应用,使进程间的通信变得更加简便,开发人员仅需面对4个统一接口,即可实现原本复杂的分布式进程通信工作,显著降低了应用系统的开发难度,减少了程序设计的复杂性,缩短了开发周期。两系统自投用至今运行稳定,尚未发生过任何通信故障,有效地支撑了二级系统的稳定运行。

然而,分布式进程通信还仅仅是分布式系统开发中的一小部分,构建一个具有高分布式性、高通信性、高稳健性的分布式系统架构,还需要解决跨语言、跨平台等技术问题,这也是我们下一步努力的方向。

摘要:在冶金计算机过程控制系统中,软件系统通常按照功能和作用范围不同划分为若干个子系统。为使这些子系统协调工作,需解决分布式进程间的通信问题。为此,北京首钢自动化信息技术有限公司自主研发了分布式进程通信系统,采用进程通信中间件解决进程间通信问题,同时采用进程通信代理器解决计算机之间的通信问题,并在Windows操作系统环境下成功地搭建了分布式进程通信网络。目前该系统已在京唐钢铁公司和首秦金属材料公司连铸过程控制系统中得到了应用且运行稳定。实践证明,该系统性能优越、可靠性强且简单易用。

关键词:进程通信,中间件,代理器,分布式系统,过程控制,冶金

参考文献

[1]左永红.网络架构优化在京唐烧结厂自动化系统中的应用[J].冶金自动化,2010(增刊2):488-492.

[2]伽玛,Richard Helm,Ralph Johnson,等.设计模式:可复用面向对象软件的基础[M].李英军,马晓星,蔡敏,等,译.北京:机械工业出版社,2000:137-143.

[3]罗晓沛,侯炳辉.系统分析师教程[M].北京:清华大学出版社,2003.

进程通信 第7篇

关键词:新形势,通信行业,改革,人力资源管理

一、通信行业人力资源管理的重要意义

1. 适应知识经济新时代的发展要求。

随着信息技术的不断发展, 通讯行业也取得了良好的发展前景, 通信行业成为支撑我国经济快速增长的支柱性产业。随着市场化的不断改革, 通信行业也经历了企业改革, 在企业改革过程中对企业人力资源的管理十分重要。知识经济时代, 人才是企业发展的重要支柱, 而人力资源管理在企业的发展中占据重要作用。通信行业要不断加强人力资源管理, 才能在知识经济时代突破自身的发展局限, 实现技术上的创新和发展, 在新时代下更好地适应社会发展。

2. 增强企业市场竞争力的需要。

面对市场的激烈竞争, 通信行业要想在市场中占有一席之地, 并通过市场的竞争促进自身发展, 必须在新时代开发新的产品和业务。新产品和业务的开发需要行业优秀人才的共同努力和创新, 因此企业的人力资源管理十分重要。培养优秀的企业人才才能从根本上提升企业竞争力。通信行业现有的人力资源十分有限, 要通过人力资源管理为企业培养出更多人力资本, 为企业发展创造更多价值。通过人力资源管理, 转化人力资本, 优化人力资源结构, 为通信行业的发展提供市场竞争的重要保障。

3. 实施人才战略的需要。

企业的发展对人才的需求越来越大, 人力资源本身具有很大价值, 会随着经济的发展而不断上升, 因此企业人力资源的管理目的就是为了吸引更多优秀人才, 给人才提供更多选择。通信企业通过人力资源管理, 提供高效的人力资本策略, 为吸引更多的通信人才做出重要保障。在人力资源的管理过程中坚持以人为本的管理理念, 进行不断创新, 注重人才技能和能力的培养, 提升人才的素养和通信技术能力, 为企业发展奠定良好的人才基础。

二、提高通信企业人力资源管理的具体措施

1. 树立现代化的人力资源管理理念。

企业的发展依靠人力资源的拓展, 人力资源为企业发展提供内在的发展动力。随着经济知识时代的到来, 人力资源在通信企业的地位逐渐提升, 甚至超过了企业的资金和机械的价值。中国通信行业的人力资源管理与国外相比存在较大差距, 不利于企业的顺利发展。因此在新形势下, 中国通信行业应当重视人力资源管理, 把人力资源管理提升到战略层次上来。在人力资源管理中树立现代化的管理理念, 发挥人力资源的重要作用。

2. 提高绩效考核与评价的科学性和公平性。

通信行业经过全新的改革, 企业规模不断扩大, 岗位需求也不断增加。企业资源管理部门应明确划分员工职责, 并将员工的绩效考核和岗位职责联系起来, 建立公平合理的绩效考核制度。对人力资源进行相应的约束和管理。在人力资源管理上实现岗位和薪酬相联系的岗位职责制度, 调动员工工作的积极性和责任心, 使企业在发展中协调运作, 使员工在岗位上实现自己的最大价值, 为企业发展做出贡献。

3. 提高人力资源管理的重视程度。

企业有效的人力资源管理办法就是合理控制企业的人才流失, 在企业人力资源管理过程中要提高人力资源管理部门对人才管理的重要性的认识, 提高员工待遇, 加强对员工的技能培训, 防止人才流失。同时, 通信行业的发展要与现实情况相结合, 为企业的未来发展着想, 为企业内部员工创造更多晋升机会, 优化企业环境, 提高员工的职业道德修养和综合素养, 促进企业人力资源整体的聚合力, 为企业的长远发展做出贡献。

4. 做好人力资源的培训工作。

人力资源管理中要提高员工的综合素养和职业能力, 建立合理的职业培训管理工作和培训机制, 定期对员工进行职业技能和知识培训, 并对技术人员进行专业考核, 以提升通信技术人员的技能水平, 从而有效提升企业的发展实力。

三、结语

人力资源管理对通信行业的发展起着至关重要的作用, 为企业的发展提供高效的人力资本。在新的知识经济的时代背景下, 通信行业必须提高对人力资源管理重要性的认识, 培养员工的专业技能, 为企业的长远发展做出贡献。

参考文献

[1]张琳.浅谈通信企业人力资源管理中的问题与优化措施[J].中国管理信息化, 2012 (15) :92-93.

[2]籍晨香.通信工程企业人力资源管理现状及优化浅析[J].人力资源管理, 2010 (2) :36, 38.

[3]姜跃霞.浅析通信产业服务企业如何加强人力资源管理[J].经营管理者, 2014 (2) :158-159.

进程通信范文

进程通信范文(精选7篇)进程通信 第1篇进程通常被定义为一个正在运行的程序的实例, 它由两个部分组成:一个是操作系统用来管理进程的内核...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部