非易失存储设备和访问非易失存储设备的方法_2

文档序号:9844048阅读:来源:国知局
通过内存接口与主机连接,所述非易失存储设备包括接口模块、控制模块、读缓存、写缓存和存储芯片,所述非易失存储设备用于执行所述第五方面的任一种可能的实现方式的方法,以及所述第七方面的任一种可能的实现方式的方法。
[0056]这样,由于并没有采用现有技术中返回错误数据的方式构造中断,而是通过向主机发送中断信号构造中断,因此,能够同时适用于读和写两种情况。
[0057]第十一方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第六方面或第六方面的任一种可能的实现方式,以及第八方面或第八方面的任一种可能的实现方式中的方法的指令。
【附图说明】
[0058]为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0059]图1是本发明实施例的一种应用场景的不意图;
[0060]图2是现有技术的闪存条的结构图;
[0061 ]图3是本发明一个实施例的非易失存储设备的结构图;
[0062]图4是本发明一个实施例的读取非易失存储设备的方法的流程交互图;
[0063]图5是本发明一个实施例的写入非易失存储设备的方法的流程交互图;
[0064]图6是本发明一个实施例的主机的结构图;
[0065]图7是本发明一个实施例的主机的结构图。
【具体实施方式】
[0066]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
[0067]应理解,本发明实施例中的描述的非易失存储设备的存储芯片可以包括闪存芯片,也可以包括其他存储装置,例如相变存储器(Phase Change Random Access Memory,简称 “PCRAM”)、阻变存储器(Resistive Random Access Memory,简称 “ReRAM”)等。
[0068]图1示出了本发明实施例的一种应用场景的示意性架构图。如图1所示,使用固态硬盘的计算机系统可以包括:非易失存储设备10、主机20、内存接口 30、内存条40、桥片50、基本输入输出系统(Basic Input Output System,简称“B1S”)60、网卡70。该计算机系统中,主机20通过内存接口 30可以访问内存条40或非易失存储设备10,该内存接口 30可以是双数据速率2(Double Data Rate 2,简称“DDR2”)、双数据速率3(Double Data Rate 3,简称“DDR3”)或者双数据速率4(Double Data Rate 4,简称“DDR4”)等标准接口。桥片50连接B1S 60,主机20和桥片50可以提供PCIe接口,用于连接PCIe固态硬盘,桥片50可以提供串口硬盘(Serial Advanced Technology Attachment,简称“SATA”)接口,用于连接SATA固态硬盘。
[0069]图2是现有技术的闪存条80的结构图。图2中示出了内存接口30和闪存条80,闪存条80包括闪存控制器81、读缓存82和闪存芯片83。闪存控制器81通过内存接口 30与主机20连接,并且与闪存芯片83相连,闪存控制器81还连接了一个读缓存82,该读缓存82可以由双倍速率同步动态随机存储器(Double Data Rate,简称“DDR”)实现,它的速度与内存接口相当,可以在内存接口 30要求的时间内送出主机20需要读取的数据。
[0070]当主机20对闪存条80发起读访问时,如果主机20请求读取的数据已经保存在读缓存82中,则闪存控制器81从读缓存82中取出该数据返回给该主机20,读缓存82的读取速度很快,可以和内存接口30的速度匹配,故一定会按时送出,随后当前读访问周期结束,该读访问周期包括:从主机20发送读请求信号开始,到接收完毕闪存条80发送的数据,所述内存接口 30恢复空闲状态为止。
[0071]如果主机请求读取的数据不在读缓存82中,那么闪存控制器81需要从闪存芯片83中读取该数据。由于闪存芯片83的速度较慢,无法按时送出主机20所需的数据,因此闪存控制器81先送出一个预先构造的不可纠正的含有错误检查和纠正(Error Correcting Code,简称“ECC”)错误的数据,同时启动对闪存芯片83的访问,得到该数据后将其保存到读缓存82中。
[0072]主机20的内存控制器在收到闪存控制器81发送的该数据后,会对这个数据进行检查,如果发现存在不可纠正的ECC错误,则向主机20的处理器内核发出中断命令。由于内存控制器接收的数据是一个预先构造的含有ECC错误的数据,因此,主机20的内存控制器收到该错误数据后,最终会向处理器内核发出中断命令,使处理器执行中断处理程序。
[0073]主机20在该中断处理程序里面进行一段固定时间的延时,目的是等待该数据从闪存芯片83中读出来。
[0074]当主机20退出该中断处理程序之后,再次向闪存条80发起读操作,这次该数据已经储存在读缓存82中,于是闪存芯片83可以向主机20送出正确的数据。
[0075]这种方法虽然可以在内存接口和闪存条之间进行数据传输时避免主机获取错误数据,但是存在以下问题:
[0076]首先,内存数据的ECC错误属于严重故障,例如,可以由Linux内核的异常处理程序来处理,想要区分这种错误是真实的还是人为构造的,就需要修改Linux内核,所以可能存在不兼容标准版本Linux的风险。
[0077]第二,当主机20发起对闪存条80的读操作时,闪存芯片83可能正在执行写操作或者擦除操作,则此时不能执行该读操作。前者需要数百微秒,后者需要几个毫秒,这些在闪存芯片的器件资料中都是有明确规定的。现有技术中只是选择一段固定时间做延时,没有考虑这种差异,所以会增加不必要的延时。现有技术中会根据最差的情况确定延时时间,例如,选择最耗时的一个操作(如闪存芯片83正在处于擦除状态),但实际上,可能并不需要进行这么久的延时,如果闪存芯片83此时正处在空闲状态,则主机20则无需等待这么久,只需要等待一个很短的时间即可。
[0078]第三,这种方式只适用于读操作,无法用于写操作。例如,当该主机20往闪存条80中写入大量数据时,需要先写入缓存中,如果缓存此时已满,则不能继续接收该数据,闪存条80就会将主机20发来的数据丢弃,但是主机20并不知道该数据被丢弃,并且无法使用预先构造ECC错误的数据来触发延时,因此这种方式只能在读操作时使用。
[0079]为此,本发明实施例提出一种非易失存储设备,当主机通过内存接口向非易失存储设备发起读操作,但非易失存储设备不能及时返回数据时,该非易失存储设备通过向该主机发送中断信号,避免主机获取错误的数据。
[0080]目前常见的处理器都集成了内存控制器,例如x86处理器,可以直接连接非易失存储设备。为了提高性能和内存容量,通常支持多个内存通道,每个内存通道又可以支持多个内存条。例如某款x86处理器支持4个内存通道,每个通道最多支持3个内存条,这样总共可以支持12个内存条。如果每个内存条的容量是16GB,那么总容量是192GB。
[0081]内存条的接口经过多年的发展和更新换代,目前主流的是DDR3接口,速率可达1600MHz,数据线宽度64位,总带宽为12.8GB/s,而DDR4接口也正在普及中。以DDR3接口的内存条为例,DDR3接口可以包括以下信号:
[0082]101,地址信号A[0:15],用来提供内存芯片地址,例如行地址和列地址。
[0083 ] 12,BA [ 2:0 ],bank地址,用来选择内存芯片内部的逻辑bank。
[0084]103,CKO,CK0#,差分时钟,提供内存芯片访问的时序同步。
[0085]104,CKE[0:1],时钟使能信号。
[0086]105,0DT[0:1 ],信号端接使能信号。
[0087 ] 106,Par_In,地址信号、写信号WE#、行选通信号RAS#、列选通信号CAS#的校验位。
[0088]107,RAS#、CAS#、WE#,分别是行选通信号、列选通信号和写信号,用来组合成各种操作命令字。
[0089]108,RESET#,复位信号。
[0090]109,CS[3:0]#,片选信号。
[0091]110,SA[2: O]:用来配置内存条上的电可擦可编程只读存储器(ElectricallyErasable Programmable Read Only Memory,简称 “EEPROM”)和温度传感器的集成电路间总线(Inter Integrated Circuit,简称“Ι2(Γ )地址。
[0092 ] 111,SCL,SDA,12C总线信号,连接内存条上的EEPROM和温度传感器。
[0093]112,CB[7:0],数据校验信号。
[0094]113,DQ[63:0],数据信号。
[0095]114,DQS[8:0],DQS[8:0]#,数据选通信号。
[0096]115,DM[8:0],数据屏蔽信号。
[0097]116,ALERT#管脚发出的信号,低电平表示地址和命令信号校验出错,S卩A[0:15]、RAS#,CAS#、WE#、Par_I n信号组合的校验出错。
[0098]117,EVENT#管脚发出的信号,低电平表示内存条的温度超出了门限。
[0099]118,电源信号和地信号,电源信号包括内存芯片的1.5V核心电压,0.75V的参考电压、0.75V的端接电压和3.3V的EEPR0M、温度传感器工作电压。
[0100]本发明的非易失存储设备借用了上述的内存条的外形和接口信号,可以直接插到现有的内存条插座上,计算机系统的硬件不需要任何修改,不需要额外增加开销。
[0101 ]对于DDR3内存条插槽来说,一共有240个信号触点,但是非易失存储设备只需要实现部分必备的信号,例如地址信号A[0:15]和BA[2:0],数据信号DQ[63:0],控制信号CS[3:0]#、RAS#、CAS#和WE#,以及电源信号等,而有的信号是可选的,例如校验信号CB[7:0]。
[0102]图3是本发明实施例的非易失存储设备的结构图。该非易失存储设备可以采用类似于内存条的双列直插式存储模块(Dual Inline Memory Modules,简称“DIMM”)的外形,可以插入现有的内存条插槽中。该非易失存储设备10通过内存接口 30安装在计算机主机20的内存条插座中,该非易失存储设备10的所有存储容量映射到主机20的内存空间,主机20可以像访问内存条40—样访问该非易失存储设备10,所有操作可以按照内存总线接口的协议进行规范。
[0103]图3中示出了内存接口30和非易失存储设备10。非易失存储设备10包括接口模块11、控制模块12、读缓存13、存储芯片14以及写缓存18。
[0104]应理解,该非易失存储设备中可以包括一个存储芯片例如存储芯片14,也可以包括多个存储芯片,例如存储芯片15、存储芯片16、存储芯片17等等,本发明对非易失存储设备中的存储芯片的数量不作限定。
[0105]读缓存13和写缓存18可以是同一个存储芯片中划分的两个区域,也可以是两个独立的存储芯片,读写速度与内存总线匹配,可以采用DDR2、DDR3 SDRAM等存储器。在读操作时,接口模块11可以先将数据保存在读缓存13里面,下次主机再次发出读请求时,接口模块11确认目标地址对应的数据已经保存在读缓存13中,就可以不必访问存储芯片14,而是直接从读缓存13里面取出数据发给主机,从而提高了读操作的速度。在写操作时,主机下发的数据可以先保存在写缓存18中,当前访问周期结束,主机20可以继续执行其他指令,然后接口模块11再将数据从写缓存18中取出,通过控制模块12写入存储芯片14,这样可以提高写操作的速度。
[0106]控制模块12从接口模块11获取主机下发的读写请求,将目标地址转换为存储芯片14的物理地址,启动读写操作,还可以将目标地址对应的存储芯片14的工作状态(例如空闲状态、写状态、擦除状态)发送给接口模块11,以供主机20读取。此外,控制模块12还具有磨损平衡、坏块管理等功能,用来提高存储芯片14的寿命。
[0107]存储芯片14用于保存数据,为了提高容量和访问速度,一般采用多通道并行的阵列方式将多个存储芯片连接到控制模块上,可以同时进行读写操作。可理解,本发明实施例中所述的访问非易失存储芯片既包括读取非易失存储设备,也包括写入非易失存储设备。图4是本发明实施例的读取该非易失存储设备10的方法的流程交互图。如图4所示,主机20读取非易失存储设备10的流程具体包括:
[0108]步骤401,主机20向接口模块11发送第一读请求信号。
[0109]具体地,当主机20向非易失存储设备10发起读请求操作时,该非易失存储设备10的接口模块11通过内存接口接收该主机20发送的第一读请求信号,第一读请求信号包括存储芯片14的地址。接口模块11管理着一份地址表,其中包括读缓存13中的已有数据所对应的目标地址,如果有数据从存储芯片14读取出来发送给主机10,可以在读缓存13中做一个备份,同时刷新这个地址表。
[0110]可选地,主机20在向接口模块11发送第一读请求信号之前,设置标识变量为O。
[0111]具体地,主机20发起读访问时,从内存接口时序上看都是成功完成的,但是它并不知道读出的数据是否正确,所以可以通过设置一个标志变量判断是否需要重复执行上次的读访问。主机20在发出第一读请求信号之前,可以设置该标志变量为O。
[0112]步骤402,接口模块11判断该地址对应的存储芯片14中的数据是否已保存在非易失存储设备10的读缓存13中。
[0113]如果该数据已经在读缓存13中,则接口模块11直接从读缓存13读取该数据并通过内存接口 30返回给主机。如果该数据不在读缓存13中,则执行步骤403和步骤404。
[0114]步骤403,接口模块11向控制模块12发送指示消息。
[0115]具体地,当主机20所请求的数据不在读缓存13中时,接口模块11向控制模块12发送指示消息,该指示消息指示控制模块12从存储芯片14中读取该数据。
[0116]可选地,接口模块11指示控制模块12从存储芯片14中读取该数据并将该数据存储在读缓存13中。这样,主机20可以从该读缓存13中读取所需的该数据。
[0117]步骤404,接口模块11向主机20发送中断信号。
[0118]具体地,当主机20所请求的数据不在读缓存13中时,接口模块11在当前读操作周期完成之前向主机20发送中断信号,主机20根据该中断信号的指示在当前读操作周期结束之后立即进入中断处理程序,并在该中断处理程序中确定延时时间,从而根据该延时时间进行延时。由于主机20在完成当前的读操作周期之前接收到了接口模块11发送的中断信号,所以主机20在完成该读周期之后不会接着执行后面的指令,而是立即响应中断信号进入中断处理程序。
[0119]这样,接口模块11通过发送中断信号使得主机20进入中断处理程序等待正确数据,从而避免了主机20获取错误数据之后执行后续的操作。
[0120]步骤405,接口模块11向主机20发送预定数据。
[0121]其中,该预定数据用于使主机20结束当前读操作周期,也就是说,上述读操作周期包括从主机20发送第一读请求信号开始到主机20接收到接口模块11发送的该预
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1