学习笔记11--自动驾驶汽车操作系统

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。
此专栏是关于《自动驾驶汽车平台技术基础》书籍的笔记.



2.自动驾驶汽车操作系统

  • 在软件平台中,操作系统主要管理系统中的各种软、硬件资源,控制用户和应用程序的工作流程;

  • 操作系统是架构在硬件之上的第一层软件,是系统软件和应用程序运行的基础,软件平台和操作系统的关系如下图所示:
    1

  • 自动驾驶汽车的操作系统负责管理车辆对四周物体的识别、车辆定位及路径规划等功能,是实现无人驾驶的关键;

  • 车载操作系统分为实时操作系统和非实时操作系统;

2.1 车载实时操作系统

  1. 实时操作系统定义

    • 实时操作系统是确保在规定时间内完成指定功能的操作系统;
    • 实时操作系统最显著的特征是实时性,即当外部数据或请求到来之时,在极其短暂(微秒级)的时间内做出中断响应,且交由CPU进行处理;另外,高可靠性也是特征之一,如果有特殊情况发生,能某个时间范围内得到处理;
    • 实时操作系统可以被划分为硬实时(hard realtime)和软实时(soft realtime)操作系统,划分标准为硬性截止时间的不同;
    • 硬实时系统指要在最坏情况下确保在服务时间内完成响应,即对于事件的截止响应期限必须在规定时间内满足(一次也不能超时);
    • 软实时系统指在规定时间内,尽量保证处理完成相关任务和数据,当出现了超时情况,也属于可接受范围,并不会造成严重的后果(允许有限次数内超时);
    • 如果因为延期导致了任务的执行截止时间,硬实时系统会选择直接结束当前工作,然后关闭系统;软实时系统仅仅放弃执行当前任务,可能会有短暂的暂停,然后转为执行队列的下一个就绪任务;
  2. 实时操作系统的特征

    • 高精度计时系统

      在实时应用中,经常需要精确实时地操作某个设备或执行某次任务,或精确地计算一个时间函数;这些不仅依赖一些硬件提供的时钟精度,也依赖实时操作系统实现的高精度计时功能;

    • 多级中断机制

      一个实时操作系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分;有的必须立即做出反应,有的可以延后处理;因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件及时进行响应和处理;

      扫描二维码关注公众号,回复: 14537067 查看本文章
    • 实时调度机制

      实时操作系统不仅要及时响应事件中断,同时也要及时调度运行实时任务;实时调度机制包括两个方面:一是在调度策略和算法上保证优先调度实时任务;二是建立更多"安全切换"时间点,保证及时调度实时任务;

  3. 实时操作系统的相关概念

    1. 基本概念

      • 代码临界段:在一个时间段内,只允许一个线程或进行进行独占式访问的代码段;其他所有试图访问该代码段的进程都必须进行等待;
      • 资源:进程所占用的任何实体;
      • 共享资源:可以被多个进程共享的一次具体活动,以进程或线程的方式存在,拥有自己的地址空间(包括文本、数据和堆栈共同使用的实体);通过一系列操作达到某一目的,如:使用打印机打印出一串字符;拥有4种常见状态:休眠态、就绪态、运行态、挂起态;
      • 任务切换:当系统中存在两个或两个以上的任务时,处于就绪态任务需要抢占运行态任务,或运行态任务执行完毕,需要让出CPU控制权而进行的切换操作;当前占据CPU使用权的任务存入栈区,将 下一个即将开始的任务装入CPU寄存器,开始运行;
      • 内核:操作系统的核心,是硬件层和软件层的交互媒介,提供操作系统的基本功能;负责对任务的管理、CPU调度、设备驱动、内存管理等,可以分为抢占式和非抢占式;
      • 调度:当多个进程向同一资源发出请求时,由于访问互斥性,必须按照一定优先次序对唯一性资源进行分配;
    2. 关于优先级的问题

      • 任务优先级根据运行过程是否恒定,分为静态优先级和动态优先级;
      • 实际应用中的一个问题:优先级较低的进程长时间占据共享资源,阻塞了高优先级任务的运行;解决这个问题的两种方法:“优先级天花板"和"优先级继承”;第一种方法:在所有申请同一共享资源的任务中选出一个最高优先级,把这个优先级赋给一个申请资源的任务,即不让某一资源的优先级成为影响高优先级的任务运行的关键因素;第二种方法:当出现高优先级任务被低优先级任务占用临界区资源时,在一定时间内将低优先级任务提高到与高优先级任务相同,缺点是每一项新任务到来时,都需要进行判断;
    3. 互斥

      • 共享内存的意义:可以让进程之间的通信变得方便、迅速,但当一个进程对该区域进行读写的时候,为了防止脏读脏写,必须保证访问的互斥性,即其余请求访问该内存区域的进程必须等待,直到此内存被释放;
      • 实现互斥访问一般包括:软件和硬件两种方法;软件方法有DEKKER算法和PETERSON算法;硬件方法主要通过特殊指令来达到保护临界区的目的,包括忙等待、自旋锁、开关中断指令、测试并加锁指令、交互指令等;
    4. 任务切换时间

      任务切换时间是衡量一个实时操作系统实时性能的重要指标之一,取决于CPU需要等待入栈的寄存器个数;CPU寄存器个数越多,则切换时间越长;

      任务切换时的状态,如下图所示:
      2

    5. 中断响应时间(可屏蔽中断)

      中断响应时间是另一个衡量实时操作系统实时性能的重要指标,主要由关中断的最长时间、保护CPU内部寄存器的时间、进入中断服务函数的执行时间、开始执行中断服务程序(ISR)的第一条指令时间构成;

  4. μ C / \mu{C}/ μC/OS-Ⅱ概述

    • μ C \mu{C} μC/OS-Ⅱ由Micrium公司提供,是一个可移植、可固化、可裁剪的,占先式多任务实时内核,适用于多种微处理器、微控制器和数字处理芯片;同时,该系统源代码开放、整洁、一致、注释详尽,适合系统开发;
    • μ C \mu{C} μC/OS-Ⅱ已经通过联邦航空局(FAA)商用航行器认证,符合航空无线电技术委员会(RTCA)DO-178B标准;
    • μ C \mu{C} μC/OS-Ⅱ大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分:
      1. 核心部分(OSCore.c):操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部份;
      2. 任务处理部分(OSTask.c):其内容都是与任务的操作密切相关,包括任务的建立、删除、挂起、恢复等;
      3. 时钟部分(OSTime.c): μ C \mu{C} μC/OS-Ⅱ中的最小时钟单位是timetick(时钟节拍);任务延时等操作在这里完成;
      4. 任务同步和通信部分:为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分,主要用于任务间的互相联系和对临界资源的访问;
      5. 与CPU的接口部分:指 μ C \mu{C} μC/OS-Ⅱ针对所使用的CPU的移植部分;这部分内容由于牵涉SP等系统指针,通常用汇编语言编写,主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容;

2.2 车载准实时操作系统

  1. 准实时操作系统定义

    • 准实时操作系统是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统;
    • 为把计算机与许多终端用户连接起来,准实时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用;
    • 由于时间间隔很短,每个用户的感觉就像他独占计算机一样;准实时操作系统的特点是可有效增加资源的使用率;
    • 准实时操作系统典型例子:UNIX和Linux的操作系统;其可以同时连接多个终端且每隔一段时间重新扫描进程,重新分配进程的优先级,动态分配系统资源;
  2. 准实时操作系统的特征

    • 交互性(同时性):用户与系统进行人机对话;用户在终端上可以直接输入、调试和运行自己的程序,在本机上修改程序中的错误,直接获得结果;
    • 多路性(多用户同时性):多用户同时在各自终端上使用同一CPU和其他资源,充分发挥系统的效率;
    • 独立性:用户可彼此独立操作,互不干扰、互不混淆;
    • 及时性:用户在短时间内可得到系统的及时回答;
    • 影响响应时间的因素:主要有终端数目多少、时间片的大小、信息交互量、信息交换速度等;
  3. Linux系统结构

    • Linux系统结构图如下所示:
      3

    • Linux系统是一个分层的体系结构,位于硬件层之上,由用户空间和内核空间组成,其中高位的物理内存由内核空间占用,这部分内存只限运行在内核态的进程访问,主要划分为ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM3部分;

    • 低位的物理内存由用户空间使用,进程对用户空间的访问是互相隔离的,某一时刻占据CPU的进程,拥有整个虚拟内存空间;

    • 目前的Linux系统由于几个自带特性,无法满足硬实时操作系统要求:

      • 时间粒度太大(毫米级);
      • 时间片轮转调度策略;
      • 虚拟内存管理;
      • 非抢占式内核;
      • 临界区中断屏蔽;
    • Linux进程的运行状态一般分为阻塞态、就绪态和运行态3种;

    • 当一个进程所有资源都具备,只差CPU控制权时,根据优先级被插入就绪队列合适位置,进入就绪态;当就绪队列进程获得CPU后,进入运行态,直到时间片用完,进入新的就绪队列;或者I/O设备等硬件资源被剥夺,则进入阻塞态,直到重新获取硬件资源,再由系统移至就绪队列末尾继续等待;

    • 在Linux系统中,一旦进程进入运行状态,即便就绪队列中有更高优先级任务到达,也无法立即对运行中的低优先级进程进行抢占;除非当前运行的低优先级进程自动放弃CPU,或等待硬件资源被剥夺而造成阻塞,否则将一直处于运行态;

    • 当Linux系统在对临界区资源进行操作时,中断标志位是处于屏蔽状态,即无法通过中断请求,而立即插入执行高实时性任务;等待的时间长度完全取决于系统调用所耗费的时间,这段时间内系统无法处理外部的中断请求;

    • 实时性操作系统要求,对于低优先级的当前运行任务,只要就绪队列中存在优先级比它高的任务,就可以立即剥夺它的运行权力;

    • Linux采用时间片轮转调度策略,每个进程都被分配相同长度的时间片,从获取CPU运行权开始计时,当期时间片用完之时,不管进程是否运行完毕,都必须交出CPU控制权;

    • Linux调度策略的优点是每一个等待队列中的进程在一定时间内都有机会获得执行权力,防止出现某一进程因等待时间过长而挂死的情况;缺点是对于优先级高的长进程,可能需要多次调度执行,才能完成任务,降低了系统的平均执行效率;

    • 当出现随机存储器(RAM)不够用时,Linux采用虚拟内存技术,通过将内存映射到扩展的虚拟存储盘,达到加大内存容量的效果;首先,这需要建立一个额外的数据结构来管理这部分虚拟内存;其次,缺页所造成的页面换进换出和磁盘I/O操作需要一笔不小的时间开支,且这段时间支出是无法预知的;如果这段时间里,有高优先级任务到来,系统无法提供及时响应;

    • 为了利用Linux的资源优势,对Linux无法作为实时操作系统这一问题提出了两种处理方案:

      • 第一种方案:直接改动内核的源代码,通过对周期模式、数据结构、调度方式、中断屏蔽等进行改动,达到提高实时性的目的;这种方式改动后,实时性很好,原来的内核模块依然可以使用,在其上编写代码和普通Linux基本相同,可以系统调用;缺点是工作量很大,且后期会存在系统稳定性问题;
      • 第二种方案:采用双内核方式,在Linux内核外部进行扩展。采用双内核后,普通进程使用Linux调度器进行调度,实时任务使用新内核调度器进行调度;这种双内核系统的两个内核互相配合,合理分工,当外部请求到来时,先由系统划分优先级,将优先级高的进程分配给实时内核进行处理,优先级低的进程分配给非实时内核进行处理;

猜你喜欢

转载自blog.csdn.net/qq_39032096/article/details/127231479