进程调度方法、装置和主机设备与流程

文档序号:13912954阅读:188来源:国知局

本申请实施例涉及计算机领域,并且更具体地,涉及用于一种进程调度方法、装置和主机设备。



背景技术:

嵌入式实时操作系统是嵌入式应用软件的开发基础和平台,可以针对各种硬件资源,为应用软件的开发人员提供了统一的用户接口,大大简化了应用软件的开发难度和代码管理的难度。在包括科学研究、工程设计、军事技术、商业娱乐及人们日常生活的各个领域中,嵌入式实时操作系统的需求也越来越大。

linux操作系统凭借其性能良好,稳定性和可靠性高,可灵活定制,完全免费等特点,已经逐渐成为了嵌入式实时操作系统的首选。linux操作系统作为一个分时的、多任务、多用户操作系统,要保证公平地对待各个用户的进程,使各终端用户的响应时间不至太长。linux的进程调度是基于分时技术,允许多个进程“并发”运行。

现有技术的一种分时调度方案是基于时间片轮转调度。cpu的时间被分为一系列的时间段,每个时间段被称为一个“时间片”。操作系统为每个进程分配一个时间片,即允许该进程占用cpu进行运算处理的时间。如果在时间片结束时进程还在运行,则cpu将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则cpu进行切换。调度程序所要做的就是维护一张就绪进程列表,具体地,调度程序采用先进先出队列的方式来维护该就绪进程列表。当一个进程用完分配给该进程的时间片后,该进程被移到就绪进程列表的队列末尾。这种情况下,每个进程在运行的任意阶段都有可能被中断,其中断时间点完全由操作系统确定,进程无法自主控制。如果发生调度,该进程正在处理的事务就会被中断。

由于一些进程所实现的业务对实时性要求很高,现有技术的进程调度方案会造成业务响应不及时的问题。



技术实现要素:

本申请实施例提供一种进程调度方法、装置和主机设备,能够缩短进程的响应时间,缓解进程响应时间长的问题。

第一方面,提出了一种进程调度方法,该方法包括:用户态进程在将要开始执行关键事务时,将该用户态进程进入延时调度模式的信息通知操作系统的内核,该关键事务是指不能被中断的事务,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式;该用户态进程在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知该内核。

本申请实施例中,通过在用户态进程执行关键事务前将该用户态进程进入延时调度模式的信息通知操作系统的内核,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知该内核,使得内核能够确定用户态进程是否处于延时调度模式,从而能够在用户态进程执行关键事务的过程中暂停对该用户态进程进行系统调度。由此能够提升进程的响应速度,提高业务响应的及时性。

结合第一方面,在第一种可能的实现方式中,用户态进程将该用户态进程进入延时调度模式的信息通知操作系统的内核具体实现为:用户态进程将第一延时调度指示写入到该用户态进程映射的内核态地址空间,其中该第一延时调度指示用于表示该用户态进程进入延时调度模式,写入该用户态进程映射的内核态地址空间的该第一延时调度指示能够被该内核访问。在该实现方式中,将用户态进程和内核交互的第一延时调度指示通过用户态进程映射的内核态地址空间进行传递,该操作不涉及内核的操作,能够与内核的处理操作并行运行而不需要等待内核响应,使得用户态进程和内核的信息传递不受对方的影响,从而能够在一定程度上提高业务响应的及时性。

结合第一方面,在第一方面的第二种可能的实现方式中,用户态进程将该用户态进程进入延时调度模式的信息通知操作系统的内核具体实现为:该用户态进程通过调用接口函数向该内核发送第二延时调度指示,其中,该第二延时调度指示用于表示该用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息。

结合第一方面及其上述实现方式,在第一方面的第三种可能的实现方式中,在将该用户态进程退出延时调度模式的信息通知该内核之后,该方法还包括:该用户态进程获取该用户态进程的尝试调度信息,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核是否尝试过对该用户态进程进行系统调度;如果该尝试调度信息表示该用户态进程处于延时调度模式时该内核尝试过对该用户态进程进行系统调度,则向该内核发送调度请求,该调度请求用于请求该内核对该用户态进程进行系统调度。

本实现方式中,在用户态进程执行完关键事务之后,在尝试调度信息表示在该用户态进程处于延时调度模式时该内核是否尝试过对该用户态进程进行系统调度的情况下,通过向内核请求系统调度,从而避免了用户态进程长时间占用系统资源。

结合第一方面的第三种实现方式,在第一方面的第四种可能的实现方式中,获取该用户态进程的尝试调度信息具体实现为:该用户态进程向该内核发送获取请求,该获取请求用于请求获取该尝试调度信息;该用户态进程接收该内核根据该获取请求发送的该尝试调度信息。

结合第一方面的第三种实现方式,在第一方面的第五种可能的实现方式中,获取该用户态进程的尝试调度信息具体实现为:该用户态进程从该用户态进程映射的内核态地址空间中读取该尝试调度信息。

结合第一方面及其上述任意一种实现方式,在第一方面的第六种可能的实现方式中,该用户态进程包括:报文转发进程、实时解码进程或实时存储进程。

第二方面,提出了另一种进程调度方法,该方法包括:操作系统的内核在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息,其中,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式;如果该用户态进程处于延时调度模式,则暂停对该用户态进程进行系统调度,并记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息。

本申请实施例中,在系统调度时通过判断用户态进程是否处于延时调度模式,并在用户态进程处于延时调度模式时暂停该用户态进程进行系统调度并记录该用户态进程被尝试系统调度的信息,从而能够在用户态进程执行关键事务的过程中暂停对该用户态进程进行系统调度。由此能够提升进程的响应速度,提高业务响应的及时性。

结合第二方面,在第二方面的第一种可能的实现方式中,获取待调度的用户态进程是否处于延时调度模式的信息具体实现为:该内核读取该用户态进程映射的内核态地址空间,该内核态地址空间用于存储该用户态进程发送给该内核的第一延时调度指示,该第一延时调度指示用于表示该用户态进程进入延时调度模式;如果该内核态地址空间存在该用户态进程的第一延时调度指示,则确定该用户态进程处于延时调度模式;或者,如果该内核态地址空间不存在该用户态进程的第一延时调度指示,则确定该用户态进程不处于延时调度模式。

在该实现方式中,通过从用户态进程映射的内核态地址空间读取第一延时调度指示,该操作不涉及用户态进程的操作,能够与用户态进程的处理操作并行运行,能够使得用户态进程和内核的信息传递不受对方的影响,从而能够在一定程度上提高业务响应的及时性。

结合第二方面,在第二方面的第二种可能的实现方式中,获取待调度的用户态进程是否处于延时调度模式的信息具体实现为:该内核读取延时调度列表,该延时调度列表用于记录通过调用接口函数向该内核发送第二延时调度指示的用户态进程的标识信息,该第二延时调度指示用于表示发送该第二延时调度指示的用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息;如果延时调度列表中存在该用户态进程的标识信息,则确定该用户态进程处于延时调度模式;或者,如果延时调度列表中不存在该用户态进程的标识信息,则确定该用户态进程不处于延时调度模式。

结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,在获取待调度的用户态进程是否处于延时调度模式的信息之前,该方法还包括:接收该用户态进程通过调用接口函数向该内核发送的该第二延时调度指示;将该第二延时调度指示中携带的用户态进程的标识信息记录到该延时调度列表中。

结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,该方法还包括:接收该用户态进程通过调用接口函数向该内核发送的第三延时调度指示,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息;将该第三延时调度指示中携带的该用户态进程的标识信息从该延时调度列表中删除。

结合第二方面及其上述实现方式,在第二方面的第五种可能的实现方式中,记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息具体实现为:将该内核尝试过对该用户态进程进行系统调度的尝试调度信息记录在该用户态进程映射的内核态地址空间,其中,该内核态地址空间用于该用户态进程通过访问该内核态地址空间获取该尝试调度信息。

结合第二方面及第二方面的第一种可能的实现方式至第二方面的第四种可能的实现方式中任一种实现方式,在第二方面的第六种可能的实现方式中,记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息具体实现为:将该用户态进程的标识信息记录在调度记录表中,其中,该调度记录表用于记录该内核在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问。

结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,该方法还包括:接收该用户态进程的获取请求,该获取请求用于请求获取该用户态进程的尝试调度信息,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核是否尝试对该用户态进程进行系统调度;当该调度记录表存在该用户态进程的标识信息时,将表示该内核尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程;或者,当该调度记录表不存在该用户态进程的标识信息时,将表示该内核未尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。

结合第二方面及其上述实现方式,在第二方面的第八种可能的实现方式中,该方法还包括:接收该用户态进程的调度请求,该调度请求用于请求该内核对该用户态进程进行系统调度;根据该调度请求,对该用户态进程进行系统调度。

在本实现方式中,接收用户态进程的调度请求并对用户态进程进行系统调度,避免了用户态进程长时间占用系统资源。

结合第二方面及其上述实现方式,在第二方面的第九种可能的实现方式中,该用户态进程包括:报文转发进程、实时解码进程或实时存储进程。

第三方面,提出了一种进程调度装置,该装置包括:用户态进程模块和内核模块,其中,

该用户态进程模块用于执行用户态进程,并在将要开始执行该用户态进程的关键事务时,将该用户态进程进入延时调度模式的信息通知该内核模块,该关键事务是指不能被中断的事务,该延时调度模式是指该内核模块在执行系统调度时不对该用户态进程立即进行调度的调度方式;该用户态进程模块还用于在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知该内核模块;该内核模块用于在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息,并在该用户态进程处于延时调度模式,停止对该用户态进程进行系统调度,并记录记录该内核模块尝试过对该用户态进程进行系统调度的尝试调度信息。

本申请实施例中,进程调度装置在用户态进程模块执行用户态进程的关键事务前将该用户态进程进入延时调度模式的信息通知内核模块,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知内核模块,使得内核模块能够确定用户态进程是否处于延时调度模式,从而能够在用户态进程模块执行用户态进程的关键事务的过程中暂停对该用户态进程进行系统调度,由此能够提升进程的响应速度,提高业务响应的及时性。

结合第三方面,在第一种可能的实现方式中,该用户态进程模块将该用户态进程进入延时调度模式的信息通知该内核模块具体实现为:该用户态进程模块将第一延时调度指示写入到该用户态进程映射的内核态地址空间,该第一延时调度指示用于表示该用户态进程进入延时调度模式;

其中,该内核模块获取待调度的用户态进程是否处于延时调度模式的信息具体实现为:该内核模块读取该用户态进程映射的内核态地址空间,并在该内核态地址空间存在该用户态进程的第一延时调度指示时,确定该用户态进程处于延时调度模式。

结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,该用户态进程模块将该用户态进程退出延时调度模式的信息通知该内核模块具体实现为:该用户态进程模块将该将第一延时调度指示从该用户态进程映射的内核态地址空间中删除。

结合第三方面,在第三方面的第三种可能的实现方式中,该用户态进程模块将该用户态进程进入延时调度模式的信息通知该内核模块具体实现为:该用户态进程模块通过调用接口函数向该内核模块发送第二延时调度指示,其中,该第二延时调度指示用于表示该用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息;

其中,该内核模块获取待调度的用户态进程是否处于延时调度模式的信息具体实现为:该内核模块接收该第二延时调度指示,并将该第二延时调度指示中携带的用户态进程的标识信息记录到延时调度列表中,并在准备对该用户态进程执行系统调度时,如果该延时调度列表存在该用户态进程的标识信息,则确定该用户态进程处于延时调度模式。

结合第三方面的第三种可能的实现方式,在第三方面的第四种可能的实现方式中,用户态进程模块将该用户态进程退出延时调度模式的信息通知该内核模块具体实现为:用户态进程模块通过调用接口函数向该内核模块发送第三延时调度指示,其中,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息;

其中,该内核模块还用于将该第三延时调度指示中携带的该用户态进程的标识信息从该延时调度列表中删除。

结合第三方面及其上述实现方式,在第三方面的第五种可能的实现方式中,该用户态进程模块还用于获取该用户态进程的尝试调度信息,并在该尝试调度信息表示该内核模块尝试过对该用户态进程进行系统调度时,向该内核模块发送调度请求,其中,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核模块是否尝试对该用户态进程进行系统调度,该调度请求用于请求该内核模块对该用户态进程进行系统调度;

该内核模块还用于接收该调度请求,并根据该调度请求,对该用户态进程进行系统调度。

结合第三方面的第五种可能的实现方式,在第三方面的第六种可能的实现方式中,在用于记录该内核模块尝试过对该用户态进程进行系统调度的尝试调度信息时,该内核模块具体用于将该内核模块尝试过对该用户态进程进行系统调度的尝试调度信息记录在该用户态进程映射的内核态地址空间;

其中,该用户态进程模块具体用于通过访问该内核态地址空间获取该尝试调度信息。

结合第三方面的第五种可能的实现方式,在第三方面的第七种可能的实现方式中,在用于记录该内核模块尝试过对该用户态进程进行系统调度的尝试调度信息时,该内核模块具体用于将该用户态进程的标识信息记录在调度记录表中,其中,该调度记录表用于记录该内核模块在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问;

该用户态进程模块还用于向该内核模块发送获取请求,该获取请求用于请求获取该用户态进程的尝试调度信息;

该内核模块还用于根据该获取请求,并在该调度记录表存在该用户态进程的标识信息时,将表示该内核模块尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程;或者,在该调度记录表不存在该用户态进程的标识信息时,将表示该内核模块未尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。

结合第三方面及其上述实现方式,在第三方面的第八种可能的实现方式中,该用户态进程包括:报文转发进程、实时解码进程或实时存储进程。

第四方面,提出了一种主机设备,包括处理器和存储器;其中

该存储器用于存储程序代码;

该处理器用于读取该存储器存储的程序代码生成用户态进程和操作系统的内核,其中:

该用户态进程在将要开始执行关键事务时,将该用户态进程进入延时调度模式的信息通知内核,该关键事务是指不能被中断的事务,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式;

该用户态进程在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知该内核;

该内核在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息;如果该用户态进程处于延时调度模式,则暂停对该用户态进程进行系统调度,并记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息。

本申请实施例中,主机设备在用户态进程执行用户态进程的关键事务前将该用户态进程进入延时调度模式的信息通知内核,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知内核,使得内核能够确定用户态进程是否处于延时调度模式,从而能够避免用户态进程在执行关键事务时被系统调度,保证进程的响应速度,提高操作系统的实时性。结合第四方面,在第一种可能的实现方式中,该用户态进程将该用户态进程进入延时调度模式的信息通知该内核包括:该用户态进程将第一延时调度指示写入到该用户态进程映射的内核态地址空间,该第一延时调度指示用于表示该用户态进程进入延时调度模式;

其中,该内核获取待调度的用户态进程是否处于延时调度模式的信息包括:该内核读取该用户态进程映射的内核态地址空间,并在该内核态地址空间存在该用户态进程的第一延时调度指示时,确定该用户态进程处于延时调度模式。

结合第四方面及其上述实现方式,在第四方面的第二种可能的实现方式中,该用户态进程将该用户态进程退出延时调度模式的信息通知该内核包括:该用户态进程将该将第一延时调度指示从该用户态进程映射的内核态地址空间中删除。

结合第四方面及其上述实现方式,在第四方面的第三种可能的实现方式中,该用户态进程将该用户态进程进入延时调度模式的信息通知该内核包括:该用户态进程通过调用接口函数向该内核发送第二延时调度指示,其中,该第二延时调度指示用于表示该用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息;

其中,该内核获取待调度的用户态进程是否处于延时调度模式的信息包括:该内核接收该第二延时调度指示,并将该第二延时调度指示中携带的用户态进程的标识信息记录到延时调度列表中,并在准备对该用户态进程执行系统调度时,如果该延时调度列表存在该用户态进程的标识信息,则确定该用户态进程处于延时调度模式。

结合第四方面及其上述实现方式,在第四方面的第四种可能的实现方式中,该用户态进程将该用户态进程退出延时调度模式的信息通知该内核包括:该用户态进程通过调用接口函数向该内核发送第三延时调度指示,其中,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息;

其中,该内核还将该第三延时调度指示中携带的该用户态进程的标识信息从该延时调度列表中删除。

结合第四方面及其上述实现方式,在第四方面的第五种可能的实现方式中,该用户态进程还获取该用户态进程的尝试调度信息,并在该尝试调度信息表示该内核尝试过对该用户态进程进行系统调度时,向该内核发送调度请求,其中,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核是否尝试对该用户态进程进行系统调度,该调度请求用于请求该内核对该用户态进程进行系统调度;

该内核还接收该调度请求,并根据该调度请求,对该用户态进程进行系统调度。

结合第四方面及其上述实现方式,在第四方面的第六种可能的实现方式中,在记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息时,该内核将该内核尝试过对该用户态进程进行系统调度的尝试调度信息记录在该用户态进程映射的内核态地址空间;

其中,该用户态进程通过访问该内核态地址空间获取该尝试调度信息。

结合第四方面及其上述实现方式,在第四方面的第七种可能的实现方式中,在记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息时,该内核将该用户态进程的标识信息记录在调度记录表中,其中,该调度记录表用于记录该内核在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问;

该用户态进程还向该内核发送获取请求,该获取请求用于请求获取该用户态进程的尝试调度信息;

该内核还根据该获取请求,并在该调度记录表存在该用户态进程的标识信息时,将表示该内核尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程;或者,在该调度记录表不存在该用户态进程的标识信息时,将表示该内核未尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。

第五方面,提出了一种计算机存储介质,用于存储计算机程序,该计算机程序包括第四方面或第四方面的任意可能的实现方式中用户态进程和内核的程序代码。

基于以上技术方案,本申请实施例通过在用户态进程执行关键事务前将该用户态进程进入延时调度模式的信息通知操作系统的内核,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知该内核,使得内核能够确定用户态进程是否处于延时调度模式,从而在用户态进程执行关键事务的过程中暂停对该用户态进程进行系统调度,由此能够提升进程的响应速度,提高业务响应的及时性。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术的进程调度状态图。

图2是现有技术基于时间片调度的示意图。

图3是本申请一种实施例的进程调度方法示意图。

图4是本申请另一种实施例的进程调度方法示意图。

图5是本申请一种实施例的防火墙的应用场景示意图。

图6是本申请一种实施例报文转发的工作示意图。

图7是本申请一种实施例的报文转发流程图。

图8是本申请再一种实施例的进程调度方法示意图。

图9是本申请一种实施例延时调度装置的结构示意图。

图10是本申请另一种实施例延时调度装置的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚地描述。

为了方便理解本申请实施例,首先在此介绍本申请实施例描述中会引入的几个相关术语。

内核空间与用户空间:操作系统通常会把虚拟内存分成内核空间(kernelspace)和用户空间(userspace)。其中,内核、核心扩充(kernelextensions)以及驱动程序等程序运行在操作系统较高的特权级别上,驻留在被保护的内存空间上,拥有访问硬件设备的所有权限。内核、核心扩充(kernelextensions)以及驱动程序等运行的内存空间称为内核空间。普通应用程序运行在操作系统较低的特权级别上。所述普通应用程序具有一系列的使用限制,例如只能访问允许使用的部分系统资源,不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备。普通应用程序运行的内存空间称为用户空间。

用户态进程:当进程运行在操作系统的用户空间时,该进程称为用户态进程。

进程上下文:指一个进程在执行的时候,cpu的所有寄存器中的值、进程的状态以及堆栈上的内容。当内核要切换到另一个进程时,操作系统需要保存当前进程的所有状态,即保存当前进程的进程上下文。内核再次切换到该进程时,操作系统能够根据该进程的进程上下文恢复该进程在切换时的状态,并继续执行该进程。

系统调度:在操作系统中,在不同场景下有多种原因可能触发系统调度。例如,正在执行的进程执行完毕或因发生某事件而不能再继续执行;执行中的进程因提出输入输出(input/output,i/o)请求而暂停执行;进程在通信或同步过程中执行了某种原语操作如p操作、阻塞、挂起原语等。在可剥夺式调度的场景中,可触发系统调度的原因例如有比当前进程优先权更高的进程进入就绪队列。在时间片轮转法中,时间片用完,等等。当发生系统调度时,当前使用系统资源的进程将被剥夺系统资源并分配给其它进程使用。

阻塞(pend):进程因为不满足运行所需的条件,需要等待某种资源,或者等待某个事件而暂时不能运行,进程的这种状态称为阻塞。

图1是现有技术的进程调度状态图。如图1所示,进程可包括三种状态:就绪态、执行态和阻塞态。在一种基于时间片的调度的典型场景中,当系统调度时,系统会从就绪态的进程中选择一个进程进行调度,本申请中将选择出的进程称为第一进程。此时,第一进程进入执行态。在第一进程执行过程中,如果遇到继续运行的条件不满足,则第一进程进入阻塞态。系统会从就绪态的进程中选择新的进程进行调度。如果没有进入阻塞态,则第一进程一直执行到时间片完,时间片到后,系统调度会从就绪态的进程中选择下一个进程进程调度。

基于时间片轮转调度是一种最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则cpu将被剥夺并分配给另一个进程。如果进程的时间片结束或者进程在时间片结束前阻塞,则cpu当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。图2是现有技术基于时间片调度的示意图。如图2所示,进程1-8分别被分配处理器的一个时间段,当进程1的时间片结束或者在进程1在时间片结束前阻塞,则处理器将进程1移至就绪进程的队尾,并切换到进程2。

在上述图1、图2所示的技术方案中,没有考虑到进程在处理关键事务时时间片结束的特殊情况,依然将该进程移至就绪进程的队尾。如果一些实时进程,例如报文转发进程、实时解码进程或实时存储进程等,在进行关键事务处理时操作系统对该进程进行系统调度,将导致一些不可预知的错误产生。

此外,由于不同进程之间可能存在依赖关系,例如进程a所执行的事务x需要获得另一进程b中一个事务y的执行结果后才可以执行。现有进程调度方案会造成某些进程响应时间过长的问题。

当然,应理解,在一个操作系统中,除了基于时间片调度的方案意外,还可能同时存在其它的调度方案,例如先进先出(firstinputfirstoutput,fifo)调度、最短cpu运行期优先调度(shortestcpuburstfirst,scbf)、多级反馈队列调度等等。在这些调度方案中,也可能存在类似的问题。

为避免进程在进行关键事务处理被系统调度,本申请提出了一种用户态进程的延时调度方法及系统。

图3是本申请一种实施例的进程调度方法示意图。图3的方法由用户态进程执行。该方法包括:

310,用户态进程在将要开始执行关键事务时,将该用户态进程进入延时调度模式的信息通知操作系统的内核。本申请中关键事务是指不能被中断的事务。延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式。

应理解,一些用户态进程对于实时性的要求比较高,例如,报文转发进程、实时解码进程或实时存储进程等。在这类实时性要求比较高的用户态进程的执行过程中,如果操作系统由于系统调度的原因中断该用户态进程,将导致用户态进程的实时性大大降低,从而出现一些不可预知的后果。

本申请实施例中,对用户态进程引入了一种工作模式,称为延时调度模式,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式。本申请实施例中,在用户态进程将要开始执行关键事务时,将用户态进程进入延时调度模式的信息通知操作系统的内核,使得内核在触发系统调度时,不对该用户态进程立即进行调度,从而保证该用户态进程能够继续占用系统资源。具体地,例如,该系统资源可以包括cpu资源,等等。

320,该用户态进程在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知该内核。

用户态进程执行完关键事务结束后,将该用户态进程退出延时调度模式的信息通知内核,从而使得内核能够在下一次系统调度时对该用户态进程进行调度,避免该用户态进程长时间占用系统资源。

本申请实施例中,通过在用户态进程执行关键事务前将该用户态进程进入延时调度模式的信息通知操作系统的内核,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知该内核,使得内核能够确定用户态进程是否处于延时调度模式,从而能够在用户态进程执行关键事务的过程中暂停对该用户态进程进行系统调度。由此能够提升进程的响应速度,提高业务响应的及时性。

应理解,本申请实施例中,用户态进程和内核之间可以通过多种方式交互信息。

可选地,作为一个实施例,在步骤310中,将该用户态进程进入延时调度模式的信息通知操作系统的内核具体可实现为:该用户态进程将第一延时调度指示写入到该用户态进程映射的内核态地址空间,其中该第一延时调度指示用于表示该用户态进程进入延时调度模式,写入该用户态进程映射的内核态地址空间的该第一延时调度指示能够被该内核访问。

例如,linux提供了一种内存映射机制实现了用户态进程直接访问内存的能力。linux把内核空间中特定部分的内存空间映射到用户态进程的内存空间,或者说linux可以把用户态进程的部分内存空间映射到内核空间中特定部分的内存空间,从而能够实现内核与用户态进程共享一部分内存空间。用户态进程将第一延时调度指示写入用户态进程映射的内核态地址空间,内核在执行系统调度时,可从用户态进程映射的内核态地址空间获取该第一延时调度指示。

具体地,用户态进程可通过特定的函数,获取用户态进程对应的内核态地址空间,进而将要传递给内核的信息写入到该内核态地址空间。例如,用户态进程可通过ioctl函数获取用户态进程对应的内核态地址空间,进而将要传递给内核的信息写入到该内核态地址空间。ioctl函数是一种设备控制接口,能够实现用户态地址空间和内核态地址空间之间的交互。

ioctl函数的调用方式为:intioctl(intfd,intrequest,.../*void*arg*/)。

其中,第三个参数总是一个指针,但指针的类型依赖于request参数。表1列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型。具体如下:

表1:

用户态进程通过ioctl与内核交互信息的具体实现可参考现有技术,本申请实施例在此不再赘述。

本申请实施例中,将用户态进程和内核交互的第一延时调度指示通过用户态进程映射的内核态地址空间进行传递,该操作不涉及内核的操作,能够与内核的处理操作并行运行而不需要等待内核响应,使得用户态进程和内核的信息传递不受对方的影响,从而能够在一定程度上提高业务响应的及时性。

进一步地,步骤320具体实现为:该用户态进程将该第一延时调度指示从该用户态进程映射的内核态地址空间删除。

可选地,作为另一个实施例,在步骤310中,将该用户态进程进入延时调度模式的信息通知操作系统的内核具体可实现为:该用户态进程通过调用接口函数向该内核发送第二延时调度指示,其中,该第二延时调度指示用于表示该用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息。

例如,用户态进程可向内核系统发送第二延时调度指示,该第二延时调度指示中可携带用户态进程的进程id(processid,pid)和表示用户态进程进入延时调度模式的指示信息。具体地,该指示信息可以用一个指示位表示,例如,用“1”表示该用户态进程进入延时调度模式,等等。

当然,用户态进程还可以通过其它方式与内核进行消息交互。

例如,linux内核提供了一种通过/proc文件系统,在运行时访问内核的内部数据结构并改变内核设置的机制。/proc文件系统是一种内核/内核模块用来向进程(process)发送信息的机制。/proc文件系统可以让用户态进程和内核的内部数据结构进行交互,从而获取有关进程的有用信息,在运行中(onthefly)通过改变内核参数改变设置。与其他文件系统不同,/proc文件系统存在于内存之中而不是硬盘上。

又例如,用户态进程还可以通过sysfs文件系统与内核进行消息交互,等等。

进一步地,步骤320具体实现为:该用户态进程通过调用接口函数向该内核发送第三延时调度指示,其中,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息。

图4是本申请另一种实施例的用户态进程延时调度的方法示意图。可选地,如图4所示,在步骤320之后,该方法还包括:该方法还可包括步骤330和步骤340。其中,

330,该用户态进程获取该用户态进程的尝试调度信息,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核是否尝试过对该用户态进程进行系统调度。

340,如果该尝试调度信息表示该用户态进程处于延时调度模式时该内核尝试过对该用户态进程进行系统调度,则向该内核发送调度请求,该调度请求用于请求该内核对该用户态进程进行系统调度。

应理解,如果用户态进程不存在尝试调度信息,或者用户态进程的尝试调度信息表示该用户态进程处于延时调度模式时该内核未尝试过对该用户态进程进行系统调度,则不需要向该内核发送调度请求。

本申请实施例中,用户态进程在执行关键事务后,可获取该用户态进程的尝试调度信息,并在该尝试调度信息表示该用户态进程处于延时调度模式时该内核尝试过对该用户态进程进行系统调度的情况下,主动向内核请求系统调度,从而能够及时释放该用户态进程占用的系统资源,避免其它进程等待时间过长,提高了其它进程的实时性,进而提高了操作系统的实时性。

应理解,步骤330中,用户态进程也可通过多种方式获取该用户态进程的尝试调度信息。

可选地,作为一个实施例,步骤330具体可实现为:该用户态进程从该用户态进程映射的内核态地址空间中读取该尝试调度信息。

在步骤310中,用户态进程可以将第一延时调度指示写入到该用户态进程映射的内核态地址空间。本申请实施例中,该用户态进程可以采用类似的方式确定该用户态进程映射的内核态地址空间,然后从该内核态地址空间读取该尝试调度信息。

用户态进程可以通过内核态地址空间的不同地址指示的位置来区分该内核态地址空间所存储的是第一延时调度指示还是尝试调度信息,例如,用户态进程映射的内核态地址空间的某一指定位用于存储第一延时调度指示,另一指定位用于存储尝试调度信息,等等。

或者,用户态进程还可以通过设计数据结构来对内核态地址空间所存储的内容进行区分。例如,{delay:1}为第一延时调度指示,其中“1”表示用户态进程进入延时调度模式;{dispatch:1}为尝试调度信息,其中“1”表示用户态进程处于延时调度模式时该内核尝试过对该用户态进程进行系统调度。

可选地,作为另一个实施例,步骤330具体可实现为:该用户态进程向该内核发送获取请求,该获取请求用于请求获取该尝试调度信息;该用户态进程接收该内核根据该获取请求发送的该尝试调度信息。

应理解,尝试调度信息可以有多种表示方式。例如,该尝试调度信息可以携带指示信息,指示信息为1表示用户态进程处于延时调度模式时该内核尝试过对该用户态进程进行系统调度。又例如,该尝试调度信息可以携带次数值,表示用户态进程处于延时调度模式时该内核尝试对该用户态进程进行系统调度的次数;此时,如果该尝试调度信息携带的次数值大于0,则表示表示用户态进程处于延时调度模式时该内核尝试过对该用户态进程进行系统调度;如果该尝试调度信息携带的次数值等于0,或者不存在该尝试调度信息,则表示表示用户态进程处于延时调度模式时该内核未尝试过对该用户态进程进行系统调度。

应理解,步骤310和步骤330的具体实现方式不会互相影响。例如,步骤310中,用户态进程可以将第一延时调度指示写入到该用户态进程映射的内核态地址空间;步骤330中,该用户态进程可以向该内核发送获取请求,并接收该内核根据该获取请求发送的尝试调度信息。又例如,步骤310中,用户态进程可以将第一延时调度指示写入到该用户态进程映射的内核态地址空间;步骤330中,该用户态进程可以从该用户态进程映射的内核态地址空间中读取该尝试调度信息。

下面,将结合具体的例子,对本申请实施例的方法作进一步的描述。

为便于描述,下面以防火墙的应用场景为例,对本申请实施例的方法进行描述。

图5是本申请一种实施例的防火墙的应用场景示意图。如图5所示,防火墙通常放置在局域网的出口处,用于对本地网络进行安全防护,其核心功能就是对来自互联网的符合安全策略的报文进行转发,而对来自互联网的不符合安全策略的报文实施阻止。防火墙产品的报文转发由报文转发进程来实现。

图6是本申请一种实施例报文转发功能的原理示意图。以在多核架构下的linux操作系统为例,linux中使用对称多处理(symmetricalmulti-processing,smp)架构。每个报文转发进程都平等地处理报文转发,其工作示意图如图6所示:

s601,报文转发进程从收包队列中读取报文。

s602,报文转发进程对读取的报文进行协议解码处理。

s603,报文转发进程对读取的报文进行会话查找处理。

s604,报文转发进程对读取的报文进行路由查找处理。

s605,报文转发进程对读取的报文进行安全检查处理。

s606,报文转发进程将读取的报文写到发包队列。

报文转发进程将读取的报文写到发包队列后,即可从特定的出接口进行转发。在报文的转发期间各个进程对报文的处理行为是非常明确的,时间也非常可控。

协议解码、会话查找、路由查找、安全检查等是报文转发的核心流程,其时间可控,且在进行这些核心流程的处理过程中,不允许进程因被调度而失去cpu资源。因此,在进行报文转发过程中,可采用如图3、图4所示的方法。

图7是本申请一种实施例的报文转发流程图。如图7所示,图7的具体流程如下:

s701,报文转发进程读取报文。

应理解,报文转发进程是一种用户态进程,用于读取并转发报文。如图5所示,本申请实施例的报文转发进程可以是图5中的防火墙,并可执行图5的方法。

s702,报文转发进程将报文转发进程进入延时调度模式的信息通知内核。

应理解,在报文转发进程中,读取报文之后的报文处理,即图6所示的步骤s602至s606属于关键事务处理,时间可控,且不宜被系统调度打断。因此,当报文转发进程读取报文后,可将报文转发进程进入延时调度模式的信息通知内核。

应理解,报文转发进程可通过多种方式将进入延时调度模式的信息通知内核。

例如,在一种方式中,报文转发进程可将第一延时调度指示写入到该报文转发进程映射的内核态地址空间,该第一延时调度指示用于表示该报文转发进程进入延时调度模式。如图3的实施例所述,在特定的方式下,用户态进程和内核可以共享一段内存空间,此时,报文转发进程可以直接访问报文转发进程映射的内核态地址空间,将第一延时调度指示写入到该内核态地址空间中。

又例如,在另一种方式中,用户态进程可通过接口函数向内核发送报文转发进程的第二延时调度指示,其中,该第二延时调度指示用于表示该报文转发进程进入延时调度模式,该第二延时调度指示携带该报文转发进程的标识信息。其具体实现可参考图3所示实施例的相关记载,本申请实施例在此不再赘述。

此外,当内核接收到第二延时调度指示后,可将第二延时调度指示中携带的进程id添加到延时调度列表中。该延时调度列表用于记录向该内核发送第二延时调度指示的用户态进程的标识信息。

应理解,其它类型的用户态进程如实时解码进程或实时存储进程等,也可采用类似的方式将进入延时调度模式的信息通知内核。

s703,报文转发进程处理关键事务。

当报文转发进程将报文转发进程进入延时调度模式的信息通知内核后,报文转发进程可继续处理关键事务。如图6所示,报文转发进程可对报文进行协议解码、会话查找、路由查找、安全检查等处理操作,然后根据实际情况,确定是否转发报文,并在需要转发报文时将转发报文写入发包队列进行报文发送,其具体实现可参考现有技术,本申请实施例在此不再赘述。

应理解,当报文转发进程进入延时调度模式后,在处理关键事务的过程中不会被系统调度。

s704,报文转发进程将报文转发进程退出延时调度模式的信息通知内核。

当报文转发进程执行完关键事务后,即可将报文转发进程退出延时调度模式的信息通知内核。

与步骤s702类似,报文转发进程也可通过多种方式将报文转发进程退出延时调度模式的信息通知内核。

如果在步骤s702中,报文转发进程将第一延时调度指示写入到该报文转发进程映射的内核态地址空间,则此时报文转发进程可将该第一延时调度指示从该报文转发进程映射的内核态地址空间中删除。

或者,如果在步骤s702中,报文转发进程通过接口函数向内核发送报文转发进程的第二延时调度指示,则报文转发进程可通过接口函数向内核发送报文转发进程的第三延时调度指示。该第三延时调度指示用于表示该报文转发进程退出延时调度模式,该第三延时调度指示携带该报文转发进程的标识信息。例如,假设步骤s702中,接口函数为func(pid,mode),pid表示进程id,mode表示进入或退出延时调度模式,再假设报文转发进程为pid1,1表示进入延时调度模式,0表示退出延时调度模式,则报文转发进程可通过func(pid1,1)发送第二延时调度指示,通过func(pid1,0)发送第三延时调度指示。当内核收到第三延时调度指示后,可将第三延时调度指示中携带的进程id从延时调度列表中删除。

s705,内核在执行系统调度确定报文转发进程是否处于延时调度模式。

内核在执行系统调度前,可获取待调度的报文转发进程是否处于延时调度的信息。

内核可根据预先约定的方式获取报文转发进程是否处于延时调度的信息。

如果在步骤s702中,报文转发进程以将第一延时调度指示写入到该报文转发进程映射的内核态地址空间的方式,将报文转发进程进入延时调度模式的信息通知内核,则此时内核可从该报文转发进程映射的内核态地址空间获取第一延时调度指示。如果该内核态地址空间存在第一延时调度指示,则内核确定报文转发进程处于延时调度模式,执行步骤s706。如果该内核态地址空间不存在第一延时调度指示,则内核确定报文转发进程不处于延时调度模式,执行步骤s707。

或者,如果在步骤s702中,报文转发进程通过接口函数向内核发送报文转发进程的第二延时调度指示,则内核可读取内核空间中的延时调度列表。如果延时调度列表中存在该报文转发进程的标识信息,则确定该报文转发进程处于延时调度模式,执行步骤s706。如果延时调度列表中不存在该报文转发进程的标识信息,则确定该报文转发进程不处于延时调度模式,执行步骤s707。

应理解,该延时调度列表用于记录通过调用接口函数向该内核发送第二延时调度指示的用户态进程的标识信息。该第二延时调度指示用于表示发送该第二延时调度指示的用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息。当包括报文转发进程在内的用户态进程通过接口函数向该内核发送第二延时调度指示时,该内核可将第二延时调度指示中携带的用户态进程的标识信息添加到该延时调度列表中。

应理解,在实际的应用中,内核执行步骤s704的时间点可能在步骤s702之前,也可能在步骤s702之后,步骤s704之前,或者可能在步骤s704之后。

以在步骤s702中,报文转发进程以将第一延时调度指示写入到该报文转发进程映射的内核态地址空间的方式,将报文转发进程进入延时调度模式的信息通知内核为例。

如果内核执行步骤s704的时间点在步骤s702之前,则此时内核在该报文转发进程映射的内核态地址空间找不到第一延时调度指示,此时内核可确定报文转发进程不处于延时调度模式,执行步骤s707。

如果内核执行步骤s704的时间点在步骤s702之后,且在步骤s704之前,则内核可以在该报文转发进程映射的内核态地址空间找到第一延时调度指示,此时内核可确定报文转发进程处于延时调度模式,执行步骤s706。

如果内核执行步骤s704的时间点在步骤s704之后,则此时第一延时调度指示已经被该报文转发进程从该报文转发进程映射的内核态地址空间中删除,内核在该报文转发进程映射的内核态地址空间也找不到第一延时调度指示,此时内核可确定报文转发进程不处于延时调度模式,执行步骤s707。

s706,内核暂停对报文转发进程进行系统调度,并记录尝试调度信息。

如果内核确定报文转发进程处于延时调度模式,则暂停文转发进程进行系统调度,并将内核尝试过对报文转发进程进行系统调度的信息记录到尝试调度信息中。

应理解,内核也可通过多种方式记录该尝试调度信息。

例如,在一种方式中,内核可将该尝试调度信息记录在该报文转发进程映射的内核态地址空间。此时,报文转发进程可通过ioctl方式获取该报文转发进程映射的内核态地址空间的地址,进而对该内核态地址空间进行访问。

又例如,在另一种方式中,内核可将该尝试调度信息记录在该操作系统的内核空间的调度记录表中,其中,该调度记录表用于记录该内核在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问。此时,报文转发进程需要向内核请求获取该报文转发进程的尝试调度信息。

同时,应理解,本申请实施例中,报文转发进程执行的步骤s701~s704和内核执行的步骤s705~s707是可以并行执行的,用户态进程在执行步骤s701~s704的过程中,内核可执行步骤s705~s707。

s708,报文转发进程获取尝试调度信息。

报文转发进程可根据预先约定的方式获取该尝试调度信息。

如果在步骤s706中,内核将该尝试调度信息记录在该报文转发进程映射的内核态地址空间,则此时报文转发进程可从该报文转发进程映射的内核态地址空间获取该尝试调度信息。

如果在步骤s706中,内核可将该尝试调度信息记录在内核空间的调度记录表中,则此时报文转发进程需要向内核请求获取该报文转发进程的尝试调度信息。

此时,内核可接收该报文转发进程的获取请求,当该调度记录表存在该报文转发进程的标识信息时,根据该获取请求将表示该内核尝试对该报文转发进程进行系统调度的尝试调度信息发送给该报文转发进程。或者,当该调度记录表不存在该报文转发进程的标识信息时,根据该获取请求将表示该内核未尝试对该报文转发进程进行系统调度的尝试调度信息发送给该报文转发进程。此外,当内核将尝试调度信息反馈给该报文转发进程后,还需要将该报文转发进程的标识从该调度记录表中删除。

s709,报文转发进程确定内核是否尝试过对报文转发进程进行系统调度。

通过步骤s708,如果得到该报文转发进程的尝试调度信息,且该尝试调度信息表示该报文转发进程处于延时调度模式时该内核尝试过对该报文转发进程进行系统调度,即确定当该报文转发进程处于延时调度模式时该内核尝试过对该报文转发进程进行系统调度,则执行步骤s710。如果不能得到该报文转发进程的尝试调度信息,或者得到的尝试调度信息表示该报文转发进程处于延时调度模式时该内核未尝试过对该报文转发进程进行系统调度,则执行步骤s701,继续读取报文。

应理解,如果在步骤s706中,内核将该尝试调度信息记录在该报文转发进程映射的内核态地址空间,则该报文转发进程确定当该报文转发进程处于延时调度模式时该内核尝试过对该报文转发进程进行系统调度后,除了执行步骤s710之外,还需要将该尝试调度信息从该报文转发进程映射的内核态地址空间中删除。

s710,报文转发进程请求进行系统调度。

报文转发进程确定当该报文转发进程处于延时调度模式时该内核尝试过对该报文转发进程进行系统调度后,可向该内核发送调度请求,该调度请求用于请求该内核对该报文转发进程进行系统调度。

s711,内核对报文转发进程进行系统调度。

内核在接收到报文转发进程的调度请求后,可对该报文转发进程进行系统调度。

至此,用户态进程和内核完成的报文转发进程的延时调度交互流程图。其它类型的用户态进程的调度方法与此类似,其区别仅在于判断进入延时调度模式和退出延时调度模式的方式的差异。

图8是本申请再一种实施例的进程调度方法示意图。图8的方法由内核执行。如图8所示,该方法包括:

810,操作系统的内核在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息,其中,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式。

应理解,本申请实施例中,对系统调度的触发方式不作限定。例如当用户态进程的时间片用完后,会触发内核的系统调度,或者有比当前用户态进程优先权更高的进程进入就绪态,也会触发内核的系统调度,等等。触发内核进行系统调度的方法可以参考现有技术,本申请实施例在此不再赘述。

820,如果该用户态进程处于延时调度模式,则暂停对该用户态进程进行系统调度,并记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息。

本申请实施例中,在系统调度时通过判断用户态进程是否处于延时调度模式,并在用户态进程处于延时调度模式时暂停该用户态进程进行系统调度并记录该用户态进程被尝试系统调度的信息,从而能够在用户态进程执行关键事务的过程中暂停对该用户态进程进行系统调度,由此能够提升进程的响应速度,提高业务响应的及时性。

可选地,作为一个实施例,步骤810具体可实现为:该内核读取该用户态进程映射的内核态地址空间,该内核态地址空间用于存储该用户态进程发送给该内核的第一延时调度指示,该第一延时调度指示用于表示该用户态进程进入延时调度模式;如果该内核态地址空间存在该用户态进程的第一延时调度指示,则确定该用户态进程处于延时调度模式;或者,如果该内核态地址空间不存在该用户态进程的第一延时调度指示,则确定该用户态进程不处于延时调度模式。

本申请实施例中,通过从用户态进程映射的内核态地址空间读取第一延时调度指示,该操作不涉及用户态进程的操作,能够与用户态进程的处理操作并行运行,能够使得用户态进程和内核的信息传递不受对方的影响,从而能够在一定程度上提高业务响应的及时性。

可选地,作为另一个实施例,步骤810具体可实现为:该内核读取延时调度列表,该延时调度列表用于记录通过调用接口函数向该内核发送第二延时调度指示的用户态进程的标识信息,该第二延时调度指示用于表示发送该第二延时调度指示的用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息;如果延时调度列表中存在该用户态进程的标识信息,则确定该用户态进程处于延时调度模式;或者,如果延时调度列表中不存在该用户态进程的标识信息,则确定该用户态进程不处于延时调度模式。

进一步地,在本实施例中,在步骤810之前,该方法还包括:接收该用户态进程通过调用接口函数向该内核发送的该第二延时调度指示;将该第二延时调度指示中携带的用户态进程的标识信息记录到该延时调度列表中。

更进一步地,在将该第二延时调度指示中携带的用户态进程的标识信息记录到该延时调度列表中之后,该方法还可包括:接收该用户态进程通过调用接口函数向该内核发送的第三延时调度指示,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息;将该第三延时调度指示中携带的该用户态进程的标识信息从该延时调度列表中删除。

可选地,作为一个实施例,在步骤820中,记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息具体可实现为:将该内核尝试过对该用户态进程进行系统调度的尝试调度信息记录在该用户态进程映射的内核态地址空间,其中,该内核态地址空间用于该用户态进程通过访问该内核态地址空间获取该尝试调度信息。

可选地,作为另一个实施例,在步骤820中,记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息具体可实现为:将该用户态进程的标识信息记录在调度记录表中,其中,该调度记录表用于记录该内核在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问。

进一步地,在步骤820之后,该方法还可包括:接收该用户态进程的获取请求,该获取请求用于请求获取该用户态进程的尝试调度信息,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核是否尝试对该用户态进程进行系统调度。当该调度记录表存在该用户态进程的标识信息时,将表示该内核尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。或者,当该调度记录表不存在该用户态进程的标识信息时,将表示该内核未尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。

可选地,在步骤820之后,该方法还可包括:接收该用户态进程的调度请求,该调度请求用于请求该内核对该用户态进程进行系统调度。根据该调度请求,对该用户态进程进行系统调度。

图8的具体实现可参考图7所示实施例中内核执行的方法,本申请实施例在此不再赘述。

图9是本申请一种实施例进程调度装置900的结构示意图。进程调度装置900可包括用户态进程模块910和内核模块920,其中,

用户态进程模块910用于执行用户态进程,并在将要开始执行该用户态进程的关键事务时,将该用户态进程进入延时调度模式的信息通知内核模块920,该关键事务是指不能被中断的事务,该延时调度模式是指内核模块920在执行系统调度时不对该用户态进程立即进行调度的调度方式;

用户态进程模块910还用于在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知内核模块920;

内核模块920用于在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息,并在该用户态进程处于延时调度模式,停止对该用户态进程进行系统调度,并记录记录内核模块920尝试过对该用户态进程进行系统调度的尝试调度信息。

本申请实施例中,进程调度装置900在用户态进程模块执行用户态进程的关键事务前将该用户态进程进入延时调度模式的信息通知内核模块,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知内核模块,使得内核模块能够确定用户态进程是否处于延时调度模式,从而能够在用户态进程模块执行用户态进程的关键事务的过程中暂停对该用户态进程进行系统调度,由此能够提升进程的响应速度,提高业务响应的及时性。

可选地,作为一个实施例,用户态进程模块910将该用户态进程进入延时调度模式的信息通知内核模块920包括:用户态进程模块910将第一延时调度指示写入到该用户态进程映射的内核态地址空间,该第一延时调度指示用于表示该用户态进程进入延时调度模式;

其中,内核模块920获取待调度的用户态进程是否处于延时调度模式的信息包括:内核模块920读取该用户态进程映射的内核态地址空间,并在该内核态地址空间存在该用户态进程的第一延时调度指示时,确定该用户态进程处于延时调度模式。

进一步地,在本实施例中,用户态进程模块910将该用户态进程退出延时调度模式的信息通知内核模块920包括:用户态进程模块910将该将第一延时调度指示从该用户态进程映射的内核态地址空间中删除。

可选地,作为另一个实施例,用户态进程模块910将该用户态进程进入延时调度模式的信息通知内核模块920包括:用户态进程模块910通过调用接口函数向内核模块920发送第二延时调度指示,其中,该第二延时调度指示用于表示该用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息;

其中,内核模块920获取待调度的用户态进程是否处于延时调度模式的信息包括:内核模块920接收该第二延时调度指示,并将该第二延时调度指示中携带的用户态进程的标识信息记录到延时调度列表中,并在准备对该用户态进程执行系统调度时,如果该延时调度列表存在该用户态进程的标识信息,则确定该用户态进程处于延时调度模式。

进一步地,在本实施例中,用户态进程模块910将该用户态进程退出延时调度模式的信息通知内核模块920包括:用户态进程模块910通过调用接口函数向内核模块920发送第三延时调度指示,其中,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息;

其中,内核模块920还用于将该第三延时调度指示中携带的该用户态进程的标识信息从该延时调度列表中删除。

可选地,用户态进程模块910还用于获取该用户态进程的尝试调度信息,并在该尝试调度信息表示内核模块920尝试过对该用户态进程进行系统调度时,向内核模块920发送调度请求,其中,该尝试调度信息用于表示在该用户态进程处于延时调度模式时内核模块920是否尝试对该用户态进程进行系统调度,该调度请求用于请求内核模块920对该用户态进程进行系统调度;内核模块920还用于接收该调度请求,并根据该调度请求,对该用户态进程进行系统调度。

可选地,作为一个实施例,在用于记录内核模块920尝试过对该用户态进程进行系统调度的尝试调度信息时,内核模块920具体用于将内核模块920尝试过对该用户态进程进行系统调度的尝试调度信息记录在该用户态进程映射的内核态地址空间;

其中,用户态进程模块910具体用于通过访问该内核态地址空间获取该尝试调度信息。

可选地,作为另一个实施例,在用于记录内核模块920尝试过对该用户态进程进行系统调度的尝试调度信息时,内核模块920具体用于将该用户态进程的标识信息记录在调度记录表中,其中,该调度记录表用于记录内核模块920在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问;

用户态进程模块910还用于向内核模块920发送获取请求,该获取请求用于请求获取该用户态进程的尝试调度信息;

内核模块920还用于根据该获取请求,并在该调度记录表存在该用户态进程的标识信息时,将表示内核模块920尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程;或者,在该调度记录表不存在该用户态进程的标识信息时,将表示内核模块920未尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。

进程调度装置900还可执行图3所示实施例中用户态进程执行的方法及图8所示实施例中内核执行的方法,并实现报文转发进程和内核在图7所示实施例的功能,本申请实施例在此不再赘述。

图10是本申请实施例主机设备1000的结构示意图。如图10所示,主机设备1000可包括处理器1002和存储器1001。其中

存储器1001用于存储程序代码;存储器1001可以包括只读存储器和随机存取存储器,并向处理器1002提供指令和数据。存储器1001可能包含高速随机存取存储器(random-accessmemory,ram),也可能还包括非易失性存储器(non-volatilememory),例如至少1个磁盘存储器。

处理器1002用于读取存储器1001存储的程序代码生成用户态进程和操作系统的内核,其中:

该用户态进程在将要开始执行关键事务时,将该用户态进程进入延时调度模式的信息通知内核,该关键事务是指不能被中断的事务,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式;

该用户态进程在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知该内核;

该内核在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息;如果该用户态进程处于延时调度模式,则暂停对该用户态进程进行系统调度,并记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息。

上述如本申请图3,图4所示实施例揭示的用户态进程执行的方法及本申请图8所示实施例揭示的内核执行的方法,以及图7所示实施例揭示的交互方法可以应用于处理器1002中,或者由处理器1002实现。处理器1002可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1002中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1002可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1001,处理器1002读取存储器1001中的信息,结合其硬件完成上述方法的步骤。

本申请实施例中,主机设备1000在用户态进程执行用户态进程的关键事务前将该用户态进程进入延时调度模式的信息通知内核,并在用户态进程的关键事务执行完毕后将该用户态进程退出延时调度模式的信息通知内核,使得内核能够确定用户态进程是否处于延时调度模式,从而能够在用户态进程执行关键事务的过程中暂停对该用户态进程进行系统调度,由此能够提升进程的响应速度,提高业务响应的及时性。

可选地,作为一个实施例,该用户态进程将该用户态进程进入延时调度模式的信息通知该内核包括:该用户态进程将第一延时调度指示写入到该用户态进程映射的内核态地址空间,该第一延时调度指示用于表示该用户态进程进入延时调度模式;

其中,该内核获取待调度的用户态进程是否处于延时调度模式的信息包括:该内核读取该用户态进程映射的内核态地址空间,并在该内核态地址空间存在该用户态进程的第一延时调度指示时,确定该用户态进程处于延时调度模式。

进一步地,在本实施例中,该用户态进程将该用户态进程退出延时调度模式的信息通知该内核包括:该用户态进程将该将第一延时调度指示从该用户态进程映射的内核态地址空间中删除。

可选地,作为另一个实施例,该用户态进程将该用户态进程进入延时调度模式的信息通知该内核包括:该用户态进程通过调用接口函数向该内核发送第二延时调度指示,其中,该第二延时调度指示用于表示该用户态进程进入延时调度模式,该第二延时调度指示携带该用户态进程的标识信息;

其中,该内核获取待调度的用户态进程是否处于延时调度模式的信息包括:该内核接收该第二延时调度指示,并将该第二延时调度指示中携带的用户态进程的标识信息记录到延时调度列表中,并在准备对该用户态进程执行系统调度时,如果该延时调度列表存在该用户态进程的标识信息,则确定该用户态进程处于延时调度模式。

进一步地,在本实施例中,该用户态进程将该用户态进程退出延时调度模式的信息通知该内核包括:该用户态进程通过调用接口函数向该内核发送第三延时调度指示,其中,该第三延时调度指示用于表示该用户态进程退出延时调度模式,该第三延时调度指示携带该用户态进程的标识信息;

其中,该内核还将该第三延时调度指示中携带的该用户态进程的标识信息从该延时调度列表中删除。

可选地,该用户态进程还获取该用户态进程的尝试调度信息,并在该尝试调度信息表示该内核尝试过对该用户态进程进行系统调度时,向该内核发送调度请求,其中,该尝试调度信息用于表示在该用户态进程处于延时调度模式时该内核是否尝试对该用户态进程进行系统调度,该调度请求用于请求该内核对该用户态进程进行系统调度;该内核还接收该调度请求,并根据该调度请求,对该用户态进程进行系统调度。

可选地,作为一个实施例,在记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息时,该内核将该内核尝试过对该用户态进程进行系统调度的尝试调度信息记录在该用户态进程映射的内核态地址空间;

其中,该用户态进程通过访问该内核态地址空间获取该尝试调度信息。

可选地,作为另一个实施例,在记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息时,该内核将该用户态进程的标识信息记录在调度记录表中,其中,该调度记录表用于记录该内核在执行系统调度时尝试调度过的用户态进程的标识信息,且该调度记录表不能被该用户态进程直接访问;

该用户态进程还向该内核发送获取请求,该获取请求用于请求获取该用户态进程的尝试调度信息;

该内核还根据该获取请求,并在该调度记录表存在该用户态进程的标识信息时,将表示该内核尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程;或者,在该调度记录表不存在该用户态进程的标识信息时,将表示该内核未尝试对该用户态进程进行系统调度的尝试调度信息发送给该用户态进程。

本申请实施例还提供了一种计算机存储介质,该计算机存储介质用于存储程序代码,该程序代码包括用于生成用户态进程和操作系统的内核的程序代码,其中:

该用户态进程在将要开始执行关键事务时,将该用户态进程进入延时调度模式的信息通知内核,该关键事务是指不能被中断的事务,该延时调度模式是指该内核在执行系统调度时不对该用户态进程立即进行调度的调度方式;

该用户态进程在执行完该关键事务后,将该用户态进程退出延时调度模式的信息通知该内核;

该内核在执行系统调度时,获取待调度的用户态进程是否处于延时调度模式的信息;如果该用户态进程处于延时调度模式,则暂停对该用户态进程进行系统调度,并记录该内核尝试过对该用户态进程进行系统调度的尝试调度信息。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

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