CN114201120B - 一种数据读写方法、装置及相关设备 - Google Patents
一种数据读写方法、装置及相关设备 Download PDFInfo
- Publication number
- CN114201120B CN114201120B CN202210148645.4A CN202210148645A CN114201120B CN 114201120 B CN114201120 B CN 114201120B CN 202210148645 A CN202210148645 A CN 202210148645A CN 114201120 B CN114201120 B CN 114201120B
- Authority
- CN
- China
- Prior art keywords
- data
- read
- address
- memory
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000013500 data storage Methods 0.000 claims description 47
- 238000004590 computer program Methods 0.000 claims description 11
- 230000009286 beneficial effect Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000009191 jumping Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000009795 derivation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
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)
Abstract
本申请公开了一种数据读写方法,包括根据数据读写请求确定读写数据;当所述读写数据未命中缓存,且设置于所述缓存中的数据存储器不存在空闲存储地址时,从所述数据存储器的初始存储地址开始遍历;当遍历到存在未读标志的存储地址时,将所述读写数据写入存在所述未读标志的存储地址中;当未遍历到存在未读标志的存储地址时,将所述读写数据写入所述初始存储地址的上一存储地址中。应用本申请所提供的技术方案,可以在有效保证较高缓存命中率的同时,提高数据读写效率。本申请还公开了一种数据读写装置、设备及计算机可读存储介质,均具有上述有益效果。
Description
技术领域
本申请涉及数据存储技术领域,特别涉及一种数据读写方法,还涉及一种数据读写装置、设备及计算机可读存储介质。
背景技术
Cache(缓冲存储器/缓存)是介于CPU(Central Processing Unit,中央处理器)和主存之间的小容量高速存储器,存取速度比主存快,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。它能高速地向CPU提供指令和数据,加快程序的执行速度。
当CPU在Cache中找不到需要的数据时,此时就需要去主存中获取相应的数据,并在Cache中进行替换。Cache的替换策略一般可分为以下三大类:(1)基于先进先出的替换;(2)随机替换;(3)基于Cache历史信息的最近最少使用法或其他衍生方法。其中,前两种方法不需要考虑Cache的实际使用情况,优先替换首先写入Cache的数据或完全随机替换,但是,这种实现方式缓存命中率较低,在一定程度上降低了数据读写效率;最后一种方法虽然缓存命中率较高,但其实现过程需要依赖于较为繁琐的信息统计和算法计算,以及较为复杂的硬件结构,同样会降低数据读写效率。
因此,如何在有效保证较高缓存命中率的同时,提高数据读写效率是本领域技术人员亟待解决的问题。
发明内容
本申请的目的是提供一种数据读写方法,该数据读写方法可以在有效保证较高缓存命中率的同时,提高数据读写效率;本申请的另一目的是提供一种数据读写装置、设备及计算机可读存储介质,均具有上述有益效果。
第一方面,本申请提供了一种数据读写方法,包括:
根据数据读写请求确定读写数据;
当所述读写数据未命中缓存,且设置于所述缓存中的数据存储器不存在空闲存储地址时,从所述数据存储器的初始存储地址开始遍历;
当遍历到存在未读标志的存储地址时,将所述读写数据写入存在所述未读标志的存储地址中;
当未遍历到存在未读标志的存储地址时,将所述读写数据写入所述初始存储地址的上一存储地址中。
优选的,判断所述读写数据是否命中所述缓存,包括:
将所述读写数据输入设置于所述缓存中的内容可寻址存储器;
当接收到所述内容可寻址存储器根据所述读写数据反馈的地址信息时,确定所述读写数据命中所述缓存;
当未接收到所述内容可寻址存储器根据所述读写数据反馈的地址信息时,确定所述读写数据未命中所述缓存。
优选的,所述将所述读写数据写入存在所述未读标志的存储地址中之后,或所述将所述读写数据写入所述初始存储地址的上一存储地址中之后,还包括:
将所述读写数据在所述数据存储器中的存储地址和在主存中的存储地址一同更新至所述内容可寻址存储器。
优选的,判断所述数据存储器是否存在所述空闲存储地址,包括:
从所述数据存储器的初始存储地址开始遍历;
当遍历到存在未写标志的存储地址时,确定所述数据存储器存在所述空闲存储地址,并将所述存在未写标志的存储地址作为所述空闲存储地址;
当未遍历到存在未写标志的存储地址时,确定所述数据存储器不存在所述空闲存储地址。
优选的,所述将所述读写数据写入存在所述未读标志的存储地址中之后,或所述将所述读写数据写入所述初始存储地址的上一存储地址中之后,还包括:
为所述读写数据在所述数据存储器中的存储地址设置已写标志和未读标志。
优选的,当所述读写数据命中所述缓存时,所述方法还包括:
若所述读写数据具体为读数据,则为所述读数据在所述数据存储器中的存储地址设置已读标志;
若所述读写数据具体为写数据,则为所述写数据在所述数据存储器中的存储地址设置已写标志。
优选的,所述数据读写方法还包括:
当所述读写数据未命中所述缓存,且所述数据存储器存在所述空闲存储地址时,将所述读写数据写入所述空闲存储地址。
第二方面,本申请还公开了一种数据读写装置,包括:
读写数据确定模块,用于根据数据读写请求确定读写数据;
存储地址遍历模块,用于当所述读写数据未命中缓存,且设置于所述缓存中的数据存储器不存在空闲存储地址时,从所述数据存储器的初始存储地址开始遍历;
第一数据写入模块,用于当遍历到存在未读标志的存储地址时,将所述读写数据写入存在所述未读标志的存储地址中;
第二数据写入模块,用于当未遍历到存在未读标志的存储地址时,将所述读写数据写入所述初始存储地址的上一存储地址中。
第三方面,本申请还公开了一种数据读写设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上所述的任一种数据读写方法的步骤。
第四方面,本申请还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的任一种数据读写方法的步骤。
本申请所提供的一种数据读写方法,包括根据数据读写请求确定读写数据;当所述读写数据未命中缓存,且设置于所述缓存中的数据存储器不存在空闲存储地址时,从所述数据存储器的初始存储地址开始遍历;当遍历到存在未读标志的存储地址时,将所述读写数据写入存在所述未读标志的存储地址中;当未遍历到存在未读标志的存储地址时,将所述读写数据写入所述初始存储地址的上一存储地址中。
应用本申请所提供的技术方案,预先为缓存中数据存储器的各个数据存储地址设置读写标志位,用于标志对应的存储数据是否已经发生过读写操作,由此,在数据读写过程中,面对读写数据未命中缓存且缓存中数据存储器不存在空闲存储地址的情况下,可以从数据存储器的初始存储地址开始遍历,直至遍历到存在未读标志的存储地址,说明该存储地址中所存储的数据信息从未被读取过,使用率较低,此时,则可以直接将读写数据写入至该存在未读标志的存储地址中;当无法遍历到存在未读标志的存储地址时,则可以直接将读写数据写入初始存储地址的上一存储地址中,也即遍历到的数据存储器中的最后一个存储地址,以有效保证将读写数据存储至缓存。可见,该种实现方式可以在有效保证较高缓存命中率的同时,提高数据读写效率。
本申请所提供的一种数据读写装置、设备及计算机可读存储介质,均具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明现有技术和本申请实施例中的技术方案,下面将对现有技术和本申请实施例描述中需要使用的附图作简要的介绍。当然,下面有关本申请实施例的附图描述的仅仅是本申请中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本申请的保护范围。
图1为本申请所提供的一种数据读写方法的流程示意图;
图2为本申请所提供的一种数据读写系统的结构示意图;
图3为本申请所提供的一种数据读写装置的结构示意图;
图4为本申请所提供的一种数据读写设备的结构示意图。
具体实施方式
本申请的核心是提供一种数据读写方法,该数据读写方法可以在有效保证较高缓存命中率的同时,提高数据读写效率;本申请的另一核心是提供一种数据读写装置、设备及计算机可读存储介质,也具有上述有益效果。
为了对本申请实施例中的技术方案进行更加清楚、完整地描述,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行介绍。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供了一种数据读写方法。
请参考图1,图1为本申请所提供的一种数据读写方法的流程示意图,该数据读写方法可包括:
S101:根据数据读写请求确定读写数据;
本步骤旨在实现读写数据的确定,即根据数据读写请求确定相应的读写数据,也就是说,当接收到数据读取请求时,即可根据该数据读取请求确定所需读取的数据信息;当接收到数据写入请求时,即可根据该数据写入请求确定所需存储的数据信息。其中,数据读写请求具体可以由技术人员基于相应的前端设备发起。
S102:当读写数据未命中缓存,且设置于缓存中的数据存储器不存在空闲存储地址时,从数据存储器的初始存储地址开始遍历;
本步骤旨在实现数据存储器中存储地址的遍历,以便于查找到存在未读标志的存储地址。具体而言,在缓存中,可以通过设置数据存储器实现数据信息的存储,其中,数据存储器的具体类型并不影响本技术方案的实施,例如,可以采用RAM(Random Access Memory,随机存取存储器)实现,本申请对此不做限定。在此基础上,在基于数据读写请求确定读写数据之后,首先判断读写数据是否命中缓存,如若命中缓存,则可以直接从缓存中进行数据读取,如若未命中缓存,则可以进一步判断数据存储器中是否存在空闲存储地址,即没有存储任何数据的存储地址,若存在,则可以直接将读写数据写入该空闲地址,以提高下一次读写相同数据的命中率,若不存在,则可以从数据存储器的初始存储地址开始遍历,以求查询获得存在未读标志的存储地址。其中,初始存储地址为预先设定的一个存储地址,由技术人员自定义设置即可,本申请对此不做限定。
S103:当遍历到存在未读标志的存储地址时,将读写数据写入存在未读标志的存储地址中;
可以理解的是,在读写数据未命中缓存且数据存储器不存在空闲存储地址的情况下,如若遍历到存在未读标志的存储地址,说明该存储地址中所存储的数据信息在写入该存储地址之后并未被读取过,即使用率较低,因此,则可以将读写数据替换掉该存储地址中所存储的原有数据,即直接将读写数据写入该存在未读标志的存储地址中,由此,实现将读写数据写入至缓存,完成缓存的替换更新。
S104:当未遍历到存在未读标志的存储地址时,将读写数据写入初始存储地址的上一存储地址中。
可以理解的是,在读写数据未命中缓存且数据存储器不存在空闲存储地址的情况下,如若从初始存储地址遍历到最后一个存储地址,都没有遍历到存在未读标志的存储地址,说明数据存储器中所存储的所有数据的使用率都相对较高,此时,为实现将读写数据写入至缓存,则可以直接将读写数据替换掉最后一个存储地址(即上述初始存储地址的上一存储地址)中所存储的原有数据,即直接将读写数据写入至该最后一个存储地址中,由此,实现将读写数据写入至缓存,完成缓存的替换更新。
其中,由于是在遍历到最后一个存储地址时才可以确定数据存储器中是否具有存在未读标志的存储地址,因此,选择将读写数据直接写入数据存储器的最后一个存储地址中,可以有效保证读写数据及时写入缓存,提高写入效率。
可见,本申请所提供的数据读写方法,预先为缓存中数据存储器的各个数据存储地址设置读写标志位,用于标志对应的存储数据是否已经发生过读写操作,由此,在数据读写过程中,面对读写数据未命中缓存且缓存中数据存储器不存在空闲存储地址的情况下,可以从数据存储器的初始存储地址开始遍历,直至遍历到存在未读标志的存储地址,说明该存储地址中所存储的数据信息从未被读取过,使用率较低,此时,则可以直接将读写数据写入至该存在未读标志的存储地址中;当无法遍历到存在未读标志的存储地址时,则可以直接将读写数据写入初始存储地址的上一存储地址中,也即遍历到的数据存储器中的最后一个存储地址,以有效保证将读写数据存储至缓存。可见,该种实现方式可以在有效保证较高缓存命中率的同时,提高数据读写效率。
在本申请的一个实施例中,判断读写数据是否命中缓存,可以包括:将读写数据输入设置于缓存中的内容可寻址存储器;当接收到内容可寻址存储器根据读写数据反馈的地址信息时,确定读写数据命中缓存;当未接收到内容可寻址存储器根据读写数据反馈的地址信息时,确定读写数据未命中缓存。
本申请实施例提供了一种缓存命中判断方法,即判断读写数据是否命中缓存,该方法可基于内容可寻址存储器实现。
首先,请参考图2,图2为本申请所提供的一种数据读写系统的结构示意图,该数据读写系统主要包括CPU、Cache(缓存)以及Main memory(主存),在Cache中,其主要包括CU(控制单元)、CAM(Content-Addressable Memory,内容寻址存储器)、RAM_DATA(存储数据的RAM,即上述数据存储器)等。其中,CU主要完成Cache命中判断、Cache替换策略控制、生成CAM单元控制信号、生成RAM_DATA单元控制信号等;CAM单元主要用于根据地址内容寻址数据内容;RAM_DATA主要用于存储cache line(缓存行)数据。基于图2,请参考表1,表1为本申请所提供的一种关键信号组描述表:
表1 一种关键信号组描述表
其中,CAM与RAM不同,其是通过输入的数据内容反查其对应的地址数据,并输出。在使用RAM时,是利用输入的地址,读取该地址位置上所存储的数据;而在使用CAM时,是通过输入的数据同时与CAM内部已经存储的数据相比较,如果有相同内容的话,输出相同数据所存储的地址数据和查找成功信号,反之,不输出查找成功信号。更为具体的,CAM的结构与工作原理如下:
CAM的主要部分为一个双端口随机存取存储器,两个数据端口位宽不同。以一个容量为4096bit的随机存储器为例,可以将A端口配置为数据位宽为1bit,数据深度为4096(地址即为0-4095);将B端口配置为数据位宽4bit,数据深度为256(地址为0-255)。
其中,对于写操作:例如,如果需要向地址0010(即二进制2)写入数据“00000111”(即二进制7)时,RAM的A端口的12位地址由高8位数据“00000111”和低4位“0100”(独热码2)组合而成。A端口的写使能和数据位均置为1,则实际上将“1”写入地址为074H单元中。CAM写入时,并不是真的把8位数据存储起来,而是在8位数据所对应的存储行做一记录。
其中,对于读操作:在端口B完成读操作,CAM的读操作实际上就是数据匹配过程。(在B端口读数据时,地址0对应的数据即为端口A的地址0-3的数据,地址1对应的数据即为端口A的地址4-7的数据)将被检索内容连接到端口B的地址线(ADDRB)。如果数据之前被写入CAM某地址,在读时就会输出相应的4位匹配地址,否则输出全0。如上述举例中,当需要搜索数据“00000111”(即二进制7)时,将7连接到端口B的地址线(ADDRB),输出值即为“0100”(独热码2)。
基于以上阐述,请参考表2,表2为本申请所提供的一种编码方式转换表:
表2 一种编码方式转换表
进一步,在判断读写数据是否命中缓存的过程中,则可以将读写数据输入CAM,如若CAM基于该读写数据查询到其对应的地址信息,则说明RAM中存储有该读写数据,即读写数据命中缓存;如若CAM未能基于读写数据查询到其对应的地址信息,则说明PAM中未存储有该读写数据,即读写数据未命中缓存。
在本申请的一个实施例中,上述将读写数据写入存在未读标志的存储地址中之后,或将读写数据写入初始存储地址的上一存储地址中之后,还可以包括:将读写数据在数据存储器中的存储地址和在主存中的存储地址一同更新至内容可寻址存储器。
本申请实施例所提供的数据读写方法旨在实现内容可寻址存储器的更新,以有效保证缓存命中判断结果的准确性。具体而言,在将读写数据写入缓存之后,无论是写入存在未读标志的存储地址,还是写入初始存储地址的上一存储地址,均可以将读写数据在数据存储器中的存储地址以及在主存中的存储地址一同更新至内容可寻址存储器,以便于进行后续新的缓存命中判断。
在本申请的一个实施例中,判断数据存储器是否存在空闲存储地址,可以包括:从数据存储器的初始存储地址开始遍历;当遍历到存在未写标志的存储地址时,确定数据存储器存在空闲存储地址,并将存在未写标志的存储地址作为空闲存储地址;当未遍历到存在未写标志的存储地址时,确定数据存储器不存在空闲存储地址。
本申请实施例提供了一种判断数据存储器中是否存在空闲存储地址的判断方法,该判断方法可根据存储地址的读写标志位实现。具体而言,可以预先为各个存储地址设置读写标志位,用于设定已读标志、已写标志、未读标志、未写标志,那么,在将数据信息写入相应的存储地址之后,则可以为其设置已写标志,表示该存储地址存储有数据信息。在此基础上,在判断数据存储器是否存在空闲存储地址时,同样可以从数据存储器的初始存储地址开始遍历,如若遍历到存在未写标志的存储地址,则说明数据存储器存在空闲存储地址,该存在未写标志的存储地址即为空闲存储地址,且可以将读写数据直接写入该空闲存储地址,无需再继续进行存储地址的遍历;如若直至最后一个存储地址都未能遍历到存在未写标志的存储地址(相当于全部存储地址均为已写标志),则可以确定数据存储器不存在空闲存储地址。
在本申请的一个实施例中,上述将读写数据写入存在未读标志的存储地址中之后,或将读写数据写入初始存储地址的上一存储地址中之后,还可以包括:为读写数据在数据存储器中的存储地址设置已写标志和未读标志。
本申请实施例所提供的数据读写方法旨在实现读写标志位的设置。可以理解的是,为有效保证上述空闲存储地址判断结果的准确性,可以对存储地址的读写标志位进行实时更新,具体而言,在将读写数据写入缓存之后,无论是写入存在未读标志的存储地址,还是写入初始存储地址的上一存储地址,也无需考虑存储地址之前的读写标志位的状态,均可以为读写数据在数据存储地址中的存储地址设置已写标志和未读标志,其中,已写标志用于表示当前存储位置已经存储有数据信息,未读标志用于表示当前存储位置所存储的数据信息在写入之后并未被读取过。
在本申请的一个实施例中,当读写数据命中缓存时,该方法还可以包括:若读写数据具体为读数据,则为读数据在数据存储器中的存储地址设置已读标志;若读写数据具体为写数据,则为写数据在数据存储器中的存储地址设置已写标志。
本申请实施例所提供的数据读写方法旨在针对不同类型的数据(读数据和写数据)进行读写标志位的设定。
对于读数据,当读数据命中缓存时,则无需向主存获取该读数据,直接从缓存中读取即可,在此基础上,在从缓存中读取获得该读数据之后,则可以为该读数据在数据存储器中的存储地址设置已读标志,表示该存储地址中所存储的数据信息已经被读取过。当然,当读数据未命中缓存时,则需要向主存获取该读数据,并将读数据同时存储至缓存中,此时,可进一步为读数据在数据存储器中的存储地址设置已写标志和未读标志。
对于写数据,当写数据命中缓存时,说明写数据已经存储于数据存储器,此时,可以为其在数据存储器中的存储地址设置已写标志,并根据读取情况设置读标志位。可以理解的是,当写数据命中缓存时,说明该写数据已经存储于主存,此时则无需再次将其写入主存。当然,当写数据未命中缓存时,可以在将该写数据存储至主存的同时,也将其写入缓存,并在写入缓存之后,为其在数据存储器中的存储地址设置已写标志和未读标志。
在本申请的一个实施例中,该方法还可以包括:当读写数据未命中缓存,且数据存储器存在空闲存储地址时,将读写数据写入空闲存储地址。
可以理解的是,在读写数据未命中缓存,但缓存的数据存储器中存在空闲存储地址时,则可以直接将读写数据写入该空闲存储地址中,无需再进行存储地址的遍历以查询可以存储该读写数据的存储地址,从而可以有效保证数据读写效率。
在上述各实施例的基础上,本申请实施例提供了一种缓存替换策略,策略实现如下:
1、将cache line数据和对应的cache line读写信息存储到RAM的同一个地址中;将此cache line在主存中的地址和在RAM中的地址信息存储在CAM中。
2、当读操作命中缓存时,将RAM中对应的读标志位置为1(不考虑原有状态)。
3、当写操作命中缓存时,将RAM中对应的写标志位置为1(不考虑原有状态),并将写数据更新到主存中。
4、当读操作未命中缓存时,对cache line进行替换,通过在原有RAM的地址加1读取后续RAM地址中的数据和读写标志位,当写标志位为0时,说明此存储位置为空,将从主存读取的cache line数据写于此位置,并将写标志位置为1,同时将此cache line在主存中的地址和在RAM中的地址信息更新在CAM中;当写标志位为1时,地址继续加1跳转,直到找到下一个写标志位为0的为止;当整个RAM全部已经存储了数据时,即地址已经又跳转回了起始地址时,此时再次将地址加1进行一轮循环判断,当读标志位为0时,说明此cache line的数据在写入后并没有被再读取过,此时将从主存读取的cache line数据写于此位置,并将写标志位置为1,当读标志位为1时,地址继续加1跳转;当再次跳转回起始地址时,此时意味着整个存储空间的读写标志位均为1,此时将起始地址的前一个地址作为替换地址,将从主存读取的cache line数据写于此位置,并将写标志位置为1。并且,确定替换地址的同时将此cache line在主存中的地址和在ram中的地址信息更新在CAM中。
5、当写操作未命中缓存时,对cache line进行替换,通过在原有RAM的地址加1读取后续RAM地址中的数据和写标志位,当写标志位为0时,说明此存储位置为空,将CPU下发的写的cache line数据写于此位置,并将写标志位置为1,同时将此cache line在主存中的地址和在RAM中的地址信息更新在CAM中;当写标志位为1时,地址继续加1跳转,直到找到下一个写标志位为0的为止;当整个RAM全部已经存储了数据时,即地址已经跳转了整个地址空间,此时地址跳转回起始地址前一个地址,将CPU下发的写的cache line数据写于此位置(覆盖原有数据),并将写标志位置为1,同时将此cache line在主存中的地址和在RAM中的地址信息更新在CAM中,并将写数据更新到主存中。
为了便于理解,以下举一个实际场景的例子配合说明,假设有这样一个场景:cache line的大小为64bit;数据RAM(DATA_RAM)的深度depth为64(即可以存储64个cacheline数据),地址位宽depth_size为4,地址为0-15;CPU端发出的操作地址位宽Cpu_addr_size为16位,主存的地址位宽也为16位。对应的读写操作流程如下:
1、计算并生成存储单元(CAM和DATA_RAM)规格:
(1)DATA_RAM:
DATA_RAM用于存储cache line信息,在cache中一般都是以cache line为单位进行存储和替换的,cache line的大小一般为8、16、32、64、128bit等等,后续用line_size表示。在生成DATA_RAM时,两个端口的数据位宽均为line_size+2,其中高两位为读写标记位,详细可参考附表3(表3为本申请所提供的一种RAM中的标识描述表);地址位宽根据实际使用场景的不同可自由配置,后续用depth_size表示。实际数据深度用depth表示。例如存储器的数据深度为64,即可以存储64组数据,此时其地址位宽为log264=6,用6bit二进制数就可以表示64个地址。
表3 一种RAM中的标识描述表
(2)CAM:
CAM主要用于存储地址信息和标志位信息。两个端口的数据位宽和地址位宽是不同的。Cpu_addr为CPU端发出的操作地址(常用的如8、16、32、64等位),其数据位宽记为Cpu_addr_size。A端口数据位宽为1,地址位宽为Cpu_addr_size+depth,地址高位为CPU地址,地址低位为在RAM中的独热码地址。B端口数据位宽为depth,地址位宽为Cpu_addr_size。
2、数据初始化:将RAM_A_wr_addr置为0,即默认起始地址。
3、写cache操作:
写cache操作包括写Cache命中(hit)和写Cache不命中(miss)两种情况。在系统刚刚初始化时,CPU并没有写数据,此时是写cache不命中的;当系统开始工作一段时间后,CPU进行了多次写操作时,cache中已经缓存了部分cache line信息,因此再进行写操作时则可能会写入之前操作过的已经缓存的Cache地址中,此时便是写Cache命中,此时只需要将数据写入对应的Cache中,不必进行后续的替换处理。当然也可能写入Cache中没有缓存的地址,此时便是写Cache不命中。
(1)写Cache命中判断:
当Cpu_req为1,即发起一次请求,cpu_type为store类型的写操作时,将Cpu_addr连接到CAM模块的B端口的读地址端(CAM_B_rd_addr),并将CAM_B_rd_addr_en拉高进行读操作,在CAM_B_rd_data端口获得读数据(即cache line在数据RAM中独热码的存储地址(ram_addr_one_hot)。当CAM_B_rd_data为0时,即认为写cache不命中(miss);当CAM_B_rd_data的不为0时,即认为写cache命中(hit)。
(2)写命中处理(hit):
将上述步骤中CAM_B_rd_data(为独热码)转换为二进制信息并连接至DATA_RAM的B端口的RAM_B_rd_addr,有:
RAM_B_rd_addr=log2(ram_addr_one_hot);
同时将RAM_B_rd_addr_en拉高,将RAM_B_rd_data数据读出。在生成DATA_RAM时,其数据位宽为cache line的大小,因此每次读出的RAM_B_rd_data为一个cache line的信息,但CPU发送的写数据可能只是Cache中的一部分内容,因此将CPU发送的写数据部分代替RAM_B_rd_data中对应的部分,其他部分保持不变,写标志位置为1,读标志位置为0,并将这个新生成的信号赋给DATA_RAM的A端口的写数据RAM_A_wr_data信号,同时将RAM_A_wr_addr_en拉高,并将B端口的地址赋给A,即:RAM_A_wr_addr == RAM_B_rd_addr,把数据和标志位写入数据RAM中。
例如,CPU下发一个写操作,地址为16’h1000。首先将这个地址连接CAM的B端口的地址线,将数据读出16’b0000_0000_0000_1000,将其转换为二进制数据3,把3作为数据RAM的A端口的写地址,将CPU新下发的数据写入RAM的地址3空间中。
(3)写不命中处理(miss):
a.下一次写入地址(data_ram_next_addr)表示当发生写miss时进行替换的data_ram地址;地址搜索次数(addr_cnt)表示进行地址加1跳转的次数。
b.两个变量复位后的默认值为起始地址0,当发生写miss后,data_ram_next_addr进行加1(即向下寻址),当跳转至最后一个地址时将返回首地址,并将data_ram_next_addr连接到RAM_B_rd_addr,并将RAM_B_rd_addr_en拉高进行读操作,addr_cnt也进行加1操作:
data_ram_next_addr = data_ram_next_addr + 1;
RAM_B_rd_addr = data_ram_next_addr;
addr_cnt = addr_cnt + 1;
判断此时的RAM_B_rd_data[line_size],即写标志位。当写标志位为1时,说明此地址空间已经写入cache line数据,此时data_ram_next_addr进行再加1,判断下一个地址的数据写标志位是否为1,直至判断到写标志位为0的地址停止,此时的data_ram_next_addr即为进行替换的cache line的写入地址,同时将addr_cnt清零。
例如,当前的data_ram的地址为1,此时发生写miss,data_ram_next_addr向下进行寻址,通过读数据发现地址14的写标志位为0,此时则将地址14作为cache line的替换地址。
当写标志位始终为1,并且addr_cnt = 2depth_size-1时(例如数据RAM容量为16,addr_cnt为15),说明已经将整个数据RAM的地址空间遍历,所有的空间都已写入cacheline数据,此时data_ram_next_addr即为进行替换的cache line的写入地址,同时将addr_cnt清零。
例如,上一次操作的data_ram的地址为2,此时发生写miss,data_ram_next_addr向下进行寻址,通过读数据发现写标志位始终为1,当addr_cnt==15时,此时data_ram_next_addr跳转至地址1,则将地址1作为cache line的替换地址。
c.将数据和标志位写入数据RAM中:
将CPU发送的写cache line数据部分,其他部分保持不变,写标志位置为1,读标志位置为0,并将这个新生成的信号赋给DATA_RAM的A端口的写数据RAM_A_wr_data信号,同时将RAM_A_wr_addr_en拉高,并将B端口的地址赋给A:
RAM_A_wr_addr== RAM_B_rd_addr。
d.将cache line替换地址写入CAM中:
将CAM的A端口的写使能和写数据置为1,同时将写地址按如下赋值:
CAM_A_wr_addr = {Cpu_addr,data_ram_next_addr_one};
data_ram_next_addr_one为data_ram_next_addr的独热码地址;
data_ram_next_addr_one = 16‘b1 << data_ram_next_addr;
即高位为CPU发送的地址,低位为需要替换的cache line在RAM的存储独热码地址。
例如,CPU下发一个写操作,地址为16’h1000。当发生写miss时,通过计算得到cache line的替换地址为二进制的地址1时,此时CAM的A端口的写入地址为32’h1000_0002,写入数据为1。
4、读cache操作:
读cache操作包括读cache命中(hit)和读cache不命中(miss)两种情况。在系统刚刚初始化时,CPU并没有写数据,此时是读Cache不命中的;当系统开始工作一段时间后,CPU进行了多次写操作时,Cache中已经缓存了部分cache line信息,因此再进行读操作时则可能读入之前操作过的已经缓存的Cache地址中,此时便是写Cache命中,此时只需要将数据从对应的Cache中读出返回至CPU,不必进行后续的替换处理。当然也可能要读入数据地址在Cache中没有缓存,此时便是读Cache不命中。
(1)读Cache命中判断:
当Cpu_req为1,即发起一次请求,cpu_type为load类型的读操作时,将Cpu_addr连接到CAM模块的B端口的读地址端(CAM_B_rd_addr),并将CAM_B_rd_addr_en拉高进行读操作,在CAM_B_rd_data端口获得读数据(即cache line在数据RAM中独热码的存储地址(ram_addr_one_hot)。当CAM_B_rd_data为0时,即认为读cache不命中(miss);当CAM_B_rd_data的不为0时,即认为读cache命中(hit)。
(2)读命中处理(hit):
a.将上述步骤中CAM_B_rd_data(为独热码)转换为二进制信息并连接至DATA_RAM的B端口的RAM_B_rd_addr,有:
RAM_B_rd_addr=log2(ram_addr_one_hot);
同时将RAM_B_rd_addr_en拉高,将RAM_B_rd_data数据读出,然后返回给CPU。
b.更新数据RAM:将读出的数据cache line保持不变,写标志位置为1,读标志位置为1,并将这个新生成的信号赋给DATA_RAM的A端口的写数据RAM_A_wr_data信号,同时将RAM_A_wr_addr_en拉高,并将B端口的地址赋给A,即:RAM_A_wr_addr== RAM_B_rd_addr;把数据和标志位写入数据RAM中。
例如,CPU下发一个读操作,地址为16’h1000。首先将这个地址连接CAM的B端口的地址线,将数据读出16’b0000_0000_0000_1000,将其转换为二进制数据3,把3作为数据RAM的B端口的读地址,将Cache line数据读出,然后将此cache line数据、读和写标志位置为1后通过RAM的A端口写入RAM的地址3空间中。
(a)读不命中处理(miss):
a.下一次读取地址(data_ram_next_addr)表示当发生读miss时进行替换的data_ram地址;读地址搜索次数(addr_cnt_rd)表示进行地址加1跳转的次数。
b.两个变量复位后的默认值为起始地址0,当发生读miss后,data_ram_next_addr_rd进行加1(即向下寻址),当跳转至最后一个地址时将返回首地址,并将data_ram_next_addr_rd连接到RAM_B_rd_addr,并将RAM_B_rd_addr_en拉高进行读操作,addr_cnt_rd也进行加1操作:
data_ram_next_addr_rd = data_ram_next_addr_rd + 1;
RAM_B_rd_addr = data_ram_next_addr_rd;
addr_cnt_rd = addr_cnt_rd + 1;
判断此时的RAM_B_rd_data[line_size],即写标志位。当写标志位为1时,说明此地址空间已经写入cache line数据,此时data_ram_next_addr_rd进行再加1,判断下一个地址的数据写标志位是否为1,直至判断到写标志位为0的地址停止,此时的data_ram_next_addr_rd即为进行替换的cache line的写入地址,同时将addr_cnt_rd清零。
例如,当前的data_ram的地址1,此时发生读miss,data_ram_next_addr_rd向下进行寻址,通过读数据发现地址14的写标志位为0,此时则将地址14作为cache line的替换地址。
当写标志位始终为1,并且addr_cnt = 2depth_size-1时(例如数据RAM容量为16,addr_cnt为15),说明已经将整个数据RAM的地址空间遍历,所有的空间都已写入cacheline数据。此时将data_ram_next_addr_rd再次进行加1,即重新开始一轮向下寻址,同样是当跳转至最后一个地址时将返回首地址,并将data_ram_next_addr_rd连接到RAM_B_rd_addr,并将RAM_B_rd_addr_en拉高进行读操作,addr_cnt_rd也进行继续的加1操作。
判断此时的RAM_B_rd_data[line_size+1],即读标志位。当读标志位为1时,说明此地址空间近期有过此cache line数据读取,此时data_ram_next_addr_rd进行再加1,判断下一个地址的读标志位是否为0,直至判断读标志位为0的地址停止,此时的data_ram_next_addr_rd即为进行替换的cache line的地址,同时将addr_cnt_rd清零。
例如,上一次操作的data_ram的地址为2,此时发生写miss,data_ram_next_addr_rd向下进行寻址,通过读数据发现写标志位都始终为1,读标志位在地址14位,则将地址14作为cache line的替换地址。
当读标志位也始终为1,并且addr_cnt = 2*2depth_size-1时(例如数据RAM容量为16,addr_cnt为31),说明已经将整个数据RAM的地址空间遍历2次,所有的空间都已写入cache line数据,且近期都有读取记录,则此时data_ram_next_addr_rd即为进行替换的cache line的写入地址,同时将addr_cnt_rd清零。
例如,上一次操作的data_ram的地址为2,此时发生写miss,data_ram_next_addr_rd向下进行寻址,通过读数据发现读和写标志位都始终为1,当addr_cnt==31时,此时data_ram_next_addr_rd跳转至地址1,则将地址1作为cache line的替换地址。
c.将主存返回的数据和标志位写入数据RAM中:
当发送读操作miss时,CPU会从主存中读取对应的数据,并将返回的数据缓存在数据RAM的替换地址空间中,然后再发送返回CPU。将主存返回的cache line数据部分,写标志位置为1,读标志位置为0,一同写入数据RAM的替换地址空间中,具体为将这个新生成的信号赋给DATA_RAM的A端口的写数据RAM_A_wr_data信号,同时将RAM_A_wr_addr_en拉高,RAM_A_wr_addr为上述的替换地址。
d.将cache line替换地址写入CAM中:
将CAM的A端口的写使能和写数据置为1,同时将写地址按如下赋值:
CAM_A_wr_addr = {Cpu_addr,data_ram_next_addr_one_rd};
data_ram_next_addr_one_rd为data_ram_next_addr_rd的独热码地址;
data_ram_next_addr_one_rd = 16‘b1 << data_ram_next_addr_rd;
即高位为CPU发送的地址,低位为需要替换的cache line在RAM的存储独热码地址。
例如,CPU下发一个读操作,地址为16’h1000。当发生写miss时,通过计算得到cache line的替换地址为二进制的地址1时,此时CAM的A端口的写入地址为32’h1000_0002,写入数据为1。
可见,本申请实施例所提供的数据读写方法,预先为缓存中数据存储器的各个数据存储地址设置读写标志位,用于标志对应的存储数据是否已经发生过读写操作,由此,在数据读写过程中,面对读写数据未命中缓存且缓存中数据存储器不存在空闲存储地址的情况下,可以从数据存储器的初始存储地址开始遍历,直至遍历到存在未读标志的存储地址,说明该存储地址中所存储的数据信息从未被读取过,使用率较低,此时,则可以直接将读写数据写入至该存在未读标志的存储地址中;当无法遍历到存在未读标志的存储地址时,则可以直接将读写数据写入初始存储地址的上一存储地址中,也即遍历到的数据存储器中的最后一个存储地址,以有效保证将读写数据存储至缓存。可见,该种实现方式可以在有效保证较高缓存命中率的同时,提高数据读写效率。
本申请还提供了一种数据读写装置,请参考图3,图3为本申请所提供的一种数据读写装置的结构示意图,该数据读写装置可包括:
读写数据确定模块1,用于根据数据读写请求确定读写数据;
存储地址遍历模块2,用于当读写数据未命中缓存,且设置于缓存中的数据存储器不存在空闲存储地址时,从数据存储器的初始存储地址开始遍历;
第一数据写入模块3,用于当遍历到存在未读标志的存储地址时,将读写数据写入存在未读标志的存储地址中;
第二数据写入模块4,用于当未遍历到存在未读标志的存储地址时,将读写数据写入初始存储地址的上一存储地址中。
可见,本申请实施例所提供的数据读写装置,预先为缓存中数据存储器的各个数据存储地址设置读写标志位,用于标志对应的存储数据是否已经发生过读写操作,由此,在数据读写过程中,面对读写数据未命中缓存且缓存中数据存储器不存在空闲存储地址的情况下,可以从数据存储器的初始存储地址开始遍历,直至遍历到存在未读标志的存储地址,说明该存储地址中所存储的数据信息从未被读取过,使用率较低,此时,则可以直接将读写数据写入至该存在未读标志的存储地址中;当无法遍历到存在未读标志的存储地址时,则可以直接将读写数据写入初始存储地址的上一存储地址中,也即遍历到的数据存储器中的最后一个存储地址,以有效保证将读写数据存储至缓存。可见,该种实现方式可以在有效保证较高缓存命中率的同时,提高数据读写效率。
在本申请的一个实施例中,该数据读写装置还可包括缓存命中判断模块,用于将读写数据输入设置于缓存中的内容可寻址存储器;当接收到内容可寻址存储器根据读写数据反馈的地址信息时,确定读写数据命中缓存;当未接收到内容可寻址存储器根据读写数据反馈的地址信息时,确定读写数据未命中缓存。
在本申请的一个实施例中,该数据读写装置还可包括地址信息存储模块,用于在将读写数据写入存在未读标志的存储地址中之后,或将读写数据写入初始存储地址的上一存储地址中之后,将读写数据在数据存储器中的存储地址和在主存中的存储地址一同更新至内容可寻址存储器。
在本申请的一个实施例中,该数据读写装置还可包括空闲存储地址判断模块,用于从数据存储器的初始存储地址开始遍历;当遍历到存在未写标志的存储地址时,确定数据存储器存在空闲存储地址,并将存在未写标志的存储地址作为空闲存储地址;当未遍历到存在未写标志的存储地址时,确定数据存储器不存在空闲存储地址。
在本申请的一个实施例中,该数据读写装置还可包括第一标志位设置模块,用于在将读写数据写入存在未读标志的存储地址中之后,或将读写数据写入初始存储地址的上一存储地址中之后,为读写数据在数据存储器中的存储地址设置已写标志和未读标志。
在本申请的一个实施例中,该数据读写装置还可包括第二标志位设置模块,用于当读写数据命中缓存时,若读写数据具体为读数据,则为读数据在数据存储器中的存储地址设置已读标志;若读写数据具体为写数据,则为写数据在数据存储器中的存储地址设置已写标志。
在本申请的一个实施例中,该数据读写装置还可包括第三数据写入模块,用于当读写数据未命中缓存,且数据存储器存在空闲存储地址时,将读写数据写入空闲存储地址。
对于本申请提供的装置的介绍请参照上述方法实施例,本申请在此不做赘述。
本申请还提供了一种数据读写设备,请参考图4,图4为本申请所提供的一种数据读写设备的结构示意图,该数据读写设备可包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时可实现如上述任意一种数据读写方法的步骤。
如图4所示,为数据读写设备的组成结构示意图,数据读写设备可以包括:处理器10、存储器11、通信接口12和通信总线13。处理器10、存储器11、通信接口12均通过通信总线13完成相互间的通信。
在本申请实施例中,处理器10可以为中央处理器(Central Processing Unit,CPU)、特定应用集成电路、数字信号处理器、现场可编程门阵列或者其他可编程逻辑器件等。
处理器10可以调用存储器11中存储的程序,具体的,处理器10可以执行数据读写方法的实施例中的操作。
存储器11中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本申请实施例中,存储器11中至少存储有用于实现以下功能的程序:
根据数据读写请求确定读写数据;
当读写数据未命中缓存,且设置于缓存中的数据存储器不存在空闲存储地址时,从数据存储器的初始存储地址开始遍历;
当遍历到存在未读标志的存储地址时,将读写数据写入存在未读标志的存储地址中;
当未遍历到存在未读标志的存储地址时,将读写数据写入初始存储地址的上一存储地址中。
在一种可能的实现方式中,存储器11可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及至少一个功能所需的应用程序等;存储数据区可存储使用过程中所创建的数据。
此外,存储器11可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。
通信接口12可以为通信模块的接口,用于与其他设备或者系统连接。
当然,需要说明的是,图4所示的结构并不构成对本申请实施例中数据读写设备的限定,在实际应用中数据读写设备可以包括比图4所示的更多或更少的部件,或者组合某些部件。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如上述任意一种数据读写方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
对于本申请提供的计算机可读存储介质的介绍请参照上述方法实施例,本申请在此不做赘述。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的技术方案进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请的保护范围内。
Claims (10)
1.一种数据读写方法,其特征在于,包括:
根据数据读写请求确定读写数据;
当所述读写数据未命中缓存,且设置于所述缓存中的数据存储器不存在空闲存储地址时,从所述数据存储器的初始存储地址开始遍历;
当遍历到存在未读标志的存储地址时,将所述读写数据写入存在所述未读标志的存储地址中;
当未遍历到存在未读标志的存储地址时,将所述读写数据写入所述初始存储地址的上一存储地址中。
2.根据权利要求1所述的数据读写方法,其特征在于,判断所述读写数据是否命中所述缓存,包括:
将所述读写数据输入设置于所述缓存中的内容可寻址存储器;
当接收到所述内容可寻址存储器根据所述读写数据反馈的地址信息时,确定所述读写数据命中所述缓存;
当未接收到所述内容可寻址存储器根据所述读写数据反馈的地址信息时,确定所述读写数据未命中所述缓存。
3.根据权利要求2所述的数据读写方法,其特征在于,所述将所述读写数据写入存在所述未读标志的存储地址中之后,或所述将所述读写数据写入所述初始存储地址的上一存储地址中之后,还包括:
将所述读写数据在所述数据存储器中的存储地址和在主存中的存储地址一同更新至所述内容可寻址存储器。
4.根据权利要求1至3任意一项所述的数据读写方法,其特征在于,判断所述数据存储器是否存在所述空闲存储地址,包括:
从所述数据存储器的初始存储地址开始遍历;
当遍历到存在未写标志的存储地址时,确定所述数据存储器存在所述空闲存储地址,并将所述存在未写标志的存储地址作为所述空闲存储地址;
当未遍历到存在未写标志的存储地址时,确定所述数据存储器不存在所述空闲存储地址。
5.根据权利要求4所述的数据读写方法,其特征在于,所述将所述读写数据写入存在所述未读标志的存储地址中之后,或所述将所述读写数据写入所述初始存储地址的上一存储地址中之后,还包括:
为所述读写数据在所述数据存储器中的存储地址设置已写标志和未读标志。
6.根据权利要求1所述的数据读写方法,其特征在于,当所述读写数据命中所述缓存时,所述方法还包括:
若所述读写数据具体为读数据,则为所述读数据在所述数据存储器中的存储地址设置已读标志;
若所述读写数据具体为写数据,则为所述写数据在所述数据存储器中的存储地址设置已写标志。
7.根据权利要求1所述的数据读写方法,其特征在于,还包括:
当所述读写数据未命中所述缓存,且所述数据存储器存在所述空闲存储地址时,将所述读写数据写入所述空闲存储地址。
8.一种数据读写装置,其特征在于,包括:
读写数据确定模块,用于根据数据读写请求确定读写数据;
存储地址遍历模块,用于当所述读写数据未命中缓存,且设置于所述缓存中的数据存储器不存在空闲存储地址时,从所述数据存储器的初始存储地址开始遍历;
第一数据写入模块,用于当遍历到存在未读标志的存储地址时,将所述读写数据写入存在所述未读标志的存储地址中;
第二数据写入模块,用于当未遍历到存在未读标志的存储地址时,将所述读写数据写入所述初始存储地址的上一存储地址中。
9.一种数据读写设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述的数据读写方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的数据读写方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210148645.4A CN114201120B (zh) | 2022-02-18 | 2022-02-18 | 一种数据读写方法、装置及相关设备 |
PCT/CN2022/134789 WO2023155531A1 (zh) | 2022-02-18 | 2022-11-28 | 数据读写方法、装置及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210148645.4A CN114201120B (zh) | 2022-02-18 | 2022-02-18 | 一种数据读写方法、装置及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114201120A CN114201120A (zh) | 2022-03-18 |
CN114201120B true CN114201120B (zh) | 2022-05-10 |
Family
ID=80645644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210148645.4A Active CN114201120B (zh) | 2022-02-18 | 2022-02-18 | 一种数据读写方法、装置及相关设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114201120B (zh) |
WO (1) | WO2023155531A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114201120B (zh) * | 2022-02-18 | 2022-05-10 | 苏州浪潮智能科技有限公司 | 一种数据读写方法、装置及相关设备 |
CN116719760A (zh) * | 2023-05-15 | 2023-09-08 | 合芯科技有限公司 | 一种低延迟处理缓存读取请求的方法、设备及存储介质 |
CN117389936A (zh) * | 2023-12-13 | 2024-01-12 | 珠海鸿芯科技有限公司 | 处理器数据读取方法及处理器数据读取系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598388A (zh) * | 2015-01-06 | 2015-05-06 | 青岛龙庆达电气有限公司 | 一种基于flash的SOE存储与发送方法 |
CN109117088B (zh) * | 2018-07-24 | 2021-02-19 | 联想(北京)有限公司 | 一种数据处理方法及系统 |
CN111580754B (zh) * | 2020-05-06 | 2021-07-13 | 西安交通大学 | 一种写友好的闪存固态盘缓存管理方法 |
CN112506823B (zh) * | 2020-12-11 | 2023-09-29 | 盛立安元科技(杭州)股份有限公司 | 一种fpga数据读写方法、装置、设备及可读存储介质 |
CN114201120B (zh) * | 2022-02-18 | 2022-05-10 | 苏州浪潮智能科技有限公司 | 一种数据读写方法、装置及相关设备 |
-
2022
- 2022-02-18 CN CN202210148645.4A patent/CN114201120B/zh active Active
- 2022-11-28 WO PCT/CN2022/134789 patent/WO2023155531A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
CN114201120A (zh) | 2022-03-18 |
WO2023155531A1 (zh) | 2023-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114201120B (zh) | 一种数据读写方法、装置及相关设备 | |
US6711663B2 (en) | Algorithm of flash memory capable of quickly building table and preventing improper operation and control system thereof | |
CN106448737A (zh) | 读取闪存数据的方法、装置以及固态驱动器 | |
JP4920378B2 (ja) | 情報処理装置およびデータ検索方法 | |
EP2288092A1 (en) | Method and device for improving scalability of longest prefix match | |
US7533234B2 (en) | Method and apparatus for storing compressed code without an index table | |
CN107025182B (zh) | 非易失性存储器加速器及存取加速方法 | |
US20090319721A1 (en) | Flash memory apparatus and method for operating the same | |
CN113360516B (zh) | 集合成员管理方法 | |
CN112596668A (zh) | 一种存储器的坏块处理方法及系统 | |
CN111443873A (zh) | 一种Nand Flash存储器的管理方法和装置 | |
CN112463020A (zh) | 基于Flash的数据存取方法、装置及设备 | |
CN107506139B (zh) | 一种面向相变存储器的写请求优化装置 | |
CN112463880A (zh) | 一种区块链数据存储方法及相关装置 | |
JP2007148965A (ja) | フラッシュディスク装置のエラーブロック管理方法及び装置 | |
KR20200126155A (ko) | 명령 머지 동작을 수행하는 반도체 메모리 장치 및 그 동작 방법 | |
US9146858B2 (en) | Control device, storage device, and storage control method | |
CN112416820B (zh) | 一种数据包分类存储方法及系统 | |
CN107506156B (zh) | 一种块设备的io优化方法 | |
CN113760781A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US20090055574A1 (en) | NAND Flash Memory Device And Related Method Thereof | |
CN113010105A (zh) | 一种数据备份的方法、装置、设备和计算机可读存储介质 | |
US20240111417A1 (en) | Flash memory scheme capable of automatically generating or removing dummy data portion of full page data by using flash memory device | |
JP2006012006A (ja) | キャッシュ装置及び方法 | |
JP2001318824A (ja) | フラッシュメモリのデータ管理方式およびそのプログラムを記録した記録媒体 |
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 |