一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

嵌入式任务的状态检测方法、设备、系统及存储介质与流程

2022-03-09 00:43:57 来源:中国专利 TAG:


1.本技术涉及嵌入式技术领域,尤其涉及一种嵌入式任务的状态检测方法、设备、系统及存储介质。


背景技术:

2.在嵌入式操作系统上,单个任务或多个任务长时间占用中央处理器(central processing unit,cpu),将导致其他任务因长时间得到不到调度而被饿死。当任务饿死发生时,系统运行将产生严重隐患,因此有必要及时发现系统中是否发生任务饿死现象并及时处理。在现有嵌入式操作系统中,通常检测系统中是否存在cpu利用率超过设定阈值的任务来检测系统是否发生任务撑死,通过检测是否发生任务撑死来检测系统是否发生任务饿死。
3.这种检测任务饿死的方式很容易误判,并且不能十分准确地检测任务饿死。例如,当两个同优先级的任务进入死循环,基于轮询调度算法,两个任务cpu利用率各为50%,从单个任务的视角来看,其cpu利用率并未达到设定阈值(例如90%),因此会误判为系统中未发生任务撑死,进而误判系统中未发生任务饿死。另外,在某一任务负载较重时,这种方式也容易误判,比如系统中某个任务的cpu利用率超过设定阈值(例如90%),但其并未死循环,而其他负载较轻的任务也没有被饿死,该方式会误判为系统中发生任务饿死。


技术实现要素:

4.本技术的多个方面提供一种嵌入式任务的状态检测方法、设备、系统及存储介质,用以准确地监控嵌入式操作系统中的任务饿死问题,进而解决任务饿死引起的系统运行隐患。
5.本技术实施例提供一种嵌入式任务的状态检测方法,包括:在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务,记录所述任务处于就绪态的就绪时间;以及在根据所述就绪时间识别到第一任务的情况下,针对所述第一任务进行超时调度处理。
6.本技术实施例还提供一种嵌入式任务的状态检测方法,包括:在嵌入式操作系统运行过程中,监控到特定锁,记录所述特定锁的占锁时间;在根据所述占锁时间识别到目标锁的情况下,获取请求所述目标锁的任务,并针对所述任务进行超时调度处理。
7.本技术实施例还提供一种嵌入式操作系统,包括:任务监控模块,用于在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务;就绪时间记录模块,用于记录所述任务处于就绪态的就绪时间;以及处理模块,用于在根据所述就绪时间识别到第一任务的情况下,针对所述第一任务进行超时调度处理。
8.本技术实施例还提供一种嵌入式操作系统,包括:锁监控模块,用于在嵌入式操作系统运行过程中,监控到特定锁;占锁时间记录模块,用于记录所述特定锁的占锁时间;以及处理模块,用于在根据所述占锁时间识别到目标锁的情况下,获取请求所述目标锁的任务,并针对所述任务进行超时调度处理。
9.本技术实施例还提供一种嵌入式设备,包括:存储器和处理器;所述存储器中存储有嵌入式操作系统对应的程序代码;所述处理器与所述存储器耦合,用于执行所述嵌入式操作系统对应的程序代码,以用于:在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务,记录所述任务处于就绪态的就绪时间;以及在根据所述就绪时间识别到的第一任务的情况下,针对所述第一任务进行超时调度处理。
10.本技术实施例还提供一种嵌入式设备,包括:存储器和处理器;所述存储器中存储有嵌入式操作系统对应的程序代码;所述处理器与所述存储器耦合,用于执行所述嵌入式操作系统对应的程序代码,以用于:在嵌入式操作系统运行过程中,监控到特定锁,记录所述特定锁的占锁时间;在根据所述占锁时间识别到目标锁的情况下,获取请求所述目标锁的任务,并针对所述任务进行超时调度处理。
11.本技术实施例还提供一种存储有嵌入式操作系统对应的程序代码的计算机可读存储介质,当所述嵌入式操作系统对应的程序代码被处理器执行时,致使所述处理器实现本技术实施例提供的嵌入式任务的状态检测方法中的步骤。
12.本技术实施例还提供一种任务状态检测方法,包括:在非嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务;记录所述任务处于就绪态的就绪时间;以及在根据所述就绪时间识别到第一任务的情况下,针对所述第一任务进行超时调度处理。
13.本技术实施例还提供一种非嵌入式操作系统,包括:任务监控模块,用于在非嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务;就绪时间记录模块,用于记录所述任务处于就绪态的就绪时间;以及处理模块,用于在根据所述就绪时间识别到第一任务的情况下,针对所述第一任务进行超时调度处理。
14.本技术实施例还提供一种任务状态检测方法,包括:在非嵌入式操作系统运行过程中,监控到特定锁,记录所述特定锁的占锁时间;在根据所述占锁时间识别到目标锁的情况下,获取请求所述目标锁的任务,并针对所述任务进行超时调度处理。
15.本技术实施例还提供一种非嵌入式操作系统,包括:锁监控模块,用于在非嵌入式操作系统运行过程中,监控到特定锁;占锁时间记录模块,用于记录所述特定锁的占锁时间;处理模块,用于在根据所述占锁时间识别到目标锁的情况下,获取请求所述目标锁的任务,并针对所述任务进行超时调度处理。
16.在本技术实施例中,在监控到从非就绪态进入就绪态的任务时,记录该任务处于就绪态的就绪时间,就绪时间的长短表示该任务得不到调度的时间,通过任务得不到调度的时间来监控任务是否饿死,准确度更高,不会误判。例如,对于因任务a和b死循环导致任务c得不到调度被饿死的情况,在任务c的就绪时间超过设定时间阈值后便会监控到,不会误判。又例如,对于系统中任务a负载较重超过cpu利用率阈值(如90%),但其它任务因负载较轻也被调度到的情况,负载较轻的其它任务的就绪时间不会超过设定时间阈值,因此也不会因为任务a的负载较重而被误判为饿死。
附图说明
17.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
18.图1a为本技术示例性实施例提供的一种嵌入式设备的组成示意图;
19.图1b为本技术示例性实施例提供的一种嵌入式操作系统的结构示意图;
20.图1c为本技术示例性实施例提供的另一种嵌入式操作系统的结构示意图;
21.图1d为本技术示例性实施例提供的又一种嵌入式操作系统的结构示意图;
22.图2为本技术示例性实施例提供的一种任务状态跳转关系示意图;
23.图3a为本技术示例性实施例提供的一种嵌入式任务状态检测方法的流程示意图;
24.图3b为本技术示例性实施例提供的另一种嵌入式任务状态检测方法的流程示意图;
25.图3c为本技术示例性实施例提供的又一种嵌入式任务状态检测方法的流程示意图;
26.图4为本技术示例性实施例提供的再一种嵌入式任务状态检测方法的流程示意图。
具体实施方式
27.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
28.针对现有嵌入式操作系统中检测任务饿死的方式容易出现误判的技术问题,在本技术实施例中,在有任务从非就绪态进入就绪态时,记录任务处于就绪态的就绪时间,就绪时间的长短表示该任务得不到调度的时间,通过任务得不到调度的时间来监控任务是否饿死,准确度更高,不会误判。
29.以下结合附图,详细说明本技术各实施例提供的技术方案。
30.图1a为本技术示例性实施例提供的一种嵌入式设备的组成示意图。该嵌入式设备是根据应用需求或应用场景量身定做的专用计算机应用系统。如图1a所示,该嵌入式设备100包括:硬件子系统10和软件子系统20;硬件子系统10是嵌入式设备100中软件子系统20运行的基础,它提供了软件子系统20运行的物理平台和通信接口;软件子系统20是嵌入式设备100的控制核心,控制整个设备的运行,提供人机交互的信息等。
31.如图1a所示,硬件子系统10包括嵌入式的处理器101和与处理器101耦合的存储器102。可选地,硬件子系统10还可以包括一些其它外围硬件模块,例如输入接口103、输出接口104、电源管理模块105和/或用于人机交互的触摸屏106、键盘107和/或鼠标108等。在图1a中,以虚线框表示可选的外围硬件模块。
32.其中,处理器101是嵌入式设备100的硬件核心,可以采用可编程片上系统(system on programmable chip,sopc)或片上系统(system on chip,soc)或中央处理器(central processing unit,cpu)或数字信号处理器(digital signal processing,dsp)或微控制单元(microcontroller unit,mcu)实现,但不限于此。
33.存储器102负责为嵌入式设备100提供存储空间,可用于存储软件子系统20对应的各种程序代码,并可被配置为存储其它各种数据以支持在嵌入式设备100上的操作。这些数据的示例包括用于在嵌入式设备100上操作的任何应用程序或方法的指令,消息,图片,视频等。
34.存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
35.输入接口103和输出接口104是嵌入式设备100与外界通信的通信接口,可以采用但不限于下述列举的接口方式:usb总线、串口、1394总线、以太网、iis、can、dma或gpio。
36.电源管理模块105负责为嵌入式设备100的各种硬件模块提供电力。电源管理模块105可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
37.触摸屏106、键盘107和/或鼠标108,作为嵌入式设备100的输入设备,可响应用户的输入指令向嵌入式设备100输入相关信息;另外,触摸屏106还可作为嵌入式设备100的输出设备,向用户输出相关信息。当然,除了触摸屏106之外,嵌入式设备100还可以包括音频模块109,用于接收用户的语音指令,或者以语音方式向用户输出相关信息。
38.如图1a所示,软件子系统20包括嵌入式操作系统201,嵌入式操作系统201属于系统软件,负责控制和管理嵌入式设备100的各种软硬件资源,例如硬件驱动、内存管理以及任务管理等。该嵌入式操作系统201对应的程序代码存储在存储器102中。其中,在嵌入式设备100启动或正常运行过程中,处理器101可以加载存储器102中存储的嵌入式操作系统201对应的程序代码,实现嵌入式操作系统201的各种控制或驱动功能,以便成功启动嵌入式设备100或确保嵌入式设备100的正常运行。其中,嵌入式操作系统201可以是实时操作系统(real time operating system,rtos),也可以是非实时操作系统。rtos是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。例如,嵌入式操作系统201可以是实时操作系统μc/os-ii或vxworks,也可以是嵌入式linux或windows embedded等非实时操作系统。
39.进一步,如图1a所示,软件子系统20还可以包括嵌入式应用软件202,嵌入式应用软件202属于应用软件,面向具体应用需求或应用场景。根据应用需求或应用场景的不同,嵌入式应用软件202所实现的功能会有所不同。例如,嵌入式应用软件202可以是手机软件、路由器软件、交换机软件或飞控软件等。需要说明的是,应用软件202为可选,而非必选,具体可根据嵌入式设备的应用需求而定。
40.在本实施例中,重点关注嵌入式操作系统201,尤其是关注嵌入式操作系统201在任务管理方面的功能。在任务管理方面,本实施例中的嵌入式操作系统201与传统嵌入式设备中的嵌入式操作系统不同,本实施例嵌入式设备100中的嵌入式操作系统201除了具备传统的任务管理功能之外,还可以进行任务状态的检测,发现任务饿死现象并针对被饿死的任务进行相应处理。其中,任务饿死是指因为各种原因任务长时间得不到调度的任务状态,例如任务可能会因为无法得到处理器资源、io资源或者其它资源,而长时间得不到调度。其中,任务具有等待被调度的时间上限,如果嵌入式操作系统201不能保证任务在其等待被调度的时间上限内得到调度,就会使该任务长时间得到不到调度,当等待被调度的时间给任务的推进和响应带来明显不利影响时,可认为发生了任务饿死现象。其中,处理器101执行存储器102中存储的嵌入式操作系统201对应的程序代码,可实现传统任务管理功能以及与
任务状态检测相关的各种功能。下面围绕任务管理,对本实施例中的嵌入式操作系统201的工作原理进行详细说明:
41.其中,任务管理是嵌入式操作系统201的主要工作。在本实施例中,任务管理包括但不限于:任务创建、任务删除、任务调度、改变任务优先级以及任务状态检测等工作。需要说明的是,任务是个概念化的称谓,在本实施例中,可以将任务理解为嵌入式设备100可以实现的某个功能,嵌入式设备100可以实现的功能是在设计嵌入式设备100时划分出的,其中,应用需求或应用场景不同,嵌入式设备100可以实现的功能也会有所不同。在嵌入式设备100中,其任务可由线程或进程完成。
42.在本实施例中,嵌入式设备100中的任务具有以下几种状态:就绪态(ready)、运行态(running)、阻塞态(blocked)和挂起态(suspended)。当然,除了这几种状态之外,嵌入式设备100中的任务还可以具有其它状态,对此不做限定。其中,就绪态:是指任务能够执行,但是还没有执行的状态,是因为有一个优先级相同或更高的任务正在占用处理器资源。就绪态不同于阻塞态和挂起态。运行态:是指任务正在被实际执行的状态,处于运行态的任务会占用处理器资源。需要说明的是,同一时刻处于运行态的任务数量与处理器101的内核数量有关;如果处理器101只有一个内核,则在同一时刻只能有一个任务处于运行态;如果处理器101有多个内核,则在同一时刻可以有多个任务同时处于运行态。阻塞态:是指任务正在等待一个临时或外部事件的状态,换句话说,如果一个任务需要等待一个临时或外部事件,则该任务会进入阻塞态。处于阻塞态的任务会对应一个阻塞延时,在等待阻塞延时期间,任务会等待临时或外部事件成功发生,在该阻塞延时结束后,任务会被解除阻塞,即使任务等待的事件未发生。另外,处于阻塞态的任务不占用任何处理器的时间,且不会被选择进入运行态。挂起态:也是一种任务状态,处于挂起态的任务除非被恢复,否则该任务永远不会回到就绪态,也不会被选择进入运行态。与处于阻塞态的任务不同,处于挂起态的任务没有相应的延时时间。
43.其中,任务会在不同状态之间进行转换,任务状态之间的转换关系如图2所示。图2所示任务状态的转关关系为:在新建一个任务时,新建的任务会从未创建态进入就绪态;处于就绪态的任务被调度时,会进入运行态;处于运行态的任务被其它任务(例如更高优先级的任务)抢占时,该任务会从运行态返回到就绪态;处于运行态的任务需要等待临时或外部事件发生时,会进入阻塞态;当等待的临时或外部事件在对应的阻塞延时内成功发生时,处于阻塞态的任务会重新进入运行态;当等待的临时或外部事件在对应的阻塞延时内未发生时,处于阻塞态的任务会重新进入就绪态。
44.另外,处于运行态的任务也可以通过api调用将自己挂起,从运行态进入挂起态;或者,处于就绪态的任务也可以被当前处于运行态的任务挂起,从就绪态进入挂起态。处于挂起态的任务只能等待当前处于运行态的任务中断或将其唤醒,处于挂起态的任务被唤醒后会进入就绪态。需要说明的是,无论是从挂起态进入就绪态的任务,还是从未创建态进入就绪态的任务,或者是从阻塞态进入就绪态的任务,在该任务进入就绪态时,如果该任务的优先级比当前处于运行态的任务的优先级高,系统会立即将处理器资源分配给该进入就绪态的任务,该任务会立即进入运行态。其中,任务之间的优先级也由嵌入式操作系统201负责分配,对此不做详述。
45.在本实施例中,嵌入式操作系统201除了负责上文描述的各种任务管理操作之外,
还可以在嵌入式设备100运行过程中,监控是否有任务从非就绪态进入就绪态,若监控到从非就绪态进入就绪态的任务,则开始统计该任务处于就绪态的就绪时间,并记录该任务处于就绪态的就绪时间。
46.对任一任务来说,其就绪时间是指该任务处于就绪状态的时长,该就绪时间可以直观地反应其对应的任务是否处于饿死状态。其中,饿死状态是指任务因为某种原因而长时间得到不到调度的状态,且任务得到不到调度的时间已经超过了该任务可以等待被调度的时间上限,因此也可以将任务饿死状态称为任务超时调度状态。基于此,嵌入式操作系统201还可以根据任务的就绪时间,识别是否存在处于超时调度状态的第一任务,并在识别到第一任务的情况下,针对该任务进行超时调度处理,以便于及时解决因任务被超时调度而引起的各种异常情况。在本技术实施例中,将处于超时调度状态的任务称为第一任务,第一任务可以是处于就绪态的任何任务,且其数量可以是一个,也可以是多个。在此说明,在本技术各实施例中,“饿死”与“超时调度”具有相同含义,在行文描述上可使用其中任何一个,且彼此之间也可相互替换。
47.可选地,在本技术一些实施例中,可以设定一个就绪时间阈值,如果某一任务的就绪时间大于设定的就绪时间阈值,说明该任务长时间都没有得到调度,处于饿死状态(或超时调度状态);反之,如果某一任务的就绪时间小于或等于设定的就绪时间阈值,说明该任务等待调度的时间还不算长,并未处于饿死状态,可以继续等待调度。其中,就绪时间阈值可以大于或等于任务等待被调度的时间上限。
48.基于上述,嵌入式操作系统201还可以监控处于就绪态的任务中是否出现就绪时间大于设定就绪时间阈值的任务,在监控到就绪时间大于设定就绪时间阈值的任务的情况下,可以判定该任务被超时调度(或饿死),于是针对该任务进行超时调度处理,以便于及时解决因任务被超时调度引起的各种异常情况。为便于描述和区分,在这些实施例中,就绪时间大于设定就绪时间阈值的任务即为第一任务。在本实施例中,并不限定就绪时间阈值的取值,例如可以是10s、30s、1分钟、2分钟、5分钟等。
49.在本实施例中,非就绪态是指除就绪态之外的其它任务状态,例如可以是未创建态、运行态、阻塞态或挂起态。基于此,在本实施例中,监控从非就绪态进入就绪态的任务的过程,可以包括以下至少一种:
50.情况a1:当监控到有新建任务时,确定该新建任务会从未创建态进入就绪态;
51.情况a2:当监控到处于阻塞态的任务在阻塞延时结束时,确定该处于阻塞态的任务可从阻塞态进入就绪态;
52.情况a3:当监控到处于运行态的任务被其它任务抢占时,确定该处于运行态的任务可从运行态进入就绪态;
53.情况a4:当监控到处于挂起态的任务被正在运行的任务唤醒时,确定该处于挂起态的任务可从挂起态进入就绪态。
54.也就是说,嵌入式操作系统201可在运行过程中,监控是否有上述情况a1-a4中的情况发生,当监控到有任意一种情况发生时,开始统计并记录该情况下进入就绪态的任务处于就绪态的就绪时间,为进一步发现任务超时调度(或饿死)问题提供基础。
55.进一步可选地,结合图2所示任务状态之间的转换关系可知,对任一任务来说,除了可以从挂起态、运行态、阻塞态或未创建态进入就绪态之外,任务也可以从就绪态进入挂
起态或运行态。基于此,嵌入式操作系统201还会监控从就绪态进入非就绪态的任务,并在监控到从就绪态进入非就绪态的任务时,将该任务的就绪时间清零,以保证就绪时间能够准确地反应任务等待调度的时长。其中,监控从就绪态进入非就绪态的任务的过程,包括以下至少一种:
56.情况b1:当监控到处于就绪态的任务被调度时,确定该处于就绪态的任务从就绪态进入运行态(即非就绪态);
57.情况b2:当监控到处于就绪态的任务被正在运行的任务挂起时,确定该处于就绪态的任务从就绪态进入挂起态(即非就绪态)。
58.也就是说,嵌入式操作系统201可在运行过程中,监控是否有上述情况b1-b2中的情况发生,当监控到有任意一种情况发生时,将该情况下进入非就绪态的任务的就绪时间清零。
59.由上述可知,在本实施例中,通过对嵌入式设备中的嵌入式操作系统进行改进,提供一种具有任务状态检测功能的嵌入式操作系统201,从系统级解决任务超时调度(即饿死)的检测问题;而且,利用任务处于就绪态的时间长短表示该任务得不到调度的时间,通过任务得不到调度的时间来监控任务是否超时调度(即饿死),准确度更高,不会误判。
60.例如,假设嵌入式设备100运行过程中,同时存在任务a、任务b和任务c,且任务a和b处于死循环,即任务a和b会一直占用处理器资源,此种情况下,任务c会因为任务a和b死循环而得不到调度,从而被饿死。在本实施例中,嵌入式操作系统201可以在监控到任务c进入就绪态时,开始记录任务c处于就绪态的就绪时间,当任务c的就绪时间超过设定就绪时间阈值后,便会将任务c判定饿死任务(即任务c发生了饿死现象),并会针对任务c进行超时调度处理,而且无论将处理器资源利用率阈值设定为多少,都可以成功且及时检测到任务c被饿死(即超时调度),不会出现因为任务a和b对处理器资源的利用率均未达到设定的资源利用率阈值而将任务c误判为未被饿死的情况。
61.又例如,假设嵌入式设备100运行过程中,同时存在任务a、任务b和任务c,且任务a的负载较重导致任务a对处理器资源的利用率超过了设定的利用率阈值(如90%),但是任务b和c因为其负载较轻也都得到了调度,即嵌入式操作系统201在监控到任务b和c进入就绪态时,开始记录任务b和c处于就绪态的就绪时间,且任务b和c均的就绪时间未超过设定的就绪时间阈值,该情况下,任务b和c并未被饿死,因此并不会因为任务a对处理器资源的利用率超过了设定的利用率阈值而将任务b和c误判为饿死任务。
62.在本技术实施例中,在监控到被饿死的第一任务时,可以针对第一任务进行超时调度处理。在本技术实施例中,并不限定针对第一任务进行超时调度处理的方式。例如,可以输出第一任务的信息,以对第一任务进行超时调度告警(即饿死告警)。其中,第一任务的信息包括第一任务的标识信息,例如第一任务的标识信息可以是第一任务的名称,或者是第一任务对应的线程号或进程号。进一步可选地,第一任务的信息还可以包括第一任务处于就绪态的就绪时间等其它信息。
63.除上述超时调度处理方式之外,在本技术可选实施例中,还可以同时监控是哪个任务引起第一任务被饿死的,在本实施例中,将引起第一任务饿死的任务称为第三任务,进而触发对第一任务的饿死告警,其中,在对第一任务的告警处理中,不仅可以输出被饿死的第一任务是哪个,还可以同时输出引起第一任务饿死的第三任务是哪个。其中,第三任务是
长时间占用第一任务所需资源且一直不释放的任务。为了便于在监控被饿死任务的同时,监控引起任务饿死的第三任务是哪个,在本技术实施例中,可以设定一周期,嵌入式操作系统201可按照设定的周期,以周期为粒度,记录每个周期内被调度执行的各任务在该周期内的运行时间。需要说明的是,对于处理器101包含单个内核的情况,在每个周期内被调度执行的任务可能是多个,多个任务被分时段调度执行,即同一时刻只有一个任务处于运行态,而且同一任务在同一周期内可能被调度执行一次,也可能被多次调度执行。对于一个任务在同一周期内被多次调度执行的情况,该任务在该周期内的运行时间是被多次调度执行的时间之和。对于一个任务在同一周期内被调度执行一次的情况,该任务在该周期内的运行时间就是此次被调度执行的时间。其中,任务每次被调度执行的时间是指任务占用处理器资源的时间。进一步,在每个周期结束时,可以将所记录的该周期内各个被调度执行的任务的运行时间清零,以便在下一个周期重新记录被调度执行的任务的运行时间。
64.基于上述,当识别到第一任务时,嵌入式操作系统201可获取当前周期内运行时间大于设定运行时间阈值的任务作为引起第一任务饿死的第三任务。在本实施例中,并不限定运行时间阈值的取值,例如可以是30s、1分钟、5分钟等。或者,当识别到第一任务时,嵌入式操作系统201可获取当前周期内运行时间最长的任务作为引起第一任务饿死的第三任务。可选地,在一可选实施例中,在识别到第一任务时,嵌入式操作系统201可以直接获取当前周期内运行时间最长的任务作为引起第一任务饿死的第三任务。在另一可选实施例中,在识别到第一任务时,嵌入式操作系统201可判断当前周期内是否存在运行时间大于设定运行时间阈值的任务;若存在,则获取当前周期内运行时间最长的任务作为引起第一任务饿死的第三任务;若不存在,则获取当前周期内运行时间最长的任务作为引起第一任务饿死的第三任务。
65.进一步,在监控到第一任务和与第一任务对应的第三任务之后,可以输出第一任务的信息以及第三任务的信息,以触发对第一任务的饿死告警。其中,第三任务的信息包括第三任务的标识信息,例如第三任务的名称,或者第三任务对应的线程号或进程号。进一步可选地,第三任务的信息还可以包括第三任务在当前周期内的运行时间等信息。需要说明的是,本技术实施例中的任务可以是系统级的任务,也可以是应用级的任务,即第一任务或第三任务可能是系统级的任务,也可能是应用级的任务。其中,对第一任务的饿死告警可以作为关键信息显示给系统或应用开发者,以供系统或应用开发者定位系统或应用问题。需要说明的是,除了针对第一任务进行饿死告警之外,还可以采用静默重启第三任务的方式,以使第一任务能够得到调度,进而解决第一任务的饿死问题,从而达到对第一任务进行饿死处理的目的。其中,第三任务被静默重启后,会释放所占用的处理器资源,并会重新进入就绪态,使得处于就绪态的其它任务(例如第一任务)获得被调度的机会,解决任务饿死问题。
66.在本实施例中,嵌入式操作系统201还支持锁机制,从而在多任务的情况下,保证操作数据的正确性和/或一致性。在本实施例中,并不限定嵌入式操作系统201所支持的锁类型,例如包括但不限于:互斥锁(mutex)或自旋锁等。其中,互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁有两种状态,即上锁(lock)和解锁(unlock)。如果一个任务锁定了一个需要互斥的共享资源,在它解除锁定之前,其它任务无法锁定这个共享资源。自旋锁也是为实现保护共享资源而提出一种锁机制。自旋锁与互斥锁比较类似,它们都
是为了解决对某项共享资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个任务获得互斥锁或自旋锁。但是,互斥锁和自旋锁在调度机制上略有不同。对于互斥锁,如果共享资源的互斥锁已经被某个任务持有,其它针对该共享资源申请互斥锁的任务只能进入睡眠状态。但是,自旋锁不会引起其它针对该共享资源申请自旋锁的任务睡眠,如果自旋锁已经被别的任务持有,则自旋锁的申请者就一直循环在那里不断判断该自旋锁的持有者是否释放了自旋锁。当然,除了互斥锁或自旋锁之外,嵌入式操作系统201还支持共享锁、公平锁等其它各种锁机制,对此不再详述。
67.在支持锁机制的情况下,如果锁机制的使用不合理,例如某个任务获得锁后因代码逻辑错误忘记释放锁或因为系统出现死锁,也会导致其它需要申请相应锁的任务因无法获得锁而发生超时调度(即被饿死)问题。需要说明的是,并不是所有的锁都会引起其它申请锁的任务因无法获得锁而被饿死,因此,在本技术实施例中,将可能引起任务饿死的锁称为特定锁。针对特定锁,在本技术实施例中,嵌入式操作系统201还可以监控是否出现特定锁,并在监控到特定锁时,记录特定锁的占锁时间;其中,特定锁的占锁时间是指特定锁被当前任务占用或持有的时间长度。在本技术实施例中,通过特定锁的占锁时间的长短表示特定锁是否发生死锁或发生任务忘记释放特定锁的问题。基于此,可以根据占锁时间识别是否存在目标锁,并在识别到目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。目标锁是指被当前任务长时间占用一直不释放的特定锁。
68.在一可选实施例中,可以设定占锁时间阈值,如果特定锁的占锁时间大于设定占锁时间阈值,说明特定锁可能发生死锁或发生任务忘记释放特定锁的问题。基于此,嵌入式操作系统201还可以监控是否出现占锁时间大于设定占锁时间阈值的目标锁,并在监控到占锁时间大于设定占锁时间阈值的目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。在该实施例中,目标锁是占锁时间大于设定占锁时间阈值的特定锁;请求目标锁的第二任务是指因为一直申请不到目标锁而被饿死(或超时调度)的任务,故可以针对第二任务进行超时调度处理。进一步,当特定锁被释放时,可以将特定锁的占锁时间清零。
69.在一可选实施例中,特定锁包括互斥锁和/或自旋锁。在该实施例中,嵌入式操作系统201还可以监控是否出现互斥锁或自旋锁,并在监控到互斥锁或自旋锁时,记录互斥锁或自旋锁的占锁时间;判断互斥锁或自旋锁的占锁时间是否大于设定占锁时间阈值,若是,将申请互斥锁或自旋锁的任务作为被饿死(或超时调度)的第二任务,并针对第二任务进行超时调度处理。进一步,当互斥锁或自旋锁被释放时,可以将互斥锁或自旋锁的占锁时间清零。在本实施例中,并不限定占锁时间阈值的取值,例如可以是10s、30s、1分钟、2分钟、5分钟等。
70.在本实施例中,针对第二任务进行超时调度处理的方式,与针对第一任务进行超时调度处理的方式相同或相似,在此仅做简单说明,详细描述可参见前述实施例。其中,针对第二任务进行超时调度处理的方式包括:输出第二任务的信息,以触发对第二任务的饿死告警处理;或者,输出第二任务的信息以及当前占用目标锁的任务的信息,以触发第二任务的超时调度告警(或饿死告警);或者,静默重启当前占用目标锁的任务,以使第二任务能够得到调度,从而解决第二任务的饿死问题。其中,第二任务的信息包括第二任务的标识信
息,例如第二任务的名称,或第二任务对应的线程号或进程号。当前占用目标锁的任务是指引起第二任务饿死的任务,该任务的信息包括该任务的标识信息,例如该任务的名称,或该任务对应的线程号或进程号。进一步,第二任务的信息中还可以包含第二任务申请目标锁的申请时间;相应地,当前占用目标锁的任务的信息中还可以包含该任务占用目标锁的时间,即占锁时间。
71.在本技术一些可选实施例中,嵌入式操作系统201一方面可以记录任务处于就绪态的就绪时间并根据任务处于就绪态的就绪时间来检测是否出现任务饿死,另一方面可以记录特定锁的占锁时间并根据特定锁的占锁时间来检测是否出现任务饿死,可以更加全面的检测系统中出现的任务饿死问题。需要说明的是,在本技术实施例中,并不限定这两种检测方式的执行顺序,两种检测方式可以并行执行,也可以按照设定的顺序先后执行。另外需要说明的是,两种检测方式可以择一使用,也可以结合使用。在择一使用的情况下,可以单独采用基于任务就绪态的就绪时间来检测是否出现任务饿死的检测方式,也可以单独采用基于特定锁的占锁时间来检测是否出现任务饿死的检测方式。
72.其中,如果单独采用特定锁的占锁时间来检测是否出现任务饿死的检测方式,则嵌入式操作系统201还可以在运行过程中,监控是否出现特定锁,并在监控到特定锁时,记录特定锁的占锁时间;在根据特定锁识别到目标锁的情况下,获取请求目标锁的任务,并针对该任务进行超时调度处理。可选地,可以将占锁时间大于设定占锁时间阈值的特定锁作为目标锁。该实施例的详细描述可参见前述实施例,在此不再赘述。
73.在此特别说明:在上述实施例中,以嵌入式操作系统201为执行主体进行描述,但本领域技术人员应该理解,从嵌入式设备100的角度来看,嵌入式操作系统201所实现的各种功能是由嵌入式设备100中的处理器101执行存储器102中所存储的嵌入式操作系统201对应的程序代码所实现的,两者只是描述方式的不同。
74.除上述嵌入式设备之外,本技术实施例还提供一种嵌入式操作系统,该嵌入式操作系统的内部结构如图1b所示,包括:任务监控模块11b、就绪时间记录模块12b和处理模块13b。
75.其中,任务监控模块11b,用于在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务;就绪时间记录模块12b,用于记录监控模块11b监控到的任务处于就绪态的就绪时间;处理模块13b,用于根据记录模块12b记录的就绪时间识别是否存在第一任务,并在识别到第一任务的情况下,针对第一任务进行超时调度处理。
76.在一可选实施例中,上述非就绪态包括未创建态、阻塞态、运行态以及挂起态中的至少一种。基于此,任务监控模块11b在监控从非就绪态进入就绪态的任务时,可执行以下至少一种操作:
77.当监控到有新建任务时,确定所述任务从未创建态进入就绪态;
78.当监控到处于阻塞态的任务在阻塞延时结束时,确定所述任务从阻塞态进入就绪态;
79.当监控到处于运行态的任务被其它任务抢占时,确定所述任务从运行态进入就绪态;
80.当监控到处于挂起态的任务被正在运行的任务唤醒时,确定所述任务从挂起态进入就绪态。
81.进一步可选地,任务监控模块11b还用于:监控从就绪态进入非就绪态的任务,并在监控到从就绪态进入非就绪态的任务时,将所述任务的就绪时间清零。
82.进一步可选地,任务监控模块11b在监控从就绪态进入非就绪态的任务时,可执行以下至少一种操作:
83.当监控到处于就绪态的任务被调度时,确定所述任务从就绪态进入运行态;
84.当监控到处于就绪态的任务被正在运行的任务挂起时,确定所述任务从就绪态进入挂起态。
85.进一步可选地,如图1c所示,本实施例的嵌入式操作系统还包括:运行时间记录模块14b和获取模块15b。其中,运行时间记录模块14b还用于:按照设定的周期,记录每个周期内被调度执行的各任务在该周期内的运行时间。相应地,获取模块15b,用于在处理模块13b识别到第一任务时,获取当前周期内运行时间大于设定运行时间阈值或运行时间最长的任务作为引起第一任务超时调度的第三任务。
86.在一可选实施例中,处理模块13b在针对第一任务进行超时调度处理时,具体用于:输出第一任务的信息以及第三任务的信息,以触发第一任务的超时调度告警;或者,静默重启第三任务,以使第一任务得到调度。
87.进一步可选地,如图1c所示,本实施例的嵌入式操作系统还包括:锁监控模块16b和占锁时间记录模块17b。其中,锁监控模块16b用于在嵌入式操作系统运行过程中,监控到特定锁;占锁时间记录模块17b用于记录锁监控模块16b监控到的特定锁的占锁时间;处理模块13b还用于:根据占锁时间识别特定锁中是否存在目标锁,并在识别到目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。
88.进一步可选地,占锁时间记录模块17b还用于:在特定锁被释放时,将特定锁的占锁时间清零。
89.进一步可选地,处理模块13b在对第二任务进行超时调度处理时,具体用于:输出第二任务的信息以及当前占用目标锁的任务的信息,以触发第二任务的超时告警;或者,静默重启当前占用目标锁的任务,以使第二任务得到调度。
90.关于上述嵌入式操作系统中各模块所执行的操作的详细描述或实施过程,可参见前述实施例,在此不再赘述。
91.本技术实施例的嵌入式操作系统,在监控到从非就绪态进入就绪态的任务时,记录该任务处于就绪态的就绪时间,就绪时间的长短表示该任务得不到调度的时间,通过任务得不到调度的时间来监控任务是否饿死,准确度更高,不会误判。进一步,还可以记录特定锁的占锁时间并根据特定锁的占锁时间来检测是否出现任务饿死,可以更加全面的检测系统中出现的任务饿死问题。
92.进一步,如图1d所示,本技术实施例还提供另一种嵌入式操作系统,该嵌入式操作系统包括:锁监控模块11d、占锁时间记录模块12d和处理模块13d。其中,锁监控模块11d用于在嵌入式操作系统运行过程中,监控到特定锁;占锁时间记录模块12d用于记录锁监控模块11d监控到的特定锁的占锁时间;处理模块13d用于:根据占锁时间记录模块12d记录的占锁时间识别特定锁中是否存在目标锁,并在识别到目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。
93.进一步可选地,占锁时间记录模块12d还用于:在特定锁被释放时,将特定锁的占
锁时间清零。
94.进一步可选地,处理模块13d在对第二任务进行超时调度处理时,具体用于:输出第二任务的信息以及当前占用目标锁的任务的信息,以触发第二任务的超时告警;或者,静默重启当前占用目标锁的任务,以使第二任务得到调度。
95.关于上述嵌入式操作系统中各模块所执行的操作的详细描述或实施过程,可参见前述实施例,在此不再赘述。
96.本技术实施例的嵌入式操作系统,可以记录特定锁的占锁时间并根据特定锁的占锁时间来检测是否出现任务调度超时(饿死)问题,并通过超时调度处理解决系统中出现的任务调度超时(饿死)问题。
97.图3a为本技术示例性实施例提供的一种嵌入式任务状态检测方法的流程示意图。该方法适用于嵌入式设备或嵌入式操作系统,如图3a所示,该方法包括:
98.31a、在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务,并记录该任务处于就绪态的就绪时间。
99.32a、在根据就绪时间识别到第一任务的情况下,针对第一任务进行超时调度处理。
100.可选地,根据就绪时间识别第一任务,包括:获取就绪时间大于设定就绪时间阈值的任务,作为所述第一任务。
101.可选地,本实施例中的非就绪态包括未创建态、阻塞态、运行态以及挂起态中的至少一种;相应地,监控从非就绪态进入就绪态的任务,包括以下至少一种:
102.当监控到有新建任务时,确定所述任务从未创建态进入就绪态;
103.当监控到处于阻塞态的任务在阻塞延时结束时,确定所述任务从阻塞态进入就绪态;
104.当监控到处于运行态的任务被其它任务抢占时,确定所述任务从运行态进入就绪态;
105.当监控到处于挂起态的任务被正在运行的任务唤醒时,确定所述任务从挂起态进入就绪态。
106.在一可选实施例中,该方法还包括:监控到从就绪态进入非就绪态的任务,并将所述任务的就绪时间清零。
107.可选地,监控从就绪态进入非就绪态的任务,包括以下至少一种:
108.当监控到处于就绪态的任务被调度时,确定所述任务从就绪态进入运行态;
109.当监控到处于就绪态的任务被正在运行的任务挂起时,确定所述任务从就绪态进入挂起态。
110.本实施例的方法可由嵌入式设备中的操作系统,或者嵌入式操作系统执行。本实施例通过对嵌入式设备中的操作系统或嵌入式操作系统进行改进,提供一种具有任务状态检测功能的嵌入式操作系统,从系统级解决任务饿死的检测问题;而且,利用任务处于就绪态的时间长短表示该任务得不到调度的时间,通过任务得不到调度的时间来监控任务是否饿死,准确度更高,不会误判。
111.图3b为本技术示例性实施例提供的另一种嵌入式任务状态检测方法的流程示意图。如图3b所示,方法包括:
112.31b、在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务,并记录该任务处于就绪态的就绪时间。
113.32b、在嵌入式操作系统运行过程中,按照设定的周期,记录每个周期内被调度执行的各任务在该周期内的运行时间。
114.33b、在根据就绪时间识别到第一任务的情况下,获取当前周期内运行时间大于设定运行时间阈值或运行时间最长的任务作为引起所述第一任务饿死的第三任务。
115.34b、输出第一任务的信息以及第三任务的信息,以触发第一任务的饿死告警;或者,静默重启第三任务,以使第一任务得到调度。
116.关于各步骤的详细描述,可参见前述实施例,在此不再赘述。
117.在本实施例中,通过设定一周期,按照设定的周期,以周期为粒度,记录每个周期内被调度执行的各任务在该周期内的运行时间;当识别到第一任务时,可获取当前周期内运行时间大于设定运行时间阈值的任务作为引起第一任务饿死的第三任务,可以做到同时监控是哪个任务引起第一任务被饿死的;进而触发对第一任务的饿死告警,其中,在对第一任务的告警处理中,不仅可以输出被饿死的第一任务是哪个,还可以同时输出引起第一任务饿死的第三任务是哪个。或者,采用静默重启第三任务的方式,使得第一任务得到调度机会,解决第一任务的饿死问题,从而达到对第一任务进行饿死处理的目的。
118.图3c为本技术示例性实施例提供的又一种嵌入式任务状态检测方法的流程示意图。如图3c所示,该方法包括:
119.31c、在嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务,并记录该任务处于就绪态的就绪时间。
120.32c、在嵌入式操作系统运行过程中,按照设定的周期,记录每个周期内被调度执行的各任务在该周期内的运行时间。
121.33c、在根据就绪时间识别到第一任务的情况下,获取当前周期内运行时间大于设定运行时间阈值或运行时间最长的任务作为引起所述第一任务饿死的第三任务。
122.34c、输出第一任务的信息以及第三任务的信息,以触发第一任务的饿死告警;或者,静默重启第三任务,以使第一任务得到调度。
123.35c、在嵌入式操作系统运行过程中,监控到特定锁出,并记录该特定锁的占锁时间。
124.36c、在根据占锁时间识别到目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。
125.需要说明的是,步骤31c、32c和35c可以并行执行,也可以某种先后顺序顺序执行,为便于图示,在图3c中,以顺序执行为例进行图示,但并不限于此。
126.可选地,所述特定锁包括互斥锁和/或自旋锁。
127.可选地,该方法还包括:当所述特定锁被释放时,将所述特定锁的占锁时间清零。
128.可选地,针对所述第二任务进行超时调度处理,包括:输出所述第二任务的信息以及当前占用所述目标锁的任务的信息,以触发所述第二任务的超时调度(饿死)告警;或者,静默重启当前占用所述目标锁的任务,以使第二任务得到调度,从而解决第二任务的饿死问题。
129.在本实施例中,一方面可以记录任务处于就绪态的就绪时间并根据任务处于就绪
态的就绪时间来检测是否出现因为一直得不到调度而引起的任务饿死,另一方面可以记录特定锁的占锁时间并根据特定锁的占锁时间来检测是否有因为死锁或占据特定锁的任务忘记释放该锁而引起的任务饿死,可以更加全面的检测系统中出现的任务饿死问题。
130.图4为本技术示例性实施例提供的再一种嵌入式任务状态检测方法的流程示意图。如图4所示,该方法包括:
131.41、在嵌入式操作系统运行过程中,监控到特定锁,并记录特定锁的占锁时间;
132.42、在根据占锁时间识别到目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。
133.可选地,所述特定锁包括互斥锁和/或自旋锁。
134.可选地,该方法还包括:当特定锁被释放时,将所述特定锁的占锁时间清零。
135.可选地,针对第二任务进行超时调度处理,包括:输出所述第二任务的信息以及当前占用所述目标锁的任务的信息,以触发所述第二任务的超时调度(饿死)告警;或者,静默重启当前占用所述目标锁的任务,以使第二任务得到调度,从而以解决所述第二任务的饿死问题。
136.在本实施例中,通过记录特定锁的占锁时间,并根据特定锁的占锁时间检测是否有因为死锁或占据特定锁的任务忘记释放该锁而引起的任务饿死问题,能够更加全面的检测系统中存在的任务饿死问题。
137.需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤41至步骤42的执行主体可以为设备a;又比如,步骤41的执行主体可以为设备a,步骤42的执行主体可以为设备b;等等。
138.另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如41、42等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
139.除上述设备实施例和方法实施例之外,本技术实施例还提供一种存储有嵌入式操作系统对应的程序代码的计算机可读存储介质,嵌入式操作系统对应的程序代码被执行时能够实现上述方法实施例中的各步骤。
140.在此说明,本技术实施例提供的技术方案除了适用于嵌入式设备之外,也可以应用到任何包含非嵌入式操作系统(后续简称为操作系统)的非嵌入式设备中,通过对非嵌入式设备中的操作系统进行改进,提供一种具有任务状态检测功能的操作系统,从系统级解决任务饿死的检测问题。非嵌入式设备可以是手机、平板电脑、笔记本电脑或服务器等各种设备。本技术实施例还可以提供一种能够解决任务饿死问题的非嵌入式设备,以及由非嵌入式设备(具体为非嵌入式设备中的操作系统)执行的任务状态检测方法。下面从非嵌入式设备的角度对该任务状态检测方法的过程进行简单描述。
141.对于非嵌入式设备,其组成结构类似,也包括硬件子系统和软件子系统,区别在于:非嵌入式设备中的硬件子系统和软件子系统中的模块或组件均为非嵌入式的。在非嵌入式设备的软件子系统中,包括非嵌入式操作系统。该非嵌入式操作系统属于系统软件,负
责控制和管理非嵌入式设备的各种软硬件资源,例如硬件驱动、内存管理以及任务管理等。该非嵌入式操作系统对应的程序代码存储在硬件子系统中的存储器中。其中,在非嵌入式设备启动或正常运行过程中,其硬件子系统中的处理器可以加载存储器中存储的操作系统对应的程序代码,实现操作系统的各种控制或驱动功能,以便成功启动非嵌入式设备或确保非嵌入式设备的正常运行。
142.在本实施例中,非嵌入式设备中的非嵌入式操作系统除了具备传统的任务管理功能之外,还可以进行任务状态的检测,发现任务饿死现象并针对被饿死的任务进行相应处理。其中,处理器执行存储器中存储的操作系统对应的程序代码,可实现传统任务管理功能以及与任务状态检测相关的各种功能。下面围绕任务管理,对非嵌入式设备中的非嵌入式操作系统的工作原理进行详细说明:
143.其中,任务管理是非嵌入式操作系统的主要工作。在本实施例中,任务管理包括但不限于:任务创建、任务删除、任务调度、改变任务优先级以及任务状态检测等工作。在本实施例中,非嵌入式设备中的任务具有以下几种状态:就绪态(ready)、运行态(running)、阻塞态(blocked)和挂起态(suspended)。其中,任务会在不同状态之间进行转换,任务状态之间的转换关系如图2所示。关于这几种状态的详细说明可参见前述实施例,在此不再赘述。
144.在本实施例中,非嵌入式操作系统可以在运行过程中,监控是否有任务从非就绪态进入就绪态,当监控到从非就绪态进入就绪态的任务时,开始统计该任务处于就绪态的就绪时间,并记录该任务处于就绪态的就绪时间。对任一任务来说,其就绪时间可以直观地反应任务是否处于饿死状态。因此,可以根据就绪时间识别处于就绪态的任务中是否出现第一任务,并在识别到第一任务的情况下,针对第一任务进行超时调度处理。
145.在一可选实施例中,可以设定一个就绪时间阈值,如果某一任务的就绪时间大于设定的就绪时间阈值,说明该任务长时间都没有得到调度,处于饿死状态;反之,如果某一任务的就绪时间小于或等于设定的就绪时间阈值,说明该任务等待调度的时间还不算长,并未处于饿死状态,可以继续等待调度。基于此,还可以监控是否出现就绪时间大于设定就绪时间阈值的任务,在出现就绪时间大于设定就绪时间阈值的任务的情况下,可以判定该任务被饿死,于是针对该任务进行超时调度处理,以便于及时解决因任务饿死引起的各种异常情况。为便于描述和区分,在本技术实施例中,将监控到的就绪时间大于设定就绪时间阈值的任务称为第一任务,第一任务可以是处于就绪态的任何任务,且其数量可以是一个,也可以是多个。在本实施例中,并不限定就绪时间阈值的取值,例如可以是10s、30s、1分钟、2分钟、5分钟等。
146.在本实施例中,监控从非就绪态进入就绪态的任务,包括以下至少一种:
147.当监控到有新建任务时,确定该新建任务会从未创建态进入就绪态;
148.当监控到处于阻塞态的任务在阻塞延时结束时,确定该处于阻塞态的任务可从阻塞态进入就绪态;
149.当监控到处于运行态的任务被其它任务抢占时,确定该处于运行态的任务可从运行态进入就绪态;
150.当监控到处于挂起态的任务被正在运行的任务唤醒时,确定该处于挂起态的任务可从挂起态进入就绪态。
151.进一步可选地,非嵌入式操作系统还会监控到从就绪态进入非就绪态的任务,并
将该任务的就绪时间清零,以保证就绪时间能够准确地反应任务等待调度的时长。其中,监控从就绪态进入非就绪态的任务,包括以下至少一种:
152.当监控到处于就绪态的任务被调度时,确定该处于就绪态的任务从就绪态进入运行态;
153.当监控到处于就绪态的任务被正在运行的任务挂起时,确定该处于就绪态的任务从就绪态进入挂起态。
154.进一步,在本技术可选实施例中,可以设定一周期,非嵌入式操作系统可按照设定的周期,以周期为粒度,记录每个周期内被调度执行的各任务在该周期内的运行时间;以及在每个周期结束时,可以将所记录的该周期内各个被调度执行的任务的运行时间清零,以便在下一个周期重新记录被调度执行的任务的运行时间。进一步,当识别到第一任务时,操作系统可获取当前周期内运行时间大于设定运行时间阈值的任务作为引起第一任务饿死的第三任务。在识别到第一任务和与第一任务对应的第三任务之后,可以输出第一任务的信息以及第三任务的信息,以触发对第一任务的饿死告警。或者,采用静默重启第三任务的方式,以使第一任务得到调度,来解决第一任务的饿死问题,从而达到对第一任务进行饿死处理的目的。
155.进一步,在本实施例中,非嵌入式操作系统还支持锁机制,从而在多任务的情况下,保证操作数据的正确性和/或一致性。在本实施例中,并不限定非嵌入式操作系统所支持的锁类型,例如包括但不限于:互斥锁或自旋锁等。在支持锁机制的情况下,如果锁机制的使用不合理,例如某个任务获得锁后因代码逻辑错误忘记释放锁或因为系统出现死锁,也会导致其它需要申请相应锁的任务因无法获得锁而饿死。需要说明的是,并不是所有的锁都会引起其它申请锁的任务因无法获得锁而饿死,因此,在本技术实施例中,将可能引起任务饿死的锁称为特定锁。针对特定锁,在本技术实施例中,非嵌入式操作系统还可以监控是否出现特定锁,并在监控到特定锁时,记录特定锁的占锁时间;如果占锁时间大于设定占锁时间阈值的目标锁,说明特定锁可能发生死锁或发生任务忘记释放特定锁的问题,因此,可根据占锁时间识别目标锁,并在识别到目标锁的情况下,获取请求目标锁的第二任务,并针对第二任务进行超时调度处理。可选地,可以获取占锁时间大于设定占锁时间阈值的特定锁作为目标锁。进一步,当特定锁被释放时,可以将特定锁的占锁时间清零。
156.在非嵌入式设备中,非嵌入式操作系统一方面可以记录任务处于就绪态的就绪时间并根据任务处于就绪态的就绪时间来检测是否出现任务饿死,另一方面可以记录特定锁的占锁时间并根据特定锁的占锁时间来检测是否出现任务饿死,可以更加全面的检测系统中出现的任务饿死问题。需要说明的是,在本技术实施例中,并不限定这两种检测方式的执行顺序,两种检测方式可以并行执行,也可以按照设定的顺序先后执行。另外需要说明的是,两种检测方式可以择一使用,也可以结合使用。在择一使用的情况下,可以单独采用基于任务就绪态的就绪时间来检测是否出现任务饿死的检测方式,也可以单独采用基于特定锁的占锁时间来检测是否出现任务饿死的检测方式。
157.上述应用于非嵌入式设备中的任务状态检测方案,其中有关参数的定义或操作步骤的详细描述,与前述应用于嵌入式设备中的相应定义或操作步骤的详细描述相同或相似,可参见前述实施例,在此不再赘述。
158.除上述任务状态检测方法之外,本技术还提供一种非嵌入式操作系统,包括:任务
监控模块、就绪时间记录模块和处理模块。
159.其中,任务监控模块,用于在非嵌入式操作系统运行过程中,监控到从非就绪态进入就绪态的任务;就绪时间记录模块,用于记录所述任务处于就绪态的就绪时间;以及处理模块,用于在根据所述就绪时间识别到第一任务的情况下,针对所述第一任务进行超时调度处理。
160.在一可选实施例中,上述非就绪态包括未创建态、阻塞态、运行态以及挂起态中的至少一种。基于此,任务监控模块在监控从非就绪态进入就绪态的任务时,可执行以下至少一种操作:
161.当监控到有新建任务时,确定所述任务从未创建态进入就绪态;
162.当监控到处于阻塞态的任务在阻塞延时结束时,确定所述任务从阻塞态进入就绪态;
163.当监控到处于运行态的任务被其它任务抢占时,确定所述任务从运行态进入就绪态;
164.当监控到处于挂起态的任务被正在运行的任务唤醒时,确定所述任务从挂起态进入就绪态。
165.进一步可选地,任务监控模块还用于:监控从就绪态进入非就绪态的任务,并在监控到从就绪态进入非就绪态的任务时,将所述任务的就绪时间清零。
166.进一步可选地,任务监控模块在监控从就绪态进入非就绪态的任务时,可执行以下至少一种操作:
167.当监控到处于就绪态的任务被调度时,确定所述任务从就绪态进入运行态;
168.当监控到处于就绪态的任务被正在运行的任务挂起时,确定所述任务从就绪态进入挂起态。
169.进一步可选地,本实施例的非嵌入式操作系统还包括:运行时间记录模块和获取模块。其中,运行时间记录模块还用于:按照设定的周期,记录每个周期内被调度执行的各任务在该周期内的运行时间。相应地,获取模块,用于在处理模块识别到第一任务时,获取当前周期内运行时间大于设定运行时间阈值或运行时间最长的任务作为引起第一任务超时调度的第三任务。
170.在一可选实施例中,处理模块在针对第一任务进行超时调度处理时,具体用于:输出第一任务的信息以及第三任务的信息,以触发第一任务的超时调度告警;或者,静默重启第三任务,以使第一任务得到调度。
171.进一步,本技术还提供另一种非嵌入式操作系统,包括:锁监控模块、占锁时间记录模块和处理模块。
172.其中,锁监控模块,用于在非嵌入式操作系统运行过程中,监控到特定锁;占锁时间记录模块,用于记录所述特定锁的占锁时间;处理模块,用于在根据所述占锁时间识别到目标锁的情况下,获取请求所述目标锁的任务,并针对所述任务进行超时调度处理。
173.进一步可选地,占锁时间记录模块还用于:在特定锁被释放时,将特定锁的占锁时间清零。
174.进一步可选地,处理模块在对第二任务进行超时调度处理时,具体用于:输出第二任务的信息以及当前占用目标锁的任务的信息,以触发第二任务的超时告警;或者,静默重
启当前占用目标锁的任务,以使第二任务得到调度。
175.上述两种非嵌入式操作系统中各模块所执行的操作的详细描述或实施过程,可参见前述实施例,在此不再赘述。
176.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
177.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
178.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
179.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
180.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
181.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
182.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
183.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要
素的过程、方法、商品或者设备中还存在另外的相同要素。
184.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献