IPC 是什么意思?

IPC 是什么意思?,第1张

ipc(IP CAMERA)一般指网络摄像机,网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传至地球另一端,且远端的浏览者不需用任何专业软件,只要标准的网络浏览器(如“Microsoft IE或Netscape)即可监视其影像。

网络摄像机一般由镜头、图像、声音传感器、A/D转换器、图像、声音、控制器网络服务器、外部报警、控制接口等部分组成。

安装调试

在一般的安防监控系统安装上,高清网络摄像机和普通摄像机的安装和调试方法基本相同,但必须要注意好镜头选配,因为镜头的质量不好,或者选配不好,很大程度上会影响到画面的清晰度;

例如红外夜视系统的摄像机最好选用红外镜头,而1/3英寸CCD一般配用1/3英寸的镜头,1/2英寸CCD一般配用1/2英寸镜头,安装调试时镜头的聚焦调试必须调好,特别是摄像机的后焦面要调准,很多时候镜头的聚焦不清会引起图像的模糊,达不到高清晰的要求。

先简单概括性地说说Linux现有的所有进程间IPC方式:
管道(Pipe): 在创建时分配一个page大小的内存,缓存区大小比较有限;
消息队列(Message): 信息复制两次,额外的CPU消耗;不适合频繁或信息量大的通信;
共享内存(Share Memory): 无须复制,共享缓冲区直接附加到进程虚拟地址空间,速度快;但进程间的同步问题 *** 作系统无法实现,必须各进程利用同步工具解决。
套接字(Socket): 作为更通用的接口,传输效率低,主要用于不同机器或跨网络的通信。
信号量(Semaphore): 常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段。
信号(Signal): 不适用于信息交换,更适用于进程中断控制,比如非法内存访问、杀死某个进程等。

从4个角度来展开对Binder的分析
(1)从性能的角度
数据拷贝次数: Binder数据拷贝只需要一次,而管道、消息队列、套接字都需要2次,但共享内存方式一次内存拷贝都不需要;从性能角度看,Binder性能仅次于共享内存。
(2)从稳定性的角度
    Binder是基于C/S架构的,架构清晰明朗,Server端和Client端相对独立,稳定性较好;而共享内存实现方式复杂,没有Client端与Server端之别,需要充分考虑到访问临界资源的并发同步问题,否则可能会出现死锁等问题;从稳定性角度看,Binder架构优越于共享内存。
(3)从安全的角度
    传统Linux IPC的接收方无法获得对方进程可靠的UID/PID,从而无法鉴别对方身份;而Android作为一个开放的开源体系,手机安全显得额外重要,传统Linux IPC五任何保护措施,完全由上层协议来确保。
    Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志。前面提到C/S架构, Android系统中对外只暴露Client端,Client端将任务发送给Server端,Server端会根据权限控制策略,判断UID/PID是否满足访问权限,目前权限控制很多时候是通过d出权限询问对话框,让用户选择是否运行。
    传统IPC只能由用户在数据包里填入UID/PID;另外,可靠的身份标记只有由IPC机制本身在内核中添加。其次传统IPC访问接入点是开发的,无法建立私有通道。从安全角度,Binder的安全性更高。
(4)从语言层面的角度
    大家都知道Linux是基于C语言(面向过程的语言),而Android是基于Java语言(面向对象的语句)。Binder恰恰符合面向对象思想,将进程间通信转化为对某个Binder对象的引用,调用该对象的方法。而其独特之处在于Binder对象是一个可以跨进程引用的对象,它的实体位于一个进程,而它的引用却遍布于系统的各个进程之中。Binder模糊了进程边界,淡化了进程间通信过程,让整个系统仿佛运行于同一个面向对象的程序之中。

    Binder框架定义了四个角色:Server,Client,ServiceManager(以后简称SM)以及Binder驱动。其中Server,Client,SM运行于用户空间,驱动运行于内核空间。

ServiceManager与实名Binder

Client获得实名Binder的引用
    Server向SM注册了Binder实体及其名字后,Client就可以通过名字获得该Binder的引用了。

匿名Binder
    并不是所有Binder都需要注册给SM广而告之的。Server端可以通过已经建立的Binder连接将创建的Binder实体传给Client,当然这条已经建立的Binder连接必须是通过实名Binder实现。由于这个Binder没有向SM注册名字,所以是个匿名Binder。Client将会收到这个匿名Binder的引用,通过这个引用向位于Server中的实体发送请求。匿名Binder为通信双方建立一条私密通道,只要Server没有把匿名Binder发给别的进程,别的进程就无法通过穷举或猜测等任何方式获得该Binder的引用,向该Binder发送请求。

     传统IPC方式中,数据是怎样从发送端到达接收端的呢? 通常的做法是: 发送方 将准备好的数据存放在缓存区中,通过系统API调用进入 内核 中。 内核服务程序 在内核空间分配内存,将数据从 发送方 缓存区复制到内核缓存区中。 接收方 读数据是也要提供一块缓存区, 内核 将数据从内核缓存区拷贝到 接收方 提供的缓存区中并唤醒接收线程,完成一次数据发送。这种存储-转发机制有两个缺陷:首先是效率低下,需要做两次拷贝(用户空间->内核空间->用户空间)。Linux使用copy_from_user()和copy_to_user()实现这两个跨空间拷贝。其次是接收数据的缓存要由接收方提供,可接收方不知道到底要多大的缓存才够用。只能开辟尽量打的空间或先调用API接收消息头获得消息体大小,再开辟适当的空间接收消息体。两种做法都有不足,不是浪费空间就是浪费时间。
     Binder采用一种全新策略:由Binder驱动负责管理数据接收缓存。 Binder驱动通过实现mmap()来创建数据接收的缓存空间。

    这样Binder的接收方就有了一片大小为MAP_SIZE的接收缓存区。mmap()的返回值是内存映射在用户空间的地址,不过这段空间是由驱动管理,用户不必直接访问(映射类型为PROT_READ,只读映射)。

参考文献
Android Binder机制原理(史上最强理解,没有之一)

 每次 单向通信 拷贝次数为 1,server用户空间和内核空间通过内存映射可以直接交互。

 内核4M 上层限制1m-8k(传输Bitmap过大,就会崩溃的原因,Activity之间传输BitMap)。

《Android 基础组件 全家桶》

进程间通信IPC
为什么 Android 要采用 Binder 作为 IPC 机制?
Android-Binder机制
Android Bander设计与实现 - 设计篇
Android跨进程通信:图文详解 Binder机制 原理
听说你Binder机制学的不错,来面试下这几个问题(一)
Binder学习指南
Android中的Binder机制二(匿名Binder)

ipc(IP CAMERA)一般指网络摄像机,网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传至地球另一端,且远端的浏览者不需用任何专业软件,只要标准的网络浏览器(如“Microsoft IE或Netscape)即可监视其影像。

网络摄像机一般由镜头、图像、声音传感器、A/D转换器、图像、声音、控制器网络服务器、外部报警、控制接口等部分组成。

安装调试

在一般的安防监控系统安装上,高清网络摄像机和普通摄像机的安装和调试方法基本相同,但必须要注意好镜头选配,因为镜头的质量不好,或者选配不好,很大程度上会影响到画面的清晰度;

例如红外夜视系统的摄像机最好选用红外镜头,而1/3英寸CCD一般配用1/3英寸的镜头,1/2英寸CCD一般配用1/2英寸镜头,安装调试时镜头的聚焦调试必须调好,特别是摄像机的后焦面要调准,很多时候镜头的聚焦不清会引起图像的模糊,达不到高清晰的要求。

进程间通信的各种模式

还记得咱们最初学 Linux 命令的时候,有下面这样一行命令:

这里面的竖线“|”就是一个管道。它会将前一个命令的输出,作为后一个命令的输入。从管道的这个名称可以看出来,管道是一种单向传输数据的机制,它其实是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信,我们需要创建两个管道才行。管道分为两种类型,“|” 表示的管道称为匿名管道,意思就是这个类型的管道没有名字,用完了就销毁了。就像上面那个命令里面的一样,竖线代表的管道随着命令的执行自动创建、自动销毁。用户甚至都不知道自己在用管道这种技术,就已经解决了问题。所以这也是面试题里面经常会问的,到时候千万别说这是竖线,而要回答背后的机制,管道。
另外一种类型是命名管道。这个类型的管道需要通过 mkfifo 命令显式地创建。

就是这个管道的名称。管道以文件的形式存在,这也符合 Linux 里面一切皆文件的原则。这个时候,我们 ls 一下,可以看到,这个文件的类型是 p,就是 pipe 的意思。

接下来,我们可以往管道里面写入东西。例如,写入一个字符串。

这个时候,管道里面的内容没有被读出,这个命令就是停在这里的,这说明当一个项目组要把它的输出交接给另一个项目组做输入,当没有交接完毕的时候,前一个项目组是不能撒手不管的。这个时候,我们就需要重新连接一个终端。在终端中,用下面的命令读取管道里面的内容:

一方面,我们能够看到,管道里面的内容被读取出来,打印到了终端上;另一方面,echo 那个命令正常退出了,也即交接完毕,前一个项目组就完成了使命,可以解散了。

和管道将信息一股脑儿地从一个进程,倒给另一个进程不同,消息队列有点儿像邮件,发送数据时,会分成一个一个独立的数据单元,也就是消息体,每个消息体都是固定大小的存储块,在字节流上不连续。

消息结构的定义

接下来,我们需要创建一个消息队列,使用 msgget 函数。这个函数需要有一个参数 key,这是消息队列的唯一标识,应该是唯一的。如何保持唯一性呢?这个还是和文件关联。我们可以指定一个文件,ftok 会根据这个文件的 inode,生成一个近乎唯一的 key。只要在这个消息队列的生命周期内,这个文件不要被删除就可以了。只要不删除,无论什么时刻,再调用 ftok,也会得到同样的 key。这种 key 的使用方式在这一章会经常遇到,这是因为它们都属于 System V IPC 进程间通信机制体系中。

ipcs -q 就能看到上面我们创建的消息队列对象。

发送消息主要调用 msgsnd 函数。第一个参数是 message queue 的 id,第二个参数是消息的结构体,第三个参数是消息的长度,最后一个参数是 flag。这里 IPC_NOWAIT 表示发送的时候不阻塞,直接返回。

收消息主要调用 msgrcv 函数,第一个参数是 message queue 的 id,第二个参数是消息的结构体,第三个参数是可接受的最大长度,第四个参数是消息类型, 最后一个参数是 flag,这里 IPC_NOWAIT 表示接收的时候不阻塞,直接返回。

接下来,我们可以编译并运行这个发送程序。可以看到,如果有消息,可以正确地读到消息;如果没有,则返回没有消息。

有时候,项目组之间的沟通需要特别紧密,而且要分享一些比较大的数据。如果使用邮件,就发现,一方面邮件的来去不及时;另外一方面,附件大小也有限制,所以,这个时候,我们经常采取的方式就是,把两个项目组在需要合作的期间,拉到一个会议室进行合作开发,这样大家可以直接交流文档呀,架构图呀,直接在白板上画或者直接扔给对方,就可以直接看到。可以看出来,共享会议室这种模型,类似进程间通信的共享内存模型。前面咱们讲内存管理的时候,知道每个进程都有自己独立的虚拟内存空间,不同的进程的虚拟内存空间映射到不同的物理内存中去。这个进程访问 A 地址和另一个进程访问 A 地址,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。但是,咱们是不是可以变通一下,拿出一块虚拟地址空间来,映射到相同的物理内存中。这样这个进程写入的东西,另外一个进程马上就能看到了,都不需要拷贝来拷贝去,传来传去。共享内存也是 System V IPC 进程间通信机制体系中的,所以从它使用流程可以看到熟悉的面孔。

创建完毕之后,我们可以通过 ipcs 命令查看这个共享内存。

接下来,如果一个进程想要访问这一段共享内存,需要将这个内存加载到自己的虚拟地址空间的某个位置,通过 shmat 函数,就是 attach 的意思。其中 addr 就是要指定 attach 到这个地方。但是这个地址的设定难度比较大,除非对于内存布局非常熟悉,否则可能会 attach 到一个非法地址。所以,通常的做法是将 addr 设为 NULL,让内核选一个合适的地址。返回值就是真正被 attach 的地方。

如果共享内存使用完毕,可以通过 shmdt 解除绑定,然后通过 shmctl,将 cmd 设置为 IPC_RMID,从而删除这个共享内存对象。

shm_serverc

shm_clientc

test:

ipc是IP Camera的缩写词,IP是网际协议,Camera是照相机、摄影机,IP Camera顾名思义就是网络摄像机,它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。

网络摄像机又叫IP CAMERA(简称IPC)由网络编码模块和模拟摄像机组合而成。网络编码模块将模拟摄像机采集到的模拟视频信号编码压缩成数字信号,从而可以直接接入网络交换及路由设备。网络摄像机内置一个嵌入式芯片,采用嵌入式实时 *** 作系统。网络摄像机是传统摄像机与网络视频技术相结合的新一代产品。摄像机传送来的视频信号数字化后由高效压缩芯片压缩,通过网络总线传送到Web服务器。

网络上用户可以直接用浏览器观看Web服务器上的摄像机图像,授权用户还可以控制摄像机云台镜头的动作或对系统配置进行 *** 作。网络摄像机能更简单的实现监控特别是远程监控、更简单的施工和维护、更好的支持音频、更好的支持报警联动、更灵活的录像存储、更丰富的产品选择、更高清的视频效果和更完美的监控管理。另外,IPC支持WIFI无线接入、3G接入、POE供电(网络供电)和光纤接入。

IP网络摄像机是基于网络传输的数字化设备,网络摄像机除了具有普通复合视频信号输出接口BNC外,还有网络输出接口,可直接将摄像机接入本地局域网。

扩展资料

IPC的技术特点:

1、采用符合“EIA”标准的全钢化工业机箱,增强了抗电磁干扰能力。

2、采用总线结构和模块化设计技术。CPU及各功能模块皆使用插板式结构,并带有压杆软锁定,提高了抗冲击、抗振动能力。

3、机箱内装有双风扇,正压对流排风,并装有滤尘网用以防尘。

4、配有高度可靠的工业电源,并有过压、过流保护。

5、电源及键盘均带有电子锁开关,可防止非法开、关和非法键盘输入。

6、具有自诊断功能。

7、可视需要选配I/O模板。

8、设有“看门狗”定时器,在因故障死机时,无需人的干预而自动复位。

9、开放性好,兼容性好,吸收了PC机的全部功能,可直接运行PC机的各种应用软件。

10、可配置实时 *** 作系统,便于多任务的调度和运行。

11、可采用无源母板(底板),方便系统升级。

参考资料来源:百度百科-IPC


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12731797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存