CN113032162A - 一种基于共享内存备份机制的多进程通讯方法 - Google Patents

一种基于共享内存备份机制的多进程通讯方法 Download PDF

Info

Publication number
CN113032162A
CN113032162A CN202110310475.0A CN202110310475A CN113032162A CN 113032162 A CN113032162 A CN 113032162A CN 202110310475 A CN202110310475 A CN 202110310475A CN 113032162 A CN113032162 A CN 113032162A
Authority
CN
China
Prior art keywords
shared memory
memory block
data
state
write
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.)
Granted
Application number
CN202110310475.0A
Other languages
English (en)
Other versions
CN113032162B (zh
Inventor
夏洋
张放
张德兆
王肖
李晓飞
霍舒豪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chongqing Landshipu Information Technology Co ltd
Original Assignee
Chongqing Zhixing Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chongqing Zhixing Information Technology Co Ltd filed Critical Chongqing Zhixing Information Technology Co Ltd
Priority to CN202110310475.0A priority Critical patent/CN113032162B/zh
Publication of CN113032162A publication Critical patent/CN113032162A/zh
Application granted granted Critical
Publication of CN113032162B publication Critical patent/CN113032162B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明涉及一种基于共享内存备份机制的多进程通讯方法,包括:接收通讯字符串数据和数据缓存长度;根据通讯字符串数据进行哈希值计算处理,根据哈希值和数据缓存长度顺序开辟存储空间相同的N个共享内存块;写进程根据索引地址依次查询每个共享内存块的状态信息;当共享内存块为空闲状态或者写入状态时,写进程将写数据指针指向共享内存块,直至全部共享内存块写满,写进程将写数据指针指向第1个共享内存块;同时,读进程根据索引地址依次查询每个共享内存块的状态信息;当共享内存块为空闲状态或者读取状态时,读进程将读数据指针指向共享内存块,并对共享内存块内的写入数据和/或读数据指针的指针地址进行读取。

Description

一种基于共享内存备份机制的多进程通讯方法
技术领域
本发明涉及通信技术领域,尤其涉及一种基于共享内存备份机制的多进程通讯方法。
背景技术
自动驾驶系统通常是由多个模块组成,包括但不限于定位模块,感知模块,决策规划模块,地图引擎模块,中间件模块。各个模块除了独立工作,也需要其他模块辅助。无论是从自动驾驶安全性,还是自动驾驶的性能要求,亦或是流畅性的角度来看,自动驾驶的各个模块间配合协同工作,对自动驾驶系统的实时性具有较高的要求。
自动驾驶系统中,不同节点中进行通讯,且同时要求通讯实时性的情况下,共享内存是一个比较契合自动驾驶系统要求的通讯方式。但多模块通讯的场景下,共享内存缺少同步机制,同步机制之后,多模块通讯也容易产生进程阻塞问题。
因此,自动驾驶系统中,急需一种适用于多模块的高效通信方式,来确保自动驾驶系统的各个模块之间的协同工作,进而确保自动驾驶的实时性。
发明内容
本发明的目的是针对现有技术的缺陷,提供一种基于共享内存备份机制的多进程通讯方法,解决了多用户状态下共享资源无法实现资源互斥的问题,以及多模块阻塞状态下,通讯效率降低的问题。
为实现上述目的,本发明提供了一种基于共享内存备份机制的多进程通讯方法,所述多进程通讯方法包括:
接收通讯字符串数据和数据缓存长度;
根据所述通讯字符串数据进行哈希值计算处理,得到哈希值,根据所述哈希值和所述数据缓存长度顺序开辟存储空间相同的N个共享内存块,并将初始化信息存储至第1个共享内存块;所述N为正整数;所述初始化信息包括数据缓存长度和索引地址;
写进程获取所述索引地址,根据所述索引地址自循环队列的队头开始依次查询每个所述共享内存块的状态信息;所述状态信息包括写入状态、读取状态和空闲状态;
当共享内存块为空闲状态或者写入状态时,所述写进程将写数据指针指向共享内存块,直至全部所述共享内存块写满,所述写进程将写数据指针指向第1个共享内存块;
同时,读进程获取索引地址,根据索引地址自循环队列的队头开始依次查询每个共享内存块的状态信息;
当所述共享内存块为空闲状态或者读取状态时,读进程将读数据指针指向共享内存块,并对共享内存块内的写入数据和/或读数据指针的指针地址进行读取。
优选的,所述第2至N个共享内存块内存储:写入数据。
优选的,所述初始化信息还包括:模块连接数量数据;所述多进程通讯方法还包括:
统计所述写进程的数量和读进程的数量,并根据所述写进程的数量和读进程的数量生成模块连接数量数据。
优选的,所述写入状态和读取状态互斥。
本发明实施例提供的一种基于共享内存备份机制的多进程通讯方法,确保了多用户状态下共享数据的互斥性,减少了传输中的数据拷贝,显著提升信息传输效率与通讯实时性,同时减少了单一模块产生多路负载的问题,解除了各个模块间的高耦合行为,实现自动驾驶系统场景下整体模块通信性能的优化。
附图说明
图1为本发明实施例提供的基于共享内存备份机制的多进程通讯方法的流程图;
图2为本发明实施例提供的共享内存块的结构示意图。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明提供的一种基于共享内存备份机制的多进程通讯方法,确保了多用户状态下共享数据的互斥性,减少了传输中的数据拷贝,显著提升信息传输效率与通讯实时性,同时减少了单一模块产生多路负载的问题,解除了各个模块间的高耦合行为,实现自动驾驶系统场景下整体模块通信性能的优化。
为便于理解本发明的技术方案,首先对以下涉及到的名词共享内存进行解释。
共享内存,允许两个或多个进程共享同一块内存,当一个进程改变该地址内容时,其他进程可以得到其修改后的内容。为提高共享内存的使用效率,本发明的共享内存可以同一时刻支持多进程读,同一时刻支持多进程写。模块内通信可通过指针来直接访问共享资源,进一步提升资源访问的效率。
图2为本发明实施例提供的共享内存块的结构示意图,如图2所示,本发明在进行数据传输之前,拷贝了多份数据,能够有效防止单一共享内存块被频繁读写,影响通讯效率。
图1为本发明实施例提供的基于共享内存备份机制的多进程通讯方法的流程图,以下结合图1对本发明技术方案进行详述。
步骤110,接收通讯字符串数据和数据缓存长度;
具体的,通讯字符串可以理解为共享内存标识符,数据缓存长度可以理解为占用的内存大小。
步骤120,根据通讯字符串数据进行哈希值计算处理,得到哈希值,根据哈希值和数据缓存长度顺序开辟存储空间相同的N个共享内存块,并将初始化信息存储至第1个共享内存块;
具体的,利用哈希算法将通讯字符串的每个字符参与哈希值计算,得到哈希值。这一步骤的目的是将字符串空间数据映射到整型空间,从而生成可靠性更强的唯一哈希值,防止生成重复的哈希值,申请共享内存块失败。
其中,N为正整数。第2至N个共享内存块内存储:写入数据。初始化信息包括数据缓存长度、索引地址和模块连接数量数据。
统计写进程的数量和读进程的数量,并根据写进程的数量和读进程的数量生成模块连接数量数据。具体模块连接数量数据可以是某一时刻的统计值,可以是累计值,也可以是某一时间段内的累计值。
步骤130,写进程获取索引地址,根据索引地址自循环队列的队头开始依次查询每个共享内存块的状态信息;
具体的,写进程自循环队列的队头开始,直到查询到状态信息为非读取状态,即空闲状态或者写入状态。
其中,状态信息包括写入状态、读取状态和空闲状态。写入状态和读取状态互斥。写入状态表示该共享内存块正在被写入,读取状态表示该共享内存块正在被读取,空闲状态表明该共享内存块当前没有被写入,也没有被读取。
步骤140,当共享内存块为空闲状态或者写入状态时,写进程将写数据指针指向共享内存块,直至全部共享内存块写满,写进程将写数据指针指向第1个共享内存块;
具体的,写进程将状态信息为空闲状态的共享内存块的状态信息修改为写入状态,由于写入状态和读取状态互斥,写入时不能读取该共享内存块,这一步骤能够有效防止读取数据为脏数据。
步骤150,读进程获取索引地址,根据索引地址自循环队列的队头开始依次查询每个共享内存块的状态信息;
具体的,读进程自循环队列的队头开始,直到查询到状态信息为非写入状态,即空闲状态或者读取状态。
步骤130和步骤150同时执行。
步骤160,当共享内存块为空闲状态或者读取状态时,读进程将读数据指针指向共享内存块,并对共享内存块内的写入数据和/或读数据指针的指针地址进行读取。
具体的,当写进程在写入时,共享内存块不能够被读取,当写进程写入完成后,才可以进行读取,读取数据时,可以多进程共同读取,提高数据传输效率。在发明中,为进一步提高数据传输效率,还可以对读数据指针进行读取,从而使得模块间的数据通过指针地址传输。
在优选的方案中,在指针地址中设置有计数器,能够准确得知模块根据指针地址读取数据的次数,有效保证数据的安全性。
由于现实系统中各进程可能存在本身的问题,比如某进程可能在读取过程中死掉或者读取效率过低影响共享内存块的数据更新,本发明优选的提供淘汰机制,可以对上述进程进行特定时间的等待或者淘汰。
在一个优选的方案中,如果写入操作追上读操作则等待读取操作,等读取操作读取完数据再写入。同时,为防止读进程死掉而出现死等情况,拟设定等待时间阈值,如果等待时间超过等待时间阈值,则认为读进程自行退出,不再等待。
在另一个优选的方案中,写进程不对读进程负责,不论是否已读完,如果写进程追上读进程,则写进程直接写入数据,覆盖之前的数据,但是会对各读进程因此而覆盖掉的数据量进行统计。
在另一个方案中,模块之间也可以采用端口号进行数据交换。
在另一个方案中,模块之间可以采用唯一指针地址进行数据交换,从而实现模块间一对一的信息传输。
本发明的一种基于共享内存备份机制的多进程通讯方法,确保了多用户状态下共享数据的互斥性,减少了传输中的数据拷贝,显著提升信息传输效率与通讯实时性,同时减少了单一模块产生多路负载的问题,解除了各个模块间的高耦合行为,实现自动驾驶系统场景下整体模块通信性能的优化。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种基于共享内存备份机制的多进程通讯方法,其特征在于,所述多进程通讯方法包括:
接收通讯字符串数据和数据缓存长度;
根据所述通讯字符串数据进行哈希值计算处理,得到哈希值,根据所述哈希值和所述数据缓存长度顺序开辟存储空间相同的N个共享内存块,并将初始化信息存储至第1个共享内存块;所述N为正整数;所述初始化信息包括数据缓存长度和索引地址;
写进程获取所述索引地址,根据所述索引地址自循环队列的队头开始依次查询每个所述共享内存块的状态信息;所述状态信息包括写入状态、读取状态和空闲状态;
当共享内存块为空闲状态或者写入状态时,所述写进程将写数据指针指向共享内存块,直至全部所述共享内存块写满,所述写进程将写数据指针指向第1个共享内存块;
同时,读进程获取索引地址,根据索引地址自循环队列的队头开始依次查询每个共享内存块的状态信息;
当所述共享内存块为空闲状态或者读取状态时,读进程将读数据指针指向共享内存块,并对共享内存块内的写入数据和/或读数据指针的指针地址进行读取。
2.根据权利要求1所述的基于共享内存备份机制的多进程通讯方法,其特征在于,所述第2至N个共享内存块内存储:写入数据。
3.根据权利要求1所述的基于共享内存备份机制的多进程通讯方法,其特征在于,所述初始化信息还包括:模块连接数量数据;所述多进程通讯方法还包括:
统计所述写进程的数量和读进程的数量,并根据所述写进程的数量和读进程的数量生成模块连接数量数据。
4.根据权利要求1所述的基于共享内存备份机制的多进程通讯方法,其特征在于,所述写入状态和读取状态互斥。
CN202110310475.0A 2021-03-23 2021-03-23 一种基于共享内存备份机制的多进程通讯方法 Active CN113032162B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110310475.0A CN113032162B (zh) 2021-03-23 2021-03-23 一种基于共享内存备份机制的多进程通讯方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110310475.0A CN113032162B (zh) 2021-03-23 2021-03-23 一种基于共享内存备份机制的多进程通讯方法

Publications (2)

Publication Number Publication Date
CN113032162A true CN113032162A (zh) 2021-06-25
CN113032162B CN113032162B (zh) 2023-10-24

Family

ID=76473052

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110310475.0A Active CN113032162B (zh) 2021-03-23 2021-03-23 一种基于共享内存备份机制的多进程通讯方法

Country Status (1)

Country Link
CN (1) CN113032162B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114327946A (zh) * 2021-12-24 2022-04-12 北京百度网讯科技有限公司 共享内存访问控制方法、装置、电子设备及自动驾驶车辆
CN114845156A (zh) * 2022-05-07 2022-08-02 珠海全志科技股份有限公司 基于共享缓存的视频处理方法、装置及系统
CN116737409A (zh) * 2023-05-22 2023-09-12 晶诺微(上海)科技有限公司 超大数据流的实时处理方法以及数据处理系统
CN118152154A (zh) * 2024-05-13 2024-06-07 杭州芯控智能科技有限公司 基于共享内存开发的通讯控制方法、系统和可读存储介质

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103514053A (zh) * 2013-09-22 2014-01-15 中国科学院信息工程研究所 一种基于共享内存的进程间通讯方法
CN103678553A (zh) * 2013-12-06 2014-03-26 上海寰创通信科技股份有限公司 基于共享内存设计的无线终端数据库构建方法
CN103838677A (zh) * 2012-11-23 2014-06-04 腾讯科技(深圳)有限公司 一种共享内存的内存块释放方法及设备
CN103838859A (zh) * 2014-03-19 2014-06-04 厦门雅迅网络股份有限公司 一种减少linux下多进程间数据拷贝的方法
CN105630612A (zh) * 2014-10-31 2016-06-01 腾讯科技(深圳)有限公司 进程更新方法和装置
WO2017050064A1 (zh) * 2015-09-25 2017-03-30 中兴通讯股份有限公司 共享内存数据库的内存管理方法及装置
CN106657284A (zh) * 2016-11-29 2017-05-10 成都华为技术有限公司 数据流处理的方法和装置
CN107391285A (zh) * 2017-08-23 2017-11-24 美的智慧家居科技有限公司 内存共享方法和系统
CN109766199A (zh) * 2018-12-29 2019-05-17 歌尔股份有限公司 一种机器人操作系统中的节点通信方法和装置
CN111796948A (zh) * 2020-07-02 2020-10-20 长视科技股份有限公司 一种共享内存访问方法、装置、计算机设备和存储介质
CN111813584A (zh) * 2020-08-05 2020-10-23 Oppo广东移动通信有限公司 内存共享方法、装置、电子设备及存储介质
CN112416625A (zh) * 2020-11-30 2021-02-26 深信服科技股份有限公司 免拷贝的进程间通信系统及方法

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103838677A (zh) * 2012-11-23 2014-06-04 腾讯科技(深圳)有限公司 一种共享内存的内存块释放方法及设备
CN103514053A (zh) * 2013-09-22 2014-01-15 中国科学院信息工程研究所 一种基于共享内存的进程间通讯方法
CN103678553A (zh) * 2013-12-06 2014-03-26 上海寰创通信科技股份有限公司 基于共享内存设计的无线终端数据库构建方法
CN103838859A (zh) * 2014-03-19 2014-06-04 厦门雅迅网络股份有限公司 一种减少linux下多进程间数据拷贝的方法
CN105630612A (zh) * 2014-10-31 2016-06-01 腾讯科技(深圳)有限公司 进程更新方法和装置
WO2017050064A1 (zh) * 2015-09-25 2017-03-30 中兴通讯股份有限公司 共享内存数据库的内存管理方法及装置
CN106657284A (zh) * 2016-11-29 2017-05-10 成都华为技术有限公司 数据流处理的方法和装置
CN107391285A (zh) * 2017-08-23 2017-11-24 美的智慧家居科技有限公司 内存共享方法和系统
CN109766199A (zh) * 2018-12-29 2019-05-17 歌尔股份有限公司 一种机器人操作系统中的节点通信方法和装置
CN111796948A (zh) * 2020-07-02 2020-10-20 长视科技股份有限公司 一种共享内存访问方法、装置、计算机设备和存储介质
CN111813584A (zh) * 2020-08-05 2020-10-23 Oppo广东移动通信有限公司 内存共享方法、装置、电子设备及存储介质
CN112416625A (zh) * 2020-11-30 2021-02-26 深信服科技股份有限公司 免拷贝的进程间通信系统及方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
KEENE_S: ""Linux共享内存及共享内存实现互斥循环队列shmFIFO"", 《CSDN》 *
SHIHABUR RAHMAN CHOWDHURY: ""A Disaggregated Packet Processing Architecture for Network Function Virtualization"", 《IEEE》 *
王海兵: ""嵌入式LINUX的研究与应用‘", 中国优秀硕士学位论文全文数据库 信息科技辑》 *
马申斌: ""基于多核框架的实时信号并行处理软件研制"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114327946A (zh) * 2021-12-24 2022-04-12 北京百度网讯科技有限公司 共享内存访问控制方法、装置、电子设备及自动驾驶车辆
CN114845156A (zh) * 2022-05-07 2022-08-02 珠海全志科技股份有限公司 基于共享缓存的视频处理方法、装置及系统
CN114845156B (zh) * 2022-05-07 2024-03-19 珠海全志科技股份有限公司 基于共享缓存的视频处理方法、装置及系统
CN116737409A (zh) * 2023-05-22 2023-09-12 晶诺微(上海)科技有限公司 超大数据流的实时处理方法以及数据处理系统
CN116737409B (zh) * 2023-05-22 2024-09-20 晶诺微(上海)科技有限公司 超大数据流的实时处理方法以及数据处理系统
CN118152154A (zh) * 2024-05-13 2024-06-07 杭州芯控智能科技有限公司 基于共享内存开发的通讯控制方法、系统和可读存储介质

Also Published As

Publication number Publication date
CN113032162B (zh) 2023-10-24

Similar Documents

Publication Publication Date Title
CN113032162B (zh) 一种基于共享内存备份机制的多进程通讯方法
US5418913A (en) System of two-way communication between processors using a single queue partitioned with pointers and limited overwrite privileges
CN110532205B (zh) 数据传输方法、装置、计算机设备和计算机可读存储介质
CN112948318A (zh) 一种Linux操作系统下基于RDMA的数据传输方法及装置
EP4137956A1 (en) On-chip cache device, on-chip cache read/write method, and computer readable medium
CN103019948A (zh) 使用连续排序的交换文件的工作集合交换
CN109558457A (zh) 一种数据写入方法、装置、设备及存储介质
CN109564502B (zh) 应用于存储设备中的访问请求的处理方法和装置
US10789170B2 (en) Storage management method, electronic device and computer readable medium
US11385900B2 (en) Accessing queue data
CN111061690B (zh) 一种基于rac的数据库日志文件读取方法和装置
US20160070648A1 (en) Data storage system and operation method thereof
CN107277022B (zh) 进程标记方法及装置
CN114328018B (zh) 快照的创建方法、计算设备及存储介质
CN117632043B (zh) Cxl内存模组、控制芯片、数据处理方法、介质和系统
CN106469119A (zh) 一种基于nvdimm的数据写缓存方法及其装置
CN112306420B (zh) 一种基于存储池的数据读写方法、装置、设备及存储介质
CN107329695B (zh) 一种分布式存储内存管理方法、系统及计算机存储介质
EP0156179B1 (en) Method for protecting volatile primary store in a staged storage system
CN116881191B (zh) 数据处理方法、装置、设备及存储介质
CN113608925A (zh) 一种基于持续数据保护cdp协议的数据备份方法及系统
CN116302105B (zh) 访问指令调度方法、系统、硬盘及控制器、存储介质和程序产品
CN108616598A (zh) 数据同步方法、装置和分布式存储系统
CN110174864B (zh) 激光打标的控制方法、计算机可读存储介质及激光打标机
CN107807790B (zh) 一种固态硬盘数据写入的方法

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20210810

Address after: 401122 No.1, 1st floor, building 3, No.21 Yunzhu Road, Yubei District, Chongqing

Applicant after: Chongqing landshipu Information Technology Co.,Ltd.

Address before: 401122 No.1, 1st floor, building 3, No.21 Yunzhu Road, Yubei District, Chongqing

Applicant before: Chongqing Zhixing Information Technology Co.,Ltd.

GR01 Patent grant
GR01 Patent grant