RT(realtime scheduler),实时调度器。实时调度是为了完成实时处理任务而分配CPU的调度方法。
DragonOS的进程分为“实时进程”和“普通进程”两类;实时进程的优先级高于普通进程,如果当前的系统的执行队列中有“实时进程”,RT调度器会优先选择实时进程;如果队列中会有多个实时进程,调度器会选择优先级最高的实时进程来执行;
RTQueue是用来存放state为running的实时进程的调度队列,每个CPU维护一个RTQueue,主要使用Vec作为主要存储结构来实现。
RT调度器类,主要实现了RT调度器类的初始化以及调度功能函数。
目前在DragonOS中,主要的调度策略有SCHED_NORMAL 策略 | SCHED_FIFO 策略 | SCHED_RT 策略,具体的调度策略为:
SCHED_NORMAL 策略: SCHED_NORMAL 是“绝对公平调度策略”,该策略的进程使用CFS进行调度。
SCHED_FIFO 策略: SCHED_FIFO是“实时进程调度策略”,这是一种先进先出的调度策略,该策略不涉及到CPU时间片机制,在没有更高优先级进程的前提下,只能等待其他进程主动释放CPU资源; 在SCHED_FIFO策略中,被调度器调度运行的进程,其运行时长不受限制,可以运行任意长的时间。
SCHED_RR 策略: SCHED_RR是“实时进程调度策略”,使用的是时间片轮转机制,对应进程的time_slice会在运行时减少,进程使用完CPU时间片后,会加入该CPU的与该进程优先级相同的执行队列中。 同时,释放CPU资源,CPU的使用权会被分配给下一个执行的进程
几种常用的方法
如何创建实时进程
struct process_control_block *pcb_name = kthread_run_rt(&fn_name, NULL, "test create rt pcb");
其中kthread_run_rt,是创建内核实时线程的宏
pcb中涉及到实时进程的字段含义
如何实时进程存储队列
todo