打印
[开发资料]

嵌入式基础知识之系统调度

[复制链接]
468|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duo点|  楼主 | 2024-2-24 16:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 duo点 于 2024-2-24 16:08 编辑

系统调度是操作系统重要功能,在嵌入式开发,也要了解系统调度的基本原理。对于嵌入式Linux开发,一般使用多线程和多进程开发,对于运行RTOS的嵌入式系统,一般使用多任务开发。这些线程、进程、任务的调度,有许多相似之处。
1、进程的三种状态
执行态(Run):进程占用CPU资源,对于单核处理器,任一时刻只能有一个进行处于执行态。

就绪态(Ready):进程本身具备运行条件,但由于处理机的个数少于可运行进行从个数,暂未运行,等待处理机资源。

等待态(Wait):也称挂起态(Suspended)、阻塞态、封锁态(Blocked)、睡眠态(Sleep)。该状态时,进行不具备运行条件,即使分给它处理机也不能运行。

(a):某个运行条件不能满足(如等待资源)

(b):等待条件消失(如等待的资源已经获得满足)

(c):就绪队列中的进程获得CPU的使用权

(d):进程资源放弃CPU使用权,或被强制剥夺CPU使用权

2、进程切换
进程切换是指,操作系统为了控制进程的执行,必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,也称为任务切换,或上下文切换。

或者说,进程切换就是从正在运行的进程中收回处理器,再使待运行的进程占用处理器。

结合上面介绍的进程三种状态,有如下分析:

当一个进程从运行态变成了阻塞态或就绪态,或完成工作被撤销,则该进程不再占用CPU,操作系统会进行进程调度,从就绪队列中重新选择一个进程执行;

当一个进程从就绪态变成运行态,则意味着操作系统将之前运行的进行切换,当前的进行开始占用CPU;

当一个进程从阻塞态变成就绪态,则该进程只是进入就绪队列,不会引起进程调度。

3、AUTOSAR任务状态
AUTOSAR(Automotive Open System Architecture),中文是“汽车开放系统架构”,是一家致力于制定汽车电子软件标准的联盟。


AUTOSAR中定义的任务有两个类别:
基础任务:只有运行、阻塞、就绪三个状态。

扩展任务:在基础任务的基础上,多了一个等待状态。
各任务状态的特点如下:

运行态:在任何一个时间点只有一个任务处于运行状态。

就绪态:所有任务都要转换为就绪态后才能转换为运行态,调度器决定哪一个就绪的任务将是下一个执行的任务。

阻塞态:处于阻塞态的任务是被动的,可以被激活。

等待态:处于等待态的任务将不能继续执行,它将等待至少一个事件发生。
(a) 触发:一个新任务被设置成就绪状态。
(b) 启动:一个就绪任务被调度器选择去执行。
(c) 被抢占:调度器决定去执行另一任务,使得运行态任务进行就绪态。
(d) 挂起:运行态任务通过调用系统服务使其转为阻塞态。
(e) 等待:通过一个系统服务引起状态转换到等待态,等待任务等待一个事件,以能够继续操作。
(f) 激活:至少一个任务等待的事件发生。

4、RTOS任务切换
RTOS(Real Time Operating System),实时操作系统,指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。


RTOS属于多任务系统,与进程切换的思想类似,多个任务也会进行任务的调度与上下文切换。
任务上下文是任务控制块(TCB)的组成部分,上下文切换由RTOS内部完成,并且上下切换时间是影响RTOS性能的重要指标。

以下为FreeRTOS的任务调度示意图:


1 任务创建完成后进入就绪态,表明任务已准备就绪,随时可以运行,只等待调度器进行调度。
2 发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态。
3 有更高优先级任务创建或者恢复后,会发生任务调度。
4 正在运行的任务发生阻塞(挂起、延时、读信号量等待)时,该任务会从就绪列表中删除,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪列表中当前最高优先级任务。
5 阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪列表;如果此时被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务将再次转换任务状态,由就绪态变成运行态。
6、7、8  任务可以通过调用vTaskSuspend() API函数都可以将处于任何状态的任务挂起,被挂起的任务得不到CPU的使用权,也不会参与调度,除非它从挂起态中解除。
9 把一个挂起状态的任务恢复的唯一途径就是调用vTaskResume()或vTaskResumeFromISR() API函数,如果此时被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务将再次转换任务状态,由就绪态变成运行态。

5、总结
本篇介绍了系统调度的基础知识,包括进程的三种基本状态,进程切换,AUTOSAR与RTOS的任务切换基础知识。

使用特权

评论回复
沙发
szt1993| | 2024-2-25 16:03 | 只看该作者
RTOS(Real Time Operating System),实时操作系统,指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

397

主题

1532

帖子

1

粉丝