CN102566939B - 一种固态硬盘及其读-修改-写操作的数据管理方法 - Google Patents
一种固态硬盘及其读-修改-写操作的数据管理方法 Download PDFInfo
- Publication number
- CN102566939B CN102566939B CN201110426293.6A CN201110426293A CN102566939B CN 102566939 B CN102566939 B CN 102566939B CN 201110426293 A CN201110426293 A CN 201110426293A CN 102566939 B CN102566939 B CN 102566939B
- Authority
- CN
- China
- Prior art keywords
- write operation
- page
- solid state
- read
- storage page
- 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
Landscapes
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明适用于固态硬盘及信息存储领域,提供了一种固态硬盘及其读-修改-写操作的数据管理方法,所述数据管理方法包括:固态硬盘收到宿主机的逻辑块地址写命令;固态硬盘的微控制器为逻辑块地址写命令分配页缓冲区,并基于页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,存储器页读请求包含可配置直接内存存取所需的数据传输描述;固态硬盘的串行硬件驱动器接口以及存储器控制器根据同步机制执行宿主机写操作、存储器页读操作以及存储器页写操作。本发明能在不额外增加缓冲区的前提下,降低微控制器的参与程度、节省内存总线带宽、提高读-修改-写操作的性能。
Description
技术领域
本发明涉及固态硬盘及信息存储领域,尤其涉及一种固态硬盘及其读-修改-写操作的数据管理方法。
背景技术
固态硬盘主要包括微控制器和闪存单元,目前固态硬盘的闪存单元主要采用NAND FLSH(闪存的一种)芯片,NAND FLASH颗粒的读写单元一般为一整个页,比如8KB;而文件***的读写单元,由于历史的原因只用512B。由于两者的不匹配,以及NAND FLASH在写之前必须要擦除的特性,产生了RMW(读-修改-写操作)的问题。比如文件***要修改LBA_i的内容,则固态硬盘需要先读出LBA_i所在的NAND FLASH物理页,修改LBA_i所在位置的内容,然后依据新的逻辑地址到物理地址映射将修改后的页写入到新分配的物理地址。现有RMW的数据管理方法主要包括以下两种方式:
一、纯粹的RMW:将读-修改-写操作三个动作完全串行化,具体实现方法如图1所示。其优点在于:实现简单、不消耗额外的内存总线带宽;其缺点在于:读-修改操作串行化,性能较低,微控制器需全程参与。
二、带归并功能的RMW:读-修改操作并行,使用独立的读、修改缓冲区,而后对读、修改缓冲区进行归并,并将归并后的内容写出,具体实现方法如图2所示。其优点在于:读-修改操作并行化,其缺点在于:需要独立的读、修改缓冲区;归并操作需要消耗额外的内存总线带宽和时间;微控制器需全程参与。
综上可知,现有固态硬盘读-修改-写操作的数据管理方法在实际使用上,显然存在不便与缺陷,所以有必要加以改进。
发明内容
针对上述的缺陷,本发明的目的在于提供一种固态硬盘及其读-修改-写操作的数据管理方法。其能在不额外增加缓冲区的前提下,降低微控制器的参与程度、节省内存总线带宽、提高读-修改-写操作的性能。
为了实现上述目的,本发明提供一种固态硬盘读-修改-写操作的数据管理方法,所述方法包括如下步骤:
固态硬盘收到宿主机的逻辑块地址写命令;
所述固态硬盘的微控制器为所述逻辑块地址写命令分配页缓冲区,并基于所述页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,所述存储器页读请求包含可配置直接内存存取所需的数据传输描述;
所述固态硬盘的串行硬件驱动器接口以及存储器控制器根据所述同步机制执行宿主机写操作、存储器页读操作以及存储器页写操作。
根据本发明的数据管理方法,所述同步机制具体为:同步执行所述宿主机写操作请求和所述存储器页读操作请求,当所述存储器页读操作请求和所述宿主机写操作请求完成后执行所述存储器页写操作请求。
根据本发明的数据管理方法,所述可配置直接内存存取的数据传输描述具体为:
将存储器读出页中指定逻辑块地址区间的数据传输到所述页缓冲区中,将需要被修改部分的逻辑块地址区间的数据丢弃。
根据本发明的数据管理方法,所述同步机制具体为:所述微控制器为所述页缓冲区在内存中设置对应的同步描述符,所述同步描述符包括累加计数变量和目标计数变量,所述累加计数变量的初始值为0,所述目标计数变量的初始值为2;
所述存储器控制器执行存储器页读操作后将所述累加计数变量的值加1,且所述串行硬件驱动器接口执行宿主机写操作后将所述累加计数变量的值加1;
当所述累加计数变量的值等于所述目标计数变量的初始值后,所述存储器控制器执行所述存储器页写操作。
根据本发明的数据管理方法,所述串行硬件驱动器接口为串行高级技术附件。
本发明还提供一种固态硬盘,所述固态硬盘包括:
微控制器,用于当所述固态硬盘收到宿主机的逻辑块地址写命令时;为所述逻辑块地址写命令分配页缓冲区,并基于所述页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,其中存储器页读请求包含可配置直接内存存取所需的数据传输描述;
串行硬件驱动器接口,用于根据所述同步机制执行宿主机写操作;
存储器控制器,用于根据所述同步机制执行存储器页读操作和存储器页写操作。
根据本发明的固态硬盘,所述同步机制具体为:同步执行所述宿主机写操作请求和所述存储器页读操作请求,当存储器页读操作请求和宿主机写操作请求完成后执行所述存储器页写请求。
根据本发明的固态硬盘,所述可配置直接内存存取的数据传输描述具体为:将存储器读出页中指定逻辑块地址区间的数据传输到所述页缓冲区中,将需要被修改部分的逻辑块地址区间的数据丢弃。
根据本发明的固态硬盘,所述同步机制具体为:所述微控制器为所述页缓冲区在内存中设置对应的同步描述符,所述同步描述符包括累加计数变量和目标计数变量,所述累加计数变量的初始值为0,所述目标计数变量的初始值为2;所述存储器控制器执行存储器页读操作后将所述累加计数变量的值加1,且所述串行硬件驱动器接口执行宿主机写操作后也将所述累加计数变量的值加1;当所述累加计数变量的值等于所述目标计数变量的初始值后,所述存储器控制器执行所述存储器页写操作。
根据本发明的固态硬盘,所述串行硬件驱动器接口为串行高级技术附件。
本发明通过在宿主机写操作请求、存储器页读操作请求和存储器页写操作请求间建立同步机制,使存储器页读操作请求(即修改操作)和宿主机写操作请求并行,可提高读-修改-写操作性能。通过引入可配置直接内存存取,无需使用额外的页缓冲区、更不需要引入额外的归并操作,由于在存储器页读操作时“被修改的数据”不会传输,还可进一步节省内存总线带宽;同时通过引入同步机制,微控制器只需要在开始时建立所需的读-修改-写操作请求及其同步描述符,无需参与读-修改-写操作后续过程,降低了微控制器的参与程度。借此,本发明能在不额外增加缓冲区的前提下、降低微控制器的参与程度、节省内存总线带宽、提高读-修改-写操作的性能。
附图说明
图1是现有技术中一种RMW数据管理方法的示意图;
图2是现有技术中另一种RMW数据管理方法的示意图;
图3是本发明本一种固态硬盘读-修改-写操作的数据管理方法的流程图;
图4是本发明一种固态硬盘读-修改-写操作的数据管理方法的应用实施例;
图5是本发明一种固态硬盘读-修改-写操作的数据管理方法中可配置DMA的具体实现方法的示意图;
图6是本发明一种固态硬盘的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图3所示,本发明一种固态硬盘读-修改-写操作的数据管理方法,其主要包括以下步骤:
步骤S301,固态硬盘收到宿主机的逻辑块地址写命令。其中宿主机为固态硬盘的使用者,例如计算机,具体为BIOS(Basic Input Output System,基本输入输出***)或操作***。
步骤S302,固态硬盘的微控制器为逻辑块地址写命令分配页缓冲区,并基于页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,存储器页读请求包含可配置直接内存存取所需的数据传输描述。宿主机写操作请求即为宿主机对指定逻辑块地址的修改操作。该存储器为NAND FLASH闪存芯片。
在本步骤中,宿主机写操作请求、存储器页读操作请求和存储器页写操作请求之间的同步机制具体为:同步执行宿主机写操作请求和存储器页读操作请求,当存储器页读操作请求和宿主机写操作请求完成后执行所述存储器页写请求。在实际操作过程中,可将同步机制具体描述为:微控制器为页缓冲区在内存中设置对应的同步描述符,同步描述符包括累加计数变量和目标计数变量,累加计数变量的初始值为0,目标计数变量的初始值为2;存储器控制器执行存储器页读操作后将所述累加计数变量的值加1,且串行硬件驱动器接口执行宿主机写操作后也将所述累加计数变量的值加1;当累加计数变量的值等于目标计数变量的初始值后,存储器控制器执行存储器页写操作。串行硬件驱动器接口优选为SATA(Serial Advanced Technology Attachment,串行高级技术附件,一种基于行业标准的串行硬件驱动器接口)。
在本步骤中,可配置直接内存存取的数据传输描述具体为:将存储器读出页中指定逻辑块地址区间的数据传输到页缓冲区中,将需要被修改部分的逻辑块地址区间的数据丢弃。
步骤S303,固态硬盘的串行硬件驱动器接口以及存储器控制器根据同步机制执行宿主机写操作、存储器页读操作以及存储器页写操作。其中,宿主机写操作由串行硬件驱动器接口执行,存储器页读操作以及存储器页写操作由存储器控制器执行。
本发明通过在宿主机写操作请求、存储器页读操作请求和存储器页写操作请求间建立同步机制,使存储器页读操作请求(即修改操作)和宿主机写操作请求并行,可提高读-修改-写操作性能。通过引入可配置直接内存存取,无需使用额外的页缓冲区、更不需要引入额外的归并操作,由于在存储器页读操作时“被修改的数据”不会传输,还可进一步节省内存总线带宽;同时通过引入同步机制,微控制器只需要在开始时建立所需的读-修改-写操作请求及其同步描述符,无需参与读-修改-写操作后续过程,降低了微控制器的参与程度。
图4示出了本发明的一种应用实施例,SSD(Solid State Disk,固态硬盘)中包括NAND FLASH芯片和MCU(Micro control unit,微控制器),NANDFLASH芯片中集成有NFC(Nand flash controller,闪存控制器),同时固态硬盘还包括SATA。
当SSD收到Host(宿主机)关于LBA(Logical Block Address,逻辑块地址)写命令时;MCU为该LBA写命令在memory(内存)中分配page buffer(页缓冲区),并在memory中围绕该page buffer分别建立Host写请求(1.3)、Nandpage读请求(1)和Nand page写请求(2)。其中Nand page读请求(1)包含可配置DMA(Direct Memory Access,直接内存存取)所需的数据传输描述。可配置DMA的具体实现方法如图5所示,其可根据软件要求,将NAND FLASH芯片的读出页中指定的LBA区间传输到指定的LPA(Logical page Address,逻辑页地址)缓冲区中,将需要被修改部分LBA区间的数据丢弃。
MCU为该LBA写命令相关的操作请求基于sync(同步)机制建立“Sync描述符”。“Sync描述符”简单描述为:Nand page写请求(2)被设置为只有当“Sync描述符”被Nand page读请求(1)和Host写请求(1.3)更新后才能进一步执行;Nand page读请求(1)和Host写请求(1.3)完成后软件会分别自动对“Sync描述符”进行更新,并触发Sync机制更新检查,此时软件可将Nandpage写请求(2)继续向下执行。
Sync(同步)机制是一种不同硬件模块之间的握手机制。具体而言,每个LPA数据缓冲区在MEMORY中拥有对应的“SYNC描述符”:sync_cur_cnt和sync_target_cnt,可简单理解为两个计数变量,sync_cur_cnt为累加计数变量,sync_target_cnt为目标计数变量。对于一个需要进行RMW操作的LPA,软件会一次性为其建立RMW相关的3个操作,并设置sync_cur_cnt为0,sync_target_cnt为2;NFC负责发起RMW_READ,该操作完成后NFC将sync_cur_cnt加1;SATA完成RMW_MODIFY后也将sync_cur_cnt加一;对于RMW_WRITE操作,NFC需要等到sync_cur_cnt等于sync_target_cnt时才能执行。
由此可见,MCU只需要在LBA写命令开始时,为其分配页缓冲区、建立操作请求、Sync描述符就可以了;而无需参与RMW的具体操作过程。利用Read和Modify并行操作的同时,没有耗费额外的带宽和缓冲区。
如图6所示,本发明相应提供一种固态硬盘100,其包括:
微控制器10,用于当所述固态硬盘收到宿主机关于逻辑块地址写命令时;为所述逻辑块地址写命令分配页缓冲区,并基于所述页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,其中存储器页读请求包含可配置直接内存存取所需的数据传输描述;
串行硬件驱动器接口20,用于根据所述同步机制执行宿主机写操作;
存储器控制器30,用于根据所述同步机制执行存储器页读操作和存储器页写操作。串行硬件驱动器接口优选为SATA(Serial Advanced TechnologyAttachment,串行高级技术附件,一种基于行业标准的串行硬件驱动器接口)。显然,固态硬盘还应包括存储器40等结构。
综上所述,本发明通过在宿主机写操作请求、存储器页读操作请求和存储器页写操作请求间建立同步机制,使存储器页读操作请求(即修改操作)和宿主机写操作请求并行,可提高读-修改-写操作性能。通过引入可配置直接内存存取,无需使用额外的页缓冲区、更不需要引入额外的归并操作,由于在存储器页读操作时“被修改的数据”不会传输,还可进一步节省内存总线带宽;同时通过引入同步机制,微控制器只需要在开始时建立所需的读-修改-写操作请求及其同步描述符,无需参与读-修改-写操作后续过程,降低了微控制器的参与程度。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (8)
1.一种固态硬盘读-修改-写操作的数据管理方法,其特征在于,所述方法包括如下步骤:
固态硬盘收到宿主机的逻辑块地址写命令;
所述固态硬盘的微控制器为所述逻辑块地址写命令分配页缓冲区,并基于所述页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,所述存储器页读请求包含可配置直接内存存取所需的数据传输描述;
所述固态硬盘的串行硬件驱动器接口以及存储器控制器根据所述同步机制执行宿主机写操作、存储器页读操作以及存储器页写操作;
所述同步机制具体为:所述微控制器为所述页缓冲区在内存中设置对应的同步描述符,所述同步描述符包括累加计数变量和目标计数变量,所述累加计数变量的初始值为0,所述目标计数变量的初始值为2;
所述存储器控制器执行存储器页读操作后将所述累加计数变量的值加1,且所述串行硬件驱动器接口执行宿主机写操作后将所述累加计数变量的值加1;
当所述累加计数变量的值等于所述目标计数变量的初始值后,所述存储器控制器执行所述存储器页写操作。
2.根据权利要求1所述的数据管理方法,其特征在于,所述同步机制具体为:同步执行所述宿主机写操作请求和所述存储器页读操作请求,当所述存储器页读操作请求和所述宿主机写操作请求完成后执行所述存储器页写操作请求。
3.根据权利要求1所述的数据管理方法,其特征在于,所述可配置直接内存存取的数据传输描述具体为:
将存储器读出页中指定逻辑块地址区间的数据传输到所述页缓冲区中,将需要被修改部分的逻辑块地址区间的数据丢弃。
4.根据权利要求1所述的数据管理方法,其特征在于,所述串行硬件驱动器接口为串行高级技术附件。
5.一种固态硬盘,其特征在于,所述固态硬盘包括:
微控制器,用于当所述固态硬盘收到宿主机的逻辑块地址写命令时;为所述逻辑块地址写命令分配页缓冲区,并基于所述页缓冲区建立具有同步机制的宿主机写操作请求、存储器页读操作请求和存储器页写操作请求,其中存储器页读请求包含可配置直接内存存取所需的数据传输描述;
串行硬件驱动器接口,用于根据所述同步机制执行宿主机写操作;
存储器控制器,用于根据所述同步机制执行存储器页读操作和存储器页写操作;
所述同步机制具体为:所述微控制器为所述页缓冲区在内存中设置对应的同步描述符,所述同步描述符包括累加计数变量和目标计数变量,所述累加计数变量的初始值为0,所述目标计数变量的初始值为2;
所述存储器控制器执行存储器页读操作后将所述累加计数变量的值加1,且所述串行硬件驱动器接口执行宿主机写操作后也将所述累加计数变量的值加1;
当所述累加计数变量的值等于所述目标计数变量的初始值后,所述存储器控制器执行所述存储器页写操作。
6.根据权利要求5所述的固态硬盘,其特征在于,所述同步机制具体为:同步执行所述宿主机写操作请求和所述存储器页读操作请求,当存储器页读操作请求和宿主机写操作请求完成后执行所述存储器页写请求。
7.根据权利要求5所述的固态硬盘,其特征在于,所述可配置直接内存存取的数据传输描述具体为:
将存储器读出页中指定逻辑块地址区间的数据传输到所述页缓冲区中,将需要被修改部分的逻辑块地址区间的数据丢弃。
8.根据权利要求5所述的固态硬盘,其特征在于,所述串行硬件驱动器接口为串行高级技术附件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110426293.6A CN102566939B (zh) | 2011-12-19 | 2011-12-19 | 一种固态硬盘及其读-修改-写操作的数据管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110426293.6A CN102566939B (zh) | 2011-12-19 | 2011-12-19 | 一种固态硬盘及其读-修改-写操作的数据管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102566939A CN102566939A (zh) | 2012-07-11 |
CN102566939B true CN102566939B (zh) | 2014-12-03 |
Family
ID=46412464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110426293.6A Active CN102566939B (zh) | 2011-12-19 | 2011-12-19 | 一种固态硬盘及其读-修改-写操作的数据管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102566939B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279402B (zh) * | 2013-05-13 | 2016-08-10 | 记忆科技(深圳)有限公司 | 基于多层单元固态硬盘的数据恢复方法及固态硬盘 |
TWI588824B (zh) * | 2015-12-11 | 2017-06-21 | 捷鼎國際股份有限公司 | 加快在不連續頁面寫入資料之電腦系統及其方法 |
CN107797760B (zh) * | 2016-09-05 | 2021-06-11 | 北京忆恒创源科技有限公司 | 一种访问缓存信息的方法、装置与固态驱动器 |
EP3394758A4 (en) * | 2017-01-23 | 2019-02-20 | Micron Technology, Inc. | PARTIALLY WRITTEN BLOCK TREATMENT |
KR102381233B1 (ko) * | 2017-08-28 | 2022-04-01 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
KR20210063724A (ko) * | 2019-11-25 | 2021-06-02 | 에스케이하이닉스 주식회사 | 메모리 시스템 |
CN112684981B (zh) * | 2020-12-23 | 2023-12-22 | 北京浪潮数据技术有限公司 | 固态硬盘读操作记录方法、***、装置及可读存储介质 |
CN113934447A (zh) * | 2021-09-13 | 2022-01-14 | 深圳市硅格半导体有限公司 | 硬盘管理方法、装置、设备及计算机程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5586291A (en) * | 1994-12-23 | 1996-12-17 | Emc Corporation | Disk controller with volatile and non-volatile cache memories |
CN101498994A (zh) * | 2009-02-16 | 2009-08-05 | 华中科技大学 | 一种固态硬盘控制器 |
CN102023817A (zh) * | 2010-12-03 | 2011-04-20 | 深圳市江波龙电子有限公司 | 一种存储设备数据的读写控制方法及*** |
-
2011
- 2011-12-19 CN CN201110426293.6A patent/CN102566939B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5586291A (en) * | 1994-12-23 | 1996-12-17 | Emc Corporation | Disk controller with volatile and non-volatile cache memories |
CN101498994A (zh) * | 2009-02-16 | 2009-08-05 | 华中科技大学 | 一种固态硬盘控制器 |
CN102023817A (zh) * | 2010-12-03 | 2011-04-20 | 深圳市江波龙电子有限公司 | 一种存储设备数据的读写控制方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN102566939A (zh) | 2012-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102566939B (zh) | 一种固态硬盘及其读-修改-写操作的数据管理方法 | |
TWI409633B (zh) | 快閃記憶體儲存裝置、其控制器與資料寫入方法 | |
TWI467372B (zh) | 指令執行方法、記憶體控制器與記憶體儲存裝置 | |
US8725977B2 (en) | NVMHCI attached hybrid data storage | |
JP5663720B2 (ja) | メモリ機器のための拡張利用範囲 | |
US8869004B2 (en) | Memory storage device, memory controller thereof, and data transmission method thereof | |
JP2011513823A5 (zh) | ||
CN110910921A (zh) | 一种命令读写方法、装置及计算机存储介质 | |
CN104424103A (zh) | 固态储存装置中高速缓存的管理方法 | |
CN107203330B (zh) | 一种面向读写数据流的闪存数据分布方法 | |
TWI698749B (zh) | 資料儲存裝置與資料處理方法 | |
TW201706848A (zh) | 有效資料合併方法、記憶體控制器與記憶體儲存裝置 | |
CN103207846A (zh) | 内存控制器及控制方法 | |
TWI612473B (zh) | 垃圾回收方法以及使用該方法的裝置 | |
CN112035381A (zh) | 一种存储***及存储数据处理方法 | |
EP3506075A1 (en) | Mass storage device capable of fine grained read and/or write operations | |
CN106775477B (zh) | Ssd主控数据传输管理装置及方法 | |
WO2021035555A1 (zh) | 一种固态硬盘的数据存储方法、装置及固态硬盘ssd | |
CN102279825B (zh) | 一种固态硬盘控制器的智能dma控制器 | |
WO2015058641A1 (zh) | 一种混合硬盘的实现方法及装置 | |
CN111176566B (zh) | 一种支持queue命令的eMMC读写控制方法及存储介质 | |
US9152348B2 (en) | Data transmitting method, memory controller and data transmitting system | |
CN107943413B (zh) | 一种固态硬盘提升读性能的方法 | |
CN108255424B (zh) | 一种NVMe固态硬盘IO响应延迟的保障方法 | |
US20150212759A1 (en) | Storage device with multiple processing units and data processing method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |