QNX手册学习笔记——IPC(4)

读QNX_Neutrino_RTOS_System_Architecture的IPC的POSIX message queues和shared memory部分。
QNX不仅提供了前面介绍了进程或线程间的同步传输所采用的默认消息传送机制,也提供了非阻塞的队列消息传送机制。
      相对于默认的传送数据地址的消息传送方式,什么情况下采用数据队列传送方式呢?队列消息传送方式,发送方不需要被阻塞。由于消息队列独立于进程,因此当各种进程超时操作多个带名字的对列时,采用消息队列传送的设计方式(我对此场景还是有疑惑)。注意,采用消息队列的传送方式由于有拷贝过程,速度更慢。
      当进程之间需要传递大块数据时,可以选择共享内存的方式。此方式是带宽最大的消息传递方式。由于对共享内存的访问是异步的方式,因此多个进程需要采用信号同步的方式。对于颗粒度小的共享内存块,如果采用此种共享的方式,由于引入了信号同步机制,则将会使得传送带宽变小,得不偿失。Sermaphore通常用于不同进程之间的共享内存同步;而mutex则用于不同线程之间的共享内存同步。
     共享内存可以与前面所讲的同步消息传送结合使用。二者结合使用的有点是,既利用了同步消息传送的同步机制,又用到了共享内存的不需要在消息传送过程中的数据拷贝的优势。值得注意的是共享内存的方式不能用于网络间不同的主机,而同步消息传送机制却可以。实际应用中,同步消息传送机制通常可以满足时间的要求,因此没有必要采用共享内存的方式,以增加复杂度。
     在一个进程中的多个线程默认共享该进程的内存。但是如果在进程之间共享内存需要单独创建共享内存对象,并映射到进程地址中。
    mmap函数是将内存块映射到线程地址,是内存管理的基石。
    对于双端口共享内存的访问,不能进行缓存,否则由于硬件的更改而使用过期的数据。 

你可能感兴趣的:(【QNX】)