读写闪存中数据的方法、装置及用户设备与流程

文档序号:18600433发布日期:2019-09-03 22:35阅读:461来源:国知局
读写闪存中数据的方法、装置及用户设备与流程

本发明涉及数据处理领域,尤其涉及一种读写闪存中数据的方法、装置及用户设备。



背景技术:

目前内嵌式多媒体卡(embedded Multi Media Card,eMMC)作为手机的主要存储介质广为使用,eMMC内部存储器件是非线性闪存(NAND Flash),简称闪存。NAND flash以页为单位读写数据,而以块为单位擦除数据。最初NAND flash的一个页是512字节,而随之NAND Flash工艺的发展,NAND Flash的容量越来越大,页大小也增大到8 kilo byte(简称8KB,或者8K)或者16K。eMMC是一个标准的统一的协议,规定的读写单位是512字节。因此造成了写放大系数的增大,影响eMMC的操作效率和使用寿命。

现有技术中,为了兼容不同厂家和类型的eMMC,linux系统中,eMMC驱动统一了物理块的大小,举例为512字节,这样由于NAND Flash的读写单位是页,即8K或者16K,因此即使eMMC读写512字节,对NAND Flash部分而言操作都已经放大到了8K或者16K,从而导致eMMC的读写效率低,使用寿命短的问题。



技术实现要素:

本发明实施例提供了一种读写闪存中数据的方法、装置及用户设备,可以解决闪存的读写效率低,使用寿命短的问题。

第一方面,提供了一种读取闪存中数据的方法,该方法包括:

接收读取数据的指令,其中,所述读取数据的指令包括:待读取数据的大小和所述待读取数据在所述闪存上的物理地址;

从缓存中查找所述物理地址;

当未从所述缓存中查找到所述物理地址时,根据所述待读取数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区;

根据所述物理地址,从所述闪存中读取所述待读取数据,将所述待读取数据缓存在所述缓存数据区中。

结合第一方面,在第一方面的第一种实现方式中,所述缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

结合第一方面,在第一方面的第二种实现方式中,所述缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

结合第一方面的第一种实现方式或者第一方面的第二种实现方式,在第一方面的第三种实现方式中,在所述从内存中划分出缓存数据区之后,在所述根据所述物理地址,从所述闪存中读取所述待读取数据之前,所述方法还包括:

从所述内存中划分出与所述缓存数据区对应的缓存头部,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小。

结合第一方面或者第一方面的上述三种实现方式中的任一种实现方式,在第一方面的第四种实现方式中,在所述闪存的实际物理块大小是根据所述闪存的标识信息CID,由所述闪存的驱动层从闪存的标识信息CID与闪存的实际物理块大小的对应关系表中获取到的。

结合第一方面,在第一方面的第五种实现方式中,在所述接收读取数据的指令之前,所述方法还包括:接收所述闪存的驱动层经过所述闪存的块设备层发送的所述闪存的实际物理块大小。

第二方面,提供了一种向闪存中写入数据的方法,该方法包括:

接收写数据的指令,其中,所述写数据的指令包括:待写入数据、所述待写入数据的大小和所述待写入数据在所述闪存上的物理地址;

根据所述待写入数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区,并划分出与所述缓存数据区对应的缓存头部;

将所述待写入数据缓存在所述缓存数据区中,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小;

根据所述物理地址,将所述待写入数据写入所述闪存中。

结合第二方面,在第二方面的第一种实现方式中,所述方法还包括:

为所述缓存数据区添加标识信息,当所述缓存数据区中的数据与所述闪存中的数据不一致时,将所述标识信息标识为表示脏数据的信息;

当所述内存的占用率大于预设的第一阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中;或者,

当所述缓存数据区驻留的时间大于预设的第二阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

第三方面,提供了一种读取闪存中数据的装置,该装置包括:接收单元、查找单元、划分单元和缓存单元;

所述接收单元,用于接收读取数据的指令,其中,所述读取数据的指令包括:待读取数据的大小和所述待读取数据在所述闪存上的物理地址;

所述查找单元,用于从缓存中查找所述接收单元接收的所述物理地址;

所述划分单元,用于当所述查找单元未从所述缓存中查找到所述物理地址时,根据所述待读取数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区;

所述缓存单元,用于根据所述物理地址,从所述闪存中读取所述待读取数据,将所述待读取数据缓存在所述划分单元划分的所述缓存数据区中。

结合第三方面,在第三方面的第一种实现方式中,所述划分单元还用于:

从所述内存中划分出与所述缓存数据区对应的缓存头部,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小;

所述缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍;或者,

所述缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍;

所述闪存的实际物理块大小是根据所述闪存的标识信息CID,由所述闪存的驱动层从闪存的标识信息CID与闪存的实际物理块大小的对应关系表中获取到的。

结合第三方面或第三方面的第一种实现方式,在第三方面的第二种实现方式中,所述接收单元还用于:接收所述闪存的驱动层经过所述闪存的块设备层发送的所述闪存的实际物理块大小。

第四方面,提供了一种向闪存中写入数据的装置,该装置包括:接收单元、划分单元、缓存单元和写入单元;

所述接收单元,用于接收写数据的指令,其中,所述写数据的指令包括:待写入数据、所述待写入数据的大小和所述待写入数据在所述闪存上的物理地址;

所述划分单元,用于根据所述接收单元接收的所述待写入数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区,并划分出与所述缓存数据区对应的缓存头部;

所述缓存单元,用于将所述待写入数据缓存在所述划分单元划分的所述缓存数据区中,将所述缓存数据区的属性信息和所述物理地址缓存在所述划分单元划分的所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的逻辑地址和大小;

所述写入单元,用于根据所述物理地址,将所述待写入数据写入所述闪存中。

结合第四方面,在第四方面的第一种实现方式中,所述装置还包括:添加单元,用于为所述缓存数据区添加标识信息,当所述缓存数据区中的数据与所述闪存中的数据不一致时,将所述标识信息标识为表示脏数据的信息;

所述写入单元,还用于当所述内存的占用率大于预设的第一阈值时,将所述添加单元添加的所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中;或者,

当所述缓存数据区驻留的时间大于预设的第二阈值时,将所述添加单元添加的所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

第五方面,提供了一种用户设备,该设备包括:

网络接口;

一个或多个处理器;

存储器,所述存储器包括内存和闪存;

一个或多个程序存储在存储器中,并被配置为由一个或多个处理器执行,一个或多个程序包括:

接收读取数据的指令,其中,所述读取数据的指令包括:待读取数据的大小和所述待读取数据在所述闪存上的物理地址;

从缓存中查找所述物理地址;

当未从所述缓存中查找到所述物理地址时,根据所述待读取数据的大小和所述闪存的实际物理块大小,从所述内存中划分出缓存数据区;

根据所述物理地址,从所述闪存中读取所述待读取数据,将所述待读取数据缓存在所述缓存数据区中。

结合第五方面,在第五方面的第一种实现方式中,所述缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

结合第五方面,在第五方面的第二种实现方式中,所述缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

结合第五方面的第一种实现方式或者第五方面的第二种实现方式,在第五方面的第三种实现方式中,所述一个或多个程序还包括:从所述内存中划分出与所述缓存数据区对应的缓存头部,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小。

结合第五方面或者第五方面的上述三种实现方式中任一种实现方式,在第五方面的第四种实现方式中,所述闪存的实际物理块大小是根据所述闪存的标识信息CID,由所述闪存的驱动层从闪存的标识信息CID与闪存的实际物理块大小的对应关系表中获取到的。

结合第五方面,在第五方面的第五种实现方式中,所述一个或多个程序还包括:接收所述闪存的驱动层经过所述闪存的块设备层发送的所述闪存的实际物理块大小。

第六方面,提供了一种用户设备,该设备包括:

网络接口;

一个或多个处理器;

存储器,所述存储器包括内存和闪存;

一个或多个程序存储在存储器中,并被配置为由一个或多个处理器执行,一个或多个程序包括:

接收写数据的指令,其中,所述写数据的指令包括:待写入数据、所述待写入数据的大小和所述待写入数据在所述闪存上的物理地址;

根据所述待写入数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区,并划分出与所述缓存数据区对应的缓存头部;

将所述待写入数据缓存在所述缓存数据区中,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小;

根据所述物理地址,将所述待写入数据写入所述闪存中。

结合第六方面,在第六方面的第一种实现方式中,所述一个或多个程序还包括:

为所述缓存数据区添加标识信息,当所述缓存数据区中的数据与所述闪存中的数据不一致时,将所述标识信息标识为表示脏数据的信息;

当所述内存的占用率大于预设的第一阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中;或者,

当所述缓存数据区驻留的时间大于预设的第二阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

本发明实施例提供的读写闪存中数据的方法、装置及用户设备。根据闪存的实际物理块大小申请缓存数据区,达到了动态调整缓存数据区的目的,也即统一了处理器读写闪存中数据的单位和闪存内部读写数据的单位,从而可以解决闪存的读写效率低,使用寿命短的问题。

附图说明

图1为本发明实施例一提供的读取闪存中数据的方法流程图;

图2为本发明的缓存的逻辑示意图;

图3为本发明实施例二提供的向闪存中写入数据的方法流程图;

图4为本发明添加标识信息之后的缓存的逻辑示意图;

图5为本发明实施例三提供的读取闪存中数据的装置示意图;

图6为本发明实施例四提供的向闪存中写入数据的装置示意图;

图7为本发明实施例五提供的用户设备示意图;

图8为本发明实施例六提供的用户设备示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为便于对本发明实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本发明实施例的限定。

图1为本发明实施例一提供的读取闪存中数据的方法流程图。如图1所示,所述方法具体包括:

S110,用户设备接收读取数据的指令,其中,所述读取数据的指令包括:待读取数据的大小和所述待读取数据在所述闪存上的物理地址。

具体地,S110的执行主体可以是用户设备的处理器。

闪存是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写,是一种非易失性的存储器。闪存是用户设备用来永久性存储数据的存储介质。在此说明书中,以闪存为NAND Flash进行说明,NAND Flash内嵌在eMMC中。当用户设备从闪存中读取数据时,需要先将闪存中的数据缓存在内存中;或者,当用户设备向闪存中写入数据时,也需要将该数据缓存在内存中,然后再向闪存写入数据。

需要说明的是,不同厂家的eMMC,其对应的闪存的实际物理块大小(Block size)是不同的。另外,不同类型的eMMC,其对应的闪存的实际物理块大小也是不同的。闪存的实际物理块大小用来表示eMMC内部读写数据的单位,该值越大,eMMC内部读写数据的性能越好。

S120,用户设备从缓存中查找所述物理地址。

具体地,S120的执行主体可以是用户设备的处理器。

需要说明的是,缓存buffer_cache是内存的一部分,在linux系统中,所有空闲内存都可以作为缓存。缓存用于存储闪存中的数据,从而可以加快处理器对闪存中数据的访问。图2为本发明的缓存的逻辑示意图,缓存主要包括两部分:缓存头部(buffer_head)和缓存数据区(buffer_data),缓存头部包含了处理器操作缓存所需要的全部信息。具体地,缓存头部包括:物理地址指针(b_blocknr)、指向下一个缓存的指针(b_reqnext)和缓存数据区指针(b_data),其中,b_blocknr用于存储缓存数据区中的数据在闪存上的物理地址,b_reqnext用于存储下一个缓存的地址,b_data用于存储缓存数据区的地址和大小。buffer_data为缓存头部对应的缓存数据区,用于存储数据,缓存数据区中的数据对应闪存上的一个块。每个buffer_data的大小是不固定的。需要说明的是,上述缓存头部和缓存数据区是在读取数据的的过程中动态建立的,缓存头部的信息和缓存数据区中缓存的数据也是动态填充的。当处理器需要处理多个不同的读取数据的指令(也即需要完成多次不同数据的读取)时,就需要建立多个缓存。因此,在处理器第一次接收读取数据的指令时,内存中是不存在缓存的。

需要说明的是,当处理器已经读取了多个不同的数据时,则会建立多个缓存,每个缓存都包括缓存头部和缓存数据区。若处理器再次接收到读取数据的指令,则依次扫描已建立的缓存头部,并将已建立的缓存头部中缓存的物理地址与新接收的读取数据的指令中的物理地址进行比较,如果比较结果为两者相同,则直接返回与上述缓存头部对应的缓存数据区中的数据;如果比较结果不同,则表示未从已建立的缓存头部中查找到物理地址。

S130,当用户设备未从所述缓存中查找到所述物理地址时,根据所述待读取数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区。

具体地,S130的执行主体可以是用户设备的处理器。

所述闪存的实际物理块大小是根据所述闪存的标识信息(Card IDentity,CID),由所述闪存的驱动层(Host Layer)从闪存的标识信息CID与闪存的实际物理块大小的对应关系表中获取到的。其中,闪存的标识信息CID与闪存的实际物理块大小的对应关系表是预先建立好的。具体建立过程为:通过标准命令从厂家的数据表(Data sheet)中获取闪存的预设的标识信息,然后从获取到的闪存的预设的标识信息中获取厂家ID,在获取到厂家ID之后,根据厂家ID,从CID中进一步获取闪存的型号,之后判断闪存的型号是否在查找表(Look-Up-Table,LUT)中,若是,则返回LUT表中闪存的实际物理块大小;否则返回缺省值512字节。在获取到闪存的实际物理块大小或者缺省值之后,就可以建立闪存的标识信息CID与闪存的实际物理块大小的对应关系表。

可选地,闪存的驱动层在获取到闪存的实际物理块大小之后,将获取到的闪存的实际物理块大小反馈到闪存的块设备层(Block Layer),最后经过块设备层将该闪存的实际物理块大小通过submit_bio接口函数发送给处理器。

其中,从内存中划分出缓存数据区,也即建立缓存数据区。具体为,将内存中的部分空间作为缓存数据区,上述空间通过起始地址和结束地址表示。举例来说,内存的大小为4G,其中,地址2000KB-4000KB之间没有存放数据,则处理器可以从上述空间中划分出2000KB-2008KB,共8KB空间作为缓存数据区。

具体地,当未从缓存中查找到物理地址时,说明处理器之前并没有读取过该待读取的数据,即该待读取的数据没有缓存在缓存数据区中。处理器需要建立一个缓存,其中,缓存的缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。或者,缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。举例来说,闪存的实际物理块大小为8K,而如果待读取数据的大小为2K时,则从内存中划分出的缓存数据区的大小为8K,该缓存数据区的大小为闪存的实际物理块大小的1倍;而如果待读取数据的大小为22K时,则从内存中划分出的缓存数据区的大小为24K,该缓存数据区的大小为闪存的实际物理块大小的3倍。

可选地,在所述从内存中划分出缓存数据区之后,在所述根据所述物理地址,从所述闪存中读取所述待读取数据之前,所述方法还包括:

从所述内存中划分出与所述缓存数据区对应的缓存头部,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小。举例来说,假如缓存数据区的首地址为200K,大小为24K,则将上述首地址200K和大小24K保存在与缓存数据区对应的缓存头部中。

S140,用户设备根据所述物理地址,从所述闪存中读取所述待读取数据,将所述待读取数据缓存在所述缓存数据区中。

具体地,S140的执行主体可以是用户设备的处理器。

具体地,处理器通过submit_bio接口函数向闪存的驱动层发送块设备读请求,该读请求中包括所述物理地址。闪存的块设备层通过mmc_request接口函数接收上述块设备读请求,闪存的块设备层接收到上述块设备读请求之后,向闪存的驱动层发送读命令,该读命令中包括物理地址,闪存的驱动层根据接收到的读命令中的物理地址,从所述闪存中获取所述待读取数据。

闪存的驱动层获取到上述待读取数据之后,将该待读取数据发送给闪存的块设备层;闪存的块设备层接收到该待读取数据之后,将该待读取数据缓存在物理缓存中,并转发给处理器;处理器接收到该待读取数据之后缓存在已划分出的缓存数据区中,并将该待读取的数据返回给上层应用。

综上,本发明实施例提供的读取闪存中数据的方法,根据闪存的实际物理块大小申请缓存数据区,达到了动态调整缓存数据区的目的,也即统一了处理器读取闪存中数据的单位和闪存内部读取数据的单位,从而可以解决闪存的读取效率低,使用寿命短的问题。

图3为本发明实施例二提供的向闪存中写入数据的方法流程图,如图3所示,所述方法具体包括:

S310,用户设备接收写数据的指令,其中,所述写数据的指令包括:待写入数据、所述待写入数据的大小和所述待写入数据在所述闪存上的物理地址。

具体地,S310的执行主体可以是用户设备的处理器。

闪存是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写,是一种非易失性的存储器。闪存是用户设备用来永久性存储数据的存储介质。在此说明书中,以闪存为NAND Flash进行说明,NAND Flash内嵌在eMMC中。当用户设备从闪存中读取数据时,需要先将闪存中的数据缓存在内存中;或者,当用户设备向闪存中写入数据时,也需要将该数据缓存在内存中,然后再向闪存写入数据。

S320,用户设备根据所述待写入数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区,并划分出与所述缓存数据区对应的缓存头部。

具体地,S320的执行主体可以是用户设备的处理器。

需要说明的是,缓存头部和缓存数据区是在向闪存中写入数据的的过程中动态建立的,缓存头部的信息和缓存数据区中缓存的数据也是动态填充的。当处理器需要处理多个不同的写入数据的指令(也即需要完成多次不同数据的写入)时,就需要建立多个缓存。因此,在处理器第一次接收写数据的指令时,内存中是不存在缓存的。当处理器已经向闪存中写入了多个不同的数据时,则会建立多个缓存,每个缓存都包括缓存头部和缓存数据区。

需要说明的是,所述缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。或者,所述缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

S330,用户设备将所述待写入数据缓存在所述缓存数据区中,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小。

具体地,S330的执行主体可以是用户设备的处理器。

举例来说,假如缓存数据区的首地址为200K,大小为24K,则将上述首地址200K和大小24K保存在与缓存数据区对应的缓存头部中。

S340,用户设备根据所述物理地址,将所述待写入数据写入所述闪存中。

具体地,S340的执行主体可以是用户设备的处理器。

其中,根据所述物理地址,将所述待写入数据写入所述闪存中具体为:

处理器通过submit_bio接口函数向闪存的驱动层发送块设备写请求,该写请求中包括物理地址。闪存的块设备层通过mmc_request接口函数接收上述块设备写请求,闪存的块设备层接收到上述块设备写请求之后,将该块设备写请求转发给闪存的驱动层,最后再由与闪存相关的驱动层,根据所述物理地址,将所述待写入数据写入闪存中,并向闪存的块设备层返回写成功的信息。

闪存的块设备层接收到上述写成功的信息之后,将该写成功的信息转发给处理器;最后再由处理器将该写成功的信息返回给上层应用,并等待接收下一个写入数据的指令。

综上,本发明实施例提供的向闪存中写入数据的方法,根据闪存的实际物理块大小申请缓存数据区,达到了动态调整缓存数据区的目的,也即统一了处理器向闪存中写入数据的单位和闪存内部写数据的单位,从而可以解决闪存的写效率低,使用寿命短的问题。

可选地,所述方法还可以包括以下步骤:

S350,为所述缓存数据区添加标识信息,当所述缓存数据区中的数据与所述闪存中的数据不一致时,将所述标识信息标识为表示脏数据的信息。

由于缓存的缓存作用,写数据的操作实际上会被延迟,当缓存数据区中的数据比闪存中的数据更新时,那么该数据就称为脏数据。在本发明的一种具体实现方式中,为所述缓存数据区添加标识信息,参见图4所示的添加标识信息之后的缓存的逻辑示意图。图4中,包括三个缓存,每个缓存包括缓存头部(buffer_head)和缓存数据区(buffer_data),缓存头部包括b_blocknr、b_reqnext、标识信息(dirty)和b_data,其中,b_blocknr用于存储对应的缓存数据区中的数据在闪存上的物理地址,b_reqnext用于存储下一个缓存的地址,dirty为新添加的标识信息,当标识信息为0时,表示对应的缓存数据区中的数据为正常数据,当标识信息为1时,表示对应的缓存数据区中的数据为脏数据;b_data用于存储对应的缓存数据区的地址和大小。buffer_data为对应的缓存数据区,用于存储数据,每个buffer_data的大小是不固定的,但是buffer_data均以闪存的实际物理块大小为单位。

其中,为所述缓存数据区添加标识信息具体为:以闪存的实际物理块大小为单位,为所述缓存数据区添加标识信息。如图4中,假设闪存的实际物理块大小为8K,因为8K为闪存的实际物理块大小的1倍,所以添加一个标识信息;16K为闪存的实际物理块大小的2倍,则添加两个标识信息;24K为闪存的实际物理块大小的3倍,则添加3个标识信息。

S360,当所述内存的占用率大于预设的第一阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中;或者,

当所述缓存数据区驻留的时间大于预设的第二阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

图4中,当缓存数据区被标识为表示脏数据的信息时,也即当缓存数据区的dirty值为0时,缓存数据区中的数据被写回闪存存在两种情况:

1)当所述内存的占用率大于预设的第一阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

2)当所述缓存数据区在内存中驻留的时间大于预设的第二阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

通过上述两种方式,可以确保缓存数据区中的数据不会无限期的驻留在内存中。

需要说明的是,刷新守护进程(Flush daemon)可以统一检测缓存头部中标识为表示脏数据的信息的缓存数据区,从而将上述缓存数据区中的数据写入闪存中。

图5为本发明实施例三提供的读取闪存中数据的装置示意图。所述装置可以用于执行图1所述的方法。图5中,该装置包括:接收单元501、查找单元502、划分单元503和缓存单元504。

接收单元501,用于接收读取数据的指令,其中,所述读取数据的指令包括:待读取数据的大小和所述待读取数据在所述闪存上的物理地址。

查找单元502,用于从缓存中查找接收单元501接收的所述物理地址。

划分单元503,用于当查找单元502未从所述缓存中查找到所述物理地址时,根据所述待读取数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区。

缓存单元504,用于根据所述物理地址,从所述闪存中读取所述待读取数据,将所述待读取数据缓存在划分单元503划分的所述缓存数据区中。

可选地,划分单元503还用于:

从所述内存中划分出与所述缓存数据区对应的缓存头部,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小;

所述缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍;或者,

所述缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍;

所述闪存的实际物理块大小是根据所述闪存的标识信息CID,由所述闪存的驱动层从闪存的标识信息CID与闪存的实际物理块大小的对应关系表中获取到的。

可选地,接收单元501还用于:接收所述闪存的驱动层经过所述闪存的块设备层发送的所述闪存的实际物理块大小。

图6为本发明实施例四提供的向闪存中写入数据的装置示意图。所述装置可以用于执行图3所述的方法。图6中,该装置包括:接收单元601、划分单元602、缓存单元603和写入单元604。

接收单元601,用于接收写数据的指令,其中,所述写数据的指令包括:待写入数据、所述待写入数据的大小和所述待写入数据在所述闪存上的物理地址。

划分单元602,用于根据接收单元601接收的所述待写入数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区,并划分出与所述缓存数据区对应的缓存头部。

缓存单元603,用于将所述待写入数据缓存在划分单元602划分的所述缓存数据区中,将所述缓存数据区的属性信息和所述物理地址缓存在所述划分单元划分的所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的逻辑地址和大小。

写入单元604,用于根据所述物理地址,将所述待写入数据写入所述闪存中。

可选地,所述装置还包括:添加单元605,用于为所述缓存数据区添加标识信息,当所述缓存数据区中的数据与所述闪存中的数据不一致时,将所述标识信息标识为表示脏数据的信息。

写入单元604,还用于当所述内存的占用率大于预设的第一阈值时,将所述添加单元添加的所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中;或者,

当所述缓存数据区驻留的时间大于预设的第二阈值时,将所述添加单元添加的所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

本发明实施例提供的读取闪存中数据的装置和向闪存中写入数据的装置,根据闪存的实际物理块大小申请缓存数据区,达到了动态调整缓存数据区的目的,也即统一了处理器读写闪存中数据的单位和闪存内部读写数据的单位,从而可以解决闪存的读写效率低,使用寿命短的问题。

图7为本发明实施例五提供的用户设备示意图。如图7所示,所述设备包括:网络接口701,一个或多个处理器702,存储器703,系统总线704用于连接网络接口701、处理器702和存储器703。

举例来说,处理器702可以是CPU。

网络接口701用于与其它设备通信。

存储器703包括:内存和闪存,一个或多个程序存储在存储器703中,并被配置为由一个或多个处理器702执行,一个或多个程序包括:

接收读取数据的指令,其中,所述读取数据的指令包括:待读取数据的大小和所述待读取数据在所述闪存上的物理地址;

从缓存中查找所述物理地址;

当未从所述缓存中查找到所述物理地址时,根据所述待读取数据的大小和所述闪存的实际物理块大小,从所述内存中划分出缓存数据区;

根据所述物理地址,从所述闪存中读取所述待读取数据,将所述待读取数据缓存在所述缓存数据区中。

可选地,所述缓存数据区的大小大于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

可选地,所述缓存数据区的大小等于所述待读取数据的大小,并且所述缓存数据区的大小为所述闪存的实际物理块大小的整数倍。

进一步的,所述一个或多个程序还包括:从所述内存中划分出与所述缓存数据区对应的缓存头部,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小。

可选地,所述闪存的实际物理块大小是根据所述闪存的标识信息CID,由所述闪存的驱动层从闪存的标识信息CID与闪存的实际物理块大小的对应关系表中获取到的。

进一步的,所述一个或多个程序还包括:接收所述闪存的驱动层经过所述闪存的块设备层发送的所述闪存的实际物理块大小。

图8为本发明实施例六提供的用户设备示意图。如图8所示,所述设备包括:网络接口801,一个或多个处理器802,存储器803,系统总线804用于连接网络接口801、处理器802和存储器803。

举例来说,处理器802可以是CPU。

网络接口801用于与其它设备通信。

存储器803包括:内存和闪存,一个或多个程序存储在存储器803中,并被配置为由一个或多个处理器802执行,一个或多个程序包括:

接收写数据的指令,其中,所述写数据的指令包括:待写入数据、所述待写入数据的大小和所述待写入数据在所述闪存上的物理地址;

根据所述待写入数据的大小和所述闪存的实际物理块大小,从内存中划分出缓存数据区,并划分出与所述缓存数据区对应的缓存头部;

将所述待写入数据缓存在所述缓存数据区中,将所述缓存数据区的属性信息和所述物理地址缓存在所述缓存头部,其中,所述缓存数据区的属性信息包括所述缓存数据区的地址和大小;

根据所述物理地址,将所述待写入数据写入所述闪存中。

进一步的,所述一个或多个程序还包括:

为所述缓存数据区添加标识信息,当所述缓存数据区中的数据与所述闪存中的数据不一致时,将所述标识信息标识为表示脏数据的信息;

当所述内存的占用率大于预设的第一阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中;或者,

当所述缓存数据区驻留的时间大于预设的第二阈值时,将所述标识信息为表示脏数据的信息对应的缓存数据区中的数据写入所述闪存中。

本发明实施例提供的用户设备,根据闪存的实际物理块大小申请缓存数据区,达到了动态调整缓存数据区的目的,也即统一了处理器读写闪存中数据的单位和闪存内部读写数据的单位,从而可以解决闪存的读写效率低,使用寿命短的问题。

专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1