CN109901917B - 实时操作系统调度方法及装置、计算机可读存储介质 - Google Patents
实时操作系统调度方法及装置、计算机可读存储介质 Download PDFInfo
- Publication number
- CN109901917B CN109901917B CN201711283966.0A CN201711283966A CN109901917B CN 109901917 B CN109901917 B CN 109901917B CN 201711283966 A CN201711283966 A CN 201711283966A CN 109901917 B CN109901917 B CN 109901917B
- Authority
- CN
- China
- Prior art keywords
- work
- node
- linked list
- working
- nodes
- 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.)
- Active
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Telephonic Communication Services (AREA)
Abstract
本申请提供一种实时操作系统调度方法及装置、计算机可读存储介质,方法包括:根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和执行方法;根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作。本方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在同一工作队列中灵活添加或取消任意类型的工作结点,功能更加丰富,调度方案简便快捷,实现在实时操作系统上兼容Linux的工作队列。
Description
技术领域
本申请涉及软件领域,尤其涉及一种实时操作系统调度方法及装置、计算机可读存储介质。
背景技术
嵌入式操作系统(Embedded Operating System,简称:EOS)是指用于嵌入式系统的操作系统。嵌入式操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等,其负责嵌入式系统的任务调度,控制、协调并发活动。目前在嵌入式领域广泛使用的嵌入式操作系统有:Linux、Windows Embedded等,以及嵌入式实时操作系统,例如,VxWorks等。
对于实时操作系统,其任务调度方案中预先根据不同的处理类型将工作队列划分为不同类型的工作队列,每个工作队列能够处理的工作类型是单一的。当需要进行工作调度时,需要确定待调度工作的类型,进而查找到相匹配的工作队列进行工作添加。
可见,目前的任务调度方案比较繁琐且不够灵活,通用性也较差,例如,在一些应用场景下无法实现与Linux驱动程序的兼容,导致在移植Linux驱动程序的过程中需要做额外的编码。
发明内容
本申请提供一种实时操作系统调度方法及装置、计算机可读存储介质,用于解决目前的任务调度方案繁琐不够灵活,通用性差的问题。
本申请的第一个方面是提供一种实时操作系统调度方法,包括:根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和执行方法;根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作。
本申请的第二个方面是提供一种实时操作系统调度装置,包括:调度模块,用于根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和经注册的执行方法;执行模块,用于根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作。
本申请的第三个方面是提供一种实时操作系统调度装置,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,以执行如前所述的方法。
本申请的第四个方面是提供一种计算机可读存储介质,该计算机可读存储介质中存储有程序指令,所述程序指令被处理器执行时实现如前所述的方法。
本申请提供的实时操作系统调度方法及装置、计算机可读存储介质中,工作队列包括表征该队列基本信息的工作队列头和工作链表,工作链表由工作结点以链表的结构构成,工作结点中预先注册有执行该工作所需的数据和方法,后续进行任务调度时,可将链表中逻辑顺序排在首位的工作结点作为当前待处理的工作,并基于工作结点的执行方法和执行数据完成相关操作。上述方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在同一工作队列中灵活添加或取消任意类型的工作结点,功能更加丰富,调度方案简便快捷,实现在实时操作系统上兼容Linux的工作队列。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1A~图1B为本申请实施例一提供的实时操作系统调度方法的流程示意图;
图2为本申请实施例二提供的实时操作系统调度方法的流程示意图;
图3为本申请实施例三提供的实时操作系统调度方法的流程示意图;
图4为本申请提供的工作队列的架构示例图;
图5为本申请实施例五提供的实时操作系统调度装置的结构示意图;
图6为本申请实施例六提供的实时操作系统调度装置的结构示意图;
图7为本申请实施例七提供的实时操作系统调度装置的结构示意图;
图8为本申请实施例八提供的实时操作系统调度装置的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
图1A为本申请实施例一提供的一种实时操作系统调度方法的流程示意图,本实施例以该实时操作系统调度方法应用于实时操作系统调度装置来举例说明,如图1A所示,该方法包括:
101、根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和执行方法;
102、根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作。
实际应用中,本实施例的执行主体可以为实时操作系统调度装置,该实时操作系统调度装置可以为驱动程序、程序代码软件,也可以为存储有相关执行代码的介质,例如,U盘等;或者,该实时操作系统调度装置还可以为集成或安装有相关执行代码的实体装置,例如,芯片、微控制单元(Microcontroller Unit,简称MCU)、电脑等。
举例来说,该方案可应用于嵌入式实时操作系统内核。作为示例说明,本方案可应用于无内部互锁流水级的微处理器(Microprocessor without interlocked pipedstages,简称MIPS),该处理器具有高性能低功耗的特点,可应用于服务器、高性能计算机、低能耗数据中心、个人高性能计算机、高端桌面应用、高吞吐计算应用、工业控制、数字信号处理、高端嵌入式应用等产品。
其中,链表结构是一种物理单元上非连续、非顺序的结构,链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。本方案的链表中各结点的逻辑顺序是通过各结点的指针链接次序实现的,每个结点包括三个部分:存储执行数据的数据域,存储下一个结点地址的指针域,以及注册在该结点中的执行方法。
实际应用中,可以同时创建多个工作队列(Work Queue),相应的,工作队列的队列头中的基本信息可以用于表征本工作队列,该基本信息可以包括但不限于:队列类型(例如,list)、队列名称(name)。队列头中还可以预置不同功能的函数和指令,例如,Task函数,current函数,end函数,wq指令,lock函数等,以支持对该工作队列的不同功能操作。
具体的,本实施例中应用于实时操作系统的工作队列包括工作队列头和工作链表。工作队列头用于表征该工作队列,优选的,还可以支持对该工作队列的一些功能操作。工作链表由工作结点构成,每个工作结点自身包含有执行数据和执行方法。具体的,在进行任务调度时,可以将工作队列的工作链表中逻辑顺序排在首位的工作结点作为当前需要处理的工作,根据该工作结点中的执行方法,对该工作结点中的执行数据进行相应操作,完成当前待处理工作结点的工作调度和处理。
后续,执行完当前待处理工作结点的工作后,更新当前的工作链表,再次查找到工作链表中逻辑顺序排在首位的工作结点执行相关操作,以此循环,直至工作链表中的工作结点均被执行完成。可选的,如图1B所示,在任一实施方式的基础上,在102之后,还可以包括:
103、销毁所述工作链表中的所述待处理工作结点,并返回执行101。
具体的,当进行工作调度时,查找出当前工作链表中逻辑顺序排在首位的工作结点,根据该工作结点中的执行方法和执行数据完成该工作结点的工作执行,之后从工作链表中销毁该已执行的工作结点,从而更新工作链表后,再次查找当前工作链表中逻辑顺序排在首位的工作结点并执行完成相应工作,周而复始,直至当前工作链表为空,即所有工作结点均被处理完毕。以实景举例来说,假设某工作队列的工作链表从先往后依次包括工作结点1、工作结点2和工作结点3,基于本方案,先对工作结点1进行处理,完成后销毁工作结点1,则当前的工作链表从先往后依次包括工作结点2和工作结点3,即当前逻辑顺序排在首位的工作结点为工作结点2,对工作结点2进行处理并销毁后,工作链表仅包括工作结点3,即当前逻辑顺序排在首位的工作结点为工作结点3,对工作结点3进行处理并销毁后,工作链表为空,本次工作调度进程结束。
通过本实施方式,能够确保工作队列中的工作结点都能被执行,保证工作调度的可靠性。
其中,本实施例中的工作队列的类型可以根据需要设定,例如,可以为不限长的先入先出队列(First Input First Output,简称FIFO),或者还可以后入先出队列。另外,本实施例中的工作队列可添加任意类型的工作结点,并且确保每个工作结点都能被执行,可异步处理无实时性要求的任务,可运行不能在中断上下文中执行的代码,例如内存释放,关闭中断等。
此外,通过本方案的工作队列还可实现将操作异步执行。具体的,可以为工作队列创建事件处理进程(kevent_wq),将异步操作放到事件处理进程中去执行,具体执行时机为事件处理进程被调度时。相应的,在任一实施方式的基础上,101具体可以包括:
当事件处理进程被调度时,根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点。
以实际场景进行举例说明:在通过工作队列进行任务调度时,需要先创建添加该工作队列。具体的,可以先按照一定的数据结构构造该工作队列的工作队列头,之后根据需要进行处理的工作,构造相应的工作结点,工作结点的数量根据工作的数量确定,可以为一个也可以为多个,按照工作结点的创建先后顺序,依次加入工作队列的工作链表中。在上述过程中,还为该工作队列创建事件处理进程,该事件处理进程被调用时,则触发执行本实施例中的工作调度方案。
本实施方式,通过为工作队列创建事件处理进程,实现当该事件处理进程被调用时触发对工作队列的工作调度执行,能够实现操作的异步执行。
上述通过事件处理进程触发工作调度的实施方式,可以与任一实施方式结合实施,例如,在图1B所示实施方式的基础上,若工作链表中的所有工作结点均执行完毕,则可使事件处理进程处于睡眠状态,以避免其活跃运行占用的资源和耗时,具体的,在一种实施方式中,所述方法还可以包括:若当前所述工作链表为空,则指示所述事件处理进程进入睡眠状态。此后,当需要再次进行工作调度处理时,可唤醒该事件处理进程。
此外,本方案实现的工作队列,采用动态分配内存的方案。具体的,在向工作队列中添加工作结点的同时,为该工作结点向操作系统申请相应的内存,在该工作结点被执行完毕后,通过前述的事件处理进程可释放为该工作结点分配的结点,从而实现动态分配内存。相比于现有技术中预先为设定了长度限制的工作队列分配固定内存的方案,本方案的工作队列没有长度限制,操作简便,并且通过在工作结点中注册执行方法,能够使得本方案的工作队列支持在工作队列中任意添加多种类型的工作结点。以驱动程序在不同操作系统中进行移植的场景为例,通过本方案的工作队列,在向实时操作系统中移植驱动程序时,无需修改工作队列代码,减少移植开发的工作量,并且添加工作结点的数量无限制。
本实施例提供的实时操作系统调度方法中,工作队列包括表征该队列基本信息的工作队列头和工作链表,工作链表由工作结点以链表的结构构成,工作结点中预先注册有执行该工作所需的数据和方法,后续进行任务调度时,可将链表中逻辑顺序排在首位的工作结点作为当前待处理的工作,并基于工作结点的执行方法和执行数据完成相关操作。上述方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在同一工作队列中灵活添加或取消任意类型的工作结点,功能更加丰富,调度方案简便快捷,实现在实时操作系统上兼容Linux的工作队列。
实际应用中,本方案的工作队列还可以支持对工作结点的多种功能操作。例如,对工作结点的添加功能、对工作结点的取消执行功能,即添加到工作队列后,可以取消未执行的工作等。下面通过以下实施例对这些功能操作进行举例说明。
以工作结点的添加功能为例,图2为本申请实施例二提供的一种实时操作系统调度方法的流程示意图,参考图2,在实施例一的基础上,该实时操作系统调度方法还包括:
201:根据添加指令,建立待添加的工作结点并在所述待添加的工作结点中注册需要执行的执行方法;
202、通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾。
具体的,添加工作结点的实施方式可以用于在多种场景,例如,在创建工作队列的过程中可能涉及工作结点的添加,此外,在工作调度过程中,即工作队列已经被创建的场景下,同样可能涉及向该工作队列中添加工作结点。
以实景场景举例来说:当需要添加工作结点时,例如,可基于添加指令触发添加工作结点的流程,需要先构造该工作结点。具体的,工作结点的数据结构可以预先设定,该工作结点包括执行本工作结点所需的执行方法和执行数据,基于这些内容和数据结构,构造出需要添加的工作结点。实际应用中,可以通过在工作结点的fun变量上注册需要执行的操作,实现在工作结点中注册执行方法。工作结点建立之后,通过调用预设的添加函数,将其添加至工作队列的工作链表末尾。这里所说的添加函数用于实现向工作链表中添加工作结点的功能操作。
实际应用中,各结点的逻辑顺序可以通过结点中携带的地址链接定义,每个工作结点携带一个地址链接(entry),该地址链接指向下一相邻工作结点。相应可选的,在向工作链表末尾添加待添加的工作结点时,可以将该待添加的工作结点的地址链接写入当前的末尾工作结点中。
可选的,为了更便于对各工作结点的统计和管理,可以标记各工作结点的状态。这里的状态可以为不同类型的状态,例如,反映执行情况的状态、反映其是否处于工作队列中的状态等。举例来说,可以基于工作结点是否处于工作队列中,为其标记入队状态或未入队状态,入队状态表示该工作结点位于工作链表,未入队状态则表示该工作结点尚未被添加至工作链表。相应的,在实施例二的基础上,在202之后,还可以包括:将所述待添加的工作结点的状态标记为入队状态。
通过本实施方式,可以快速方便地获得各工作结点的添加状态,便于实现对工作结点的统计和管理。
此外,在通过事件处理进程触发工作调用的实施方式下,通过添加工作结点还可以触发事件处理进程。由于工作结点的添加表征当前有新的工作需要处理,因此,在添加工作结点时,还可以唤醒事件处理进程,后续事件处理进程被调用时,则执行前述工作调度方案。相应的,在一种实施方式中,所述方法还包括:根据所述添加指令,唤醒事件处理进程。
本实施例提供的实时操作系统调度方法中,当需要添加工作结点时,建立包括执行数据和执行方法的工作结点,并将其添加至工作队列的末尾。上述方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在工作队列中灵活添加任意类型的工作结点,功能更加丰富,调度方案简便快捷,本方案的工作队列能够在实时操作系统上兼容Linux。
以工作结点的取消功能为例,图3为本申请实施例三提供的一种实时操作系统调度方法的流程示意图,参考图3,在实施例一或实施例二的基础上,该实时操作系统调度方法还包括:
301:接收取消指令,所述取消指令用于指示取消对所述工作链表中待取消工作结点的处理;
302、若所述待取消工作结点尚未被执行,则通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下,否则不执行任何操作。
具体的,取消工作结点的实施方式可以用于工作调度过程中,例如某工作结点当前已经被添加至工作队列,现在需要取消对该工作结点的执行。
以实景场景举例来说:当需要取消工作结点时,例如,接收到取消指令时,检测该工作结点是否被执行,如果尚未内执行,则可将该工作结点从工作链表中取下,以取消对该工作结点的执行,但如果该工作结点已经被执行,则不再执行操作,即不再取消对该工作结点的执行。可选的,将工作结点从工作链表中取下的方式有多种,例如,销毁该工作结点,或者,断开该工作结点与相邻工作结点的逻辑关系。举例来说,可以调用预设的取消函数,将其从工作队列中取下。这里所说的取消函数用于从工作链表中取下工作结点。
实际应用中,各结点的逻辑顺序可以通过结点中携带的地址链接定义,每个工作结点携带一个地址链接(entry),该地址链接指向下一相邻工作结点。相应可选的,在取下待取消的工作结点时,可以将该工作结点的后一相邻工作结点的地址链接写入该工作结点的前一相邻工作结点中。
可选的,同样为了更便于对各工作结点的统计和管理,可以标记各工作结点的状态。这里的状态可以为不同类型的状态。举例来说,同样可以基于工作结点是否处于工作队列中,为其标记入队状态或未入队状态。相应的,在实施例三的基础上,在302之后,还可以包括:将所述被取消工作结点的状态标记为未入队状态。
通过本实施方式,可以快速方便地获得各工作结点的取消状态,便于实现对工作结点的统计和管理。
本实施例提供的实时操作系统调度方法中,当需要取消工作结点时,基于工作结点的执行状态,若未被执行则从工作队列中将该工作结点取下,以取消对该工作结点的执行。上述方案能够实现对工作结点的取消,功能更加丰富,调度方案简便快捷,本方案的工作队列能够在实时操作系统上兼容Linux。
下面结合实际应用中图形处理器(Graphics Processing Unit,简称GPU)驱动的工作调度场景对本方案进行举例说明。如图4所示,图4为本申请提供的工作队列的架构示例图,如下结合图4对不同场景下的工作流程进行举例说明:
具体的,如图4所示,工作队列主要包括三个部分:工作队列头(workqueue_struct);工作结点(work_struct),可选的,可以为工作结点标记状态,该状态包括:入队状态和未入队状态;事件处理进程(kevent_wq)。
在一种实施方式中,以工作结点D(D_work_struct)为例,来说明工作队列的创建流程,其中涉及工作结点D的添加:
1)构造工作队列头数据结构,也就是图中最左边的方框。
2)构造D_work_struct的数据结构,在其func变量上注册需要执行的操作,即执行方法,调用添加函数将D_work_struct添加到工作队列中,同时将D_work_struct的状态标记为入队状态,完成后唤醒事件处理进程。
在另一种实施方式中,以工作结点A(A_work_struct)为例,来说明整个工作调度的流程:
1)当事件处理进程被操作系统调度时,将工作队列中逻辑顺序排在首位的工作结点作A_work_struct为当前的待处理工作结点;
2)执行A_work_struct的func上注册的操作;
3)操作执行完成后将A_work_struct销毁(执行A_work_struct时可将其从工作队列中取出,故图中的A_work_struct标记为未入队状态),再次执行工作队列中逻辑顺序排在首位的工作结点(此时为图中的B_work_struct),直至工作队列为空,若工作队列为空,事件处理进程进入睡眠状态,直至被唤醒。
在另一种实施方式中,以工作结点B(B_work_struct)为例,来说明工作结点的取消流程:
1)调用取消函数将队列中暂未执行的B_work_struct从队列中取下,并将work的状态标记为未入队;具体的,可以取消B_work_struct与相邻的A_work_struct和C_work_struct之间的逻辑关联(示例为图中小剪刀切断逻辑关联),建立A_work_struct和C_work_struct的逻辑关联;
2)如果B_work_struct已经被执行,则不做操作。
本实施例提供的实时操作系统调度方法中,工作队列包括表征该队列基本信息的工作队列头和工作链表,工作链表由工作结点以链表的结构构成,工作结点中预先注册有执行该工作所需的数据和方法,后续进行任务调度时,可将链表中逻辑顺序排在首位的工作结点作为当前待处理的工作,并基于工作结点的执行方法和执行数据完成相关操作。上述方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在同一工作队列中灵活添加或取消任意类型的工作结点,功能更加丰富,调度方案简便快捷,实现在实时操作系统上兼容Linux的工作队列。
图5为本申请实施例五提供的一种实时操作系统调度装置的结构示意图,如图5所示,该装置包括:
调度模块51,用于根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和经注册的执行方法;
执行模块52,用于根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作。
实际应用中,该实时操作系统调度装置可以为驱动程序、程序代码软件,也可以为存储有相关执行代码的介质,例如,U盘等;或者,该实时操作系统调度装置还可以为集成或安装有相关执行代码的实体装置,例如,芯片、微控制单元(Microcontroller Unit,简称MCU)、电脑等。
其中,链表结构是一种物理单元上非连续、非顺序的结构,链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。本方案的链表中各结点的逻辑顺序是通过各结点的指针链接次序实现的,每个结点包括三个部分:存储执行数据的数据域,存储下一个结点地址的指针域,以及注册在该结点中的执行方法。
实际应用中,可以同时创建多个工作队列(Work Queue),相应的,工作队列的队列头中的基本信息可以用于表征本工作队列,该基本信息可以包括但不限于:队列类型(例如,list)、队列名称(name)。队列头中还可以预置不同功能的函数和指令,例如,Task函数,current函数,end函数,wq指令,lock函数等,以支持对该工作队列的不同功能操作。
具体的,本实施例中应用于实时操作系统的工作队列包括工作队列头和工作链表。工作队列头用于表征该工作队列,优选的,还可以支持对该工作队列的一些功能操作。工作链表由工作结点构成,每个工作结点自身包含有执行数据和执行方法。具体的,在进行任务调度时,调度模块51可以将工作队列的工作链表中逻辑顺序排在首位的工作结点作为当前需要处理的工作,执行模块52根据该工作结点中的执行方法,对该工作结点中的执行数据进行相应操作,完成当前待处理工作结点的工作调度和处理。
后续,执行模块52执行完当前待处理工作结点的工作后,更新当前的工作链表,调度模块51再次查找到工作链表中逻辑顺序排在首位的工作结点执行相关操作,以此循环,直至工作链表中的工作结点均被执行完成。可选的,在任一实施方式的基础上,执行模块52,还用于在根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作之后,销毁所述工作链表中的所述待处理工作结点,并指示调度模块51再次执行所述根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点的步骤。
具体的,当进行工作调度时,调度模块51查找出当前工作链表中逻辑顺序排在首位的工作结点,执行模块52根据该工作结点中的执行方法和执行数据完成该工作结点的工作执行,之后执行模块52从工作链表中销毁该已执行的工作结点,从而更新工作链表,调度模块51再次查找当前工作链表中逻辑顺序排在首位的工作结点并执行完成相应工作,周而复始,直至当前工作链表为空,即所有工作结点均被处理完毕。
通过本实施方式,能够确保工作队列中的工作结点都能被执行,保证工作调度的可靠性。
其中,本实施例中的工作队列的类型可以根据需要设定,可添加任意类型的工作结点,并且确保每个工作结点都能被执行,可异步处理无实时性要求的任务,可运行不能在中断上下文中执行的代码,例如内存释放,关闭中断等。
此外,通过本方案的工作队列还可实现将操作异步执行。具体的,可以为工作队列创建事件处理进程(kevent_wq),将异步操作放到事件处理进程中去执行,具体执行时机为事件处理进程被调度时。相应的,在任一实施方式的基础上,调度模块51,具体用于当事件处理进程被调度时,根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点。
本实施方式,通过为工作队列创建事件处理进程,实现当该事件处理进程被调用时触发对工作队列的工作调度执行,能够实现操作的异步执行。
上述通过事件处理进程触发工作调度的实施方式,可以与任一实施方式结合实施,例如,若工作链表中的所有工作结点均执行完毕,则可使事件处理进程处于睡眠状态,以避免其活跃运行占用的资源和耗时,具体的,在一种实施方式中,所述装置还包括:休眠模块,用于若当前所述工作链表为空,则指示所述事件处理进程进入睡眠状态。此后,当需要再次进行工作调度处理时,可唤醒该事件处理进程。
此外,本方案实现的工作队列,采用动态分配内存的方案。具体的,在向工作队列中添加工作结点的同时,为该工作结点向操作系统申请相应的内存,在该工作结点被执行完毕后,通过前述的事件处理进程可释放为该工作结点分配的结点,从而实现动态分配内存。相比于现有技术中预先为设定了长度限制的工作队列分配固定内存的方案,本方案的工作队列没有长度限制,操作简便,并且通过在工作结点中注册执行方法,能够使得本方案的工作队列支持在工作队列中任意添加多种类型的工作结点。以驱动程序在不同操作系统中进行移植的场景为例,通过本方案的工作队列,在向实时操作系统中移植驱动程序时,无需修改工作队列代码,减少移植开发的工作量,并且添加工作结点的数量无限制。
本实施例提供的实时操作系统调度装置中,工作队列包括表征该队列基本信息的工作队列头和工作链表,工作链表由工作结点以链表的结构构成,工作结点中预先注册有执行该工作所需的数据和方法,后续进行任务调度时,可将链表中逻辑顺序排在首位的工作结点作为当前待处理的工作,并基于工作结点的执行方法和执行数据完成相关操作。上述方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在同一工作队列中灵活添加或取消任意类型的工作结点,功能更加丰富,调度方案简便快捷,实现在实时操作系统上兼容Linux的工作队列。
实际应用中,本方案的工作队列还可以支持对工作结点的多种功能操作。例如,对工作结点的添加功能、对工作结点的取消执行功能,即添加到工作队列后,可以取消未执行的工作等。下面通过以下实施例对这些功能操作进行举例说明。
以工作结点的添加功能为例,图6为本申请实施例六提供的一种实时操作系统调度装置的结构示意图,参考图6,在实施例五的基础上,该实时操作系统调度装置还包括:
工作添加模块61,用于根据添加指令,建立待添加的工作结点并在所述待添加的工作结点中注册需要执行的执行方法;
工作添加模块61,还用于通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾。
具体的,添加工作结点的实施方式可以用于在多种场景。以实景场景举例来说:当需要添加工作结点时,工作添加模块61先构造该工作结点。具体的,工作结点的数据结构可以预先设定,该工作结点包括执行本工作结点所需的执行方法和执行数据,基于这些内容和数据结构,工作添加模块61构造出需要添加的工作结点。工作结点建立之后,工作添加模块61通过调用预设的添加函数,将其添加至工作队列的工作链表末尾。
可选的,为了更便于对各工作结点的统计和管理,可以标记各工作结点的状态。这里的状态可以为不同类型的状态。举例来说,可以基于工作结点是否处于工作队列中,为其标记入队状态或未入队状态,入队状态表示该工作结点位于工作链表,未入队状态则表示该工作结点尚未被添加至工作链表。相应的,在实施例六的基础上,工作添加模块61,还用于在通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾之后,将所述待添加的工作结点的状态标记为入队状态。
通过本实施方式,可以快速方便地获得各工作结点的添加状态,便于实现对工作结点的统计和管理。
此外,在通过事件处理进程触发工作调用的实施方式下,通过添加工作结点还可以触发事件处理进程。由于工作结点的添加表征当前有新的工作需要处理,因此,在添加工作结点时,还可以唤醒事件处理进程,后续事件处理进程被调用时,则执行前述工作调度方案。相应的,在一种实施方式中,所述装置还包括:唤醒模块,用于根据所述添加指令,唤醒事件处理进程。
本实施例提供的实时操作系统调度装置中,当需要添加工作结点时,建立包括执行数据和执行方法的工作结点,并将其添加至工作队列的末尾。上述方案将执行方法注册在工作结点中,能够避免工作调度分配受到工作队列的类型限制,实现在工作队列中灵活添加任意类型的工作结点,功能更加丰富,调度方案简便快捷,本方案的工作队列能够在实时操作系统上兼容Linux。
以工作结点的取消功能为例,图7为本申请实施例七提供的一种实时操作系统调度装置的结构示意图,参考图7,在实施例五或实施例六的基础上,该实时操作系统调度装置还包括:
工作取消模块71,用于接收取消指令,所述取消指令用于指示取消对所述工作链表中待取消工作结点的处理;
工作取消模块71,还用于若所述待取消工作结点尚未被执行,则通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下,否则不执行操作。
具体的,取消工作结点的实施方式可以用于工作调度过程中,例如某工作结点当前已经被添加至工作队列,现在需要取消对该工作结点的执行。以实景场景举例来说:当需要取消工作结点时,工作取消模块71检测该工作结点是否被执行,如果尚未内执行,则工作取消模块71将该工作结点从工作链表中取下,以取消对该工作结点的执行,但如果该工作结点已经被执行,则工作取消模块71不再执行操作。可选的,工作取消模块71可以调用预设的取消函数,将其从工作队列中取下。
实际应用中,各结点的逻辑顺序可以通过结点中携带的地址链接定义,每个工作结点携带一个地址链接(entry),该地址链接指向下一相邻工作结点。相应可选的,当从工作链表中取下某工作结点时,可以将该工作结点的后一相邻工作结点的地址链接写入该工作结点的前一相邻工作结点中。
可选的,同样为了更便于对各工作结点的统计和管理,可以标记各工作结点的状态。这里的状态可以为不同类型的状态。举例来说,同样可以基于工作结点是否处于工作队列中,为其标记入队状态或未入队状态。相应的,在实施例七的基础上,工作取消模块71,还用于在通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下之后,将所述待取消工作结点的状态标记为未入队状态。
通过本实施方式,可以快速方便地获得各工作结点的取消状态,便于实现对工作结点的统计和管理。
本实施例提供的实时操作系统调度装置中,当需要取消工作结点时,基于工作结点的执行状态,若未被执行则从工作队列中将该工作结点取下,以取消对该工作结点的执行。上述方案能够实现对工作结点的取消,功能更加丰富,调度方案简便快捷,本方案的工作队列能够在实时操作系统上兼容Linux。
图8为本申请实施例八提供的实时操作系统调度装置的结构示意图,该实时操作系统调度装置包括:存储器和处理器。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器用于执行所述存储器存储的计算机执行指令,以实现上述实施例中的实时操作系统调度方法。
其中,处理器可能是一个中央处理器(Central Processing Unit,简称为CPU),或者是特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路。
可选的,在具体实现上,如果通信接口、存储器和处理器独立实现,则通信接口、存储器和处理器可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(PeripheralComponent,简称为PCI)总线或扩展工业标准体系结构(Extended Industry StandardArchitecture,简称为EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口、存储器和处理器集成在一块芯片上实现,则通信接口、存储器和处理器可以通过内部接口完成相同间的通信。
本申请实施例九还提供一种计算机可读存储介质,该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述实施例中的方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (14)
1.一种实时操作系统调度方法,其特征在于,包括:
当事件处理进程被调度时,根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和执行方法;
根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作;
销毁所述工作链表中的所述待处理工作结点,并返回执行所述根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点的步骤;
根据添加指令,建立待添加的工作结点并在所述待添加的工作结点中注册需要执行的执行方法;通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾,并为所述待添加的工作结点向所述操作系统申请内存。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若当前所述工作链表为空,则指示所述事件处理进程进入睡眠状态。
3.根据权利要求1所述的方法,其特征在于,所述通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾之后,还包括:
将所述待添加的工作结点的状态标记为入队状态。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述添加指令,唤醒事件处理进程。
5.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收取消指令,所述取消指令用于指示取消对所述工作链表中待取消工作结点的处理;
若所述待取消工作结点尚未被执行,则通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下,否则不执行操作。
6.根据权利要求5所述的方法,其特征在于,所述若所述待取消工作结点尚未被执行,则通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下之后,还包括:
将所述待 取消工作结点的状态标记为未入队状态。
7.一种实时操作系统调度装置,其特征在于,包括:
调度模块,用于当事件处理进程被调度时,根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点,其中,所述工作链表由工作结点构成,所述工作结点包括执行数据和经注册的执行方法;
执行模块,用于根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作;
工作添加模块,用于根据添加指令,建立待添加的工作结点并在所述待添加的工作结点中注册需要执行的执行方法;
所述工作添加模块,还用于通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾,并为所述待添加的工作结点向所述操作系统申请内存;
所述执行模块,还用于在根据所述待处理工作的执行方法,对所述待处理工作的执行数据执行相应操作之后,销毁所述工作链表中的所述待处理工作结点,并指示所述调度模块再次执行所述根据当前工作队列头对应的工作链表,将所述工作链表中逻辑顺序排在首位的工作结点作为当前的待处理工作结点的步骤。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
休眠模块,用于若当前所述工作链表为空,则指示所述事件处理进程进入睡眠状态。
9.根据权利要求7所述的装置,其特征在于,
所述工作添加模块,还用于在通过调用预设的添加函数,将所述待添加的工作结点添加至所述工作链表的末尾之后,将所述待添加的工作结点的状态标记为入队状态。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
唤醒模块,用于根据所述添加指令,唤醒事件处理进程。
11.根据权利要求7或8所述的装置,其特征在于,所述装置还包括:
工作取消模块,用于接收取消指令,所述取消指令用于指示取消对所述工作链表中待取消工作结点的处理;
所述工作取消模块,还用于若所述待取消工作结点尚未被执行,则通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下,否则不执行操作。
12.根据权利要求11所述的装置,其特征在于,
所述工作取消模块,还用于在通过调用预设的取消函数,将所述待取消工作结点从所述工作链表中取下之后,将所述待取消工作结点的状态标记为未入队状态。
13.一种实时操作系统调度装置,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,以执行如权利要求1-6中任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,该计算机可读存储介质中存储有程序指令,所述程序指令被处理器执行时实现权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711283966.0A CN109901917B (zh) | 2017-12-07 | 2017-12-07 | 实时操作系统调度方法及装置、计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711283966.0A CN109901917B (zh) | 2017-12-07 | 2017-12-07 | 实时操作系统调度方法及装置、计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109901917A CN109901917A (zh) | 2019-06-18 |
CN109901917B true CN109901917B (zh) | 2022-04-22 |
Family
ID=66939048
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711283966.0A Active CN109901917B (zh) | 2017-12-07 | 2017-12-07 | 实时操作系统调度方法及装置、计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109901917B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111475312B (zh) * | 2019-09-12 | 2021-05-18 | 北京东土科技股份有限公司 | 基于实时操作系统的消息驱动方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484510A (zh) * | 2016-09-27 | 2017-03-08 | 上海斐讯数据通信技术有限公司 | 一种基于Linux内核定时器的时间管理方法 |
CN107329807A (zh) * | 2017-06-29 | 2017-11-07 | 北京京东尚科信息技术有限公司 | 数据延迟处理方法和装置、计算机可读存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6721947B1 (en) * | 2000-03-13 | 2004-04-13 | International Business Machines Corporation | System, method and program for producing a customized response |
CN100349149C (zh) * | 2003-01-24 | 2007-11-14 | 中兴通讯股份有限公司 | 嵌入式实时操作系统的进程调度方法 |
US8135869B2 (en) * | 2005-06-30 | 2012-03-13 | Intel Corporation | Task scheduling to devices with same connection address |
CN102591703B (zh) * | 2011-01-10 | 2015-05-06 | 中兴通讯股份有限公司 | 操作系统的任务调度方法、装置及计算机 |
US9146777B2 (en) * | 2013-01-25 | 2015-09-29 | Swarm Technology Llc | Parallel processing with solidarity cells by proactively retrieving from a task pool a matching task for the solidarity cell to process |
CN103414771B (zh) * | 2013-08-05 | 2017-02-15 | 国云科技股份有限公司 | 一种云计算环境下节点间长任务操作的监测方法 |
US9207978B2 (en) * | 2013-10-09 | 2015-12-08 | Wipro Limited | Method and system for efficient execution of ordered and unordered tasks in multi-threaded and networked computing |
US20150178125A1 (en) * | 2013-12-23 | 2015-06-25 | Oracle International Corporation | Reducing synchronization of tasks in latency-tolerant task-parallel systems |
US9477521B2 (en) * | 2014-05-29 | 2016-10-25 | Netapp, Inc. | Method and system for scheduling repetitive tasks in O(1) |
CN105204837B (zh) * | 2014-06-27 | 2021-02-09 | 南京南瑞继保电气有限公司 | 一种逻辑编程的实现方法和装置 |
-
2017
- 2017-12-07 CN CN201711283966.0A patent/CN109901917B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484510A (zh) * | 2016-09-27 | 2017-03-08 | 上海斐讯数据通信技术有限公司 | 一种基于Linux内核定时器的时间管理方法 |
CN107329807A (zh) * | 2017-06-29 | 2017-11-07 | 北京京东尚科信息技术有限公司 | 数据延迟处理方法和装置、计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
Tasks Scheduling and resource allocation in distributed cloud environments;R.K. Uskenbayeva等;《2014 14th International Conference on Control, Automation and Systems (ICCAS 2014)》;20141218;第1373-1376页 * |
基于OSEK/VDX操作系统的任务管理机制设计;陈卓等;《计算机工程》;20060620;第82-84页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109901917A (zh) | 2019-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11550627B2 (en) | Hardware accelerated dynamic work creation on a graphics processing unit | |
US9703603B1 (en) | System and method for executing accelerator call | |
US8963933B2 (en) | Method for urgency-based preemption of a process | |
CN110678847A (zh) | 用于gpu任务调度的连续分析任务 | |
JP7030514B2 (ja) | ワークスティーリングサポートを有する効率的同期バリア技術 | |
JP6336399B2 (ja) | マルチスレッドコンピューティング | |
WO2006055864A2 (en) | Method and apparatus for implementing task management of computer operations | |
US8561070B2 (en) | Creating a thread of execution in a computer processor without operating system intervention | |
JP2007537504A (ja) | コンピュータ装置用のオペレーティング・システムの、またはそれに関する改良 | |
US20150234679A1 (en) | Method to communicate task context information and device therefor | |
US20160371123A1 (en) | Data Processing Method and Apparatus | |
EP1031925A2 (en) | Cooperative processing of tasks in multi-threaded computing system | |
CN112035238A (zh) | 任务调度处理方法、装置、集群系统及可读存储介质 | |
CN105204933A (zh) | 基于单进程的多任务切换执行方法、系统及处理器 | |
CN112764904A (zh) | 基于多任务系统中防止低优先级任务饿死的方法 | |
CN109901917B (zh) | 实时操作系统调度方法及装置、计算机可读存储介质 | |
CN117834556A (zh) | 多队列组织和调度方法、系统、存储介质及电子设备 | |
CN105183854A (zh) | 一种数据库卸载数据的调度方法 | |
JP2008537248A (ja) | デジタルシグナルプロセッサ上でのマルチタスクの実施 | |
CN116302420A (zh) | 并发调度方法、装置、计算机设备及计算机可读存储介质 | |
CN116360941A (zh) | 一种面向多核dsp的并行计算资源自组织调度方法及系统 | |
US20200004586A1 (en) | Cooperative workgroup scheduling and context prefetching | |
CN115904644A (zh) | 任务调度方法、电子设备和计算机程序产品 | |
US9201688B2 (en) | Configuration of asynchronous message processing in dataflow networks | |
CN103714511A (zh) | 一种基于gpu的分支处理方法及装置 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |