1、术语扫盲
1.1 例程
例程的作用类似于函数,例程是某个系统对外提供的功能接口或服务的集合;
例如:操作系统的API,服务等
1.2 进程
进程(Process):操作系统进行资源分配的最小单位。一个进程就是一个程序的一次执行过程,每启动一个进程,操作系统就会为它分配一块独立的内存空间,用于存储PCB(Process Control Block:进程控制段,进程的唯一标识)、数据段、程序段等资源。每个进程占有一块独立的内存空间。
1.3 线程
线程(Thread):轻量级进程,是操作系统进行调度的最小单位。一个线程是一个任务(一个程序段)的一次执行过程。线程不占有内存空间,它包括在进程的内存空间中。在同一个进程内,多个线程共享进程的资源,多个线程可以并发执行。一个进程至少有一个线程。
1.4 任务
任务(Task):可以看作是一项或一组待完成的工作,它通常与特定的目标和输出相关。在实时操作系统(RTOS)中,任务是一个更细粒度的运行实体,它可以是一个轻量级的进程或一个线程,拥有特定的优先级和运行状态。
在操作系统当中,任务为用户函数的执行提供了框架,是用户函数的载体,操作系统通过调度器来管理任务的先后执行顺序,为任务提供了异步执行和并发执行的管理机制。
在操作系统中,任务即线程 / 进程;
1.4.1 基本任务和扩展任务(Basic Task & Extended Task )
看一看两种类型的任务的区别
1.4.1.1任务的状态 :
基本任务:Running(运行)、Ready(就绪)、Suspend(挂起)
扩展任务:Running(运行)、Ready(就绪)、Suspend(挂起)、Waiting(等待)
①运行状态(Running):处于运行状态时,CPU资源被分配给该任务,该任务的指令被执行。在同一个CPU上任何时候只有一个任务处于此状态,而处于其他状态的任务可以有多个。
②就绪状态(Ready):此状态是转换为运行状态的先决条件,任务此时等待处理器的分配。由调度器来决定那个就绪任务将在接下来的时间里被执行。
③等待状态(Waiting):任务因等待至少一个事件而无法继续执行。
④挂起状态(Suspend):处于挂起状态时,任务是被动的,可以被激活。
从状态上来讲,最大的区别在于扩展任务可以调用Autosar操作系统的服务WaitEvent API。 当扩展任务调用该服务时,该扩展任务会由运行状态切换为等待状态,直到所等待的事件发生。扩展任务在等待的状态下会释放处理器资源,操作系统会执行处于Ready状态且优先级最高的任务,而不需要终止该扩展任务。
1.4.1.2 任务的优先级:
0为最低的优先级,优先级的数值越大优先级越高
1.4.1.3 Autosar操作系统支持的任务调度策略:
(调度器:使用相关的调度算法来决定当前需要指定的任务)
- 非抢占任务调度
- 全抢占任务调度
- 混合抢占任务调度
1.5 中断
在Autosar操作系统中,中断分为一类中断和二类中断;
1.5.1 一类中断 & 二类中断
一类和二类的区别在于,一类禁止使用操作系统服务(OS),二类可以使用;
具体表现为:在一类中断执行完成后,操作系统就会继续处理中断发生处的指令,不会影响到任务的执行;二类可以调用OS操作系统,如激活任务或者设置事件等
1.5.1.1 中断优先级
所有二类ISR必须具有不高于最低优先级的一类ISR的中断优先级,
在AUTOSAR OS中,中断的优先级始终高于任务的优先级,即最低优先级的中断都可以打断最高优先级的任务,即使该任务不可抢占也不例外。