Windows XP 系统进程通信机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows XP 系统进程通信机制
摘要:该文主要论述了Windows XP 系统进程通信机制。
文章描述了进程通信的概念,分
别论述了低级通信机制和高级通信机制,并进一步对其中的重要成分进行了详细的描述,另外还介绍了Windows XP的其他通信机制。
1. 进程通信的概念
进程是程序的一次执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程实体,由程序段、相关数据段及PCB组成。
在引入了进程实体的概念后,我们可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。
进程通信是指进程之间的信息交换。
根据所交换的信息量的多少分为:
低级通信进程之间交换的信息量较少且效率低。
如进程同步和互斥。
效率低
对用户不透明
高级通信
共享存储器系统指进程之间通过对共享存储区读写来交换数据。
消息传递系统指进程间的通信以消息为单位,程序员可通过通信
原语实现通信。
管道通信系统发送进程(写进程)以字符流形式将大量数据送入
管道(管道:用于连接读进程和写进程以实现它们之间通信的共享
文件),接收进程(读进程)从管道接收数据。
2.Windows XP的进程互斥和同步(低级通信)
三种同步对象:互斥对象(Mutex)、信号量对象(Semaphore)、事件对象(Event)。
它们都有一个用户指定的对象名称,不同进程中用同样的对象名称来创建或打开对象,从而获得该对象在本进程的句柄。
互斥对象:即互斥信号量,在一个时刻只能被一个线程使用。
——相关API:CreateMutex(创建一个互斥对象,返回对象句柄)、OpenMutex(打开并返回一个已存在的互斥对象句柄)、ReleaseMutex(释放对互斥对象的占用)。
信号量对象:即资源信号量,用于限制并发访问的线程数。
——相关API:CreateSemaphore(创建一个信号量对象,在输入参数中指定最大值和初值,返回对象句柄)、OpenSemaphore(返回一个已存在的信号量对象句柄)、ReleaseSemaphore (释放对信号量对象的占用)。
事件对象:用于通知一个或多个线程某事件的出现。
——相关API:CreateEvent(创建一个事件对象,返回对象句柄)、OpenEvent(返回一个已存在的事件对象句柄)、SetEvent和PulseEvent(设置指定事件对象为可用状态)、ResetEvent(设置指定事件对象为不可用状态)。
对于这三种同步对象,Windows XP提供了两个统一的等待操作WaitForSingleObject(在指定的时间内等待指定对象为可用状态)、WaitForMultipleObjects(在指定时间内等待多个对象为可用状态)
2.其他与进程同步相关的机制
临界区对象:只能用于同一进程内使用的临界区,同一进程内各线程对它的访问是互斥的。
——相关API:InitializeCriticalSection(初始化临界区对象)、EnterCriticalSection(等待占用临界区的使用权)、TryEnterCriticalSection(非等待方式申请临界区的使用权)、LeaveCriticalSection(释放临界区的使用权)、DeleteCriticalSection(释放与临界区对象相关的所有系统资源)。
互锁变量访问API:相当于硬件指令,用于对整型变量的操作,避免线程间切换对操作连续性的影响。
3. WindowsXP的信号(signal)
进程可发送信号与外界进行单向、异步通信,相当于进程的“软件”中断,每个进程都有指定信号处理例程。
Windows XP有两组与信号相关的系统调用,分别处理不同信号。
1.SetConsoleCtrlHandler:用于定义或取消本进程的信号处理例程列表中的用户定义例程。
GenerateConsoleCtrlEvent:发送信号到与本进程共享同一控制台的控制台进程组。
这一组系统调用处理的信号有5种,是Windows2000/XP特有的,包括CTRL_C_EVENT,CTRL_BREAK_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT,CTRL_SHUTDOWN_EVENT。
2.singal用于设置中断信号处理例程。
raise用于发送信号。
这一组系统调用处理的信号有6种,与传统的UNIX系统相同,包括SIGABRT,SIGFPE,SIGILL,SIGINT,SIGSEGV,SIGTERM。
4.进程高级通信的类型
高级通信机制可归结为三大类:共享存储器系统,消息传递系统以及管道通信系统。
1.共享存储器系统,指相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
把它们分成两种类型:(1)基于共享数据结构的通信方式(2)基于共享存储区的通信方式。
2.消息传递系统,是当前应用最为广泛的一种进程间的通信机制。
进程间的数据交换是以格式化的消息(message)为单位的。
不仅实现大量数据的传递,而且还隐藏了通信的实现细节,使通信过程对用户是透明的,简化了通信程序编制的复杂性,因而获得广泛应用。
它有两种方式:(1)直接通信方式(2)间接通信方式。
•直接通信方式(消息缓冲通信)
发送进程利用OS所提供的发送命令,直接把消息发送给接收进程。
–要求:发送进程和接收进程都以显式方式提供对方的标识符。
–系统提供的两条通信原语:
•Send(Receiver,message):发送一个消息给接收进程;
•Receive(Sender,message):接收Sender发来的消息;
–生产者-消费者问题的解决
repeat
…
Produce an item in nextp;
…
send(consumer,nextp);
until false;
间接通信方式(信箱通信)
发送进程把消息发送到某个中间实体(信箱),接收进程从中取得消息。
•系统提供的若干条原语
–信箱创建和撤消原语
–两条通信原语
Send(mailbox,message) 将一个消息发送给指定信箱;Receive(mailbox,message) 从指定信箱中接收一个消息;
•信箱的分类:私用信箱、公用信箱、共享信箱
3.管道,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件。
向管道提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程),则从管道接收(读)数据。
由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。
它提供了三方面的协调能力:互斥,同步以及确定对方是否存在,只有确定对方已存在时,才能进行通信。
5.消息传递系统实现中的若干问题
通信链路
–建立通信链路(显式建立链路、隐式建立链路)
–通信链路的连接方法(点-点、多点)
–通信方式(单向、双向)
–通信链路的容量(无容量、有容量)
消息格式
–消息头和消息正文
进程同步方式
–发送进程阻塞,接收进程阻塞
–发送进程不阻塞,接收进程阻塞
–发送进程和接收均不阻塞
6.消息缓冲队列通信
数据结构
–消息缓冲区
–PCB中有关通信的数据项
发送原语
–消息队列是临界资源
–申请缓冲区,置入信息
–把缓冲区挂到接收进程的消息队列上
接收原语
7.Windows XP基于文件映射的共享存储区(shared memory)共享存储区用于进程间的大数据量的通信,WindowsXP采用文件映射的机制来实现共享存储区。
在信号量等机制的辅助下,通过一个进程向共享存储区写入数据而另一个进程从共享存储区读出数据,就可以在两个进程间实现大量数据的交流。
相关系统调用:CreateFileMapping(为指定文件创建一个文件映射对象)、OpenFileMapping (打开一个命名的文件映射对象)、MapViewOfFile(把文件映射到本进程地址空间)、FlushViewOfFile(把映射地址空间的内容写入物理文件)、UnmapViewOfFile(拆除文件与本进程地址空间的映射)、CloseHandle(关闭文件映射对象)。
8. Windows XP的管道
管道是在进程间以字节流方式传送的单向通信通道,它利用操作系统核心的缓冲区实现,使用前要先建立相应的管道。
Windows XP提供无名管道和命名管道两种管道机制。
——无名管道:CreatePipe(创建无名管道)、ReadFile和WriteFile(进行无名管道的读写)。
——命名管道:是服务器进程与一个客户进程间的通信通道,采用客户-服务器模式连接本机或网络中的两个进程。
9.其他通信机制
WindowsXP邮件槽(mailslot)
一种不定长、不可靠的单向消息通信机制。
消息发送不需要接受方准备好,随时可发送。
它只能从客户进程发往服务器进程。
服务器进程负责创建邮件槽,它可从邮件槽中读消息;而客户进程可利用邮件槽的名字向它发送消息。
套接字(socket)
套接字是一种网络通信机制,它通过网络在不同计算机上的进程间进行双向通信。
Windows XP中的套接字规范称为“Winsock”。
参考文献:
Windows XP系统进程管理机制冯秋
计算机操作系统(第三版)西安电子科技大学出版社。