固态硬盘block修正方法、装置、电子设备及存储介质转让专利

申请号 : CN202310036361.0

文献号 : CN115729478B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈庆陆赵宝林秦文政

申请人 : 苏州浪潮智能科技有限公司

摘要 :

本发明实施例提供了一种固态硬盘block修正方法、装置、电子设备及存储介质,方法包括:在固态硬盘上电后,获取DDR的super block所记录的最后一个映射关系中的第一物理块地址,查询DDR的SLC block info表中的open block对应的第二物理块地址,将SLC block info表中的open block对应的第二物理块地址替换为第一物理块地址,实现对SLC block info表中open block进行修正,确保上电后DDR的SLC block info表中open block的准确性,增强了SSD系统运行的稳定性。

权利要求 :

1.一种固态硬盘block修正方法,其特征在于,所述方法包括:

在所述固态硬盘下电过程中,通过DDR中的super block记录SLC block info表保存至NAND的SLC block中产生的映射关系,并将所述DDR中的 super block记录的数据信息保存至所述NAND的block中;其中,所述SLC block info表用于管理所述NAND中存储元数据的SLC block,所述SLC block info表是所述固态硬盘下电过程中最后保存至所述NAND的SLC block中的元数据,所述数据信息保存至所述NAND的block中时不会改变元数据所存储的open block;

在所述固态硬盘上电后,获取所述DDR的super block所记录的最后一个映射关系中的第一物理块地址;所述第一物理块地址为所述SLC block info 表刷写到所述NAND的SLC block中后的open block的物理块地址;

查询所述DDR的SLC block info表中的open block对应的第二物理块地址;所述第二物理块地址为除所述SLC block info表之外的其他元数据刷写到所述NAND的SLC block中后的open block的物理块地址;

将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。

2.根据权利要求1所述的方法,其特征在于,所述第一物理块地址和所述第二物理块地址均包括其对应的block的page使用信息,所述将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址,包括:确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同;

当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,将所述第二物理块地址中的page使用信息替换为所述第一物理块地址中的page使用信息。

3.根据权利要求2所述的方法,其特征在于,当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时未使用新的free block。

4.根据权利要求2所述的方法,其特征在于,在所述确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同之后,还包括:当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。

5.根据权利要求4所述的方法,其特征在于,当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时使用新的free block。

6.根据权利要求4所述的方法,其特征在于,在所述当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时之后,还包括:将所述第二物理块地址对应的block的占用状态从空闲状态修改为占用状态。

7.根据权利要求4所述的方法,其特征在于,在所述当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时之后,还包括:将所述第二物理块地址对应的block的block type从free block type修改为SLC block info type。

8.根据权利要求2所述的方法,其特征在于,所述确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同,包括:将所述第一物理块地址和所述第二物理块地址的page清零;

确定page清零的所述第一物理块地址和page清零的所述第二物理块地址是否一致;

若page清零的所述第一物理块地址和page清零的所述第二物理块地址一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block相同;

若page清零的所述第一物理块地址和page清零的所述第二物理块地址不一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同。

9.根据权利要求1所述的方法,其特征在于,还包括:

在所述固态硬盘下电过程中,将所述DDR中存储的元数据保存至所述NAND的block中,所述元数据至少包括FTL映射表、trim表、TLC block info表、first表、second表和所述SLC block info表。

10.根据权利要求9所述的方法,其特征在于,所述将所述DDR中存储的元数据保存至所述NAND的block中,包括:按照所述FTL映射表、所述trim表、所述TLC block info表、所述first表、所述second表和所述SLC block info表排序依次保存至所述NAND的block中。

11.根据权利要求1所述的方法,其特征在于,所述将所述DDR中的super block记录的数据信息保存至所述NAND的block中,包括:通过控制管理器将所述DDR中的super block记录的数据信息保存至所述NAND的block中。

12.根据权利要求1所述的方法,其特征在于,还包括:

在所述固态硬盘上电过程中,将所述NAND的block中保存的所述数据信息和所述SLC block info表恢复至所述DDR中。

13.根据权利要求1所述的方法,其特征在于,所述SLC block info表记录有NAND中block从free block变更为open block的时间戳,所述查询所述DDR的SLC block info表中的open block对应的第二物理块地址,包括:将所述SLC block info表中最大的时间戳对应的block确定为open block;

查询所述open block对应的第二物理块地址。

14.根据权利要求7所述的方法,其特征在于,所述SLC block info表用于记录NAND中block的block type、占用状态以及包含page使用情况的物理块地址信息。

15.根据权利要求14所述的方法,其特征在于,在所述将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址之后,还包括:获取所述SLC block info表中block对应的block type;

基于block对应的block type设置block的管理结构。

16.一种固态硬盘block修正装置,其特征在于,包括:

映射关系记录模块,用于在所述固态硬盘下电过程中,通过DDR中的super block记录SLC block info表保存至NAND的SLC block中产生的映射关系,并将所述DDR中的super block记录的数据信息保存至所述NAND的block中;其中,所述SLC block info表用于管理所述NAND中存储元数据的SLC block,所述SLC block info表是所述固态硬盘下电过程中最后保存至所述NAND的SLC block中的元数据,所述数据信息保存至所述NAND的block中时不会改变元数据所存储的open block;

地址获取模块,用于在所述固态硬盘上电后,获取DDR的super block所记录的最后一个映射关系中的第一物理块地址;所述第一物理块地址为所述SLC block info表刷写到所述NAND的SLC block中后的open block的物理块地址;

地址查询模块,用于查询所述DDR的SLC block info表中的open block对应的第二物理块地址;所述第二物理块地址为除所述SLC block info表之外的其他元数据刷写到所述NAND的SLC block中后的open block的物理块地址;

地址替换模块,用于将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。

17.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;

所述存储器,用于存放计算机程序;

所述处理器,用于执行存储器上所存放的程序时,实现如权利要求1‑15任一项所述的方法。

18.一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1‑15任一项所述的方法。

说明书 :

固态硬盘block修正方法、装置、电子设备及存储介质

技术领域

[0001] 本发明涉及储存技术领域,特别是涉及一种固态硬盘block修正方法、一种固态硬盘block修正装置、一种电子设备以及一种计算机可读存储介质。

背景技术

[0002] 元数据也称为SSD(Solid State Disk或Solid State Drive,固态硬盘)系统管理数据,包括FTL映射表,trim表等。在SSD运行时常驻SSD DDR内存中,SSD完全断电之前需要将元数据从DDR刷写到NAND中固化,SSD再次上电过程中需要将元数据从NAND中读出并恢复到SSD DDR中相应的区域。对于SLC(Single Layer Cell,单层NAND FLASH存储基元) NAND,以SLC方式使用的block称为SLC block;对于TLC(Triple Layer Cell,三层NAND FLASH存储基元) NAND,以TLC方式使用的block称为TLC block,鉴于SSD元数据的重要性以及SLC block远比TLC block稳定的特性,通常SSD产品都采用SLC block存储元数据,并将所有存储元数据的SLC block通过SLC block info进行管理。
[0003] SLC block info(information,简写/信息)也作为一种重要的元数据,在SSD下电过程中需要全部刷写到SLC block中保存。这样,上电过程从SLC block中恢复SLC block info到SSD DDR后,SSD可以依次遍历每个SLC对应的SLC block info进行SLC block管理结构的重建,包括存储SLC block info的SLC open block的建立等。
[0004] 然而,下电流程将整份SLC block info保存到SLC block中也会消耗SLC open block的free page,这也引起了SLC open block对应的SLC block info的改变,使得SSD断电前SLC open block与上电流程根据SLC block info重建的SLC open block不一致,导致的SLC open block继续写入新数据,存在open block复写问题。

发明内容

[0005] 本发明实施例是提供一种固态硬盘block修正方法、装置、电子设备以及计算机可读存储介质,以解决SSD断电前SLC open block与上电流程根据SLC block info重建的SLC open block不一致,导致的SLC open block继续写入新数据,存在open block复写问题的问题。
[0006] 本发明实施例公开了一种固态硬盘block修正方法,所述方法包括:
[0007] 在所述固态硬盘上电后,获取DDR的super block所记录的最后一个映射关系中的第一物理块地址;
[0008] 查询所述DDR的SLC block info表中的open block对应的第二物理块地址;
[0009] 将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0010] 在一些实施例中,所述第一物理块地址和所述第二物理块地址均包括其对应的block的page使用信息,所述将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址,包括:
[0011] 确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同;
[0012] 当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,将所述第二物理块地址中的page使用信息替换为所述第一物理块地址中的page使用信息。
[0013] 在一些实施例中,当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时未使用新的free block。
[0014] 在一些实施例中,在所述确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同之后,还包括:
[0015] 当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0016] 在一些实施例中,当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时使用新的free block。
[0017] 在一些实施例中,在所述当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时之后,还包括:
[0018] 将所述第二物理块地址对应的block的占用状态从空闲状态修改为占用状态。
[0019] 在一些实施例中,在所述当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时之后,还包括:
[0020] 将所述第二物理块地址对应的block的block type从free block type修改为SLC block info type。
[0021] 在一些实施例中,所述确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同,包括:
[0022] 将所述第一物理块地址和所述第二物理块地址的page清零;
[0023] 确定page清零的所述第一物理块地址和page清零的所述第二物理块地址是否一致;
[0024] 若page清零的所述第一物理块地址和page清零的所述第二物理块地址一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block相同;
[0025] 若page清零的所述第一物理块地址和page清零的所述第二物理块地址不一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同。
[0026] 在一些实施例中,还包括:
[0027] 在所述固态硬盘下电过程中,将所述DDR中存储的元数据保存至所述NAND的block中,所述元数据至少包括FTL映射表、trim表、TLC block info表、first表、second表和SLC block info表。
[0028] 在一些实施例中,所述将所述DDR中存储的元数据保存至所述NAND的block中,包括:
[0029] 按照所述FTL映射表、所述trim表、所述TLC block info表、所述first表、所述second表和所述SLC block info表排序依次保存至所述NAND的block中。
[0030] 在一些实施例中,还包括:
[0031] 在所述固态硬盘下电过程,将所述SLC block info表从所述DDR中保存至所述NAND的block中时,通过所述DDR中的super block记录所述SLC block info表保存至所述NAND的block中产生的映射关系。
[0032] 在一些实施例中,在所述SLC block info表从DDR中保存至所述NAND的block中之后,还包括:
[0033] 将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0034] 在一些实施例中,所述将所述DDR中的super block记录的数据信息保存至所述NAND的block中,包括:
[0035] 通过控制管理器将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0036] 在一些实施例中,还包括:
[0037] 在所述固态硬盘上电过程中,将所述NAND的block中保存的数据信息和所述SLC block info表恢复至所述DDR中。
[0038] 在一些实施例中,所述SLC block info表记录有所述NAND中block从free block变更为open block的时间戳,所述查询所述DDR的SLC block info表中的open block对应的第二物理块地址,包括:
[0039] 将所述SLC block info表中最大的时间戳对应的block确定为open block;
[0040] 查询所述open block对应的第二物理块地址。
[0041] 在一些实施例中,所述SLC block info表用于记录所述NAND中block的block type、占用状态以及包含page使用情况的物理块地址信息。
[0042] 在一些实施例中,在所述将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址之后,还包括:
[0043] 获取所述SLC block info表中block对应的block type;
[0044] 基于block对应的block type设置block的管理结构。
[0045] 本发明实施例还公开了一种固态硬盘block修正装置,包括:
[0046] 地址获取模块,用于在所述固态硬盘上电后,获取DDR的super block所记录的最后一个映射关系中的第一物理块地址;
[0047] 地址查询模块,用于查询所述DDR的SLC block info表中的open block对应的第二物理块地址;
[0048] 地址替换模块,用于将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0049] 在一些实施例中,所述第一物理块地址和所述第二物理块地址均包括其对应的block的page使用信息,所述地址替换模块,包括:
[0050] block确定子模块,用于确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同;
[0051] page使用信息替换子模块,用于当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,将所述第二物理块地址中的page使用信息替换为所述第一物理块地址中的page使用信息。
[0052] 在一些实施例中,当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时未使用新的free block。
[0053] 在一些实施例中,还包括:
[0054] 地址替换子模块,用于当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0055] 在一些实施例中,当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时使用新的free block。
[0056] 在一些实施例中,还包括:
[0057] 状态修改子模块,用于将所述第二物理块地址对应的block的占用状态从空闲状态修改为占用状态。
[0058] 在一些实施例中,还包括:
[0059] 类型修改子模块,用于将所述第二物理块地址对应的block的block type从free block type修改为SLC block info type。
[0060] 在一些实施例中,所述block确定子模块,包括:
[0061] page清零单元,用于将所述第一物理块地址和所述第二物理块地址的page清零;
[0062] 地址比较单元,用于确定page清零的所述第一物理块地址和page清零的所述第二物理块地址是否一致;
[0063] 第一block确定单元,用于若page清零的所述第一物理块地址和page清零的所述第二物理块地址一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block相同;
[0064] 第二block确定单元,用于若page清零的所述第一物理块地址和page清零的所述第二物理块地址不一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同。
[0065] 在一些实施例中,还包括:
[0066] 数据保存模块,用于在所述固态硬盘下电过程中,将所述DDR中存储的元数据保存至所述NAND的block中,所述元数据至少包括FTL映射表、trim表、TLC block info表、first表、second表和SLC block info表。
[0067] 在一些实施例中,所述数据保存模块,包括:
[0068] 第一数据保存子模块,用于按照所述FTL映射表、所述trim表、所述TLC block info表、所述first表、所述second表和所述SLC block info表排序依次保存至所述NAND的block中。
[0069] 在一些实施例中,还包括:
[0070] 映射关系记录模块,用于在所述固态硬盘下电过程,将所述SLC block info表从所述DDR中保存至所述NAND的block中时,通过所述DDR中的super block记录所述SLC block info表保存至所述NAND的block中产生的映射关系。
[0071] 在一些实施例中,还包括:
[0072] 第二数据保存模块,用于将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0073] 在一些实施例中,所述第二数据保存模块,包括:
[0074] 第二数据保存子模块,用于通过控制管理器将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0075] 第二数据保存模块还包括:
[0076] 数据恢复模块,用于在所述固态硬盘上电过程中,将所述NAND的block中保存的数据信息和所述SLC block info表恢复至所述DDR中。
[0077] 在一些实施例中,所述SLC block info表记录有所述NAND中block从free block变更为open block的时间戳,所述地址查询模块,包括:
[0078] open block确定子模块,用于将所述SLC block info表中最大的时间戳对应的block确定为open block;
[0079] 地址查询子模块,用于查询所述open block对应的第二物理块地址。
[0080] 在一些实施例中,所述SLC block info表用于记录所述NAND中block的block type、占用状态以及包含page使用情况的物理块地址信息。
[0081] 在一些实施例中,还包括:
[0082] 类型获取模块,获取所述SLC block info表中block对应的block type;
[0083] 结构设置模块,用于基于block对应的block type设置block的管理结构。
[0084] 本发明实施例还公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
[0085] 所述存储器,用于存放计算机程序;
[0086] 所述处理器,用于执行存储器上所存放的程序时,实现如本发明实施例所述的方法。
[0087] 本发明实施例还公开了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如本发明实施例所述的方法。
[0088] 本发明实施例包括以下优点:通过非元数据模块DDR的super block储存SLC block info表写入NAND产生的映射关系,在上电后,通过super block储存最后一个映射关系中的第一物理块地址去替换SLC block info表中的open block对应的第二物理块地址,实现对SLC block info表中open block进行修正,确保上电后DDR的SLC block info表中open block的准确性,增强了SSD系统运行的稳定性,避免因SSD断电前SLC open block与上电流程根据SLC block info重建的SLC open block不一致,导致的SLC open block继续写入新数据,存在open block复写问题。

附图说明

[0089] 图1是本发明实施例中提供的一种固态硬盘block修正方法的步骤流程图;
[0090] 图2是本发明实施例中提供的一种SLC block info表的示意图;
[0091] 图3是本发明实施例中提供的一种PCA的示意图;
[0092] 图4是本发明实施例中提供的一种下电流程中元数据的刷写顺序的示意图;
[0093] 图5是本发明实施例中提供的一种SLC open block未切换过的示意图;
[0094] 图6是本发明实施例中提供的一种SLC open block已切换过的示意图;
[0095] 图7是本发明实施例中提供的一种固态硬盘block修正装置的结构框图;
[0096] 图8是本发明实施例中提供的一种电子设备的结构框图;
[0097] 图9是本发明实施例中提供的一种计算机可读存储介质的框图。

具体实施方式

[0098] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0099] 相关缩略语和关键术语定义:
[0100] SSD:Solid State Drives 固态硬盘
[0101] LBA:Logical Block Address 逻辑块地址
[0102] PCA:Physical Address 物理块地址
[0103] FTL:Flash Translation Layer 闪存转换层
[0104] JM:Journal Manager 日志管理器
[0105] CM:control Manager 控制管理器
[0106] SLC:Single Layer Cell 单层NAND FLASH存储基元
[0107] TLC:Triple Layer Cell 三层NAND FLASH存储基元
[0108] L2P:Logical To Physical Table 逻辑块到物理块的映射表,即FTL映射;
[0109] Info:information简写,信息
[0110] DDR: Double Data Rate 双倍速率同步动态随机存储器
[0111] NAND:NAND flash memory,非易失性存储介质
[0112] Nand闪存特性要求读写以page为单位,擦除以block为单位。一个block封装有若干个page,page的写入具有连续性,不能跳页写。SSD内部为了实现数据写入,磨损均衡以及垃圾回收等功能,都要对block资源进行统一管理。一般的,擦除过的block称为空block或free block,可以随时再次写入新的数据;而free block被选中并用于当前数据写入时就转化为open block,此种block状态可以一直持续到block被写满时终止;open block按page为单位写满数据后就转化为used block,此种block也是垃圾回收的目标对象;
[0113] 元数据也称为SSD系统管理数据,包括FTL映射表,trim表等。在SSD运行时常驻SSD DDR内存中,SSD完全断电之前需要将元数据从DDR刷写到NAND中固化,SSD再次上电过程中需要将元数据从NAND中读出并恢复到SSD DDR中相应的区域。对于TLC NAND,以SLC方式使用的block称为SLC block;以TLC方式使用的block称为TLC block;
[0114] 鉴于SSD元数据的重要性以及SLC block远比TLC block稳定的特性,通常SSD产品都采用SLC block存储元数据,并将所有存储元数据的SLC block通过SLC block info进行管理。SLC block info记录了每个SLC block的类型(free block type,bad block type,各种元数据占用block类型(比如存储FTL映射表的SLC block类型等)),以及包含有当前page使用情况的PCA信息等。SLC block info也作为一种重要的元数据,在SSD下电过程中需要全部刷写到SLC block中保存。这样,上电过程从SLC block中恢复SLC block info到SSD DDR后,SSD可以依次遍历每个SLC对应的SLC block info进行SLC block管理结构的重建,包括存储SLC block info的SLC open block的建立等。
[0115] 但是,存在一个较大问题,就是下电流程将整份SLC block info保存到SLC block中也会消耗SLC open block的free page,这也引起了SLC open block对应的SLC block info的改变。也就是说,下电流程刷写的SLC block info并没有包含刷写自身引起的SLC block info的改变。这样,就会导致SSD断电前SLC open block实际的page使用信息,与上电流程根据SLC block info重建的SLC open block中的page使用信息不一致。如果SLC open block继续写入新数据,就存在page复写问题。如果后续上电恢复SLC block info读取到复写的page就会遭遇读UNC问题,恢复失败最终导致SSD无法正常使用。简单的,会想到在下电流程中再次保存全部的SLC block info,但这又会引起SLC block info的改变,最终陷入SLC block info保存死循环。
[0116] 基于此,发明实施例针对SSD下电流程中保存SLC block info类型元数据到SLC block中引起该元数据自身再次变化的特殊性,提供了一种固态硬盘block修正方法、装置、电子设备及存储介质,以有效解决了open block的复写问题,保证了SSD系统的稳定性。
[0117] 参照图1,示出了本发明实施例中提供的一种固态硬盘block修正方法的步骤流程图,所述固态硬盘block修正方法的步骤包括:
[0118] 步骤101:在所述固态硬盘上电后,获取DDR的super block所记录的最后一个映射关系中的第一物理块地址。
[0119] 其中,第一物理块地址为SLC block info表刷写到NAND的block中后的open block的物理块地址,其包括open block的page使用信息。
[0120] block在未使用时呈空闲状态,即为free block,在写入数据过程中或写入数据后为占用状态,即为open block,在pen block按page为单位写满数据后就转化为used block。
[0121] 所有存储元数据的SLC block通过SLC block info表进行管理,SLC block info表也是一种元数据,而DDR的super block所记录的数据并不是元数据。
[0122] 在固态硬盘下电过程中,会将DDR中的SLC block info表和DDR中super block记录的数据信息先后刷写到NAND的block中,而super block记录的数据信息包括SLC block info表(刷写到)保存至NAND的block中产生的映射关系JM L2P。
[0123] 在固态硬盘上电过程中,会将NAND的block中保存的SLC block info表,和super block记录的数据信息恢复至DDR的super block中。
[0124] 因此,可以从DDR的super block所记录的数据信息中获取到SLC block info表保存至NAND的block中产生的映射关系JM L2P,即super block所记录的最后一个映射关系,从而可以获取到该映射关系JM L2P的第一物理块地址。
[0125] 步骤102:查询所述DDR的SLC block info表中的open block对应的第二物理块地址。
[0126] 其中,第二物理块地址为除SLC block info表之外的其他元数据刷写到NAND的block中后的open block的物理块地址,其包括open block的page使用信息。
[0127] 具体地,在固态硬盘上电过程中,会将NAND的block中保存的SLC block info表恢复至DDR中,因此可以在DDR中查询SLC block info表记录的open block对应的第二物理块地址。
[0128] 步骤103:将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0129] 其中,SLC block info表中记录的数据信息不包括SLC block info表自身刷写到NAND的block中产生的映射关系JM L2P,也就是说SLC block info表记录的open block,可能因SLC block info表刷写到NAND中导致open block中的page的使用情况发生改变,或者导致该open block按page为单位写满数据后就转化为used block,然后采用新的free block继续刷写。
[0130] 而DDR的super block所记录的最后一个映射关系JM L2P为SLC block info表刷写到NAND的block中产生的映射关系JM L2P,因此第一物理块地址为元数据存储的open block对应的物理地址。
[0131] 因此,将SLC block info表中的open block对应的第二物理块地址替换为第一物理块地址,实现对SLC block info表的open block进行修正。
[0132] 需要说明的是,DDR的super block所记录的数据并不是元数据,所以在将super block的数据信息写入NAND中,即改变元数据所存储的open block中的page的使用情况,也不会改变元数据所存储的open block。
[0133] 本发明实施例中,通过非元数据模块DDR的super block储存SLC block info表写入NAND产生的映射关系,在上电后,通过super block储存最后一个映射关系中的第一物理块地址去替换SLC block info表中的open block对应的第二物理块地址,实现对SLC block info表中open block进行修正,确保上电后DDR的SLC block info表中open block的准确性,增强了SSD系统运行的稳定性,避免因SSD断电前SLC open block与上电流程根据SLC block info重建的SLC open block不一致,导致的SLC open block继续写入新数据,存在open block复写问题。
[0134] 在上述实施例的基础上,提出了上述实施例的变型实施例,在此需要说明的是,为了使描述简要,在变型实施例中仅描述与上述实施例的不同之处。
[0135] 在一些实施例中,所述第一物理块地址和所述第二物理块地址均包括其对应的block的page使用信息,所述将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址,包括:确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同;当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,将所述第二物理块地址中的page使用信息替换为所述第一物理块地址中的page使用信息。
[0136] SSD断电前SLC open block与上电流程根据SLC block info重建的SLC open block不一致的情况有两种,一种是SSD断电前的SLC open block与上电流程根据SLC block info重建的SLC open block一致,但open block中的page使用信息不一致,另一种是SSD断电前的SLC open block与上电流程根据SLC block info重建的SLC open block不一致,且open block中的page使用信息也可能不一致。
[0137] 因此,需要确定第一物理块地址对应的block和第二物理块地址对应的block是否相同,当第一物理块地址对应的block和第二物理块地址对应的block相同时,表征在固态硬盘下电过程中,SLC block info表从DDR保存至NAND的block时,原本的open block并未写满,所以未使用新的free block,但SSD断电前的SLC open block的page使用信息,与上电流程根据SLC block info重建的SLC open block的page使用信息不一致。
[0138] 所以直接将第二物理块地址中的page使用信息替换为第一物理块地址中的page使用信息,就可以实现对SLC block info表的open block的page使用信息进行修正,确保上电后DDR的SLC block info表中open block的准确性,增强了SSD系统运行的稳定性。
[0139] 在一些实施例中,在所述确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同之后,还包括:当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0140] 具体地,当第一物理块地址对应的block和第二物理块地址对应的block不相同时,表征在固态硬盘下电过程中,SLC block info表从DDR保存至NAND的block时,旧的open block的page写满,并选取了新的free block作为open block继续写入数据,因此,SSD断电前的SLC open block与上电流程根据SLC block info重建的SLC open block不一致[0141] 所以将SLC block info表中的open block对应的第二物理块地址替换为所述第一物理块地址。
[0142] 在一些实施例中,在所述当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时之后,还包括:将所述第二物理块地址对应的block的占用状态从空闲状态修改为占用状态。
[0143] 具体地,由于为了避免真实的open block被面临着被其他元数据保存流程申请为open block,导致重复写入的风险,需要将第二物理块地址对应的block的占用状态从空闲状态修改为占用状态,防止open block再次被当作free block申请使用。
[0144] 在一些实施例中,在所述当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时之后,还包括:将所述第二物理块地址对应的block的block type从free block type修改为SLC block info type。
[0145] 具体地,当第一物理块地址对应的block和第二物理块地址对应的block不相同时,还需要将第二物理块地址对应的block的类型进行修改,具体将block的block type从free block type修改为SLC block info type。
[0146] 在一些实施例中,所述确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同,包括:将所述第一物理块地址和所述第二物理块地址的page清零;确定page清零的所述第一物理块地址和page清零的所述第二物理块地址是否一致;若page清零的所述第一物理块地址和page清零的所述第二物理块地址一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block相同;若page清零的所述第一物理块地址和page清零的所述第二物理块地址不一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同。
[0147] 具体地,将第一物理块地址和第二物理块地址的page清零,那么此时就可以将第一物理块地址和第二物理块地址就为block的物理块地址,不包含block的使用情况,因此,可以通过判断page清零的第一物理块地址和page清零的第二物理块地址是否一致,来判断第一物理块地址对应的block和第二物理块地址对应的block是否相同。
[0148] 当page清零的第一物理块地址和page清零的第二物理块地址一致,说明第一物理块地址和第二物理块地址对应相同的block,因此确定第一物理块地址对应的block和第二物理块地址对应的block相同。
[0149] 当page清零的第一物理块地址和page清零的第二物理块地址不一致,说明第一物理块地址和第二物理块地址对应不同的block,因此确定第一物理块地址对应的block和第二物理块地址对应的block不相同。
[0150] 在一些实施例中,所述方法还包括:在所述固态硬盘下电过程中,将所述DDR中存储的元数据保存至所述NAND的block中,所述元数据至少包括FTL映射表、trim表、TLC block info表、first表、second表和SLC block info表。
[0151] 具体地,元数据包括FTL映射表、trim表、TLC block info表、first表、second表和SLC block info表等,在SSD下电过程中,需要将DDR中存储的元数据保存至NAND的block中,防止因SSD下电后,DDR中存储的元数据丢失。
[0152] 在一些实施例中,所述将所述DDR中存储的元数据保存至所述NAND的block中,包括:按照所述FTL映射表、所述trim表、所述TLC block info表、所述first表、所述second表和所述SLC block info表排序依次保存至所述NAND的block中。
[0153] 具体地,在将DDR中存储的元数据保存至NAND的block的过程中,是先将FTL映射表、trim表、TLC block info表、first表和second表写入NAND的block中,通过SLC block info表继续记录FTL映射表、trim表、TLC block info表、first表和second表写入NAND的block中生成的映射关系JM L2P,在其他元数据都保存至NAND的block,最后才将SLC block info表保存至NAND的block中,但此时SLC block info表无法记录自身写入NAND的block中产生的映射关系JM L2P。
[0154] 在一些实施例中,所述方法还包括:在所述固态硬盘下电过程,将所述SLC block info表从所述DDR中保存至所述NAND的block中时,通过所述DDR中的super block记录所述SLC block info表保存至所述NAND的block中产生的映射关系。
[0155] 具体地,由于SLC block info表无法记录自身写入NAND的block中产生的映射关系JM L2P,因此采用非元数据模块DDR中的super block记录SLC block info表保存至NAND的block中产生的映射关系JM L2P,以便在SSD上电后可以通过super block记录的数据信息对SLC block info表中的信息数据进行修正。
[0156] 在一些实施例中,在所述SLC block info表从DDR中保存至所述NAND的block中之后,还包括:将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0157] 具体地,在采用非元数据模块DDR中的super block记录SLC block info表保存至NAND的block中产生的映射关系JM L2P之后,还需要将DDR中的super block记录的数据信息保存至NAND的block中,防止因SSD下电导致DDR中的数据丢失。
[0158] 在一些实施例中,所述将所述DDR中的super block记录的数据信息保存至所述NAND的block中,包括:通过控制管理器将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0159] 具体地,将DDR中的super block记录的数据信息保存至NAND的block中的方式是通过控制管理器(control Manager)实现。
[0160] 在一些实施例中,所述方法还包括:在所述固态硬盘上电过程中,将NAND的block中保存的数据信息和所述SLC block info表恢复至所述DDR中。
[0161] 具体地,在SSD下电过程中通过NAND的block保存了DDR中super block记录的数据信息,和SLC block info表,因此,在SSD上电过程中,将NAND的block中保存的数据信息和SLC block info表恢复至DDR中。
[0162] 在一些实施例中,所述SLC block info表记录有所述NAND中block从free block变更为open block的时间戳,所述查询所述DDR的SLC block info表中的open block对应的第二物理块地址,包括:将所述SLC block info表中最大的时间戳对应的block确定为open block;查询所述open block对应的第二物理块地址。
[0163] 具体地,SLC block info表中的equence number记录了当前SLC从free block中选出作为open block时的时间戳,从1开始顺序加1使用,在整个SSD寿命期间不会发生反转,因此可以根据时间戳的大小确定open block,且SLC block info表中最大的时间戳对应的block确定为open block,因此可以查询该open block对应的第二物理块地址。
[0164] 在一些实施例中,SLC block info表用于记录NAND中block的block type、占用状态以及包含page使用情况的物理块地址信息。
[0165] 在一些实施例中,在所述将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址之后,还包括:获取所述SLC block info表中block对应的block type;基于block对应的block type设置block的管理结构。
[0166] 具体地,在对SLC block info表中的信息进行修正之后,可以从SLC block info表中获取block对应的block type,然后根据block对应的block type设置block的管理结构。
[0167] 为了更好地理解本发明中的实施例,以下通过一示例进行说明。
[0168] 1)下电流程中元数据的刷写顺序
[0169] 元数据由JM统一管理,主要包括FTL映射表,trim表,TLC block info表,first table,second table和SLC block info等,以SLC方式保存。其中,FTL映射表,trim表和TLC block info表被称为外部元数据,JM只负责读取和保存,没有更新需要;first table,second table和SLC block info由JM更新和维护,属于JM模块内部元数据。
[0170] First table是FTL映射表,trim表和TLC block info表等以SLC方式刷写到SLC block中产生的映射关系的集合。以JM LBA(逻辑区块地址)为索引,NAND地址PCA为内容的线性表;
[0171] Second table是first table以SLC方式刷写到SLC block中产生的映射关系的集合。也是以JM_LBA为索引,NAND地址PCA为内容的线性表;
[0172] 在SSD DDR内部分配空间大小时,首先分配first table,之后分配second table,second table与first table紧邻;
[0173] SLC block info表的格式参照图2,示出了本发明实施例中提供的一种SLC block info表的示意图。
[0174] SLC block info表是记录所有SLC对应的SLC block info的集合,对SLC page大小对齐。SLC block info中PCA记录当前SLC block的地址信息,是一个结构体位段的集合,具体参照图3,示出了本发明实施例中提供的一种PCA的示意图。
[0175] Block type记录了当前SLC中存储了哪种类型的元数据,比如FTL映射表类型的SLC block type等;如果SLC是坏块,就是bad block type;如果SLC是空的,就是free block type;Erase cnt记录了当前SLC的擦除次数,这也是JM实现所有SLC磨损均衡的重要指标;sequence number记录了当前SLC从free block中选出作为open block时的时间戳,从1开始顺序加1使用,在整个SSD寿命期间不会发生反转。这个也是JM回收SLC,以及上电依次读取SLC block info表构建SLC block管理的重要参数;
[0176] 由元数据的关联性确定下电流程中元数据刷写顺序如图4,示出了本发明实施例中提供的一种下电流程中元数据的刷写顺序的示意图。
[0177] JM接收到下电请求满足下电条件时,首先刷写FTL映射表,Trim表,TLC block info表,之后刷写first table(第一表),然后再刷写second table(第二表),最后刷写SLC block info表。
[0178] 为了确保JM能够退出下电流程,SLC block info表按照SLC block page大小依次刷写到SLC block中产生的JM L2P全部保存到DDR中的super block区域中。其中super block区域由下电流程中最后一个处理模块CM(控制管理器)保存到NAND中。上电加载固件,恢复元数据之前,由CM再从NAND中恢复到DDR中的super block区域。
[0179] 2)SLC block info恢复以及SLC block管理重建流程
[0180] SSD下电并再次上电后,CM模块首先会从NAND中将super block信息恢复到DDR中,其中就包括了SLC block info对应的JM l2p信息;
[0181] 恢复SLC block info以及重建SLC block管理的流程:JM首先依次读取super block中记录的jm_l2p,然后读SLC block恢复SLC block info到DDR中。等全部jm_l2p读取并恢复SLC block info完成后开始SLC block管理结构的重建流程;对于SLC block info类型,定义全局量powerDown_PCA(第一物理模块地址)来保存最后一个jm_l2p。重建流程中,JM依次读取SLC block info表中记录的每一个SLC block info,根据info中记录的block type选择对应的管理结构。如果是非free block和bad block类型,再根据info中记录的sequence number大小比较来判断当前SLC是加入到该管理结构中的used block list中,还是保留在Open block的位置。等全部SLC block info读取并重建完成,sequence number最大的SLC就停留在了open block的位置。
[0182] 3)修正SLC block info的SLC open block流程
[0183] 从SLC block info类型对应的管理结构中获得SLC open block对应的PCA,记作open_SLC_PCA(第二物理模块地址);将open_SLC_PCA以及powerDown_PCA中的page清0后,执行以下流程:
[0184] 如果open_SLC_PCA与powerDown_PCA相同(参照图5,示出了本发明实施例中提供的一种SLC open block未切换过的示意图),说明上次下电时SLC block info保存没有切换过open block。此时,只需要将未清零过的powerDown_PCA赋值给SLC block info管理结构中的open_SLC_PCA即可,实现open block中page(页)使用信息的修正。
[0185] 如果open_SLC_PCA与powerDown_PCA不相同(如图6,示出了本发明实施例中提供的一种SLC open block已切换过的示意图),说明上次下电保存全部SLC block info时写满了open block并执行了block切换流程,该流程申请了新的free block作为SLC block info的open block,并保存了剩余的SLC block info表。上述流程引起了SLC block info的改变,但JM在保存全部SLC block info时并没有将最新一份SLC block info刷写到NAND中。如果新获得的SLC open block处于已经刷写的SLC block info表中区域,这样,在上电恢复的SLC block info中,powerDown_PCA对应的SLC仍然为free block,这就面临着被其他元数据保存流程申请为open block的风险。此时,需要将未清零的powerDown_PCA赋值给block info管理结构中的open_SLC_PCA,并将对应的SLC block info中block type由free修正为SLC block info类型,将对应的free block管理结构中占用状态修改为占用状态,防止再次被当作free block申请使用;上述流程实现了SLC block info类型open block的修正。
[0186] 上述实施例中,SSD上电修正open block的方法有效解决了下电保存SLC block info流程中不能有效保存刷写该元数据自身到SLC block中引起的再次改变,导致SLC block info保存使用的open block与上电重建的open block不一致的问题,避免了block覆盖写引起的读失败并最终导致SSD无法正常使用的风险,增强了SSD系统运行的稳定性和可靠性。
[0187] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0188] 参照图7,示出了本发明实施例中提供的一种固态硬盘block修正装置的结构框图,包括:
[0189] 地址获取模块701,用于在所述固态硬盘上电后,获取DDR的super block所记录的最后一个映射关系中的第一物理块地址;
[0190] 地址查询模块702,用于查询所述DDR的SLC block info表中的open block对应的第二物理块地址;
[0191] 地址替换模块703,用于将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0192] 在一些实施例中,所述第一物理块地址和所述第二物理块地址均包括其对应的block的page使用信息,所述地址替换模块,包括:
[0193] block确定子模块,用于确定所述第一物理块地址对应的block和所述第二物理块地址对应的block是否相同;
[0194] page使用信息替换子模块,用于当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,将所述第二物理块地址中的page使用信息替换为所述第一物理块地址中的page使用信息。
[0195] 在一些实施例中,当所述第一物理块地址对应的block和所述第二物理块地址对应的block相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时未使用新的free block。
[0196] 在一些实施例中,还包括:
[0197] 地址替换子模块,用于当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,将所述SLC block info表中的open block对应的所述第二物理块地址替换为所述第一物理块地址。
[0198] 在一些实施例中,当所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同时,表征在所述固态硬盘下电过程中,所述SLC block info表从所述DDR保存至NAND的block时使用新的free block。
[0199] 在一些实施例中,还包括:
[0200] 状态修改子模块,用于将所述第二物理块地址对应的block的占用状态从空闲状态修改为占用状态。
[0201] 在一些实施例中,还包括:
[0202] 类型修改子模块,用于将所述第二物理块地址对应的block的block type从free block type修改为SLC block info type。
[0203] 在一些实施例中,所述block确定子模块,包括:
[0204] page清零单元,用于将所述第一物理块地址和所述第二物理块地址的page清零;
[0205] 地址比较单元,用于确定page清零的所述第一物理块地址和page清零的所述第二物理块地址是否一致;
[0206] 第一block确定单元,用于若page清零的所述第一物理块地址和page清零的所述第二物理块地址一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block相同;
[0207] 第二block确定单元,用于若page清零的所述第一物理块地址和page清零的所述第二物理块地址不一致,则确定所述第一物理块地址对应的block和所述第二物理块地址对应的block不相同。
[0208] 在一些实施例中,还包括:
[0209] 数据保存模块,用于在所述固态硬盘下电过程中,将所述DDR中存储的元数据保存至所述NAND的block中,所述元数据至少包括FTL映射表、trim表、TLC block info表、first表、second表和SLC block info表。
[0210] 在一些实施例中,所述数据保存模块,包括:
[0211] 第一数据保存子模块,用于按照所述FTL映射表、所述trim表、所述TLC block info表、所述first表、所述second表和所述SLC block info表排序依次保存至所述NAND的block中。
[0212] 在一些实施例中,还包括:
[0213] 映射关系记录模块,用于在所述固态硬盘下电过程,将所述SLC block info表从所述DDR中保存至所述NAND的block中时,通过所述DDR中的super block记录所述SLC block info表保存至所述NAND的block中产生的映射关系。
[0214] 在一些实施例中,还包括:
[0215] 第二数据保存模块,用于将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0216] 在一些实施例中,所述第二数据保存模块,包括:
[0217] 第二数据保存子模块,用于通过控制管理器将所述DDR中的super block记录的数据信息保存至所述NAND的block中。
[0218] 第二数据保存模块还包括:
[0219] 数据恢复模块,用于在所述固态硬盘上电过程中,将所述NAND的block中保存的数据信息和所述SLC block info表恢复至所述DDR中。
[0220] 在一些实施例中,所述SLC block info表记录有所述NAND中block从free block变更为open block的时间戳,所述地址查询模块,包括:
[0221] open block确定子模块,用于将所述SLC block info表中最大的时间戳对应的block确定为open block;
[0222] 地址查询子模块,用于查询所述open block对应的第二物理块地址。
[0223] 在一些实施例中,所述SLC block info表用于记录所述NAND中block的block type、占用状态以及包含page使用情况的物理块地址信息。
[0224] 在一些实施例中,还包括:
[0225] 类型获取模块,获取所述SLC block info表中block对应的block type;
[0226] 结构设置模块,用于基于block对应的block type设置block的管理结构。
[0227] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0228] 另外,本发明实施例还提供了一种电子设备,包括:处理器,存储器,存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述数据获取方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0229] 本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述数据获取方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read‑Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
[0230] 图8为实现本发明各个实施例的一种电子设备的硬件结构示意图。
[0231] 该电子设备800包括但不限于:射频单元801、网络模块802、音频输出单元803、输入单元804、传感器805、显示单元806、用户输入单元807、接口单元806、存储器808、处理器810、以及电源811等部件。本领域技术人员可以理解,图8中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,电子设备包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。
[0232] 应理解的是,本发明实施例中,射频单元801可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器810处理;另外,将上行的数据发送给基站。通常,射频单元801包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元801还可以通过无线通信系统与网络和其他设备通信。
[0233] 电子设备通过网络模块802为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。
[0234] 音频输出单元803可以将射频单元801或网络模块802接收的或者在存储器809中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元803还可以提供与电子设备800执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元803包括扬声器、蜂鸣器以及受话器等。
[0235] 输入单元804用于接收音频或视频信号。输入单元804可以包括图形处理器(Graphics Processing Unit,GPU)8041和麦克风8042,图形处理器8041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元806上。经图形处理器8041处理后的图像帧可以存储在存储器809(或其它存储介质)中或者经由射频单元801或网络模块802进行发送。麦克风8042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元801发送到移动通信基站的格式输出。
[0236] 电子设备800还包括至少一种传感器805,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板8061的亮度,接近传感器可在电子设备800移动到耳边时,关闭显示面板8061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别电子设备姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器805还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。
[0237] 显示单元806用于显示由用户输入的信息或提供给用户的信息。显示单元806可包括显示面板8061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light‑Emitting Diode, OLED)等形式来配置显示面板8061。
[0238] 用户输入单元807可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元807包括触控面板8071以及其他输入设备8072。触控面板8071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板8071上或在触控面板8071附近的操作)。触控面板8071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器810,接收处理器810发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板8071。除了触控面板8071,用户输入单元807还可以包括其他输入设备8072。具体地,其他输入设备8072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
[0239] 进一步的,触控面板8071可覆盖在显示面板8061上,当触控面板8071检测到在其上或附近的触摸操作后,传送给处理器810以确定触摸事件的类型,随后处理器810根据触摸事件的类型在显示面板8061上提供相应的视觉输出。虽然在图8中,触控面板8071与显示面板8061是作为两个独立的部件来实现电子设备的输入和输出功能,但是在某些实施例中,可以将触控面板8071与显示面板8061集成而实现电子设备的输入和输出功能,具体此处不做限定。
[0240] 接口单元808为外部装置与电子设备800连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元808可以用于接收来自外部装置的输入(例如,信息参数、电力等等)并且将接收到的输入传输到电子设备800内的一个或多个元件或者可以用于在电子设备800和外部装置之间传输数据。
[0241] 存储器809可用于存储软件程序以及各种数据。存储器809可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器809可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0242] 处理器810是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器809内的软件程序和/或模块,以及调用存储在存储器809内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。处理器810可包括一个或多个处理单元;优选的,处理器810可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器810中。
[0243] 电子设备800还可以包括给各个部件供电的电源811(比如电池),优选的,电源811可以通过电源管理系统与处理器810逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
[0244] 另外,电子设备800包括一些未示出的功能模块,在此不再赘述。
[0245] 本发明实施例还提供了一种计算机可读存储介质,如图9所示,所述计算机可读存储介质上存储有计算机程序901,所述计算机程序901被处理器执行时实现上述数据获取方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read‑Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
[0246] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0247] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0248] 上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
[0249] 本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0250] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0251] 在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0252] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0253] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0254] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0255] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。