CN110058783B - 暂存存储器处理方法、暂存存储器程序与存储装置 - Google Patents

暂存存储器处理方法、暂存存储器程序与存储装置 Download PDF

Info

Publication number
CN110058783B
CN110058783B CN201810044161.9A CN201810044161A CN110058783B CN 110058783 B CN110058783 B CN 110058783B CN 201810044161 A CN201810044161 A CN 201810044161A CN 110058783 B CN110058783 B CN 110058783B
Authority
CN
China
Prior art keywords
write
address
temporary storage
buffer
temporary
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
Application number
CN201810044161.9A
Other languages
English (en)
Other versions
CN110058783A (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.)
Realtek Semiconductor Corp
Original Assignee
Realtek Semiconductor Corp
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 Realtek Semiconductor Corp filed Critical Realtek Semiconductor Corp
Priority to CN201810044161.9A priority Critical patent/CN110058783B/zh
Publication of CN110058783A publication Critical patent/CN110058783A/zh
Application granted granted Critical
Publication of CN110058783B publication Critical patent/CN110058783B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/325Power saving in peripheral device
    • G06F1/3275Power saving in memory, e.g. RAM, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0625Power saving in storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0634Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

本发明公开一种暂存存储器处理方法、暂存存储器程序与存储装置。暂存存储器处理方法包括:接收一写入指令,该写入指令包括一写入数据与一写入位址;判断对应该写入位址的一对应暂存位址是否在一不命中状态,以产生一判断结果;以及依据该判断结果决定是否将该写入数据写入一缓冲存储器的一对应缓冲位址。因此,本发明能提升处理器执行效能与降低耗电。

Description

暂存存储器处理方法、暂存存储器程序与存储装置
技术领域
本发明涉及一种存储器处理方法、存储器程序与装置,特别是涉及一种针对暂存位址不命中状态进行处理的暂存存储器处理方法、暂存存储器程序与存储装置。
背景技术
现有的存储装置在执行写入数据或是其他程序指令时,会先在暂存存储器中找寻是否存有符合的指令数据。如果有,则直接对暂存存储器进行写入数据。对暂存存储器写入数据的方法一般来说则主要有直写式(write-through)与回写式(write-back)。
直写式不论发生命中状态或不命中状态,都会将数据写入到外部存储器。回写式在发生不命中状态时不会直接写入外部存储器,但会从外部存储器读入位于对应写入指令位址的数据,并储存于暂存存储器中对应的位址,再将该写入指令的内容存入该位址。然而在某些情况下,暂存存储器会有多余的外部存储器读入动作。
因此,需要提出能节省多余读取、降低耗电以及提升存储装置效能的暂存存储器处理方法与装置。
发明内容
本发明针对现有技术的不足,提出一种暂存存储器处理方法、暂存存储器程序与存储装置,以提升处理器执行效能与降低耗电。
为了解决上述的技术问题,本发明所采用的其中一技术方案是,提供一种暂存存储器处理方法,其包括:接收一写入指令,该写入指令包括一写入数据与一写入位址;判断对应该写入位址的一对应暂存位址是否在一不命中状态,以产生一判断结果;以及依据该判断结果决定是否将该写入数据写入一缓冲存储器的一对应缓冲位址。
为了解决上述的技术问题,本发明所采用的另外一技术方案是,提供一种存储装置,具有一暂存存储器,存储装置包括:一缓冲存储器;一接收单元,其用于接收一写入指令,该写入指令包括一写入数据与一写入位址;一命中判断单元,其用于判断对应该写入位址的一对应暂存位址是否在一不命中状态,以产生一判断结果;以及一缓冲控制单元,其用于依据该判断结果决定是否将该写入数据写入该缓冲存储器的一对应缓冲位址。
为了解决上述的技术问题,本发明所采用的又一技术方案是,提供一种暂存存储器程序,安装于一存储装置中,暂存存储器程序功能包括:接收一写入指令,该写入指令包括一写入数据与一写入位址;判断对应该写入位址的一对应暂存位址是否在一不命中状态,以产生一判断结果;依据该判断结果决定是否将该写入数据写入一缓冲存储器的一对应缓冲位址;以及将该写入数据写入至一暂存存储器。
本发明的有益效果在于能通过使用缓冲存储器与累积连续位址的写入数据,来处理暂存存储器中的不命中状态,达到节省多余读取、降低耗电以提升存储装置效能的效果。
为使能更进一步了解本发明的特征及技术内容,请参阅以下有关本发明的详细说明与附图,然而所提供的附图仅用于提供参考与说明,并非用来对本发明加以限制。
附图说明
图1为本发明一实施例的暂存存储器处理方法流程图。
图2为本发明一实施例的存储装置示意图。
图3~6为本发明的暂存存储器处理方法示意图。
附图标记说明:
100 存储装置
101 接收单元
102 命中判断单元
103 缓冲控制单元
104 写入单元
105 暂存行判断单元
110 暂存存储器
120 缓冲存储器
具体实施方式
以下是通过特定的具体实施例来说明本发明所公开有关“暂存存储器处理方法、暂存存储器程序与存储装置”的实施方式,本领域技术人员可由本说明书所公开的内容了解本发明的优点与效果。本发明可通过其他不同的具体实施例加以施行或应用,本说明书中的各项细节也可基于不同观点与应用,在不悖离本发明的构思下进行各种修改与变更。另外,本发明的附图仅为简单示意说明,并非依实际尺寸的描绘,事先声明。以下的实施方式将进一步详细说明本发明的相关技术内容,但所公开的内容并非用以限制本发明的保护范围。
请参照图1,图1为本发明一实施例的暂存存储器处理方法流程图。如图1所示,步骤S100是接收写入指令,该写入指令包括一写入数据与一写入位址;步骤S101是判断对应该写入位址的一对应暂存位址是否在不命中(cache miss)状态,以产生一判断结果;假如该判断结果指出该对应暂存位址不是在不命中状态,则执行步骤S102,将写入数据写入暂存存储器。需要注意的是,不论是通过直写式或是回写式的写入方法,都会需要将写入数据写进暂存存储器中,而在直写式方法中会再多执行写入至外部存储器的动作。假如该判断结果指出该对应暂存位址是在不命中状态,则进行步骤S103,将该写入数据写入一缓冲存储器的一对应缓冲位址;接着,执行步骤S104,判断该对应缓冲位址所在的一暂存行中是否有至少一缓冲位址没被写入,以产生一暂存行状态;当该暂存行状态指出该对应缓冲位址所在的该暂存行中所有该缓冲位址都被写入时,执行步骤S105将该暂存行内容写入至该暂存存储器中的一对应数据行;当该暂存行状态指出该对应缓冲位址所在的该暂存行中有至少一缓冲位址没被写入时,执行步骤S106以判断在预定时间内有无另一写入指令被接收,假如判断在该预定时间内有另一写入指令被接收时,不将该暂存行内容写入至该暂存存储器中的该对应数据行,回到步骤S100继续执行,而假如在该预定时间内没有另一写入指令被接收时,进行步骤S105以将该暂存行内容写入至该暂存存储器中的该对应数据行。换句话说,本发明的暂存存储器处理方法会先判断写入指令内容是否已存在于暂存存储器中,假如不存在,则该对应暂存位址是在不命中状态,此时将该写入数据写入该缓冲存储器的该对应缓冲位址;而假如存在,该对应暂存位址不在不命中状态,则将该写入数据写入暂存存储器。将该写入数据写入该缓冲存储器的该对应缓冲位址后,会判断该对应缓冲位址所在的该暂存行中是否有至少一缓冲位址没被写入,当该对应缓冲位址所在的该暂存行中所有该缓冲位址都被写入时,就会将该暂存行内容写入至该暂存存储器中的该对应数据行。也就是说,通过使用缓冲存储器的写入数据,来处理暂存存储器中的不命中状态,并且累积暂存行中被写入的该缓冲位址,以节省多余读取。举例来说,要执行的写入指令中包括将要被写入的写入数据,以及要被写入外部存储器中的一位址,但是如果该外部存储器中的该位址所对应的暂存位址是在不命中状态,则将此数据写入对应缓冲位址中。
图1中的暂存存储器处理方法也可通过程序执行。在一实施例中,暂存存储器处理方法可以是由安装于一存储装置中的暂存存储器程序来实现。
请参照图2,图2为本发明一实施例的存储装置100示意图。该存储装置100具有一暂存存储器110,并包括:一缓冲存储器120;一接收单元101,其用于接收一写入指令W_cmd,该写入指令W_cmd包括一写入数据W_data与一写入位址W_adr;一命中判断单元102,其用于判断对应该写入位址W_adr的一对应暂存位址Cache_adr是否在一不命中状态,以产生一判断结果;一缓冲控制单元103,其用于依据该判断结果决定是否将该写入数据W_data写入该缓冲存储器120的一对应缓冲位址Buf_adr;以及一写入单元104,其用于将该对应缓冲位址Buf_adr所在的一暂存行Cache_line写入至暂存存储器110中的一对应数据行D_line(图未示)。其中,当暂存位址是在不命中状态时,写入数据会被写入缓冲存储器。举例来说,要执行的写入指令中包括将要被写入的写入数据,以及要被写入外部存储器中的一位址,但是如果该外部存储器中的该位址所对应的暂存位址是在不命中状态,则将此数据写入对应缓冲位址中。
在本实施例中,当该判断结果指出该对应暂存位址Cache_adr是在该不命中状态时,则该缓冲控制单元103决定将该写入数据W_data写入该缓冲存储器120的该对应缓冲位址Buf_adr;以及当该判断结果指出该对应暂存位址Cache_adr不是在该不命中状态时,则该缓冲控制单元103决定不将该写入数据W_data写入该缓冲存储器120的该对应缓冲位址Buf_adr,而是将该写入数据W_data写入暂存存储器。
另外,在一实施例中,该存储装置100还包括一暂存行判断单元105,其用于判断该对应缓冲位址Buf_adr所在的一暂存行Cache_line中是否有至少一缓冲位址没被写入,以产生一暂存行状态,以让该写入单元104依据该暂存行状态决定是否将该暂存行Cache_line的该写入数据W_data写入至该暂存存储器110中的一对应数据行。当该暂存行状态指出该对应缓冲位址Buf_adr所在的该暂存行Cache_line中有至少一缓冲位址没被写入时,该接收单元101判断在一预定时间内有无另一写入指令W_cmd被接收,当判断在该预定时间内有另一写入指令被接收时,不将该暂存行内容写入至该暂存存储器110中的该对应数据行D_line,且当在该预定时间内没有另一写入指令被接收时,该暂存行内容会被写入至该暂存存储器110中的该对应数据行D_line。当该暂存行状态指出该对应缓冲位址Buf_adr所在的该暂存行Cache_line中所有该缓冲位址都被写入时,该写入单元104将该暂存行内容写入至该暂存存储器110中的该对应数据行D_line。
图3~6为本发明的暂存存储器处理方法示意图。图3~6为上述实施例的一个使用例子。如图3所示,要执行的写入指令中将要被写入的写入数据W_data是“H”,要被写入外部存储器中的位址是0。如图3所示的指令“0:H”,意即要将写入数据“H”写入外部存储器(无图示)中的位址0,但是将“H”写入位址0的指令所对应暂存位址Cache_adr是在不命中状态,因此将此指令写入对应缓冲位址Buf_adr中。同样地,在图4、5中,指令“1:I”、“2:J”、“3:K”意思是分别将“I”、“J”与“K”写入外部存储器中的位址1、2与3,在此实施例中也是在不命中状态,且由于位址是连续相邻的,因此都被写入该对应缓冲位址Buf_adr所在的该暂存行Cache_line中。图6所表示的是当该暂存行Cache_line都被存入数据,也就是当该对应缓冲位址所在的该暂存行中所有该缓冲位址都被写入时,或是图5中只剩的一个位址超过预定时间都没数据写入,则会将该暂存行Cache_line的内容一起写入至暂存存储器,也就是将该暂存行内容写入至该暂存存储器中的该对应数据行。
现有的写入分配(write-allocate)方式中,在发生第一笔不命中的写入时,就会从外部存储器带入整个暂存行,但该暂存行最终还是会被后续的写入覆盖掉,导致前述的带入整个暂存行变成一个多余的动作。本发明的有益效果在于能通过使用缓冲存储器来储存不命中的写入数据,并将连续位址的不命中写入数据累积后再一起写入暂存存储器,来处理暂存存储器中的不命中状态,达到节省多余读取、降低耗电以提升存储装置效能的效果。
以上所公开的内容仅为本发明的可行实施例,并非因此局限本发明的权利要求,所以凡是运用本发明说明书及附图内容所做的等效技术变化,均包含于本发明的权利要求内。

Claims (6)

1.一种暂存存储器处理方法,其包括:
接收一写入指令,该写入指令包括一写入数据与一写入位址;
判断对应该写入位址的一对应暂存位址是否在一不命中状态,以产生一判断结果;以及
依据该判断结果决定是否将该写入数据写入一缓冲存储器的一对应缓冲位址,其中,当该判断结果指出该对应暂存位址是在该不命中状态时,则决定将该写入数据写入该缓冲存储器的该对应缓冲位址,该暂存存储器处理方法还进一步包括:
判断该对应缓冲位址所在的一暂存行中是否有至少一缓冲位址没被写入,以产生一暂存行状态;以及
依据该暂存行状态决定是否将该暂存行的该写入数据写入至一暂存存储器中的一对应数据行。
2.如权利要求1所述的暂存存储器处理方法,其中,当该暂存行状态指出该对应缓冲位址所在的该暂存行中所有该缓冲位址都被写入时,将该暂存行内容写入至该暂存存储器中的该对应数据行。
3.如权利要求1所述的暂存存储器处理方法,其中,当该暂存行状态指出该对应缓冲位址所在的该暂存行中有至少一缓冲位址没被写入时,进行以下步骤:
判断在一预定时间内有无另一写入指令被接收;
当判断在该预定时间内有另一写入指令被接收时,不将该暂存行内容写入至该暂存存储器中的该对应数据行;以及
当判断在该预定时间内没有另一写入指令被接收时,将该暂存行内容写入至该暂存存储器中的该对应数据行。
4.一种存储装置,具有一暂存存储器,该存储装置包括:
一缓冲存储器;
一接收单元,其用于接收一写入指令,该写入指令包括一写入数据与一写入位址;
一命中判断单元,其用于判断对应该写入位址的一对应暂存位址是否在一不命中状态,以产生一判断结果;以及
一缓冲控制单元,其用于依据该判断结果决定是否将该写入数据写入该缓冲存储器的一对应缓冲位址,其中,当该判断结果指出该对应暂存位址是在该不命中状态时,则该缓冲控制单元决定将该写入数据写入该缓冲存储器的该对应缓冲位址,该存储装置还进一步包括:
一暂存行判断单元,其用于判断该对应缓冲位址所在的一暂存行中是否有至少一缓冲位址没被写入,以产生一暂存行状态;
其中,一写入单元依据该暂存行状态决定是否将该暂存行的该写入数据写入至该暂存存储器中的一对应数据行。
5.如权利要求4所述的存储装置,其中,当该暂存行状态指出该对应缓冲位址所在的该暂存行中所有该缓冲位址都被写入时,该写入单元将该暂存行内容写入至该暂存存储器中的该对应数据行。
6.如权利要求4所述的存储装置,其中,当该暂存行状态指出该对应缓冲位址所在的该暂存行中有至少一缓冲位址没被写入时,该接收单元判断在一预定时间内有无另一写入指令被接收;当该接收单元判断在该预定时间内有另一写入指令被接收时,该写入单元不将该暂存行内容写入至该暂存存储器中的该对应数据行;以及,当该接收单元判断在该预定时间内没有另一写入指令被接收时,该写入单元将该暂存行内容写入至该暂存存储器中的该对应数据行。
CN201810044161.9A 2018-01-17 2018-01-17 暂存存储器处理方法、暂存存储器程序与存储装置 Active CN110058783B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810044161.9A CN110058783B (zh) 2018-01-17 2018-01-17 暂存存储器处理方法、暂存存储器程序与存储装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810044161.9A CN110058783B (zh) 2018-01-17 2018-01-17 暂存存储器处理方法、暂存存储器程序与存储装置

Publications (2)

Publication Number Publication Date
CN110058783A CN110058783A (zh) 2019-07-26
CN110058783B true CN110058783B (zh) 2022-04-12

Family

ID=67314818

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810044161.9A Active CN110058783B (zh) 2018-01-17 2018-01-17 暂存存储器处理方法、暂存存储器程序与存储装置

Country Status (1)

Country Link
CN (1) CN110058783B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101340569A (zh) * 2007-07-06 2009-01-07 扬智科技股份有限公司 高速缓存及其数据处理方法
CN102165424A (zh) * 2008-09-24 2011-08-24 松下电器产业株式会社 高速缓冲存储器、存储器系统及其控制方法
CN104156323A (zh) * 2014-08-07 2014-11-19 浪潮(北京)电子信息产业有限公司 一种高速缓冲存储器的数据块长度自适应读取方法及装置
CN104423888A (zh) * 2013-08-23 2015-03-18 群联电子股份有限公司 数据写入方法、存储器控制电路单元与存储器存储装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10073721B2 (en) * 2014-08-20 2018-09-11 The Florida International University Board Of Trustees Non-blocking writes to file data

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101340569A (zh) * 2007-07-06 2009-01-07 扬智科技股份有限公司 高速缓存及其数据处理方法
CN102165424A (zh) * 2008-09-24 2011-08-24 松下电器产业株式会社 高速缓冲存储器、存储器系统及其控制方法
CN104423888A (zh) * 2013-08-23 2015-03-18 群联电子股份有限公司 数据写入方法、存储器控制电路单元与存储器存储装置
CN104156323A (zh) * 2014-08-07 2014-11-19 浪潮(北京)电子信息产业有限公司 一种高速缓冲存储器的数据块长度自适应读取方法及装置

Also Published As

Publication number Publication date
CN110058783A (zh) 2019-07-26

Similar Documents

Publication Publication Date Title
US10019369B2 (en) Apparatuses and methods for pre-fetching and write-back for a segmented cache memory
JP7115899B2 (ja) ハイブリッドメモリにおける書き込み及びフラッシュ支援のためのメモリモジュール及びその動作方法
US8285940B2 (en) Method and apparatus for high speed cache flushing in a non-volatile memory
US20060106984A1 (en) Methods and apparatus for efficient memory usage
US6460114B1 (en) Storing a flushed cache line in a memory buffer of a controller
US20110173400A1 (en) Buffer memory device, memory system, and data transfer method
US20100235568A1 (en) Storage device using non-volatile memory
JP3236287B2 (ja) マルチプロセッサシステム
JP2008107983A (ja) キャッシュメモリ
KR101127686B1 (ko) 반도체 기억 장치
CN110716887B (zh) 一种支持写暗示的硬件高速缓存数据装入方法
KR100505695B1 (ko) 동적으로 할당 또는 해제되는 버퍼를 가지는 캐쉬 메모리장치, 이를 구비한 디지털 데이터 처리 시스템 및 그 방법
CN111639042B (zh) 一种预取buffer数据一致性的处理方法及装置
CN108519858B (zh) 存储芯片硬件命中方法
US20150052310A1 (en) Cache device and control method thereof
CN110058783B (zh) 暂存存储器处理方法、暂存存储器程序与存储装置
CN110209356A (zh) 一种提高ssd读写性能的方法及其系统
TWI435267B (zh) 處理器電路及讀取資料的方法
TWI681293B (zh) 暫存記憶體處理方法、暫存記憶體程式與記憶裝置
WO2021035797A1 (zh) 一种提高eMMC写入效率及准确率的方法
JP3767521B2 (ja) キャッシュフィル制御方法及びcpu
CN112783802B (zh) 一种ssd中优化读干扰处理的方法
JP2000047942A (ja) キャッシュメモリ制御装置及びその制御方法
JP6844895B1 (ja) ストレージ装置およびストレージ方法
CN112988036B (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
GR01 Patent grant
GR01 Patent grant