CN109815029B - 一种嵌入式分区操作系统分区间通信的实现方法 - Google Patents
一种嵌入式分区操作系统分区间通信的实现方法 Download PDFInfo
- Publication number
- CN109815029B CN109815029B CN201910023106.6A CN201910023106A CN109815029B CN 109815029 B CN109815029 B CN 109815029B CN 201910023106 A CN201910023106 A CN 201910023106A CN 109815029 B CN109815029 B CN 109815029B
- Authority
- CN
- China
- Prior art keywords
- partition
- channel
- user
- port
- operating system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Mobile Radio Communication Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种嵌入式分区操作系统分区间通信的实现方法,基于无锁的环形通道缓存,借助条件编译配置分区通信,配置使用用户通道缓存时,通道缓存在用户分区空间中定义,任务若要构造发送消息,不需要切换内核态就能对用户分区空间中的通道缓存操作,省去了用户分区空间向通道缓存的一次拷贝。本发明采用基于环形队列的通道缓冲,不依赖硬件就能实现一个写者/至少一个读者的无锁通信、或在支持CAS操作的硬件平台上实现多个写者/多个读者的无锁通信,改善了操作系统实时性能与安全性,优化了操作系统验证与测试的开销,同时还提供两个内存优化的条件编译配置选项,启用后比传统实现方式降低两次拷贝,大大降低了通信的空间开销。
Description
技术领域
本发明涉及嵌入式操作领域,尤其是一种符合ARINC-653标准的分区间通信的实现方法。
背景技术
符合ARINC-653标准的分区间通信不同于传统的进程间通信,分区间主要依赖通道和端口的通讯机制,由操作系统负责管理接收和发送消息。通道是分区对分区的一个映射。通道与端口在系统配置时就被定义,所有的分区通信由经由通道和端口的消息来传递。
传统的通道-端口实现需要在操作系统对通道缓存读写时加锁或进入临界区以保证不会出现并发安全问题,然而使用锁或临界区会对操作系统实时性能造成影响,且使用锁还有产生死锁的安全隐患,这对于安全性要求极高的嵌入式分区操作系统是不可接受的,同时也给嵌入式分区操作系统的验证与测试工作带来不便。
文献“一种基于嵌入式操作系统的分区通信方法及装置,CN201710867206.8”提出了一种基于嵌入式操作系统的分区通信方法及装置,嵌入式操作系统读取分区中待发布的消息内容并存储在本地,进而在确定分区需订阅消息时,将本地存储的消息内容写入分区的存储空间中。该专利提出的通信过程中写入和读出会有两次拷贝,这对于内存稀缺的嵌入式微控制器平台是十分昂贵的空间开销,且两次拷贝的通信时间开销也较大。
发明内容
为了克服现有技术的不足,针对传统通道-端口通信机制的有锁或有临界区实现和文献“一种基于嵌入式操作系统的分区通信方法及装置”提出的方法内存开销较大,通信效率低的缺点,本发明提出了一种无锁、可配置的分区通信的实现方法,基于无锁的环形通道缓存,借助条件编译配置分区通信。配置项主要包括是否采用用户通道缓存、是否采用内存映射机制优化通信。
本发明解决其技术问题所采用的技术方案包括以下步骤:
步骤一、配置分区间通信机制
用户根据需要,通过条件编译声明的方式配置分区通信,配置项依次是用户空间的通道缓存配置项与采用内存映射机制的优化配置项;
若用户将操作系统应用在安全关键领域,就必须严格遵循标准,不能使用用户空间通道缓存与内存映射机制;
若用户将操作系统应用在非安全关键领域,则用户空间通道缓存配置项与内存映射优化配置项根据用户需求而定,若用户需求强调可靠性,选择关闭用户空间的通道缓存配置项与采用内存映射机制的优化配置项,启用后通信消息有两次复制;若用户需求可靠性与性能兼顾,则选择开启内存映射优化配置项,启用后通信消息只有从用户空间到系统空间的一次复制;若用户需求强调性能,则选择开启内存映射优化与用户空间通道缓存配置项,启用后通信消息存储在用户空间,不需要复制;
其中用户空间的通道缓存配置项只有两个选择:Enable或False,即启用和关闭;
其中采用内存映射机制的优化配置项有两个选择:Enable或False,即启用通道内存直接映射机制和关闭,只有在启用用户空间的通道缓存时,才可启用该项优化,且该项优化依赖硬件的内存管理单元,即要求MMU的支持,若硬件不支持MMU,则该配置项只能选择False;
用户完成条件配置后,进入步骤二;
步骤二、配置用户通道缓存
若步骤一中用户配置不使用用户通道缓存,即用户通道缓存配置项为False时,直接跳转到步骤三;否则在本步骤中,用户应在用户分区空间中定义通道缓存,通道缓存CHBUFF由若干个数据块构成一组连续空间,每个数据块包含固定长度的数据;应用程序通过操作系统提供的系统调用函数,调用操作系统提供的端口操作函数从通道缓存中读写数据,通道缓存长度由用户在步骤五所描述的通道的Manifest文件中定义,位于操作系统内核分区空间中;
若在用户分区空间定义通道缓存则分区拥有对通道缓存直接读写的权限,分区内的任务若要构造发送消息,无需切换内核态就能操作通道缓存,省去了用户分区空间向操作系统分区空间的通道缓存的一次拷贝和从用户态到内核态以及从内核态返回用户态两次内核态切换;
步骤三、配置内存映射机制
若步骤一中用户配置不使用内存映射机制优化,即内存映射机制配置项为False时,直接跳转到步骤四,否则在本步骤中,内存映射机制配置项会修改操作系统发送消息的动作,操作系统不再执行从发送分区用户空间的通道缓存到接收分区用户空间的拷贝,而是利用MMU机制将发送分区的通道缓存直接映射到接收分区的用户空间中,由接收分区直接读取;接收分区对内存映射的通道缓存只有读取权限,没有写入的权限,因而没有破坏分区的内存隔离,该方式省去了从发送分区的通道缓存到接收分区的一次拷贝;
步骤四、通道静态配置
通道为一个由数据块以及通道描述符组成的结构体,由用户的Manifest文件静态配置,一个通道的Manifest文件描述ARINC-653标准规定的通道标识符、通道的发送分区标识符、通道的接收分区标识符、数据块大小和数据块数量;嵌入式分区操作系统与应用程序编译前读取Manifest中的通道描述信息,依据该描述信息在内核所在的系统分区静态分配对应的通道结构;
当用户配置完成,向操作系统请求分区通信服务时,进入步骤五;
步骤五、发送分区向操作系统申请端口
若步骤一中用户配置使用用户通道缓存,则首先通过系统调用函数向操作系统注册通道缓存空间,传入通道缓存结构体指针,该系统调用函数执行结束后返回一个唯一的通道标识符,否则,用户向操作系统申请使用静态配置的通道;
发送分区向操作系统申请分配端口,需要传入的参数包括:发送分区标识符与接收分区标识符以及使用的通道标识符,分区标识符为嵌入式分区操作系统分配给分区的唯一标识符,用户分区可通过系统调用函数向操作系统请求获得该分区的分区标识符;通道标识符为嵌入式分区操作系统分配给通道的唯一标识符,由用户分区通过系统调用函数向操作系统请求获得;
嵌入式分区操作系统的端口是通道的操作者,提供通道操作,包括读、写、清空通道、申请端口和释放端口;端口有两种工作方式:采样方式与队列方式;
采样方式新消息总会覆盖旧消息,用户端口读到的消息总是为最新的,队列方式新消息会插入到队列末尾,消息以先入先出的顺序依次被用户端口读取;
采样方式支持一个写者/多个读者的无锁通信,队列方式支持一个写者/一个读者的无锁通信,用户发送分区向操作系统申请端口时,操作系统首先查找空闲端口队列首端是否有端口,若有,则初始化该端口并返回给发送分区,否则发送分区申请端口失败;
若端口初始化成功,进入步骤六,否则结束;
步骤六、发送分区通过端口写入消息
若步骤一中用户配置使用用户通道缓存,发送分区使用端口直接操作本地的通道缓存就能完成消息的写入,否则发送分区将通过端口的系统调用函数向通道缓存写入消息;
端口中定义了一个写指针和读指针,以环形队列的方式读写通道缓存,每当写完一个数据块,端口的写指针向队列末端移动,当端口的写指针向环形队列尾端推进遇到读指针时,即通道缓存已满,写入失败;
在写入消息的过程中,若步骤一中用户配置使用用户通道缓存,发送分区直接操作本地的通道缓存就能完成消息的写入,不需要再经过一次从发送分区到操作系统分区通道缓存的拷贝;
若步骤一中用户配置不使用用户通道缓存,则发送分区将通过端口的系统调用函数向通道缓存写入消息;
端口的采样方式每次写入数据都会从通道缓存的起始位置0开始,逐步向环形队列通道缓存的末端推进,直到写入完成或者写指针回到起始位置,端口的队列方式每次写入数据从写指针位置,逐步向环形队列通道末端推进,直到写入完成或者写指针与读指针相遇;
该基于环形队列的通道缓存仅能保证一个端口写的并发安全;
在硬件支持的情况下,写入环形队列通道以Compare And Set原子操作或CompareAnd Swap原子操作,均以CAS操作的方式令发送端写指针向队列尾端移动,保证并发安全性,若CAS操作失败,则返回写入失败,该方式可实现无锁的多个读者/多个写者通信;
等待接收分区申请端口建立连接时,进入步骤七;
步骤七、接收分区向操作系统申请端口
接收分区申请端口过程同步骤五,当且仅当发送分区端口与接收分区端口共用同一块通道缓存时才能建立起连接,否则申请端口失败;
当申请端口成功,接收分区从端口读入消息,进入步骤八;
步骤八、接收分区从端口读入消息
若步骤二中用户配置使用内存映射优化配置项,接收分区使用端口直接操作映射到本地的通道缓存,完成消息的读取,不需要再进行从通道缓存到用户接收分区空间的拷贝,否则接收分区将通过端口的系统调用函数向通道缓存申请读取消息并拷贝到接收分区;
用户通过系统调用函数读取消息时,需指定每次读取的数据块数量,从通道读指针处读取数据块,当读完一个数据块时,读指针向队列末端移动,当读指针追上写指针说明通道缓存清空,本次读取失败;
端口的采样方式每次读入数据,读指针都会初始化指向通道缓存的起始位置0,逐步向环形队列通道缓存的末端推进,直到读入完成或者读指针与写指针相遇,端口的队列方式每次读入数据从读指针开始,逐步向环形队列通道末端推进,直到读入完成或者读指针与写指针相遇;
当用户分区的应用程序不再需要分区通信时,进入步骤九;
该基于环形队列的通道缓存保证一个端口以队列方式读或多个端口以采样方式读的并发安全;
在硬件支持的情况下,环形队列通道读入CAS操作的方式令接收端读指针向队列尾端移动,保证并发安全性,若CAS操作失败,则返回读取失败,该方式可实现无锁的多个读者/多个写者通信;
步骤九、关闭并释放端口
当发送分区或者接收分区的应用程序依据设定的程序逻辑要求断开通信时,发送分区或接收分区的任一方通过操作系统系统调用函数关闭并释放端口,随后操作系统将释放的端口重新加入空闲端口队列的末端,留待其他分区使用。
本发明的有益效果在于提出了灵活、可配置、无锁的嵌入式分区操作系统的分区间通信实现方法。该方法采用基于环形队列的通道缓冲,不依赖硬件就能实现一个写者/至少一个读者的无锁通信、或在支持CAS操作的硬件平台上实现多个写者/多个读者的无锁通信,改善了操作系统实时性能与安全性,优化了操作系统验证与测试的开销,同时还提供两个内存优化的条件编译配置选项,启用后比传统实现方式降低两次拷贝,大大降低了通信的空间开销,同时考虑到用户对安全更为严苛的应用场景,允许用户通过条件编译配置项关闭内存优化的通信选项,以保证消息的安全冗余。
附图说明
图1是本发明提出的一种无锁、可配置的分区通信的实现方法结构示意图。
图2是本发明提出的一种无锁、可配置的分区通信的实现方法流程图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
基于环形队列的通道缓冲不依赖硬件就能实现一个写者/一个读者的无锁通信、或在支持Compare And Swap原子操作,简称CAS操作的硬件平台上实现多个写者/多个读者的无锁通信。使用无锁通道缓存能优化实时操作系统性能,改善安全性,简化了分区操作系统的测试与验证。
配置使用用户通道缓存时,通道缓存在用户分区空间中定义,任务若要构造发送消息,不需要切换内核态就能对用户分区空间中的通道缓存操作,省去了用户分区空间向通道缓存的一次拷贝。
配置使用内存映射优化通信时,还需要硬件平台的MMU支持,在启用北村映射优化后,操作系统利用MMU内存映射机制直接将发送方分区空间的通道缓存映射到接收方分区空间中,不需要再进行从通道缓存到用户分区空间的拷贝;若硬件平台不支持MMU则不能使用该功能。
本发明提出的方法与传统的有锁或临界区的通信方式以及文献“一种基于嵌入式操作系统的分区通信方法及装置”中的方法相比,一方面实现了无锁通信,改善了操作系统实时性能与安全性,另一方面提供两个灵活可配置的内存优化配置选项,这两项内存优化配置选项全部启用后比传统实现方式降低2次拷贝,降低了通信的空间开销和时间开销。
参照图1和图2。本发明提出了一种无锁、可配置的分区通信的实现方法,整个分区通信实现机制分为端口、通道两个模块,具体步骤如下:
步骤一、配置分区间通信机制
用户根据需要,通过条件编译声明的方式配置分区通信,配置项依次是用户空间的通道缓存配置项与采用内存映射机制的优化配置项;
若用户将操作系统应用在安全关键领域,就必须严格遵循标准,不能使用用户空间通道缓存与内存映射机制;
若用户将操作系统应用在非安全关键领域,则用户空间通道缓存配置项与内存映射优化配置项根据用户需求而定,若用户需求强调可靠性,选择关闭用户空间的通道缓存配置项与采用内存映射机制的优化配置项,启用后通信消息有两次复制;若用户需求可靠性与性能兼顾,则选择开启内存映射优化配置项,启用后通信消息只有从用户空间到系统空间的一次复制;若用户需求强调性能,则选择开启内存映射优化与用户空间通道缓存配置项,启用后通信消息存储在用户空间,不需要复制;
其中用户空间的通道缓存配置项只有两个选择:Enable或False,即启用和关闭;
其中采用内存映射机制的优化配置项有两个选择:Enable或False,即启用通道内存直接映射机制和关闭,只有在启用用户空间的通道缓存时,才可启用该项优化,且该项优化依赖硬件的内存管理单元,即要求MMU的支持,若硬件不支持MMU,则该配置项只能选择False;
用户完成条件配置后,进入步骤二;
步骤二、配置用户通道缓存
若步骤一中用户配置不使用用户通道缓存,即用户通道缓存配置项为False时,直接跳转到步骤三;否则在本步骤中,用户应在用户分区空间中定义通道缓存,通道缓存CHBUFF由若干个数据块构成一组连续空间,每个数据块包含固定长度的数据;应用程序通过操作系统提供的系统调用函数,调用操作系统提供的端口操作函数从通道缓存中读写数据,通道缓存长度由用户在步骤五所描述的通道的Manifest文件中定义,位于操作系统内核分区空间中;
若在用户分区空间定义通道缓存则分区拥有对通道缓存直接读写的权限,分区内的任务若要构造发送消息,无需切换内核态就能操作通道缓存,省去了用户分区空间向操作系统分区空间的通道缓存的一次拷贝和从用户态到内核态以及从内核态返回用户态两次内核态切换;
步骤三、配置内存映射机制
若步骤一中用户配置不使用内存映射机制优化,即内存映射机制配置项为False时,直接跳转到步骤四,否则在本步骤中,内存映射机制配置项会修改操作系统发送消息的动作,操作系统不再执行从发送分区用户空间的通道缓存到接收分区用户空间的拷贝,而是利用MMU机制将发送分区的通道缓存直接映射到接收分区的用户空间中,由接收分区直接读取;接收分区对内存映射的通道缓存只有读取权限,没有写入的权限,因而没有破坏分区的内存隔离,该方式省去了从发送分区的通道缓存到接收分区的一次拷贝;
步骤四、通道静态配置
通道为一个由数据块以及通道描述符组成的结构体,由用户的Manifest文件静态配置,一个通道的Manifest文件描述ARINC-653标准规定的通道标识符、通道的发送分区标识符、通道的接收分区标识符、数据块大小和数据块数量;嵌入式分区操作系统与应用程序编译前读取Manifest中的通道描述信息,依据该描述信息在内核所在的系统分区静态分配对应的通道结构;
当用户配置完成,向操作系统请求分区通信服务时,进入步骤五;
步骤五、发送分区向操作系统申请端口
若步骤一中用户配置使用用户通道缓存,则首先通过系统调用函数向操作系统注册通道缓存空间,传入通道缓存结构体指针,该系统调用函数执行结束后返回一个唯一的通道标识符,否则,用户向操作系统申请使用静态配置的通道;
发送分区向操作系统申请分配端口,需要传入的参数包括:发送分区标识符与接收分区标识符以及使用的通道标识符,分区标识符为嵌入式分区操作系统分配给分区的唯一标识符,用户分区可通过系统调用函数向操作系统请求获得该分区的分区标识符;通道标识符为嵌入式分区操作系统分配给通道的唯一标识符,由用户分区通过系统调用函数向操作系统请求获得;
嵌入式分区操作系统的端口是通道的操作者,提供通道操作,包括读、写、清空通道、申请端口和释放端口;端口有两种工作方式:采样方式与队列方式;
采样方式新消息总会覆盖旧消息,用户端口读到的消息总是为最新的,队列方式新消息会插入到队列末尾,消息以先入先出的顺序依次被用户端口读取;
采样方式支持一个写者/多个读者的无锁通信,队列方式支持一个写者/一个读者的无锁通信,用户发送分区向操作系统申请端口时,操作系统首先查找空闲端口队列首端是否有端口,若有,则初始化该端口并返回给发送分区,否则发送分区申请端口失败;
若端口初始化成功,进入步骤六,否则结束;
步骤六、发送分区通过端口写入消息
若步骤一中用户配置使用用户通道缓存,发送分区使用端口直接操作本地的通道缓存就能完成消息的写入,否则发送分区将通过端口的系统调用函数向通道缓存写入消息;
端口中定义了一个写指针和读指针,以环形队列的方式读写通道缓存,每当写完一个数据块,端口的写指针向队列末端移动,当端口的写指针向环形队列尾端推进遇到读指针时,即通道缓存已满,写入失败;
在写入消息的过程中,若步骤一中用户配置使用用户通道缓存,发送分区直接操作本地的通道缓存就能完成消息的写入,不需要再经过一次从发送分区到操作系统分区通道缓存的拷贝;
若步骤一中用户配置不使用用户通道缓存,则发送分区将通过端口的系统调用函数向通道缓存写入消息;
端口的采样方式每次写入数据都会从通道缓存的起始位置0开始,逐步向环形队列通道缓存的末端推进,直到写入完成或者写指针回到起始位置,端口的队列方式每次写入数据从写指针位置,逐步向环形队列通道末端推进,直到写入完成或者写指针与读指针相遇;
该基于环形队列的通道缓存仅能保证一个端口写的并发安全;
在硬件支持的情况下,写入环形队列通道以Compare And Set原子操作或CompareAnd Swap原子操作,均以简称CAS操作的方式令发送端写指针向队列尾端移动,保证并发安全性,若CAS操作失败,则返回写入失败,该方式可实现无锁的多个读者/多个写者通信;所述的CAS操作在X86-32/64体系结构是cmpxchg汇编指令,直接由体系结构汇编支持的一种Compare And Swap操作,在PowerPC体系结构是lwarx/stwcx汇编指令,基于该指令很容易实现一种Compare And Set操作,两种操作的缩写都是CAS,基于lwarx/stwcx的CompareAnd Set操作与cmpxchg实现的Compare And Swap操作是等价的,彼此能互相实现。
等待接收分区申请端口建立连接时,进入步骤七;
步骤七、接收分区向操作系统申请端口
接收分区申请端口过程同步骤五,当且仅当发送分区端口与接收分区端口共用同一块通道缓存时才能建立起连接,否则申请端口失败;
当申请端口成功,接收分区从端口读入消息,进入步骤八;
步骤八、接收分区从端口读入消息
若步骤二中用户配置使用内存映射优化配置项,接收分区使用端口直接操作映射到本地的通道缓存,完成消息的读取,不需要再进行从通道缓存到用户接收分区空间的拷贝,否则接收分区将通过端口的系统调用函数向通道缓存申请读取消息并拷贝到接收分区;
用户通过系统调用函数读取消息时,需指定每次读取的数据块数量,从通道读指针处读取数据块,当读完一个数据块时,读指针向队列末端移动,当读指针追上写指针说明通道缓存清空,本次读取失败;
端口的采样方式每次读入数据,读指针都会初始化指向通道缓存的起始位置0,逐步向环形队列通道缓存的末端推进,直到读入完成或者读指针与写指针相遇,端口的队列方式每次读入数据从读指针开始,逐步向环形队列通道末端推进,直到读入完成或者读指针与写指针相遇;
当用户分区的应用程序不再需要分区通信时,进入步骤九;
该基于环形队列的通道缓存保证一个端口以队列方式读或多个端口以采样方式读的并发安全;
在硬件支持的情况下,环形队列通道读入CAS操作的方式令接收端读指针向队列尾端移动,保证并发安全性,若CAS操作失败,则返回读取失败,该方式可实现无锁的多个读者/多个写者通信;
步骤九、关闭并释放端口
当发送分区或者接收分区的应用程序依据设定的程序逻辑要求断开通信时,发送分区或接收分区的任一方通过操作系统系统调用函数关闭并释放端口,随后操作系统将释放的端口重新加入空闲端口队列的末端,留待其他分区使用。
本发明的实施例如下:
步骤一、配置分区间通信机制
用户能根据需要,通过条件编译配置分区通信。配置项主要包括是否使用用户空间的通道缓存、是否采用内存映射机制优化通信。一般而言,如果用户对安全性要求苛刻,就不能使用用户空间通道缓存,也不能使用内存映射机制,若用户放宽安全性限制,能依据硬件平台以及使用情形选择适当的配置以提高性能。
步骤二、配置用户通道缓存
若步骤一中配置不使用用户通道缓存,则跳到步骤三。通道缓存在用户分区空间中定义,任务若要构造发送消息,无需切换内核态就能对用户分区空间中的通道缓存操作,省去了用户分区空间向通道缓存的拷贝步骤。
步骤三、配置内存映射机制
若步骤一中配置不使用MMU支持的内存直接映射机制则跳到步骤四。如果采用则利用MMU内存映射机制直接将通道缓存映射到接收方分区空间中,则不需要再进行从通道缓存到用户分区空间的拷贝
步骤四、通道静态配置
通道是一个由数据块以及通道描述符组成的结构体,由用户的Manifest文件静态配置,一个通道的Manifest文件描述了通道标识符、通道的发送分区标识符、通道的接收分区标识符、数据块大小、数据块数量,嵌入式分区操作系统与应用编译前会读取Manifest中的通道信息,在内核所在的系统分区静态分配对应的通道结构。
通道缓存CHBUFF是由若干个数据块构成一组连续空间,每个数据库块包含固定长度的数据。应用通过系统调用,使用端口的操作函数从通道缓存中读写数据。
步骤五、发送分区向操作系统申请端口
操作系统向用户提供端口创建、写入、读取、重置、释放五种操作的API。
发送分区向操作系统申请分配端口,需要传入发送分区标识符与接收分区标识符以及使用的通道缓存标识符,同时依据不同通信类型选择采样方式或者队列方式读写。前者支持一个写者/多个读者的无锁通信,后者支持一个写者/一个读者的无锁通信。在支持CAS的硬件平台上,利用CAS原子操作能支持端口多个读者/多个写者的无锁通信。
操作系统收到发送分区的端口申请时,首先查找空闲端口队列首端是否有端口,若有,则初始化该端口并返回给发送分区,否则发送分区申请端口失败
步骤六、发送分区通过端口写入消息
发送分区通过端口的系统调用向通道缓存写入消息,写入环形队列通道需要修改发送端写指针,当写指针追上读指针时,通道缓存已满,写入失败。在写入消息的过程中,如果步骤二中的用户通道缓存开启则直接写入本地发送分区的用户通道缓存,不需要再经过从发送分区到系统分区通道缓存的拷贝。
端口的采样方式每次写入数据都会从通道缓存的起始位置0开始,逐步向环形队列通道缓存的末端推进,直到写入完成或者写指针回到起始位置。端口的队列方式每次写入数据从上次有数据的位置开始,逐步向环形队列通道末端推进,直到写入完成或者写指针追上读指针。
步骤七、接收分区向操作系统申请端口
接收分区申请端口过程同步骤五,当且仅当发送分区端口与接收分区端口共用同一块通道缓存时才能建立起连接。
步骤八、接收分区从端口读入消息
接收分区通过端口的系统调用向通道缓存获取消息,接收分区的端口从环形队列通道中读取消息需要修改读指针,读指针按照端口设定的读写方式读入通道缓存数据块,当读指针追上步骤六中的写指针,通道缓存清空。如果步骤三中配置内存映射机制开启,则利用硬件MMU的内存映射机制,直接将通道缓存映射到接收方分区空间,读入时则不需要再进行从通道缓存到用户分区空间的拷贝。重复上述步骤五到步骤八直到用户不需要再次通信。
采样方式每次读取消息均从通道缓存起始位置开始,直到读完整个环形通道缓存,回到起始位置为止,该方式读取的消息都是通道缓存中最新的消息。在这种通信方式中,前一次写入的消息会被后一次写入的消息覆盖,正在被写入的通道缓存不能被读取。
队列方式每次读取消息从上一次读取的环形队列位置开始,消息以先入先出的顺序被读出,用户可以指定每次读取的数据块数量,当读指针追上写指针说明环形队列通道缓存已经清空。在这种通信方式中,前一次写入的消息不会被后一次写入的消息所覆盖,而是以先入先出顺序进入环形队列,等待端口读取。
步骤九、关闭并释放端口
当发送方或者接收方希望断开通信时,需要通过嵌入式分区操作系统系统调用关闭并释放端口,操作系统将释放的端口重新加入空闲端口队列的末端,留待下其他分区使用。
Claims (1)
1.一种嵌入式分区操作系统分区间通信的实现方法,其特征在于包括下述步骤:
步骤一、配置分区间通信机制
用户根据需要,通过条件编译声明的方式配置分区通信,配置项依次是用户空间的通道缓存配置项与采用内存映射机制的优化配置项;
若用户将操作系统应用在安全关键领域,就必须严格遵循标准,不能使用用户空间通道缓存与内存映射机制;
若用户将操作系统应用在非安全关键领域,则用户空间通道缓存配置项与内存映射优化配置项根据用户需求而定,若用户需求强调可靠性,选择关闭用户空间的通道缓存配置项与采用内存映射机制的优化配置项,启用后通信消息有两次复制;若用户需求可靠性与性能兼顾,则选择开启内存映射优化配置项,启用后通信消息只有从用户空间到系统空间的一次复制;若用户需求强调性能,则选择开启内存映射优化与用户空间通道缓存配置项,启用后通信消息存储在用户空间,不需要复制;
其中用户空间的通道缓存配置项只有两个选择:Enable或False,即启用和关闭;
其中采用内存映射机制的优化配置项有两个选择:Enable或False,即启用通道内存直接映射机制和关闭,只有在启用用户空间的通道缓存时,才可启用该项优化,且该项优化依赖硬件的内存管理单元,即要求MMU的支持,若硬件不支持MMU,则该配置项只能选择False;
用户完成条件配置后,进入步骤二;
步骤二、配置用户通道缓存
若步骤一中用户配置不使用用户通道缓存,即用户通道缓存配置项为False时,直接跳转到步骤三;否则在本步骤中,用户应在用户分区空间中定义通道缓存,通道缓存CHBUFF由若干个数据块构成一组连续空间,每个数据块包含固定长度的数据;应用程序通过操作系统提供的系统调用函数,调用操作系统提供的端口操作函数从通道缓存中读写数据,通道缓存长度由用户在步骤五所描述的通道的Manifest文件中定义,位于操作系统内核分区空间中;
若在用户分区空间定义通道缓存则分区拥有对通道缓存直接读写的权限,分区内的任务若要构造发送消息,无需切换内核态就能操作通道缓存,省去了用户分区空间向操作系统分区空间的通道缓存的一次拷贝和从用户态到内核态以及从内核态返回用户态两次内核态切换;
步骤三、配置内存映射机制
若步骤一中用户配置不使用内存映射机制优化,即内存映射机制配置项为False时,直接跳转到步骤四,否则在本步骤中,内存映射机制配置项会修改操作系统发送消息的动作,操作系统不再执行从发送分区用户空间的通道缓存到接收分区用户空间的拷贝,而是利用MMU机制将发送分区的通道缓存直接映射到接收分区的用户空间中,由接收分区直接读取;接收分区对内存映射的通道缓存只有读取权限,没有写入的权限,因而没有破坏分区的内存隔离,省去了从发送分区的通道缓存到接收分区的一次拷贝;
步骤四、通道静态配置
通道为一个由数据块以及通道描述符组成的结构体,由用户的Manifest文件静态配置,一个通道的Manifest文件描述ARINC-653标准规定的通道标识符、通道的发送分区标识符、通道的接收分区标识符、数据块大小和数据块数量;嵌入式分区操作系统与应用程序编译前读取Manifest中的通道描述信息,依据该描述信息在内核所在的系统分区静态分配对应的通道结构;
当用户配置完成,向操作系统请求分区通信服务时,进入步骤五;
步骤五、发送分区向操作系统申请端口
若步骤一中用户配置使用用户通道缓存,则首先通过系统调用函数向操作系统注册通道缓存空间,传入通道缓存结构体指针,该系统调用函数执行结束后返回一个唯一的通道标识符,否则,用户向操作系统申请使用静态配置的通道;
发送分区向操作系统申请分配端口,需要传入的参数包括:发送分区标识符与接收分区标识符以及使用的通道标识符,分区标识符为嵌入式分区操作系统分配给分区的唯一标识符,用户分区可通过系统调用函数向操作系统请求获得该分区的分区标识符;通道标识符为嵌入式分区操作系统分配给通道的唯一标识符,由用户分区通过系统调用函数向操作系统请求获得;
嵌入式分区操作系统的端口是通道的操作者,提供通道操作,包括读、写、清空通道、申请端口和释放端口;端口有两种工作方式:采样方式与队列方式;
采样方式新消息总会覆盖旧消息,用户端口读到的消息总是为最新的,队列方式新消息会插入到队列末尾,消息以先入先出的顺序依次被用户端口读取;
采样方式支持一个写者/多个读者的无锁通信,队列方式支持一个写者/一个读者的无锁通信,用户发送分区向操作系统申请端口时,操作系统首先查找空闲端口队列首端是否有端口,若有,则初始化该端口并返回给发送分区,否则发送分区申请端口失败;
若端口初始化成功,进入步骤六,否则结束;
步骤六、发送分区通过端口写入消息
若步骤一中用户配置使用用户通道缓存,发送分区使用端口直接操作本地的通道缓存就能完成消息的写入,否则发送分区将通过端口的系统调用函数向通道缓存写入消息;
端口中定义了一个写指针和读指针,以环形队列的方式读写通道缓存,每当写完一个数据块,端口的写指针向队列末端移动,当端口的写指针向环形队列尾端推进遇到读指针时,即通道缓存已满,写入失败;
在写入消息的过程中,若步骤一中用户配置使用用户通道缓存,发送分区直接操作本地的通道缓存就能完成消息的写入,不需要再经过一次从发送分区到操作系统分区通道缓存的拷贝;
若步骤一中用户配置不使用用户通道缓存,则发送分区将通过端口的系统调用函数向通道缓存写入消息;
端口的采样方式每次写入数据都会从通道缓存的起始位置0开始,逐步向环形队列通道缓存的末端推进,直到写入完成或者写指针回到起始位置,端口的队列方式每次写入数据从写指针位置,逐步向环形队列通道末端推进,直到写入完成或者写指针与读指针相遇;
该基于环形队列的通道缓存仅能保证一个端口写的并发安全;
在硬件支持的情况下,写入环形队列通道以CompareAndSet原子操作或CompareAndSwap原子操作,均以CAS操作的方式令发送端写指针向队列尾端移动,保证并发安全性,若CAS操作失败,则返回写入失败,实现无锁的多个读者/多个写者通信;
等待接收分区申请端口建立连接时,进入步骤七;
步骤七、接收分区向操作系统申请端口
接收分区申请端口过程同步骤五,当且仅当发送分区端口与接收分区端口共用同一块通道缓存时才能建立起连接,否则申请端口失败;
当申请端口成功,接收分区从端口读入消息,进入步骤八;
步骤八、接收分区从端口读入消息
若步骤二中用户配置使用内存映射优化配置项,接收分区使用端口直接操作映射到本地的通道缓存,完成消息的读取,不需要再进行从通道缓存到用户接收分区空间的拷贝,否则接收分区将通过端口的系统调用函数向通道缓存申请读取消息并拷贝到接收分区;
用户通过系统调用函数读取消息时,需指定每次读取的数据块数量,从通道读指针处读取数据块,当读完一个数据块时,读指针向队列末端移动,当读指针追上写指针说明通道缓存清空,本次读取失败;
端口的采样方式每次读入数据,读指针都会初始化指向通道缓存的起始位置0,逐步向环形队列通道缓存的末端推进,直到读入完成或者读指针与写指针相遇,端口的队列方式每次读入数据从读指针开始,逐步向环形队列通道末端推进,直到读入完成或者读指针与写指针相遇;
当用户分区的应用程序不再需要分区通信时,进入步骤九;
该基于环形队列的通道缓存保证一个端口以队列方式读或多个端口以采样方式读的并发安全;
在硬件支持的情况下,环形队列通道读入CAS操作的方式令接收端读指针向队列尾端移动,保证并发安全性,若CAS操作失败,则返回读取失败,该方式可实现无锁的多个读者/多个写者通信;
步骤九、关闭并释放端口
当发送分区或者接收分区的应用程序依据设定的程序逻辑要求断开通信时,发送分区或接收分区的任一方通过操作系统系统调用函数关闭并释放端口,随后操作系统将释放的端口重新加入空闲端口队列的末端,留待其他分区使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910023106.6A CN109815029B (zh) | 2019-01-10 | 2019-01-10 | 一种嵌入式分区操作系统分区间通信的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910023106.6A CN109815029B (zh) | 2019-01-10 | 2019-01-10 | 一种嵌入式分区操作系统分区间通信的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109815029A CN109815029A (zh) | 2019-05-28 |
CN109815029B true CN109815029B (zh) | 2023-03-28 |
Family
ID=66604058
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910023106.6A Active CN109815029B (zh) | 2019-01-10 | 2019-01-10 | 一种嵌入式分区操作系统分区间通信的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109815029B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231290A (zh) * | 2020-11-03 | 2021-01-15 | 上海智臻智能网络科技股份有限公司 | 一种本地日志的处理方法、装置、设备及存储介质 |
CN112527522A (zh) * | 2020-12-04 | 2021-03-19 | 中国航空工业集团公司成都飞机设计研究所 | 一种基于两级数据池的分区消息订阅、发布方法 |
CN112506683A (zh) * | 2021-01-29 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 一种数据处理的方法、相关装置、设备以及存储介质 |
CN113157402B (zh) * | 2021-05-24 | 2021-12-14 | 深圳联创和科技有限公司 | 一种基于分区操作系统的虚拟化权限控制通信方法 |
CN114780258B (zh) * | 2022-03-31 | 2022-11-15 | 慧之安信息技术股份有限公司 | 操作系统分区通信处理方法和系统 |
CN116501657B (zh) * | 2023-06-19 | 2023-11-10 | 阿里巴巴(中国)有限公司 | 缓存数据的处理方法、设备及系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9996403B2 (en) * | 2011-09-30 | 2018-06-12 | Oracle International Corporation | System and method for providing message queues for multinode applications in a middleware machine environment |
US20130254880A1 (en) * | 2012-03-21 | 2013-09-26 | Mcafee, Inc. | System and method for crowdsourcing of mobile application reputations |
CN103914333B (zh) * | 2014-04-14 | 2017-12-01 | 中国科学技术大学苏州研究院 | 基于片上网络互连的多核存储系统仿真器 |
US9665493B2 (en) * | 2014-10-03 | 2017-05-30 | International Business Machines Corporation | Increased cache performance with multi-level queues of complete tracks |
CN111625377B (zh) * | 2017-04-01 | 2023-11-28 | 北京忆芯科技有限公司 | 代理及向队列添加条目的方法 |
CN107273213B (zh) * | 2017-06-27 | 2024-04-19 | 联想(北京)有限公司 | 一种计算控制方法、网卡及电子设备 |
CN108710531B (zh) * | 2018-04-20 | 2021-06-15 | 深圳市文鼎创数据科技有限公司 | 循环队列的数据写入方法、装置、终端设备和存储介质 |
-
2019
- 2019-01-10 CN CN201910023106.6A patent/CN109815029B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109815029A (zh) | 2019-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109815029B (zh) | 一种嵌入式分区操作系统分区间通信的实现方法 | |
US9098462B1 (en) | Communications via shared memory | |
US9185034B2 (en) | Low latency communication via memory windows | |
JP2633488B2 (ja) | 並列処理を実行する方法およびシステム | |
CN111427707B (zh) | 一种基于共享内存池的ipc通信方法 | |
US20020133675A1 (en) | Cluster system, memory access control method, and recording medium | |
US20120227056A1 (en) | Method and system for enabling access to functionality provided by resources outside of an operating system environment | |
CN111290708A (zh) | 一种基于动态调整的环形缓冲区的数据处理方法及设备 | |
US7831642B1 (en) | Page cache management for a shared file | |
CN105389134A (zh) | 一种闪存接口控制方法及装置 | |
CN101551838B (zh) | 一种存储卡身份认证方法及其系统 | |
CN108345452A (zh) | 一种线程管理方法及装置 | |
CN111198843B (zh) | 一种基于应用处理器片上总线控制的文件系统写加速方法 | |
CN110868365B (zh) | 通信方法和通信系统 | |
US6691121B1 (en) | Method and apparatus for online and dynamic extension of IMS data entry databases | |
US7350210B2 (en) | Generic data persistence application program interface | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN116257359A (zh) | 数据处理方法及装置、存储介质及电子设备 | |
CN107203339B (zh) | 一种数据存储方法及装置 | |
CN109426562A (zh) | 优先级加权轮转调度器 | |
US20080162783A1 (en) | Dynamically updateable and moveable memory zones | |
CN101523352A (zh) | 用于并发控制的持久锁/资源 | |
JP2022552150A (ja) | データ構造、メモリ手段、および装置 | |
CN110704051A (zh) | 一种Unity的界面绑定数据方法 | |
CN104636086A (zh) | 一种ha存储设备、管理ha状态的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |