CN115658277A - 一种任务调度方法、装置及电子设备和存储介质 - Google Patents

一种任务调度方法、装置及电子设备和存储介质 Download PDF

Info

Publication number
CN115658277A
CN115658277A CN202211554104.8A CN202211554104A CN115658277A CN 115658277 A CN115658277 A CN 115658277A CN 202211554104 A CN202211554104 A CN 202211554104A CN 115658277 A CN115658277 A CN 115658277A
Authority
CN
China
Prior art keywords
task
target
switching
function
cpu core
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
Application number
CN202211554104.8A
Other languages
English (en)
Other versions
CN115658277B (zh
Inventor
秦文政
钟戟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202211554104.8A priority Critical patent/CN115658277B/zh
Publication of CN115658277A publication Critical patent/CN115658277A/zh
Application granted granted Critical
Publication of CN115658277B publication Critical patent/CN115658277B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请公开了一种任务调度方法、装置及电子设备和存储介质,涉及计算机技术领域,该方法包括:创建目标任务,并为目标任务创建对应的目标进程;为目标任务选择空闲的目标CPU核心,并将目标进程部署于目标CPU核心中;利用目标CPU核心调用目标进程中的进程函数以执行目标任务;在执行目标任务的过程中,调用目标任务的任务切换函数;任务切换函数的参数包括在任务切换时的依赖对象和依赖对象对应的参数;在所有等待切换的任务中选择切换任务,利用目标CPU核心调用切换任务对应的进程函数以将目标CPU核心切换至切换任务执行。本申请在操作系统中为用户提供了一个任务切换函数,提高了任务切换效率,满足了SSD高并发的需求。

Description

一种任务调度方法、装置及电子设备和存储介质
技术领域
本申请涉及计算机技术领域,更具体地说,涉及一种任务调度方法、装置及一种电子设备和一种计算机可读存储介质。
背景技术
固态硬盘(SSD,Solid State Disk)具有高性能,低功耗的优势,是一种用来存储用户数据的设备。固态硬盘由控制器,存储介质NAND(NAND flash memory,计算机闪存设备)等模块组成。控制器中运行Firmware(固件)进行资源的控制,对用户数据存储调度,维护NAND设备等操作。
固态硬盘提供了极高的并发度,如一秒钟提供1.6百万次读写。这些读写并不是顺序完成的,不是完成一个之后再处理下一个。如果是顺序执行每一个任务,就无法达到这么高的性能了。在固态硬盘内部,这些命令是并发执行的,即一个命令还未完成,另外一个命令也开始执行了。一般来说,在当前的技术下,可以高达几千到几万个读写操作同时在执行。
每一个命令都面临着命令报文解析,查找映射表,操作NAND,错误和异常处理,数据传输,返回完成状态等步骤。命令不同,操作的步骤也不一定完全一样。由于有几千到几万个命令同时在操作,SSD内部并没有几千到几万个运算单元,而是将运算资源通过调度进行使用的。
一般来说,如果需要同时操作多个任务,而计算资源是有限的,假如说有n个CPU,若干内存。那么需要这n个CPU进行任务调度,来服务于多个任务,也就是说,让这个CPU一会儿做任务1,一会儿做任务2。即分时复用这个CPU,或者说这一组资源,当这多个任务中的某一个任务达到完成状态,则释放出资源,又有可能增加服务于一个新的任务。
在目前的已有技术下,是没有固态硬盘的专用操作系统的。操作系统至少要提供任务调度,资源管理,系统调用的功能。一般的操作系统不是为了如此高的并发度设计的,如果用操作系统内的每个进程服务于一个任务,那么就会有成千上万个进程。操作系统虽然名义上可以有这么多进程,但是在这种场景下进程的切换调度效率非常低,无法满足SSD的需求。因此在SSD Firmware开发中,需要开发者自己考虑任务如何调度,如何切换的细节。因此带来了如下的问题:一种firmware的构架仅适用于一种硬件体系结构,由于firmware的开发过程已经充分考虑了硬件的特性,将这些特性编程进入了firmware内部结构,如果换了一种硬件结构,则这些特性会成为新的版本firmware的障碍,需要重新设计。另外,开发效率低,如果firmware的开发者不仅需要考虑firmware的功能逻辑,还要开发一部分操作系统的功能,如任务调度,资源管理等,那么对firmware的开发者的个人能力,以及工作量都带来负面影响。因此在没有操作系统的方案下,开发一个包含一部分操作系统功能的firmware,不是一个很好的方案。
发明内容
本申请的目的在于提供一种任务调度方法、装置及一种电子设备和一种计算机可读存储介质,提高了任务切换效率,满足了SSD高并发的需求。
为实现上述目的,本申请提供了一种任务调度方法,应用于固态硬盘的操作系统,所述方法包括:
创建目标任务,并为所述目标任务创建对应的目标进程;
为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;
利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;
在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;
在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
其中,为所述目标任务创建对应的目标进程,包括:
确定所述目标任务的任务参数;其中,所述任务参数至少包括所述目标任务对应的函数和所述函数对应的参数;
基于所述目标任务的任务参数为所述目标任务创建对应的目标进程,并为所述目标进程分配资源;其中,所述资源包括任务标识、栈空间、寄存器地址。
其中,为所述目标进程分配资源,包括:
为所述目标进程分配预设大小的栈空间。
其中,为所述目标进程分配资源,包括:
将所有栈空间划分为多个不同大小的子空间;
将大于所述目标进程需要的栈空间的大小的最小的子空间作为目标子空间分配至所述目标进程。
其中,所述利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行之后,还包括:
检测所述目标任务对应的依赖对象是否完成,若完成,则将所述目标任务作为等待切换的任务。
其中,所述在所有等待切换的任务中选择切换任务,包括:
根据所有所述等待切换的任务的属性确定所有所述等待切换的任务的第一优先级;
选择所述第一优先级最高的等待切换的任务作为切换任务。
其中,所述属性按照所述第一优先级由高至低包括显示的任务切换、主机读取、主机写入、主机管理命令、后台读取、后台写入、后台管理命令、元数据管理、算法、统计信息中任一项或任几项的组合。
其中,所述选择所述第一优先级最高的等待切换的任务作为切换任务,包括:
若存在多个所述第一优先级最高的等待切换的任务,则根据所有所述等待切换的任务在任务切换时的依赖对象确定所有所述等待切换的任务的第二优先级;
在多个所述第一优先级最高的等待切换的任务中选择所述第二优先级最高的等待切换的任务作为切换任务。
其中,所述依赖对象按照所述第二优先级由高至低包括完成消息、锁资源释放、NAND读写命令、DMA流向主机端的命令、DMA流向设备端的命令、锁资源获取命令、定时器、算法模块。
其中,还包括:
若目标任务的定时器结束时间超过预设值,则将所述目标任务的第二优先级提高预设级别。
其中,所述在所有等待切换的任务中选择切换任务,包括:
确定所有所述等待切换的任务完成对应的依赖条件的时间;
选择所述时间最长的等待切换的任务作为切换任务。
其中,还包括:
当所述目标任务需要与其他任务通信时,判断所述其他任务对应的进程是否部署于所述目标CPU核心中;
若是,则采用共享内存变量的方式实现所述目标任务需要与所述其他任务的通信。
其中,所述判断所述其他任务对应的进程是否部署于所述目标CPU核心中,包括:
若所述其他任务对应的进程部署于其他CPU核心中,则采用资源锁互斥的方式实现所述目标任务需要与所述其他任务的通信。
其中,还包括:
当所述目标任务完成时,删除所述目标任务的上下文信息,并释放所述目标任务的栈空间。
其中,所述进程函数包括资源封装函数,所述资源封装函数包括选取输入/输出命令函数、数据传输函数、资源加锁函数、NAND操作函数、向主机发送完成消息函数中任一项或任几项的组合。
其中,所述进程函数包括系统调用函数,所述系统调用函数包括申请内存函数、释放内存函数、加密算法函数、压缩算法函数、RAID操作函数、内存搜索函数、内存排序函数、管理接口输入输出功能函数中任一项或任几项的组合。
其中,还包括:
初始化操作系统,分配堆栈,初始化硬件接口;
控制值守进程启动;其中,所述值守进程用于接收对所述固态硬盘的注入命令;
控制管理进程启动;其中,所述管理进程用于接收对所述固态硬盘的管理命令;
接收任务创建命令。
为实现上述目的,本申请提供了一种任务调度装置,应用于固态硬盘的操作系统,所述装置包括:
创建模块,用于创建目标任务,并为所述目标任务创建对应的目标进程;
选择模块,用于为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;
执行模块,用于利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;
调用模块,用于在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;
切换模块,用于在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述任务调度方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任务调度方法的步骤。
通过以上方案可知,本申请提供的一种任务调度方法,包括:创建目标任务,并为所述目标任务创建对应的目标进程;为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
本申请在操作系统中为用户提供了一个任务切换函数,相比于现有技术中采用中断的方式进行任务切换,本申请提高了任务切换效率,满足了SSD高并发的需求。本申请还公开了一种任务调度装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为根据一示例性实施例示出的一种任务调度方法的流程图;
图2为根据一示例性实施例示出的另一种任务调度方法的流程图;
图3为根据一示例性实施例示出的一种任务调度装置的结构图;
图4为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外,在本申请实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例公开了一种任务调度方法,提高了任务切换效率,满足了SSD高并发的需求。
参见图1,根据一示例性实施例示出的一种任务调度方法的流程图,如图1所示,包括:
S101:创建目标任务,并为所述目标任务创建对应的目标进程;
本实施例为SSD提供专业的操作系统SSD_OS,操作系统暴露给应用程序创建任务的接口CreateTask(),开发者对每个读写请求会分配一个任务。对开发者来说,这个任务里面的工作全都是同步调用,不需开发者自己将任务做成回调函数等待切换,切换过程是SSD_OS实现的,开发者可以不感知这个过程。除了读写请求之外,其他的工作也可以封装在一个任务中,如定时器任务、系统管理任务等。
进一步的,为目标任务创建对应的目标进程。作为一种可行的实施方式,为所述目标任务创建对应的目标进程,包括:确定所述目标任务的任务参数;其中,所述任务参数至少包括所述目标任务对应的函数和所述函数对应的参数;基于所述目标任务的任务参数为所述目标任务创建对应的目标进程,并为所述目标进程分配资源;其中,所述资源包括任务标识、栈空间、寄存器地址。
创建任务时,包含与任务相关的参数,其中至少包括:任务对应的函数实例(也即进程函数)、与这个函数相关的参数。这个任务的任务参数,如创建读取相关的任务,则将读取对应的函数(由firmware开发者开发)传递给CreateTask()过程。用户可以创建一个读取任务,同时将收到的Host读取指令报文作为参数传给这个任务。
在调用创建任务时,任务可以立即开始执行,也可以等待稍后调用一个任务启动函数触发这个任务开始执行。当SSD_OS的内部资源不足时,创建任务也可以失败,则firmware应用程序应当过一段时间重新尝试申请任务。
当应用程序调用CreateTask时,SSD_OS内部给这个任务分配运行时资源。包括如下要素(称为任务上下文,即context):任务ID(简称TaskID)、栈空间(Stack)。
操作系统底层用于识别任务的标识符。对于一个SSD_OS的版本来说,这个TaskID可以是有限数量的。比如在V1.0版本的SSD_OS,可以仅支持1000个ID,V2.0可以支持2000个ID。不同版本的SSD_OS是和硬件绑定的,如果某个SSD控制器厂商的硬件资源较多,则可以有更多的Task ID。TaskID是有最大数量限制的,在SSD_OS初始化时根据版本号确定所有的ID数量,已分配出去的ID在回收之前,不可以再次分配。如果没有taskID可以分配,则创建任务失败。
对于栈空间,用于保存这个任务的相关信息的内存空间。比如一个读取任务,用户需要一个临时内存空间保存上位机的命令报文(比如NVMe命令包),以及用户在进行算法或者流程操作时需要的本地变量(比如进行for循环,用于循环次数的变量)。SSD_OS初始化时分配一段内存空间内作为栈空间(在SSD_OS的设计中不关心是DDR还是SRAM,开发者在部署SSD_OS的时候自行根据需求选择)。
作为一种可行的实施方式,为所述目标进程分配预设大小的栈空间。在内存较大的硬件环境中,也可以直接给每个任务分配足够大的默认空间值,这样避免内存拷贝,同时不再让用户显式的检查是否越界,减少系统调用次数。举例说明,每个任务都给分配固定大小的栈,如128K Bytes,那么如果SSD_OS再部署的时候,要支持2000个并发任务,则需要256M Bytes的栈。
作为另一种可行的实施方式,将所有栈空间划分为多个不同大小的子空间;将大于所述目标进程需要的栈空间的大小的最小的子空间作为目标子空间分配至所述目标进程。当分配任务时,SSD_OS给这个任务分配一个默认长度的栈空间(默认长度由部署SSD_OS的时候设定)。在SSD_OS中提供一个栈空间检查函数,项目开发者显式的调用这个函数对可用栈空间进行检查,检查时,开发者传入需要的栈大小size_to_use。当剩余栈空间小于size_to_use时,SSD_OS将重新分配一个更大的内存空间,并且将用户当前的栈内容搬运到新的空间,同时修改程序的栈指针,以此保障开发者的程序不会越界到栈空间之外。举例说明,栈空间分为8K、16K、32K、64K、128K、…多种大小,每种大小是预先设定的数量,比如8K的有2000个,16K的有1000个,128K的有300个。当创建任务时,默认分配给最小的一种栈空间,从栈空间的空闲列表中选择一个分配出来。当firmware再调用栈空间检查函数时,发现当前已经接近栈空间的顶端,则重新分配一个较大的栈空间,将数据拷贝到这个空间,修改栈指针之后重新运行。
当启动任务时,可以在CreateTask的时候启动,也可以另外调用函数进行启动,SSD_OS分配一个栈空间,将参数复制到栈空间,配置好栈寄存器地址,配置好环境对应的其它寄存器(与SSD_OS运行的硬件环境相关),然后调用进程函数开始执行,因此启动任务是一个同步过程。
S102:为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;
在具体实施中,如果系统有多个CPU核心,SSD_OS将根据任务调度策略选择一个空闲核心提交任务。如果所有的核心都在忙,则SSD_OS会等待某个进程函数释放CPU为止。因此这个启动任务的过程是阻塞式的,只有成功了才会继续往后执行。
S103:利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;
S104:在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;
S105:在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
在本实施例中,SSD_OS并没有涉及底层的一个任务调度器,并没有通过划分时间片来进行多任务调度,而是通过一个创新算法来实现的任务切换。
为了描述方便,举一个例子,firmware的结构可以类似于如下形式(伪代码1):
void main()
{
while(true)
if 有新的请求 then:
createTask(request_handler(),request_param)
end if
end while
}
不同于常规的操作系统,SSD内部计算资源有限,因此没有用中断的方式切换任务。一般操作系统会在事件发生时(比如高优先级任务请求、时间片中断、IO请求等),进入任务切换的判断过程,从当前的任务退出,选择新的任务进行切入。在本实施例中,考虑到SSD并不需要这样灵活的操作系统,开发者会自己评估每个时间段的耗时,软件可以显式的进行任务切换,因此选择另外一种切换的方案。
当进程函数开始执行之后,开始处理IO命令,管理命令,后台命令等业务逻辑。由于固态硬盘系统存在多个硬件加速单元,进程函数进行到某个步骤之后,将会请求硬件加速单元进行工作。这个时候进程函数是不必要等待硬件加速单元工作完成的,可以处理另外一个任务。因此在SSD_OS基础上的应用程序,要求用户主动调用任务切换函数(taskSwitch函数)进行任务切换。
taskSwitch包含两组参数:依赖对象、以及这个对象的相关信息。举例来说,一个任务可能在处理到某个节点时,希望sleep10秒钟,因此taskSwitch切换到其他进程,希望让定时器在10秒钟之后产生信号,以便切换回来。这个参数可以写作(Timer,10second)。或者举例来说,一个任务可能配置了DMA任务,让DMA模块搬运10M Bytes数据(从A地址搬运到B地址),配置完DMA相关的参数之后(这个DMA参数假设称为DMA参数X),这个任务就等待DMA搬运完成,此时可以让出CPU计算其他的Task,这样taskSwitch的参数可以写作(DMA,(DMA参数X,DMA搬运完成))。
当进入任务切换函数后,SSD_OS将根据所有等待切换的进程(Pending Task)的现场状况,选择一个函数进入。需要注意的是,下一个CreateTask函数也是Pending Task之一,因为下一个createTask函数是尚未运行到的代码,所以调度算法会在评估已开始执行的任务都不需要被调用之后,才会选择下一个createTask的进程。
taskSwitch对开发者来说是透明的,即开发者不需要关心任务是怎么切换的,这是SSD_OS处理的工作。
taskSwitch算法:createTask函数会在SSD_OS内部记录每个Task的Context,当taskSwitch之后,需要做的事情就是在这些Context中选择一个Task进行恢复调用。taskSwitch的发起者,调用taskSwith的本意就是将CPU资源让渡出来,给其他进程使用,所以在这个进程的Context中,会记录下来状态为IDLE,并且记录这个task被唤醒的条件(即前述的createTask的两组参数),所以在进入taskSwitch之后,需要查看所有候选任务的条件是否满足。如果任何一个候选任务都不具备唤醒条件,则程序继续向后执行,可以执行后面的语句。如果仅有一个候选任务可以执行,则执行此任务。如果有多个任务均处于可唤醒的状态,则根据算法进行选择。
作为一种可行的实施方式,所述在所有等待切换的任务中选择切换任务,包括:根据所有所述等待切换的任务的属性确定所有所述等待切换的任务的第一优先级;选择所述第一优先级最高的等待切换的任务作为切换任务。
在具体实施中,根据任务优先级进行调度,根据任务的属性对每个任务设定一个第一优先级。优选的,所述属性按照所述第一优先级由高至低包括显示的任务切换、主机读取、主机写入、主机管理命令、后台读取、后台写入、后台管理命令、元数据管理、算法、统计信息中任一项或任几项的组合。
显示的任务切换:当一个任务主动切换到另外一个任务,这种优先级最高,优先级为1。主机读取:主机发来的读取命令,优先级为2。主机写入:主机发来的写入命令,优先级为3。主机管理命令:主机发送的管理命令,优先级为4。后台读取:firmware内部进行管理产生的读取,如进行Garbage Collection的读取命令,优先级为5。后台写入:Firmware内部进行管理产生的写入命令,优先级为6。后台管理命令:firmware内部进行任务调度等产生的计算过程,例如进行Block定时刷新,优先级为7。元数据管理:元数据的保存操作,优先级为8。算法:firmware内部进行的算法操作,例如数据结构排序优化等,优先级为9。统计信息:进行内部统计的操作,优先级为0。
在同一优先级内有多个任务时,则根据依赖对象进行排序。也即,所述选择所述第一优先级最高的等待切换的任务作为切换任务,包括:若存在多个所述第一优先级最高的等待切换的任务,则根据所有所述等待切换的任务在任务切换时的依赖对象确定所有所述等待切换的任务的第二优先级;在多个所述第一优先级最高的等待切换的任务中选择所述第二优先级最高的等待切换的任务作为切换任务。
优选的,所述依赖对象按照所述第二优先级由高至低包括完成消息、锁资源释放、NAND读写命令、DMA流向主机端的命令、DMA流向设备端的命令、锁资源获取命令、定时器、算法模块。
完成消息:给主机发送完成消息的硬件模块,只要调用此模块,主机端即认为命令完成,因此这个模块的优先级最高,优先级为1。锁资源释放:对互斥量资源的释放过程,释放之后其他任务才能再次获取资源,因此优先级较高,优先级为2。NAND读写命令:与NAND、Flash端通道的命令,优先级为3。DMA流向主机端的命令:数据发往主机,有助于命令完成,优先级为4。DMA流向设备端的命令:常规操作,优先级为5。锁资源获取命令:获取锁资源,优先级为6。定时器:定时器如果到时间了,则唤醒,定时器的优先级较高,因为firmware不会在关键路径上使用定时器作为精确控制的手段,优先级为7。算法模块:加密、压缩等算法,是不常用的,会放在后台执行,因此不在关键路径上,优先级为8。其他模块,优先级为9。
作为一种优选实施方式,还包括:若目标任务的定时器结束时间超过预设值,则将所述目标任务的第二优先级提高预设级别。需要注意的是定时器模块,如果已经到预设时间,则应该唤醒。但是由于定时器的优先级较低,则如果出现多个任务同时需要唤醒,它的优先级较低,因此对定时器的权重进行调整,如果调度到某个任务,发现这个定时器已经超时,则适度提升其优先级。具体的方法是每超时10%的时间,优先级提高一档。
作为另一种可行的实施方式,,所述在所有等待切换的任务中选择切换任务,包括:确定所有所述等待切换的任务完成对应的依赖条件的时间;选择所述时间最长的等待切换的任务作为切换任务。
在具体实施中,采用专用硬件或者一个独立的CPU,监控每个任务依赖条件的完成时间,一旦完成,立即记下来这个项目的完成时间。当需要进行调度时,更新每个任务的超时时间,选择超时时间最长的任务进行切换。此方案较为简单,但计算量较大,主要在于如果系统内没有专用硬件记录依赖项的结束时间,需要一个独立的CPU专门做这件事情。因此SSD_OS更适合于有任务调度硬件的控制器。
综上所述,如果当前没有需要切入的任务,则继续执行后面的代码,一般来说是createTask或者Idle。
进一步的,所述利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行之后,还包括:检测所述目标任务对应的依赖对象是否完成,若完成,则将所述目标任务作为等待切换的任务。
在具体实施中,当从一个任务切换出去时,需要记录其运行时的信息,主要是CPU的程序指针(PC)以及栈空间地址,栈空间是在createTask时创建的,如果栈空间不足,firmware将显式的重新设置栈地址。PC也将记录在Context中,当切换出去之后,记录下来切换之前的PC,当将来切换回来,再重新将PC赋值给CPU,恢复这个进程。
在上述实施例的基础上,作为一种优选实施方式,还包括:当所述目标任务完成时,删除所述目标任务的上下文信息,并释放所述目标任务的栈空间。在具体实施中,当一个任务到达完成时,需要通知SSD_OS删除其相关的信息,即上下文。为描述方便,这个函数称为closeTask()。当firmware调用closeTask()时,SSD_OS释放掉这个任务相关的上下文,释放掉这个任务的栈空间。然后调用一次taskSwitch()。此时的任务调度将不具有参数,因为它不会被切换进来。
可见,本实施例实现了在不用开发编译器的前提下进行任务切换。其次提出了进程切换的优先级策略,如果硬件模块或者一个独立的CPU可以加速这种切换过程,更具有实用性,即使没有这样的独立模块也可以使用。
本申请实施例在操作系统中为用户提供了一个任务切换函数,相比于现有技术中采用中断的方式进行任务切换,本申请实施例提高了任务切换效率,满足了SSD高并发的需求。
在上述实施例的基础上,作为一种优选实施方式,还包括:当所述目标任务需要与其他任务通信时,判断所述其他任务对应的进程是否部署于所述目标CPU核心中;若是,则采用共享内存变量的方式实现所述目标任务需要与所述其他任务的通信;若否,则采用资源锁互斥的方式实现所述目标任务需要与所述其他任务的通信。
当一个任务向另外一个任务通信时,分为两种场景:如果两个任务均在同一个物理CPU上,那么只需要共享内存变量即可,实际上这两个任务是分时段占用CPU的,并不会真正抢占资源;如果两个任务不在一个CPU上,则需要调用硬件系统提供的互斥方法进行数据保护。
在上述实施例的基础上,作为一种优选实施方式,所述进程函数包括资源封装函数,所述资源封装函数包括选取输入/输出命令函数、数据传输函数、资源加锁函数、NAND操作函数、向主机发送完成消息函数中任一项或任几项的组合。
作为操作系统,除了提供进程调度之外,还需要对系统内的硬件进行封装,以便对软件开发友好,这样同样的软件在不同的硬件环境下的改动较小。本实施例定义了如下的封装接口,当需要调用时可以避免直接操作硬件,只需要调用系统函数即可。
选取IO命令:selectIO(),当主机发送IO请求(包括读/写/Trim等)给SSD设备时,主机将命令封装在寄存器消息中发送给SSD,SSD的firmware感知到消息,并且选择一个IO命令。不同的控制器硬件感知消息和选择消息的方式可能有所不同,因此SSD_OS对这个操作进行封装,使得不同的硬件可以使用统一接口。在一种实现中,硬件会将所有的IO请求放到一个寄存器池中,selectIO()会在这个池中根据round-robin的方式进行选择。当没有IO命令时,这个命令立即完成,并且带有返回消息说明此时没有新的IO请求。如果有IO命令,则返回给firmware。
DMA数据传输:DMA(),带有两个参数,src和dst,分别表示DMA的输出地址和输入地址。数据传输是常用SSD内部操作。常见的传输地址包括主机和本地内存。而内存又分为高速内存(例如SRAM)和低速内存(DDR),此外可能还有持久性内存(MRAM,PCM等)。不同的地址之间搬运代表不同的含义,如本地内存搬运到主机端,表示用户需要读取SSD中的数据,且数据发给了主机。本地高速内存搬运到低速内存,可能表示缓存管理和内部数据优化。根据其共性,进行封装。
资源加锁:Lock(),带有一个参数,Lock资源号。调用此函数之后,会申请锁,并且进行任务切换,直到获取锁资源,才会切换回来当前进程。再多个实例的系统内不可避免的会有资源竞争冒险。因此需要加锁。硬件可能可以支持很多个物理锁,在这样的硬件系统中,可以将这些锁封装起来。有的硬件系统支持的物理锁的数量有限,在这样的系统中,需要用一个锁资源进行整体互斥,然后再对独立的资源进行访问,也可以实现多个资源的加锁请求。
NAND操作包括:
初始化NAND: initNand();
读取NAND: readNAND(),带有两组参数,NAND地址,以及读取相关参数,包括读取的容量大小,读取的数据搬运到的位置;
写入NAND,writeNAND(),同上,带有两组参数,NAND地址和写入参数;
擦除NAND,eraseNAND(),带有一组参数,NAND地址。
向主机发送完成消息:sendCpl(),当数据传输给主机,传输过程中没有发生错误,则可以给主机发送完成消息。这个过程一般会操作硬件来实现,可以封装起来。具体的操作会根据SSD_OS部署的硬件系统相关,在一种控制器上,是通过给硬件配置寄存器,硬件再向主机的完成消息队列中填写特定的报文来实现的。
在上述实施例的基础上,作为一种优选实施方式,所述进程函数包括系统调用函数,所述系统调用函数包括申请内存函数、释放内存函数、加密算法函数、压缩算法函数、RAID操作函数、内存搜索函数、内存排序函数、管理接口输入输出功能函数中任一项或任几项的组合。
在SSD的实现中,一般还会有一些通用的计算或者通用的处理过程,如某些算法是所有SSD都会用到的,因此SSD_OS可以将这些算法封装成系统调用,以节省开发者再次实现此过程的开发工作量。
申请以及释放内存:memAlloc()、memFree(),从系统资源中申请内存。带有两个参数,内存的类型(高速内存,低速,非易失内存),以及内存的大小。返回值为内存地址。如果失败,则返回特殊值,如-1。
加密/压缩算法:encrypt()、compress(),有的硬件提供加密/压缩的模块,如果不提供则可以由软件实现。考虑到不同的SSD应用需求不同,有的SSD_OS的使用者可能不会用到压缩/加密的需求,这一部分可以在SSD_OS部署的时候进行裁剪。带有两个参数,Src内存地址和DST内存地址。对于加密功能,还将提供加密的算法,包括秘钥的参数。
RAID操作:RAID5()、RAID6(),企业级SSD一般带有RAID功能。 将RAID操作进行封装带有两组参数, Src地址和DST地址。由于RAID是将多个地址进行bit计算,生成校验值,因此Src地址可能是多个不同的地址,即参数的数量是可变化的。DST地址对于RAID5操作是一个输出地址,对于RAID6是两个输出地址(有两个不同的bit算法,生成两组校验数据)。
内存搜索:searchInRam(),在内存中搜索某个数据pattern,在某些算法计算中会用到此功能。带有两组参数: 地址搜索的范围(包括开始地址和长度,变量的颗粒度),搜索的Pattern(包括掩码和比较值)。比如可以有如下的搜索行为,searchInRam((0x01000000,0x1000,4),(0xFFF0000,0x1234))。表示从0x100000000开始的内存地址,搜索0x1000长度,每个内存按照4个字节进行搜索。如果在这个内存中,每个地址的数据与0xFFF0000进行异或,如果异或的结果为0x1234,则将这个地址作为搜索的结果,进行返回。
内存排序:sortInRam(),对某个内存区域进行排序,在某些算法计算中会用到此功能。带有两组参数:排序的地址范围(包括开始地址和长度,变量字段的颗粒度),以及排序的比较方法(大于,小于)。调用此函数之后,将内存的区域进行从小到大排序(如果排序方法参数为小于),排序之后的结果覆盖原来的内存地址。
管理接口输入输出功能:uart_input()、uart_output()、spi_input()、spi_output(),SSD内部会有一些传感器,一般通过管理接口进行交互,如SPI接口。在开发过程中,开发者往往也会通过低速串口与Firmware进行通信。次函数带有一组参数,即输入或者输出的内容。当然与之同时的也会带有管理接口的初始化操作,不再赘述。
SSD_OS还将提供统一的用户界面,serviceRoutine(),开发者可以通过这个用户界面查询或者注入命令。这个功能在开发过程中使用,在产品发布时进行关闭。具体的实现方法为:在系统中提供一个特殊的系统函数,实现值守进程的作用。这个函数使能后,即等待接受uart_input指令。在input指令中,封装了操作指令字和指令的参数。指令字可以包含如下内容:
查看内存,指令字:viewRam,指令参数:内存地址,长度。值守进程收到此命令之后,即会将对应地址的内容取出,并且通过uart_output传给开发者。
注入命令,指令字:insertRoutine,指令参数:任务名称。值守进程收到此命令之后,回到用createTask(),产生一个新的进程。进程的内容是传进来的任务名称。
本申请实施例公开了一种任基于SSD操作系统的Firmware设计,具体的:
参见图2,根据一示例性实施例示出的另一种任务调度方法的流程图,如图2所示,包括:
S201:初始化操作系统,分配堆栈,初始化硬件接口;
S202:控制值守进程启动;其中,所述值守进程用于接收对所述固态硬盘的注入命令;
S203:控制管理进程启动;其中,所述管理进程用于接收对所述固态硬盘的管理命令;
S204:接收任务创建命令。
在具体实施中,系统上电之后,进行SSD_OS的初始化,分配堆栈,初始化硬件接口等,这个对SSD Firmware开发者来说是透明的,开发者不需要了解此软件过程。SSDFirmware打开值守进程,即前文所述的用户界面。SSD firmware打开管理命令的处理进程,每一种管理命令打开一个进程。SSD Firmware进入while循环,接收每一个IO命令,每个IO命令对应一个进程。
综上所述,可以用如下(伪代码2)来表示:
void main()
{
createTask(serviceRoutine,serviceParam) //服务例程
createTask(formatRoutine,formatParam) //用于format管理命令的服务例程
createTask(smartInfoRoutine,smartInfoParam) //用于获取SMART信息的服务例程
createTask(createIOQ,serviceParam) //用于创建IO Queue的管理命令服务例程
while(true)
if 有新的请求 then:
createTask(requestHandler(),request_param)
end if
end while
}
需要描述requestHandler内部的实现方式:requestHandler负责处理IO命令,在一种实现方法中,一个IO有可能是读取,写入,Trim或者其他IO命令,在此处对读取和写入进行描述,以证明如何在SSD_OS上实现firmware。
while true:
oneIO = selectIO() //获取一个IO请求,如果没有则返回False
if oneIO is None:
taskSwitch() //当前没有IO,先调度到其他的任务
elif oneIO is Read:
readRoutine(oneIO) //如果是读取命令,则进行读取服务例程
elif oneIO is Write:
writeRoutine(oneIO) //如果是写入命令,则进行写入服务例程
else:
doOtherRoutine() //其他任务不在本说明内涉及。
endif
对于读取服务例程,可以用如下方式设计:
def readRoutine(oneIO):
Lock(OneIO。LBA,OneIO。Length) //对当前读取命令的LBA和地址加锁。在lock函数内会自动调用taskSwitch(),直到获取锁之后才会回到这行函数;
PBA = lookupTable(oneIO。LBA) //根据LBA地址,查找表,获得物理地址,简称为PBA,这个函数需要用户自己实现,不是OS封装好的例程
buffer = memAlloc() //从NAND读取数据之前,申请一个内存地址,存放此数据
readNand((PBA),(buffer)) //读取数据
DMA(buffer,OneIO。hostAddr) //将读取到的数据发送给主机端
sendCpl(OneIO)//将这个消息完成
unLock(OneIO。LBA,OneIO。Length) //释放对资源 的锁
memFree(buffer)
closeTask() //关闭此进程
对于写入服务例程,可以按照如下方式设计:
def writeRoutine(oneIO):
Lock(OneIO。LBA,OneIO。Length) //对当前写入命令的LBA和地址加锁。在lock函数内会自动调用taskSwitch(),直到获取锁之后才会回到这行韩束
buffer = memAlloc() //写入NAND数据之前,申请一个内存地址,存放此数据
DMA(OneIO。hostAddr ,buffer) //将数据从主机侧存放到buffer里面
PBA = AllocNANDAddr (oneIO。LBA) //根据firmware的内部数据结构和地址分配逻辑,选择一个空闲地址,用于存放这笔数据。这是firmware开发者自己需要实现的逻辑,在此不进行描述。
writeNand((PBA),(buffer)) //读取数据
sendCpl(OneIO)//将这个消息完成
unLock(OneIO。LBA,OneIO。Length) //释放对资源 的锁
memFree(buffer) //释放前面申请的buffer
closeTask() //关闭此进程
以上为读写关键路径的一种实现方法的范例,用以说明firmware开发者在这种SSD_OS上,可以完全使用同步过程进行开发,而不需要考虑进程切换,自己定义状态机等工作,能够极大的减轻开发的复杂度。
由此可见,本实施例提出了一种SSD的专用操作系统,在这种操作系统的基础上,firmware开发者只需要考虑业务逻辑,不用关心进程切换和资源的底层信息,便于开发者开发firmware,能够减轻开发者的开发复杂度,降低开发成本和费用,提高了开发效率。同时,也可以适配不同的硬件体系结构,是的一套firmare可以适配不同厂商的硬件。本实施例能够给硬件设计提供参考,使得硬件和软件更有效的配合,硬件如果能够提供一个高性能的进程调度器,则可以与SSD_OS有效的衔接,能够提供更高的SSD性能。
下面对本申请实施例提供的一种任务调度装置进行介绍,下文描述的一种任务调度装置与上文描述的一种任务调度方法可以相互参照。
参见图3,根据一示例性实施例示出的一种任务调度装置的结构图,如图3所示,包括:
创建模块301,用于创建目标任务,并为所述目标任务创建对应的目标进程;
选择模块302,用于为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;
执行模块303,用于利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;
调用模块304,用于在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;
切换模块305,用于在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
本申请实施例在操作系统中为用户提供了一个任务切换函数,相比于现有技术中采用中断的方式进行任务切换,本申请实施例提高了任务切换效率,满足了SSD高并发的需求。
在上述实施例的基础上,作为一种优选实施方式,所述创建模块301包括:
第一确定单元,用于确定所述目标任务的任务参数;其中,所述任务参数至少包括所述目标任务对应的函数和所述函数对应的参数;
创建单元,用于基于所述目标任务的任务参数为所述目标任务创建对应的目标进程;
分配单元,用于为所述目标进程分配资源;其中,所述资源包括任务标识、栈空间、寄存器地址。
在上述实施例的基础上,作为一种优选实施方式,所述分配单元具体用于:为所述目标进程分配预设大小的栈空间。
在上述实施例的基础上,作为一种优选实施方式,所述分配单元具体用于:将所有栈空间划分为多个不同大小的子空间;将大于所述目标进程需要的栈空间的大小的最小的子空间作为目标子空间分配至所述目标进程。
在上述实施例的基础上,作为一种优选实施方式,还包括:
检测模块,用于检测所述目标任务对应的依赖对象是否完成,若完成,则将所述目标任务作为等待切换的任务。
在上述实施例的基础上,作为一种优选实施方式,所述切换模块305包括:
第二确定单元,用于根据所有所述等待切换的任务的属性确定所有所述等待切换的任务的第一优先级;
选择单元,用于选择所述第一优先级最高的等待切换的任务作为切换任务;
切换单元,用于利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
在上述实施例的基础上,作为一种优选实施方式,所述属性按照所述第一优先级由高至低包括显示的任务切换、主机读取、主机写入、主机管理命令、后台读取、后台写入、后台管理命令、元数据管理、算法、统计信息中任一项或任几项的组合。
在上述实施例的基础上,作为一种优选实施方式,所述选择单元具体用于:若存在多个所述第一优先级最高的等待切换的任务,则根据所有所述等待切换的任务在任务切换时的依赖对象确定所有所述等待切换的任务的第二优先级;在多个所述第一优先级最高的等待切换的任务中选择所述第二优先级最高的等待切换的任务作为切换任务。
在上述实施例的基础上,作为一种优选实施方式,所述依赖对象按照所述第二优先级由高至低包括完成消息、锁资源释放、NAND读写命令、DMA流向主机端的命令、DMA流向设备端的命令、锁资源获取命令、定时器、算法模块。
在上述实施例的基础上,作为一种优选实施方式,还包括:
提高模块,用于若目标任务的定时器结束时间超过预设值,则将所述目标任务的第二优先级提高预设级别。
在上述实施例的基础上,作为一种优选实施方式,所述切换模块305具体用于:确定所有所述等待切换的任务完成对应的依赖条件的时间;选择所述时间最长的等待切换的任务作为切换任务;利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
在上述实施例的基础上,作为一种优选实施方式,还包括:
通信模块,用于当所述目标任务需要与其他任务通信时,判断所述其他任务对应的进程是否部署于所述目标CPU核心中;若是,则采用共享内存变量的方式实现所述目标任务需要与所述其他任务的通信;若否,则采用资源锁互斥的方式实现所述目标任务需要与所述其他任务的通信。
在上述实施例的基础上,作为一种优选实施方式,还包括:
删除模块,用于当所述目标任务完成时,删除所述目标任务的上下文信息,并释放所述目标任务的栈空间。
在上述实施例的基础上,作为一种优选实施方式,所述进程函数包括资源封装函数,所述资源封装函数包括选取输入/输出命令函数、数据传输函数、资源加锁函数、NAND操作函数、向主机发送完成消息函数中任一项或任几项的组合。
在上述实施例的基础上,作为一种优选实施方式,所述进程函数包括系统调用函数,所述系统调用函数包括申请内存函数、释放内存函数、加密算法函数、压缩算法函数、RAID操作函数、内存搜索函数、内存排序函数、管理接口输入输出功能函数中任一项或任几项的组合。
在上述实施例的基础上,作为一种优选实施方式,还包括:
初始化模块,用于初始化操作系统,分配堆栈,初始化硬件接口;
第一控制模块,用于控制值守进程启动;其中,所述值守进程用于接收对所述固态硬盘的注入命令;
第二控制模块,用于控制管理进程启动;其中,所述管理进程用于接收对所述固态硬盘的管理命令;
接收模块,用于接收任务创建命令。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供了一种电子设备,图4为根据一示例性实施例示出的一种电子设备的结构图,如图4所示,电子设备包括:
通信接口1,能够与其它设备比如网络设备等进行信息交互;
处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的任务调度方法。而所述计算机程序存储在存储器3上。
当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图4中将各种总线都标为总线系统4。
本申请实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器3旨在包括但不限于这些和任意其它适合类型的存储器。
上述本申请实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、DSP,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
处理器2执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、CD-ROM等存储器。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (20)

1.一种任务调度方法,其特征在于,应用于固态硬盘的操作系统,所述方法包括:
创建目标任务,并为所述目标任务创建对应的目标进程;
为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;
利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;
在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;
在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
2.根据权利要求1所述任务调度方法,其特征在于,为所述目标任务创建对应的目标进程,包括:
确定所述目标任务的任务参数;其中,所述任务参数至少包括所述目标任务对应的函数和所述函数对应的参数;
基于所述目标任务的任务参数为所述目标任务创建对应的目标进程,并为所述目标进程分配资源;其中,所述资源包括任务标识、栈空间、寄存器地址。
3.根据权利要求2所述任务调度方法,其特征在于,为所述目标进程分配资源,包括:
为所述目标进程分配预设大小的栈空间。
4.根据权利要求2所述任务调度方法,其特征在于,为所述目标进程分配资源,包括:
将所有栈空间划分为多个不同大小的子空间;
将大于所述目标进程需要的栈空间的大小的最小的子空间作为目标子空间分配至所述目标进程。
5.根据权利要求1所述任务调度方法,其特征在于,所述利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行之后,还包括:
检测所述目标任务对应的依赖对象是否完成,若完成,则将所述目标任务作为等待切换的任务。
6.根据权利要求1所述任务调度方法,其特征在于,所述在所有等待切换的任务中选择切换任务,包括:
根据所有所述等待切换的任务的属性确定所有所述等待切换的任务的第一优先级;
选择所述第一优先级最高的等待切换的任务作为切换任务。
7.根据权利要求6所述任务调度方法,其特征在于,所述属性按照所述第一优先级由高至低包括显示的任务切换、主机读取、主机写入、主机管理命令、后台读取、后台写入、后台管理命令、元数据管理、算法、统计信息中任一项或任几项的组合。
8.根据权利要求6所述任务调度方法,其特征在于,所述选择所述第一优先级最高的等待切换的任务作为切换任务,包括:
若存在多个所述第一优先级最高的等待切换的任务,则根据所有所述等待切换的任务在任务切换时的依赖对象确定所有所述等待切换的任务的第二优先级;
在多个所述第一优先级最高的等待切换的任务中选择所述第二优先级最高的等待切换的任务作为切换任务。
9.根据权利要求8所述任务调度方法,其特征在于,所述依赖对象按照所述第二优先级由高至低包括完成消息、锁资源释放、NAND读写命令、DMA流向主机端的命令、DMA流向设备端的命令、锁资源获取命令、定时器、算法模块。
10.根据权利要求8所述任务调度方法,其特征在于,还包括:
若目标任务的定时器结束时间超过预设值,则将所述目标任务的第二优先级提高预设级别。
11.根据权利要求1所述任务调度方法,其特征在于,所述在所有等待切换的任务中选择切换任务,包括:
确定所有所述等待切换的任务完成对应的依赖条件的时间;
选择所述时间最长的等待切换的任务作为切换任务。
12.根据权利要求1所述任务调度方法,其特征在于,还包括:
当所述目标任务需要与其他任务通信时,判断所述其他任务对应的进程是否部署于所述目标CPU核心中;
若是,则采用共享内存变量的方式实现所述目标任务需要与所述其他任务的通信。
13.根据权利要求1所述任务调度方法,其特征在于,所述判断所述其他任务对应的进程是否部署于所述目标CPU核心中,包括:
若所述其他任务对应的进程部署于其他CPU核心中,则采用资源锁互斥的方式实现所述目标任务需要与所述其他任务的通信。
14.根据权利要求1所述任务调度方法,其特征在于,还包括:
当所述目标任务完成时,删除所述目标任务的上下文信息,并释放所述目标任务的栈空间。
15.根据权利要求1所述任务调度方法,其特征在于,所述进程函数包括资源封装函数,所述资源封装函数包括选取输入/输出命令函数、数据传输函数、资源加锁函数、NAND操作函数、向主机发送完成消息函数中任一项或任几项的组合。
16.根据权利要求1所述任务调度方法,其特征在于,所述进程函数包括系统调用函数,所述系统调用函数包括申请内存函数、释放内存函数、加密算法函数、压缩算法函数、RAID操作函数、内存搜索函数、内存排序函数、管理接口输入输出功能函数中任一项或任几项的组合。
17.根据权利要求1所述任务调度方法,其特征在于,还包括:
初始化操作系统,分配堆栈,初始化硬件接口;
控制值守进程启动;其中,所述值守进程用于接收对所述固态硬盘的注入命令;
控制管理进程启动;其中,所述管理进程用于接收对所述固态硬盘的管理命令;
接收任务创建命令。
18.一种任务调度装置,其特征在于,应用于固态硬盘的操作系统,所述装置包括:
创建模块,用于创建目标任务,并为所述目标任务创建对应的目标进程;
选择模块,用于为所述目标任务选择空闲的目标CPU核心,并将所述目标进程部署于所述目标CPU核心中;
执行模块,用于利用所述目标CPU核心调用所述目标进程中的进程函数,以执行所述目标任务;
调用模块,用于在执行所述目标任务的过程中,调用所述目标任务的任务切换函数;其中,所述任务切换函数的参数包括在任务切换时的依赖对象和所述依赖对象对应的参数;
切换模块,用于在所有等待切换的任务中选择切换任务,利用所述目标CPU核心调用所述切换任务对应的进程函数,以将所述目标CPU核心切换至所述切换任务执行。
19.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至17任一项所述任务调度方法的步骤。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至17任一项所述任务调度方法的步骤。
CN202211554104.8A 2022-12-06 2022-12-06 一种任务调度方法、装置及电子设备和存储介质 Active CN115658277B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211554104.8A CN115658277B (zh) 2022-12-06 2022-12-06 一种任务调度方法、装置及电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211554104.8A CN115658277B (zh) 2022-12-06 2022-12-06 一种任务调度方法、装置及电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN115658277A true CN115658277A (zh) 2023-01-31
CN115658277B CN115658277B (zh) 2023-03-17

Family

ID=85024601

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211554104.8A Active CN115658277B (zh) 2022-12-06 2022-12-06 一种任务调度方法、装置及电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN115658277B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116243996A (zh) * 2023-05-12 2023-06-09 苏州浪潮智能科技有限公司 业务的运行切换方法、装置、存储介质及电子装置
CN117200301A (zh) * 2023-11-08 2023-12-08 深圳海辰储能科技有限公司 基于储能系统的端口调用方法及装置
CN117311994A (zh) * 2023-11-28 2023-12-29 苏州元脑智能科技有限公司 一种处理核心隔离方法、装置及电子设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101529383A (zh) * 2006-08-24 2009-09-09 内特可力亚斯系统股份有限公司 任务处理装置
CN111124624A (zh) * 2019-12-24 2020-05-08 浙江大学 一种基于TriCore架构处理器的操作系统任务上下文管理方法
CN111176815A (zh) * 2019-12-30 2020-05-19 青岛海尔科技有限公司 一种操作系统的任务调度方法及装置
CN111367642A (zh) * 2020-03-09 2020-07-03 中国铁塔股份有限公司 一种任务调度执行方法及装置
US10949242B2 (en) * 2016-10-20 2021-03-16 Nr Electric Co., Ltd Development of embedded type devices and running method for embedded type virtual device and system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101529383A (zh) * 2006-08-24 2009-09-09 内特可力亚斯系统股份有限公司 任务处理装置
US10949242B2 (en) * 2016-10-20 2021-03-16 Nr Electric Co., Ltd Development of embedded type devices and running method for embedded type virtual device and system
CN111124624A (zh) * 2019-12-24 2020-05-08 浙江大学 一种基于TriCore架构处理器的操作系统任务上下文管理方法
CN111176815A (zh) * 2019-12-30 2020-05-19 青岛海尔科技有限公司 一种操作系统的任务调度方法及装置
CN111367642A (zh) * 2020-03-09 2020-07-03 中国铁塔股份有限公司 一种任务调度执行方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ALTMANN, ERIK M等: "An integrated model of cognitive control in task switching" *
徐丽华等: "基于ARM Cortex-M4的MQX调度的上下文切换机制分析" *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116243996A (zh) * 2023-05-12 2023-06-09 苏州浪潮智能科技有限公司 业务的运行切换方法、装置、存储介质及电子装置
CN116243996B (zh) * 2023-05-12 2023-08-08 苏州浪潮智能科技有限公司 业务的运行切换方法、装置、存储介质及电子装置
CN117200301A (zh) * 2023-11-08 2023-12-08 深圳海辰储能科技有限公司 基于储能系统的端口调用方法及装置
CN117200301B (zh) * 2023-11-08 2024-01-26 深圳海辰储能科技有限公司 基于储能系统的端口调用方法及装置
CN117311994A (zh) * 2023-11-28 2023-12-29 苏州元脑智能科技有限公司 一种处理核心隔离方法、装置及电子设备和存储介质
CN117311994B (zh) * 2023-11-28 2024-02-23 苏州元脑智能科技有限公司 一种处理核心隔离方法、装置及电子设备和存储介质

Also Published As

Publication number Publication date
CN115658277B (zh) 2023-03-17

Similar Documents

Publication Publication Date Title
CN115658277B (zh) 一种任务调度方法、装置及电子设备和存储介质
US9996401B2 (en) Task processing method and virtual machine
TWI552076B (zh) 使用具有客作業系統及虛擬處理器之超管理器之系統及方法
JP7087029B2 (ja) 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構
WO2015169145A1 (zh) 内存管理方法和设备
US9128736B1 (en) Common scheduling and synchronization primitives
CN109669772B (zh) 计算图的并行执行方法和设备
WO2019218708A1 (zh) 一种任务处理方法及处理装置、计算机系统
TWI539280B (zh) 用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體
CN111857993B (zh) 一种内核态调用用户态函数的方法
JP2011521354A (ja) スケジューラにおけるタスクの局所的集合
US20110219373A1 (en) Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform
CN102667714B (zh) 支持访问由操作系统环境外的资源提供的功能的方法和系统
US8291426B2 (en) Memory allocators corresponding to processor resources
US11366689B2 (en) Hardware for supporting OS driven observation and anticipation based on more granular, variable sized observation units
CN112306669A (zh) 一种基于多核系统的任务处理方法及装置
CN113010265A (zh) Pod的调度方法、调度器、存储插件及系统
CN105677481B (zh) 一种数据处理方法、系统及电子设备
US20210374319A1 (en) Dynamic allocation of computing resources for electronic design automation operations
US20150026447A1 (en) Apparatus for configuring operating system and method therefor
US10719357B1 (en) Hardware for supporting OS driven load anticipation based on variable sized load units
Sung et al. An interface test model for hardware-dependent software and embedded OS API of the embedded system
US8689230B2 (en) Determination of running status of logical processor
WO2022237419A1 (zh) 任务执行方法、装置及存储介质
CN110618794B (zh) 一种SSD固件访问NandFlash的方法和系统

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