Linux进程调度-stop调度器

stop_sched_class
stop_sched_class优先级最高,同一时刻只有一个任务被设定为stop_sched_class。
任务一旦被设置为stop_sched_class,它将不能被抢占,不能被切换,其将一直执行下去,直至进程执行完或主动让出cpu。
只有内核线程可能被设置为stop_sched_class类,用户态进程不允许使用。
linux中任务有实时任务和普通任务之分。实时任务需要在deadline之前执行完成,否则不能产生正确的逻辑结果,而非实时任务则没有这个要求。为了满足实时任务调度需求,linux设计了两类调度器:dl_sched_class(deadline schedule)和rt_sched_class(realtime schedule)。

实时任务可以抽象出3大关键因素:周期(period)、运行时间(runtime)和最后期限(deadline)。Deadline调度器根据用户指定的上述3大因素进行实时进程调度,即使负荷很高的情况下也能保证实时任务的有效调度。

实时系统:当事件发生后,必须要在确定的时间范围内作出相应。在实时系统中,产生正确的结果,不仅依赖于程序逻辑正确,而且依赖于执行程序逻辑的时序。当收到某个请求时,会执行对应的动作以响应请求。要想正确地响应该请求,不仅需要响应的逻辑正确,而且还需要在最后期限(deadline)之前执行完对应的逻辑。如果没有在最后期限之前执行对应的响应逻辑,系统将产生错误或异常。

dl_sched_class
原理:

deadline调度器根据任务的deadline进行调度。当产生一个调度点时,deadline调度器选取deadline距离当前时间点最近的进程并执行它。(谁更紧急执行谁)
deadline调度器只有一种调度策略:SCHED_DEADLINE。
用法:针对deadline调度器,用户使用时需要设定三个参数:周期(period)、运行时间(runtime)和最后期限(deadline)。下面以视频处理进程为例进行说明。

1. 视频处理进程的主要是每秒钟处理60帧的视频数据,即每16ms需要处理一帧数据,因此它的周期period为16ms。

2. 对于视频处理进程来说,每个周期内它需要完成1帧数据处理,运行时间runtime即为完成这1帧数据处理需要cpu执行的时间。选取最坏情况下的cpu执行时间,运行runtime设置为5ms。

3. 在一个实时任务周期内,deadline定义了需要完成任务处理并交付的最后期限。在上面的16ms一帧视频处理周期内,如果需要在周期的前10ms完成一帧视频的处理并传送给下一个模块,则deadline设置为10ms。因此运行时间runtime的5ms必须在周期的前10ms内。

通过上面的一系列设置,系统可以保证在每16ms内,将分配给视频处理进程5ms的cpu使用时间,并且这5ms的cpu使用时间在周期的前10ms deadline完成,这样保证任务按时完成交付给下一个模块处理。

由于deadline任务明确了自身对cpu的详细使用需求,因此当一个新的deadline任务被创建时,deadline调度器会根据当前负荷处理能力判断能否接纳。若当前系统比较空闲,deadline调度器判断可以满足其需求,则接纳该进程;否则系统本身已经高负荷状态,deadline经过评估认为无法满足其对cpu的使用要求,则会拒绝该进程。
————————————————
版权声明:本文为CSDN博主「sy4331」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sy4331/article/details/125917969

Linux进程调度之stop调度器类与stop_machine机制 - 灰信网(软件开发博客聚合)

stop_sched_class用于停止CPU,一般在SMP系统上使用,永固实现负载均衡和CPU热插拔,这个类有最高的调度优先级。如果你的系统没有定义CONFIG_SMP,可以移除此调度类。

你可能感兴趣的:(Linux内核-进程调度,调度器,linux)