CN110618794A - 一种SSD固件访问NandFlash的方法和系统 - Google Patents
一种SSD固件访问NandFlash的方法和系统 Download PDFInfo
- Publication number
- CN110618794A CN110618794A CN201910890047.2A CN201910890047A CN110618794A CN 110618794 A CN110618794 A CN 110618794A CN 201910890047 A CN201910890047 A CN 201910890047A CN 110618794 A CN110618794 A CN 110618794A
- Authority
- CN
- China
- Prior art keywords
- module
- nandflash
- state
- accessing
- command
- 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.)
- Granted
Links
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/0614—Improving the reliability of storage systems
- G06F3/0617—Improving the reliability of storage systems in relation to availability
-
- 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/0629—Configuration or reconfiguration of storage systems
- G06F3/0632—Configuration or reconfiguration of storage systems by initialisation or re-initialisation of storage systems
-
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种SSD固件访问NandFlash的方法和系统,初始化多个可并行执行的command state结构体,任一command state结构体与一个异步状态机相匹配;申请任一command state结构体;利用上下文机制存储任一模块在当前流程中的状态;执行完毕当前流程中的状态后,跳出异步状态机;通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。该系统包括初始化模块、申请模块、存储模块、跳转模块和处理模块。通过本申请,能够在确保同一个CPU上的不同模块可以各自操作NandFlash资源而不会产生死锁的情况下,充分利用CPU资源,从而大大提高CPU的利用率和SSD固件访问NandFlash的效率。
Description
技术领域
本申请涉及计算器存储技术领域,特别是涉及一种SSD(Solid State Disk,固态电子存储阵列硬盘)固件访问NandFlash的方法和系统。
背景技术
SSD是计算机存储领域常见的一种存储设备,其采用闪存颗粒进行数据存储。由于SSD内部的SSD固件功能复杂,通常将一个SSD固件根据不同的功能划分为多个模块。由于SSD主控芯片中的CPU数量有限,而SSD固件的功能模块较多,SSD固件如何访问NandFlash,是一个重要问题。
早期SSD固件访问NandFlash的方法是:不对模块进行功能分类,根据每个CPU能够存放的模块的数量,直接将不同功能的模块随机存放在同一个CPU上。然而这种访问方法中,由于CPU为单线程操作,当一个模块在操作NandFlash时,同一个CPU上其他的模块就必须等待,造成CPU的利用率浪费,而且,由于该方法不对模块进行功能分类,当同步功能的模块和异步功能的模块同时存放于同一个CPU时,有时会产生死锁现象,导致模块的工作效率下降。
目前,SSD固件访问NandFlash的方法通常是:SSD固件将同步处理的模块存放在同一个CPU上,且SSD固件采用同步访问的方式访问NandFlash。具体地,在同一个CPU上,SSD固件先向第一个模块发送请求,第一个模块返回应答后,SSD固件处理第一个模块的应答;然后SSD固件向第二个模块发送请求,以此类推直到SSD固件访问完毕当前CPU中存放的所有模块。这种访问方法由于将同步处理的模块存放在同一个CPU上,能够有效避免不同模块共处同一个CPU所导致的死锁现象。
然而,目前SSD固件访问NandFlash的方法,由于是同步访问方式,SSD主控芯片中的每个CPU独立工作,CPU中存放模块的功能不同,SSD固件的访问和数据处理速度不同,就会产生有的CPU出现空闲,有的CPU处理不完,导致CPU的利用率不够高,从而导致SSD固件访问NandFlash的效率不够高。
发明内容
本申请提供了一种SSD固件访问NandFlash的方法和系统,以解决现有技术CPU利用率不够高以及SSD固件访问NandFlash的效率不够高的问题。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种SSD固件访问NandFlash的方法,所述SSD固件中包括多个不同功能的模块,所述方法包括:
初始化多个可并行执行的command state(命令状态,或指令状态)结构体,任一所述command state结构体与一个异步状态机相匹配,所述异步状态机用于表征所述模块在流程中的状态,所述流程为所述模块访问NandFlash的流程,且所述流程的起始时刻为开始申请command state结构体指针,所述流程的终止时刻为释放command state结构体指针;
申请任一所述command state结构体;
利用上下文机制存储任一所述模块在当前流程中的状态;
执行完毕当前流程中的状态后,跳出所述异步状态机;
通过轮询NandFlash返回的IPC(Inter-process communications,进程间通信)反馈信息,按照先后顺序处理异步状态机。
可选地,申请任一所述command state结构体之后,所述方法还包括:
判断是否成功申请任一所述command state结构体;
如果是,任一所述模块开始执行访问NandFlash的流程;
如果否,任一所述模块挂在pengdinglis上处于等待状态。
可选地,任一所述模块开始执行访问NandFlash的流程,包括:
任一所述模块向NandFlash发送IPC请求信息;
将任一所述模块在流程中的状态更新为与所述IPC请求所匹配的状态。
可选地,申请任一所述command state结构体的方法,包括:
申请任一所述command state结构体的结构体指针;
定义一个与当前流程相匹配的tag。
可选地,所述利用上下文机制存储任一所述模块在当前流程中的状态,包括:
任一所述模块执行完毕当前流程中的状态后,将当前流程的上下文存储至所述command state结构体中;
将所述command state结构体的结构体指针和所述tag添加至所述模块发送给NandFlash的IPC请求信息中。
可选地,所述CPU通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机,包括:
轮询NandFlash返回的IPC反馈信息;
根据所述IPC反馈信息,按照先后顺序跳转至相应模块的异步状态机中继续执行相应流程。
可选地,可并行执行的command state结构体的最大数量由CPU中芯片的Dram大小确定。
一种SSD固件访问NandFlash的系统,所述SSD固件中包括多个不同功能的模块,所述系统包括:
初始化模块,用于初始化多个可并行执行的command state结构体,任一所述command state结构体与一个异步状态机相匹配,所述异步状态机用于表征所述模块在流程中的状态,所述流程为所述模块访问NandFlash的流程,且所述流程的起始时刻为开始申请command state结构体指针,所述流程的终止时刻为释放command state结构体指针;
申请模块,用于申请任一所述command state结构体;
存储模块,用于利用上下文机制存储任一所述模块在当前流程中的状态;
跳转模块,用于执行完毕当前流程中的状态后,跳出所述异步状态机;
处理模块,用于通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。
可选地,所述系统中还包括:
判断模块,用于判断是否成功申请任一所述command state结构体;
开启模块,用于当申请成功时,控制任一所述模块开始执行访问NandFlash的流程;
等待模块,用于当没有申请成功时,控制任一所述模块挂在pengdinglis上处于等待状态。
可选地,所述处理模块包括:
轮询单元,用于轮询NandFlash返回的IPC反馈信息;
跳转单元,用于根据所述IPC反馈信息,按照先后顺序跳转至相应模块的异步状态机中继续执行相应流程。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请提供一种SSD固件访问NandFlash的方法,该方法首先初始化多个可并行执行的command state结构体,任一command state结构体与一个异步状态机相匹配,然后申请任一command state结构体,申请成功后利用上下文机制存储任意模块在当前流程中的状态,执行完毕当前流程中的状态后,跳出异步状态机,最后通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。本申请在SSD固件中利用异步状态机的方式来处理各个流程,通过把各流程用异步状态机的方式异步化,将每个模块功能按照异步状态机的流程来执行,执行完毕当前流程中的状态后跳出异步状态机给其他模块使用,在确保同一个CPU上的不同模块可以各自操作NandFlash资源而不会产生死锁的情况下,还能够充分利用CPU资源,从而大大提高CPU的利用率和SSD固件访问NandFlash的效率。
本申请还提供一种SSD固件访问NandFlash的系统,该系统主要包括:初始化模块、申请模块、存储模块、跳转模块和处理模块五个部分。本实施例中的初始化模块采用异步状态机处理各个流程,通过设置异步状态机来表征不同模块各个流程中的状态,通过存储模块为每个流程建立上下文机制来存储当前流程的状态,且通过跳转模块及时跳出异步状态机,最后利用处理模块,通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机,这种系统结构设计,根据轮询结果按照先后顺序处理异步状态机,能够避免一直等待一个流程的处理结果,有利于节省CPU资源,大大提高CPU的利用率,从而提高SSD固件访问NandFlash的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种SSD固件访问NandFlash的方法的流程示意图;
图2为本申请实施例所提供的一种SSD固件访问NandFlash的系统的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
为了更好地理解本申请,下面结合附图来详细解释本申请的实施方式。
实施例一
参见图1,图1为本申请实施例所提供的一种SSD固件访问NandFlash的方法的流程示意图。由图1可知,本实施例中SSD固件访问NandFlash的方法主要包括如下过程:
S1:初始化多个可并行执行的command state结构体,其中,任一command state结构体与一个异步状态机相匹配。
SSD固件是SSD内部的控制器程序,SSD固件中包括多个不同功能的模块,例如:control manager、admin manager以及data manager等模块,SSD中主控芯片的通信机制为IPC,内部的模块之间的通信,以及,内部模块与NandFlash之间的通信都通过IPC来实现。从软件层面来看,SSD内部所有的模块都是一个node,包括一些硬件单元,如DMA,从软件层面的角度也作为一个node,每个node之间的通信都通过IPC来实现。本实施例中的异步状态机用于表征模块在流程中的状态,流程为模块访问NandFlash的流程。任意一个模块与一个流程相匹配,且流程的起始时刻为开始申请command state结构体指针,流程的终止时刻为释放command state结构体指针。也就是说,一个流程从开始申请异步状态机开始,到释放异步状态机结束。
步骤S1中可以初始化的可并行执行的command state结构体的数量,也就是command state结构体的成员的数量,该数量可以根据用户的实际并行访问需求来设定,最大数量由CPU中芯片的Dram大小确定。根据常规CPU芯片中Dram的大小,通常可以初始化包含8个成员的command state结构体。每个command state结构体与一个异步状态机相匹配,不同功能的command state结构体会有不同的异步状态机。当一个功能开始执行时,首先申请一个command state结构体,把该功能的异步状态机挂在其匹配的command state结构体上,当前功能执行结束后释放command state结构体及其相匹配的异步状态机。
对多个command state结构体初始化完毕后,执行步骤S2:申请任一commandstate结构体。
具体地,步骤S2包括如下过程:
S21:申请任一command state结构体的结构体指针。
S22:定义一个与当前流程相匹配的tag。
由以上步骤S21和S22可知,建立多个command state结构体之后,执行一个流程时,先申请一个command state结构体指针,并定义一个与当前流程相匹配的tag,以便于后续步骤中将结构体指针和tag相关信息存放至所申请的command state结构体中。
进一步地,本实施例中申请任一command state结构体之后,还包括步骤:
S3:判断是否成功申请任一command state结构体。
如果申请成功,则执行步骤S4:任一模块开始执行访问NandFlash的流程。
具体地,步骤S4包括如下过程:
S41:任一模块向NandFlash发送IPC请求信息。
S42:将任一模块在流程中的状态更新为与IPC请求所匹配的状态。
例如:模块A执行写flash操作,根据步骤S41,通过IPC发送写操作命令给到NandFlash,然后根据步骤S42,把模块A当前状态置为wait_for_flash_write_cpl状态即可。
否则,执行步骤S5:任一模块挂在pengdinglis上处于等待状态,直到有其他模块释放当前command state结构体为止。
由于任一command state结构体与一个异步状态机相匹配,异步状态机存放于与其匹配的command state结构体中,释放command state结构体,也就释放了与该commandstate结构体相匹配的异步状态机。
以8个成员的command state结构体为例,本实施例中8个command state结构体是共用的,一个新的流程开始后,需要先申请这8个command state结构体中的一个,由以上步骤S3-S5可知,如果8个command state结构体都被占用,即显示申请失败,此时申请的模块挂在pengdinglis上处于等待状态,等待其他模块释放command state结构体指针后,该等待模块才能申请到一个command state结构体,也就是说,步骤S1中初始化的可并行执行的command state结构体的数量为8时,步骤S5中最多就可支持8个流程同时执行。
继续参见图1可知,申请成功任一command state结构体之后,执行步骤S6:利用上下文机制存储任一模块在当前流程中的状态。
具体地,步骤S6包括如下过程:
S61:任一模块执行完毕当前流程中的状态后,将当前流程的上下文存储至command state结构体中。
在计算机领域,相对于进程而言,上下文即为进程执行时的环境,也就是各种变量和数据,如:所有的寄存器变量、进程打开的文件、内存信息等。也可以将上下文理解为环境的一个快照,是一个用来保存状态的对象。通常,在一个程序中大多数函数都不是独立运行的,而是需要同其他函数的一部分进行交互,且需要其他外部环境变量的支持,而上下文即用于给外部环境的变量赋值,使函数能够正常运行。
S62:将command state结构体的结构体指针和tag添加至模块发送给NandFlash的IPC请求信息中。
通过将command state结构体的结构体指针和tag添加至IPC请求信息中,能够为模块再次进入相应流程提供依据,有利于提高模块中流程处理的准确性。
S7:执行完毕当前流程中的状态后,跳出异步状态机。
本实施例中采用异步状态机的方式来处理各流程,执行完毕当前流程中的状态后,及时跳出当前流程,跳出异步状态机,从而让出CPU空间执行其他功能,能够大大提高CPU的利用率。
S8:通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。
本实施例NandFlash返回的IPC反馈信息中包括:command state结构体的结构体指针和tag。具体地,步骤S8包括如下过程:
S81:轮询NandFlash返回的IPC反馈信息。
轮询NandFlash返回的IPC反馈信息,能够及时获取各模块的执行情况,即:及时获取各模块是否执行完毕当前的操作,如果执行完毕即可执行步骤S82,跳转至该模块的异步状态机中继续执行后续的流程,有利于充分利用CPU资源,提高CPU资源的利用率,且有利于提高SSD固件访问NandFlash的效率。
S82:根据IPC反馈信息,按照先后顺序跳转至相应模块的异步状态机中继续执行相应流程。
根据步骤S81中的轮询结果,对获取到的IPC反馈信息按照时间先后排序,根据先后顺序分别处理不同模块相关的异步状态机,使得每个模块按照异步状态机的流程来执行相关操作,能够大大提高SSD固件访问NandFlash的效率。
综上所述,根据以上步骤S21和S22可知,执行一个流程时,已经申请与该流程相匹配的一个command state结构体指针,并定义了一个与当前流程相匹配的tag。通过步骤S61又将当前的上下文存储至与该流程相匹配的command state结构体中,然后通过步骤S62,把该command state结构体的结构体指针和tag存放至发送给flash的IPC请求信息中。然后根据步骤S7跳出当前的异步状态机。根据步骤S8,当flash返回IPC反馈信息时,IPC反馈信息中包括该command state结构体的结构体指针和tag,根据tag可以知道模块对匹配的流程,根据结构体指针可以找到上次状态的上下文,从而确保根据IPC反馈信息能够跳转至正确的模块,继续执行相应的流程。
下面以8个成员的command state结构体为例,举例说明SSD固件访问NandFlash的方法在实际应用中的步骤:
1)初始化一个包含8个成员的command state结构体。
2)当模块1开始执行访问时,首先申请一个command state结构体,如果申请成功,则模块1开始执行访问NandFlash的流程。假设模块1执行的操作为写flash操作,通过IPC发送写操作命令到NandFlash,然后把当前状态置为wait_for_flash_write_cpl,执行完毕写操作和状态设置后,跳出异步状态机,让出CPU给其他功能。
3)模块2开始如模块1一样处理,首先申请一个command state结构体,执行模块2的流程。假设模块2执行的操作为擦flash操作,通过IPC发送擦操作命令到NandFlash,然后将当前状态置为wait_for_flash_earse_cpl,执行完毕后跳出状态机。
4)CPU轮询NandFlash返回的IPC反馈信息,如果是写操作完成的信息,则跳转到模块1的异步状态机中,继续执行模块1接下来的操作;如果是擦操作完成的信息,则跳转到模块2的状态机中,继续执行模块2接下来的操作。
5)直到模块1或模块2的流程完全执行完毕,才能释放相应的command state结构体供其他模块使用。
6)步骤1)中申请的command state结构体的成员个数,决定该CPU可以并行执行的功能数量。并行执行的command state结构体的个数当大于CPU可以并行执行的功能数量时,待执行的模块会挂在pengdinglist上,直到步骤5)中有模块释放command state结构体指针,待执行的模块才能开始执行相应操作。
实施例二
在图1所示实施例的基础之上参见图2,图2为本申请实施例所提供的一种SSD固件访问NandFlash的系统的结构示意图。由图2可知,本实施例中的系统主要包括:初始化模块、申请模块、存储模块、跳转模块和处理模块五个部分。其中,初始化模块用于初始化多个可并行执行的command state结构体,任一command state结构体与一个异步状态机相匹配。异步状态机用于表征模块在流程中的状态,流程为模块访问NandFlash的流程,且流程的起始时刻为开始申请command state结构体指针,流程的终止时刻为释放command state结构体指针。申请模块用于申请任一command state结构体。存储模块用于利用上下文机制存储任一模块在当前流程中的状态。跳转模块用于执行完毕当前流程中的状态后,跳出异步状态机。处理模块用于通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。
进一步地,处理模块包括:轮询单元和跳转单元。轮询单元,用于轮询NandFlash返回的IPC反馈信息。跳转单元,用于根据IPC反馈信息,按照先后顺序跳转至相应模块的异步状态机中继续执行相应流程。
存储模块包括:存储单元和添加单元。存储单元,用于任一模块执行完毕当前流程中的状态后,将当前流程的上下文存储至command state结构体中。添加单元,用于将command state结构体的结构体指针和tag添加至模块发送给NandFlash的IPC请求信息中。
进一步地,本实施例的系统中还包括:判断模块、开启模块和等待模块。其中,判断模块用于判断是否成功申请任一command state结构体;开启模块用于当申请成功时,控制该任一模块开始执行访问NandFlash的流程;等待模块用于当没有申请成功时,控制该任一模块挂在pengdinglis上处于等待状态。
开启模块又包括:信息发送单元和更新单元,其中,信息发送单元用于控制任一模块向NandFlash发送IPC请求信息;更新单元,用于将任一模块在流程中的状态更新为与IPC请求所匹配的状态。
本实施例中SSD固件访问NandFlash的系统的工作原理和工作方法,在图1所示的实施例一中已经详细阐述,在此不再赘述。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种SSD固件访问NandFlash的方法,其特征在于,所述SSD固件中包括多个不同功能的模块,所述方法包括:
初始化多个可并行执行的command state结构体,任一所述command state结构体与一个异步状态机相匹配,所述异步状态机用于表征所述模块在流程中的状态,所述流程为所述模块访问NandFlash的流程,且所述流程的起始时刻为开始申请command state结构体指针,所述流程的终止时刻为释放command state结构体指针;
申请任一所述command state结构体;
利用上下文机制存储任一所述模块在当前流程中的状态;
执行完毕当前流程中的状态后,跳出所述异步状态机;
通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。
2.根据权利要求1所述的一种SSD固件访问NandFlash的方法,其特征在于,申请任一所述command state结构体之后,所述方法还包括:
判断是否成功申请任一所述command state结构体;
如果是,任一所述模块开始执行访问NandFlash的流程;
如果否,任一所述模块挂在pengdinglis上处于等待状态。
3.根据权利要求2所述的一种SSD固件访问NandFlash的方法,其特征在于,任一所述模块开始执行访问NandFlash的流程,包括:
任一所述模块向NandFlash发送IPC请求信息;
将任一所述模块在流程中的状态更新为与所述IPC请求所匹配的状态。
4.根据权利要求1所述的一种SSD固件访问NandFlash的方法,其特征在于,申请任一所述command state结构体的方法,包括:
申请任一所述command state结构体的结构体指针;
定义一个与当前流程相匹配的tag。
5.根据权利要求4所述的一种SSD固件访问NandFlash的方法,其特征在于,所述利用上下文机制存储任一所述模块在当前流程中的状态,包括:
任一所述模块执行完毕当前流程中的状态后,将当前流程的上下文存储至所述command state结构体中;
将所述command state结构体的结构体指针和所述tag添加至所述模块发送给NandFlash的IPC请求信息中。
6.根据权利要求1所述的一种SSD固件访问NandFlash的方法,其特征在于,所述CPU通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机,包括:
轮询NandFlash返回的IPC反馈信息;
根据所述IPC反馈信息,按照先后顺序跳转至相应模块的异步状态机中继续执行相应流程。
7.根据权利要求1-6中任一所述的一种SSD固件访问NandFlash的方法,其特征在于,可并行执行的command state结构体的最大数量由CPU中芯片的Dram大小确定。
8.一种SSD固件访问NandFlash的系统,其特征在于,所述SSD固件中包括多个不同功能的模块,所述系统包括:
初始化模块,用于初始化多个可并行执行的command state结构体,任一所述commandstate结构体与一个异步状态机相匹配,所述异步状态机用于表征所述模块在流程中的状态,所述流程为所述模块访问NandFlash的流程,且所述流程的起始时刻为开始申请command state结构体指针,所述流程的终止时刻为释放command state结构体指针;
申请模块,用于申请任一所述command state结构体;
存储模块,用于利用上下文机制存储任一所述模块在当前流程中的状态;
跳转模块,用于执行完毕当前流程中的状态后,跳出所述异步状态机;
处理模块,用于通过轮询NandFlash返回的IPC反馈信息,按照先后顺序处理异步状态机。
9.根据权利要求8所述的一种SSD固件访问NandFlash的系统,其特征在于,所述系统中还包括:
判断模块,用于判断是否成功申请任一所述command state结构体;
开启模块,用于当申请成功时,控制任一所述模块开始执行访问NandFlash的流程;
等待模块,用于当没有申请成功时,控制任一所述模块挂在pengdinglis上处于等待状态。
10.根据权利要求8或9中所述的一种SSD固件访问NandFlash的系统,其特征在于,所述处理模块包括:
轮询单元,用于轮询NandFlash返回的IPC反馈信息;
跳转单元,用于根据所述IPC反馈信息,按照先后顺序跳转至相应模块的异步状态机中继续执行相应流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910890047.2A CN110618794B (zh) | 2019-09-20 | 2019-09-20 | 一种SSD固件访问NandFlash的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910890047.2A CN110618794B (zh) | 2019-09-20 | 2019-09-20 | 一种SSD固件访问NandFlash的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110618794A true CN110618794A (zh) | 2019-12-27 |
CN110618794B CN110618794B (zh) | 2022-07-19 |
Family
ID=68923697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910890047.2A Active CN110618794B (zh) | 2019-09-20 | 2019-09-20 | 一种SSD固件访问NandFlash的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110618794B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112748883A (zh) * | 2021-01-15 | 2021-05-04 | 苏州浪潮智能科技有限公司 | 一种io请求流水线处理设备、方法、系统及存储介质 |
US12019909B2 (en) | 2021-01-15 | 2024-06-25 | Inspur Suzhou Intelligent Technology Co., Ltd. | IO request pipeline processing device, method and system, and storage medium |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138470A (zh) * | 2015-08-31 | 2015-12-09 | 浪潮集团有限公司 | 一种多通道nand flash控制器 |
CN105677245A (zh) * | 2015-12-31 | 2016-06-15 | 记忆科技(深圳)有限公司 | 一种基于wl多线程提高ssd使用寿命的方法 |
CN107168899A (zh) * | 2017-04-19 | 2017-09-15 | 山东超越数控电子有限公司 | 一种基于FPGA的NandFlash控制器 |
-
2019
- 2019-09-20 CN CN201910890047.2A patent/CN110618794B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138470A (zh) * | 2015-08-31 | 2015-12-09 | 浪潮集团有限公司 | 一种多通道nand flash控制器 |
CN105677245A (zh) * | 2015-12-31 | 2016-06-15 | 记忆科技(深圳)有限公司 | 一种基于wl多线程提高ssd使用寿命的方法 |
CN107168899A (zh) * | 2017-04-19 | 2017-09-15 | 山东超越数控电子有限公司 | 一种基于FPGA的NandFlash控制器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112748883A (zh) * | 2021-01-15 | 2021-05-04 | 苏州浪潮智能科技有限公司 | 一种io请求流水线处理设备、方法、系统及存储介质 |
WO2022151766A1 (zh) * | 2021-01-15 | 2022-07-21 | 苏州浪潮智能科技有限公司 | 一种io请求流水线处理设备、方法、系统及存储介质 |
CN112748883B (zh) * | 2021-01-15 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种io请求流水线处理设备、方法、系统及存储介质 |
US12019909B2 (en) | 2021-01-15 | 2024-06-25 | Inspur Suzhou Intelligent Technology Co., Ltd. | IO request pipeline processing device, method and system, and storage medium |
Also Published As
Publication number | Publication date |
---|---|
CN110618794B (zh) | 2022-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6089349B2 (ja) | マルチコアアーキテクチャでのリソース分離を支援するための方法およびシステム | |
US10706496B2 (en) | Function callback mechanism between a Central Processing Unit (CPU) and an auxiliary processor | |
JP2016508647A5 (zh) | ||
CN115658277B (zh) | 一种任务调度方法、装置及电子设备和存储介质 | |
US11366689B2 (en) | Hardware for supporting OS driven observation and anticipation based on more granular, variable sized observation units | |
WO2019028682A1 (zh) | 一种多系统共享内存的管理方法及装置 | |
US7574696B2 (en) | Multiprocessor application interface requiring no utilization of a multiprocessor operating system | |
CN111666210A (zh) | 一种芯片验证方法及装置 | |
CN115421787A (zh) | 指令执行方法、装置、设备、系统、程序产品及介质 | |
CN110618794B (zh) | 一种SSD固件访问NandFlash的方法和系统 | |
CN114490123A (zh) | 一种任务处理方法、装置及电子设备和存储介质 | |
US8732441B2 (en) | Multiprocessing system | |
CN116010093A (zh) | 数据处理方法、装置、计算机设备和可读存储介质 | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
CN112579245B (zh) | 异构cpu的计算核虚拟化方法 | |
CN113076138B (zh) | 一种NVMe命令处理方法、设备及介质 | |
CN117692322B (zh) | 网卡配置方法、装置、电子设备及存储介质 | |
WO2024108907A1 (zh) | 一种数据处理方法、装置、ai芯片、电子设备及存储介质 | |
CN113392038B (zh) | 基于Linux内核的系统休眠内存管理方法及装置 | |
CN112650450B (zh) | 固态硬盘缓存管理方法、固态硬盘缓存控制器及固态硬盘 | |
KR20010038482A (ko) | 운영체제의 커널 스택 동적 할당 방법 | |
US20190042308A1 (en) | Technologies for providing efficient scheduling of functions | |
CN110928582A (zh) | 信息处理设备和配置信息处理设备的目标装置的方法 | |
CN117667827A (zh) | 任务处理方法及异构计算系统 | |
CN115328560A (zh) | 芯片启动方法、系统、计算机设备、存储介质及芯片 |
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 |