首页 > 编程知识 正文

c++ 串口通信,进程间通信机制

时间:2023-05-05 10:00:40 阅读:38931 作者:1997

另一方面,核心1 .概念计算机由各种外部硬件设备,如存储器、cpu、硬盘等构成。 每个程序要访问硬件,必须知道如何将通信协议与硬件设备对接。 这非常麻烦,所以这项工作交给中间人-内核。 您的APP应用程序只关心与内核的交互,而不需要关心硬件细节

2 .内核功能管理进程,线程决定哪个进程? 线程使用cpu。 也就是说,cpu调度能力决定了存储器的分配和回收。 也就是说,存储器管理能力管理硬件设备,并将系统调用提供给进程和硬件设备之间的通信能力,即硬件通信能力。 运行APP应用程序以更高权限运行的服务需要系统调用。 这是用户程序和操作系统之间的接口3。 在早期操作系统中,内核是如何工作的,程序员通过设计代码直接访问硬件来提高整个APP应用程序的性能。 这种方法可以使硬件快速响应,但有严重的缺点。

通常需要内存来直接管理硬件。 如果用于编程的内存块与其他硬件或操作系统中使用的内存块发生冲突,则相关联的硬件设备将变得不稳定,或者操作系统将崩溃以直接访问硬件设备由于磁盘和磁盘文件可能损坏,因此以后可以通过将用户程序的工作存储器与操作系统的工作存储器分开来避免上述问题。内核具有很大的权限,可以控制cpu、存储器、硬盘等硬件由于APP应用程序的权限很小,所以大多数操作系统将内存分为两个区域。

内核空间:此内存空间只有内核程序才能访问用户空间。 此内存空间只有一个局部内存引用空间,APP应用程序为使用用户空间而专门修改的代码可以访问,内核空间代码可以访问所有内存空间。 因此,经常说如果程序使用用户空间,则该程序以用户状态运行;如果程序使用内核空间,则程序以内核状态运行

如果APP应用程序需要进入内核空间,则必须使用系统调用。 下图的内核程序在内核状态下执行,用户程序在用户状态下执行。 当APP应用程序使用系统调用时,会发生中断。 如果发生中断,cpu将中断当前正在运行的用户程序,并跳转到中断处理程序。 也就是说,开始执行内核程序。 内核处理完成后,自行触发中断,将cpu的执行权限返回用户程序,返回用户状态继续工作

二、进程间通信方式IPC每个进程的用户地址空间不同,一般不能相互访问,但由于内核空间是每个进程共享的,所以进程间通信必须通过内核

1 .管道有匿名管道和命名管道两种匿名管道。 未命名的标识只在内存中存在特殊文件,而不在文件系统中。 shell命令的【|】竖线是匿名管道,并且通信数据的大小受未格式化字节流的限制。 通信方式是单向的,只能用于有父子关系的进程间通信。 匿名管道声明周期是随着流程的创建而建立的。 命名管道在进程结束时消失:因为可以在非血缘关系进程之间进行通信,所以使用命名管道的前提是在文件系统中创建类型为p的设备文件,无关进程可以通过该设备文件进行通信。 其他和匿名管道一样

匿名管道和命名管道将进程写入的所有数据缓存在内核中,另一个进程读取的数据当然也将从内核中读取。 此外,通信数据遵循FIFO原则,不支持文件搜索操作

2 .消息队列支持管道通信的数据是未格式化的字节流的问题。 消息队列是存储在内核中的消息链表,消息体可以是用户自定义的数据类型,消息队列通信速度最不及时。 本来,每次写入和读取数据都需要经过用户状态和内核状态之间的复制过程

3 .共享内存解决了消息队列通信中门窗状态与内核状态之间的数据复制过程造成的开销。 直接分配一个共享空间,每个进程都可以直接访问。 它和访问进程自身空间一样快捷方便,不需要进入内核状态和系统调用,大大提高了通信速度,是最快的进程间通信方式。 但是,如果带来新的问题,多个进程竞争相同的共享资源,则会导致数据混乱

4 .信号保护共享资源,以便随时只有一个进程可以访问共享资源。 这是互斥访问。 信号量不仅可以实现访问的排他性,还可以实现过程之间的同步。 信号量实际上是一个计数器,表示资源的个数,其值可以通过两个原子操作来控制。 分别是p操作和v操作的排他信号量。 同步信号量:

5 .信号是进程间通信机制中唯一的异步通信机制,信号可以直接在APP应用进程和内核之间传递,内核可以利用信号通知用户空间中的进程发送了哪些系统事件信号事件的来源主要是硬件源(例如键盘Cltr C )和软件源(例如kill命令),SIGKILL和SEGSTOP提供了两个信号,APP应用进程可以捕捉到这些信号并不可忽略

6 .套接字上述通信机制都是同一主机,需要套接字通信才能与不同主机上的进程进行通信。 套接字实际上不仅用于不同主机进程之间的通信,而且用于本地主机进程之间的通信。 请注意,根据创建套接字的类型,在基于TCP协议的通信方式、基于UDP协议的通信方式、本地进程间通信方式TCP中,如果服务端调用accept时连接成功,则会返回一个已连接的socept 监听到的套接字和实际来发送数据的套接字是“两个”套接字,一个称为监听套接字,一个称为连接完成套接字。 连接成功后,将开始使用read和write函数读写数据,并UDP将数据写入单个文件流

UDP没有连接,所以不需要握手3次,也不需要像TCP那样调整 liste

n 和 connect,但是 UDP 的交互仍然需要 IP 地址和端⼝号,因此也需要 bind。 对于 UDP 来说,不需要要维护连接,那么也就没有所谓的发送方和接收方,甚至都不存在客户端和服务端的概念,只要有1个 socket 多台机器就可以任意通信,因此每1⼀个 UDP 的 socket 都需要 bind。 另外,每次通信时,调用 sendto 和 recvfrom,都要传入目标主机的 IP 地址和端口

本文由博客一文多发平台 OpenWrite 发布!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。