一种构建存储器命令序列的方法及装置与流程

文档序号:17473489发布日期:2019-04-20 05:58阅读:169来源:国知局
一种构建存储器命令序列的方法及装置与流程

本发明涉及存储器技术领域,具体而言,涉及一种构建存储器命令序列的方法及装置、存储介质及电子终端。



背景技术:

目前cpu读取tail、head,start、end信息,计算出空闲buffer大小,评估是否能够装下当前的命令序列,若可以,tail赋值给临时指针,然后组织第一个子命令,完成之后放置到队列里面,判断下一个位置是否越界,没有的话,移动临时指针到下一位置,否则移到start的位置,继续组织第二个子命令,如此往复,直到整个序列写入完毕。

频繁的判断是否达到命令队列结尾,还有为了组织子命令的运算,会打断cpu的pipeline行为,对于cpu来讲,各个子命令write是孤立行为。命令队列相对于cpu而言,是外部结构,两者之间随着使用的总线不同,cpu访问的速度不一,相对于cpu内部的memory访问效率低。当命令序列的子命令越多,访问命令队列的次数增多,问题越突显。



技术实现要素:

有鉴于此,本发明的目的在于提供一种构建存储器命令序列的方法及装置、存储介质及电子终端。

为了实现上述目的,本发明实施例采用的技术方案如下:

第一方面,本发明实施例提供了一种构建存储器命令序列的方法,包括:

当所述预估长度小于或等于循环队列中剩余存储空间的长度时,依据所述用户请求在预读缓存中构建第一命令序列,其中,所述第一命令序列包括至少两个子命令,所述预估长度通过用户请求的命令序列获得,所述预估长度大于或等于所述用户请求的命令序列的长度,所述第一命令序列与所述用户请求的命令序列匹配;

将所述第一命令序列存储至所述循环队列中。

第二方面,本发明实施例还提供了一种构建存储器命令序列的装置,包括:

命令序列处理模块,用于当所述预估长度小于或等于循环队列中剩余存储空间的长度时,依据所述用户请求在预读缓存中构建第一命令序列,其中,所述第一命令序列包括至少两个子命令,所述预估长度通过用户请求的命令序列获得,所述预估长度大于或等于所述用户请求的命令序列的长度,所述第一命令序列与所述用户请求的命令序列匹配;

存储模块,用于将所述第一命令序列存储至所述循环队列中。

第三方面,本发明实施例还提供了一种存储介质,所述存储介质存储有计算机指令,所述计算机指令在被读取并运行是执行上述第一方面所述的构建存储器命令序列的方法。

第四方面,本发明实施例还提供了一种电子终端,所述电子终端包括存储器、cpu,所述存储器内安装有构建存储器命令序列的装置,所述构建存储器命令序列的装置包括一个或多个由所述cpu执行的软件功能模块,所述构建存储器命令序列的装置包括:

命令序列处理模块,用于当所述预估长度小于或等于循环队列中剩余存储空间的长度时,依据所述用户请求在预读缓存中构建第一命令序列,其中,所述第一命令序列包括至少两个子命令,所述预估长度通过用户请求获得,所述预估长度大于或等于对应所述用户请求的命令序列的长度,所述第一命令序列与对应所述用户请求的命令序列匹配;

存储模块,用于将所述第一命令序列存储至所述循环队列中

本发明实施例提供的一种构建存储器命令序列的方法及装置、存储介质及电子终端的有益效果:当预估长度小于或等于循环队列中剩余存储空间的长度时,依据用户请求在预读缓存中构建第一命令序列,将第一命令序列存储至循环队列中,在命令序列含有多个子命令时,避免了每在循环队列中写入一个子命令就要判断一次是否到达结束地址的情况,降低了cpu的负载,从而提升cpu的运行效率。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的电子终端的结构框图;

图2示出了本发明实施例提供的构建存储器命令序列的方法的流程示意图;

图3示出了本发明实施例提供的s10的子步骤的流程示意图;

图4示出了本发明实施例提供的循环队列的示意图;

图5示出了本发明实施例提供的s20的子步骤的流程示意图;

图6示出了本发明实施例提供的第一存储段的示意图;

图7示出了本发明实施例提供的第二存储段的示意图;

图8示出了本发明实施例提供的第三存储段的示意图;

图9示出了本发明实施例提供的构建存储器命令序列的装置的功能单元示意图。

图标:100-电子终端;101-cpu;102-存储器;103-外设接口;104-内侧;105-fifo;201-命令序列处理模块;202-存储模块。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本发明实施例提供的构建存储器命令序列的方法用于在循环队列中快速构建存储器命令序列。

存储器可以但不限于为sd存储卡(securedigitalmemorycard,sdcard)或闪存(nand-flash存储器,nor-flash存储器),本实施例中优选闪存。

循环队列通常可以通过先进先出存储器(firstinputfirstoutput,fifo)实现。循环队列包括起始地址、结束地址、头标签和尾标签,当在循环队列中构建完成一个命令序列,则尾标签移动至下一个可用位置;当从循环队列中提取出一个命令序列时,头标签移动至下一个序列的开头的位置,当头标签或尾标签到了结束地址时,它将转回到起始位置来处理。

目前,在循环队列中构建命令的方式可以依据用户请求,直接在循环队列中构建命令序列。而一个命令序列可以有一个或多个子命令组成,每当在循环队列中写入一个子命令时都需要判断是否到达结束地址,cpu的工作量大,并且会打断cpu的导管及物动词用导管输送的行为(pipeline),降低了cpu的运行效率。

为了解决上述技术问题,参见图1,本发明的实施例提供了一种电子终端100,包括:cpu101、存储器102、外设接口103、内存104以及fifo105等。这些组件通过一条或多条通讯总线/信号线相互通讯。

构建存储器命令序列的装置包括至少一个可以软件或固件(firmware)的形式存储于存储器102中或固化在cpu101对应的rom中的软件功能模块。在一种可能实现的方式中,构建存储器命令序列的装置还可以由一部分固化在cpu101对应的rom中的软件功能模块和一部分存储于存储器102中的软件模块共同组成。

存储器102可以但不限于为sd存储卡(securedigitalmemorycard,sdcard)或闪存(nand-flash存储器,nor-flash存储器),本实施例中优选闪存。

存储器102可用于存储软件程序以及模块,如本发明实施例中的构建存储器命令序列的方法所对应的程序指令/模块,cpu101通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,如本发明实施例提供的构建存储器命令序列的方法。

fifo105设置在cpu101和存储器102之间,用于缓存并传输cpu101和存储器102之间交互的数据。

cpu101以及其他可能的组件对存储器102的访问也可在存储控制器的控制下进行。并且存储控制器设置在存储器102和fifo105之间。在一种可以能实现方式中,该存储控制器被设置于存储器102内。可选地,为了实现相应的控制功能,该存储控制器还可以具有寄存机组。

外设接口103将各种输入/输出装置耦合至cpu101以及存储器102。在一些实施例中,外设接口103、cpu101以及存储控制器可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

内存104是cpu101能够直接寻址的存储空间,具有存取速率快的特点。

下面给出一种应用于上述电子终端100的构建存储器命令序列的方法的可能的实现方式,如图2所示,该流程包括如下步骤:

s10:当预估长度小于或等于循环队列中剩余存储空间的长度时,依据用户请求在预读缓存中构建第一命令序列。

具体地,为了避免预读缓存中第一命令序列的长度大于循环队列中剩余存储空间的长度时导致的溢出错误,在s10当预估长度小于或等于循环队列中剩余存储空间的长度时,依据用户请求在预读缓存中构建第一命令序列。

预估长度通过用户请求的命令序列获得,预估长度大于或等于用户请求的命令序列的长度,第一命令序列与用户请求的命令序列匹配。例如,第一命令序列的长度与用户请求的命令序列的长度相同,则第一命令序列的数据长度也小于或等于预估长度。所以当预估长度小于或等于循环队列中剩余存储空间的长度时,依据用户请求构建的第一命令序列的长度不会超过循环队列剩余的长度。

可选地,第一命令序列包括至少两个子命令,第一命令序列是在预读缓存中构建,并且预读缓存是cpu101的内存的一部分。预读缓存空间足够大,所以在构建包含多个子命令的第一命令序列时,不需要判断是否到达结尾,从而不会打断cpu101的pipeline,从而提升了cpu101的运行效率。

s20:将第一命令序列存储至循环队列中。

具体地,将该第一命令序列存储至循环队列中,在一种可能的实现方式中将第一命令序列整体存储至循环队列,或者将第一命令序列分成两段,分别存储至循环队列中,具体见下文s201至s208的内容。

本发明实施例提供的构建存储器命令序列的方法中,当预估长度小于或等于循环队列中剩余存储空间的长度时,依据用户请求在预读缓存中构建第一命令序列,将第一命令序列存储至循环队列中,在命令序列含有多个子命令时,避免了每在循环队列中写入一个子命令即要判断一次是否到达结束地址的情况,降低了cpu101的负载,从而提升cpu101的运行效率。

在图2的基础上,对于s10中如何确定“预估长度小于或等于循环队列中剩余存储空间的长度”,下面给出一种可能的实现方式,具体的,参见图3,图2中的s10具体包括:

s101:依据用户请求的命令序列获得预估长度。

具体地,预估对应该用户请求的在预读缓存中生成的命令序列的所需的数据长度,该数据长度即为预估长度。该预估长度大于或等于依据用户请求的在预读缓存中生成的对应的命令序列的数据长度。

s102:依据起始地址、结束地址、第一地址以及第二地址计算出循环队列的剩余存储空间的长度。

具体地,起始地址为循环队列的起始存储位置的地址;结束地址为循环队列的结束存储位置的地址,第一地址用于表征循环队列的头标签当前对应的存储位置的地址;第二地址用于表征循环队列的尾标签当前对应的存储位置。命令序列应该存储在起始地址和结束地址之间。

如图4所示,起始存储位置为0、结束存储位置为99,头标签和尾标签都为0,此时第一地址和第二地址相等,循环队列为空。当在循环队列中构建完成一个命令序列,则尾标签移动至下一个可用位置,此时第二地址随着尾标签的移动而改变;当从循环队列中提取出一个命令序列时,头标签移动至下一个序列的开头的位置,此时第一地址随着头标签的移动而改变。当第一地址与第二地址相等时,说明此时循环队列为空队列。若构建的命令序列时到了结束地址,则掉头从起始地址从新写入。当然,正在构建的命令序列不能覆盖未执行或者未提取出的命令序列,所以需要先检测循环队列的剩余存储空间,再决定是否写入。

s103:判断预估长度是否大于循环队列中剩余存储空间的长度,若是,则重复去获取该循环队列的第一地址和第二地址,执行s102,若否,则执行s104。

具体地,该预估长度大于或等于依据用户请求的命令序列的数据长度。预估长度小于或等于循环队列中剩余存储空间的长度时,该循环队列剩余的存储空间足够存储依据用户请求的在预读缓存中生成的对应的第一命令序列,则执行s104。

s104:依据用户请求在预读缓存中构建第一命令序列。

具体地,为了获取第一命令序列的位置信息和长度,一种可能的实现方式中,依据用户请求在预读缓存中构建第一命令序列时,记录该第一命令序列的起始位置和结束位置,从而获取该第一命令序列的位置信息和长度。

在图3的基础上,对于s20中如何“将第一命令序列存储至循环队列中”,下面给出一种可能的实现方式,具体的,参见图5,图3中的s20具体包括:

s201:判断第二地址是否相对于第一地址更靠近结束地址,若是,则执行s202;若否,则执行s208。

具体地,第二地址相对于第一地址更靠近结束地址,即尾标签相对头标签更靠近结束地址,如图6所示。

s202:获取第一存储段。

具体地,第一存储段为第二地址到结束地址位置之间的数据段,并且第一存储段具有第一存储长度。如图6所示的灰色部分,即尾标签到结束存储位置之间的数据段。

s203:判断第一存储长度是否小于第一命令序列的数据长度,若是,则执行s204;若否,则执行s207。

具体地,即判断第一存储段是否足够构建第一命令序列。当第一存储长度小于第一命令序列的数据长度时,则第一存储段不够构建第一命令序列,执行s204;当第一存储长度大于或等于第一命令序列的数据长度,则第一存储段够构建第一命令序列,执行s207。

s204:将第一命令序列拆分为第一数据段和第二数据段。

具体地,将第一命令序列拆分为第一数据段和第二数据段,其中,第一数据段的长度与第一存储长度相等,且第一数据段与第二数据段连续。可以理解地,在第一命令序列中从循环队列头标签的位置复制长度为第一存储长度的部分为第一数据段。从第一数据段结束处到第一命令序列结束处为第二数据段,所以第一数据段与第二数据段连续。

s205:将第一数据段存储至第一存储段。

具体地,可以是将第一数据段中的内容搬移到第一存储段,也可以是直接在第一存储段中构建第一数据段中的内容,并且不用判断是否达到结束地址。

s206:将第二数据段存储至第二存储段。

具体地,第二存储段为起始地址到第一地址之间的数据段。如图7所示的灰色部分,即起始存储位置到头标签之间的数据段,不包括头标签所在的数据段。

将第二数据段存储至第二存储段与s205同理。

s207:将第一命令序列整体存储至第一存储段。

具体地,当第一存储长度大于或等于第一命令序列的数据长度时,则第一存储段足够构建第一命令序列。所以直接将第一命令序列整体存储至第一存储段,存储过程与s205同理。

s208:将第一命令序列整体存储至第三存储段。

具体地,当第一地址相对于第二地址更靠近结束地址时,第三存储段为第二地址到第一地址之间的数据段。

一种可能的实现方式中,如图8所示的灰色部分,此时,循环队列的剩余存储空间为尾标签到头标签之间的数据段,不包括头标签所在的数据段。

将第一命令序列整体存储至第三存储段,存储过程与s205同理。

请参阅图9,图9为本发明实施例提供的一种构建存储器命令序列的装置,可选的,该构建存储器命令序列的装置可以采用电子终端100的实现方式。需要说明的是,本实施例所提供的构建存储器命令序列的装置,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及之处,可参考上述的实施例中相应内容。

构建存储器命令序列的装置包括命令序列处理模块201和存储模块202。命令序列处理模块201和存储模块202可以使用图1中的cpu101实现。

命令序列处理模块201用于当预估长度小于或等于循环队列中剩余存储空间的长度时,依据用户请求在预读缓存中构建第一命令序列,其中,第一命令序列包括至少两个子命令,预估长度通过用户请求的命令序列获得,预估长度大于或等于用户请求的命令序列的长度,第一命令序列与用户请求的命令序列匹配。具体地,命令序列处理模块201可以执行s10。

存储模块202,用于将第一命令序列存储至循环队列中。

具体地,存储模块202可以执行s20。

存储模块202,用于当第二地址相对于第一地址更靠近结束地址时,获取第一存储段,其中,第一存储段为第二地址到结束地址位置之间的数据段,第一存储段具有第一存储长度。具体地,存储模块202可以执行s201和s202。

存储模块202,用于当第一存储长度大于或等于第一命令序列的数据长度时,将第一命令序列整体存储至第一存储段。具体地,存储模块202可以执行s203和s207。

存储模块202,用于当第一存储长度小于第一命令序列的数据长度时,将第一命令序列拆分为第一数据段和第二数据段,其中,第一数据段的长度与第一存储长度相等,且第一数据段与第二数据段连续。具体地,存储模块202可以执行s203和s204。

存储模块202用于将第一数据段存储至第一存储段。具体地,存储模块202还可以执行s205。

存储模块202还用于将第二数据段存储至第二存储段,其中,第二存储段为起始地址到第一地址之间的数据段。具体地,存储模块202可以执行s206。

存储模块202还用于当第一地址相对于第二地址更靠近结束地址时,将第一命令序列整体存储至第三存储段,其中,第三存储段为第二地址到第一地址之间的数据段。具体地,存储模块202还可以执行s208。

本发明实施例还提供了一种存储介质,该存储介质存储有计算机指令,该计算机指令在被读取并运行时执行上述实施例所述的构建存储器命令序列的方法。该存储介质可以包括内存、闪存、寄存器或者其结合等。

下面提供一种电子终端100,该电子终端100如图1所示,可以实现上述图9对应的构建存储器命令序列的装置;具体的,该电子终端100包括:cpu101、存储器102、外设接口103、内存104、fifo105以及总线。cpu101可以是基带芯片。

除了图中该电子终端100可能具有的器件外,该电子终端100还可以包含:电池、各类传感器、触摸屏、射频电路等等。可选地,该电子终端100可以为:ipda、智能手机、平板、智能穿戴等产品。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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