嵌入式系统设计|进程与操作系统

文章目录

  • 嵌入式软件基础
  • 嵌入式操作系统基础
  • 嵌入式系统的任务管理
    • 进程、线程和任务
      • 进程(process)
      • 线程
      • 任务
  • 多速率系统
  • 可抢占的实时操作系统
  • 基于优先级的调度
    • 单一速率调度算法(RMS)
    • 共享资源
      • 信 量机制
    • 优先级反转
    • 最早截止时限优先调度(EDF)
    • 模型化的假设的介绍
  • 进程间通信机制
    • 共享内存
    • 信息传递
  • 实时操作系统的性能评估

嵌入式软件基础

  • 嵌入式软件的特点
    • 规模较小:几MB以内。
    • 开发难度大:硬件资源有限,时间和空间的限制,涉及到底层软件,运行环境和开发环境受限
    • 高实时性和可靠性要求:
      • 确定的、可重复的、可预测的;
      • 事件的处理要在限定的时间期限之前完成,否则就有可能引起系统的崩溃。例如航天控制、核电站、工业机器人
  • 软件固化存储

  • 嵌入式软件的分类
    • 系统软件:设备驱动程序、嵌入式操作系统、嵌入式中间件等。
    • 应用软件:嵌入式系统功能的体现,一般面向特定的应用领域。
    • 支撑软件:辅助软件开发的工具软件
  • 系统软件和应用软件运行在目标平台,软件开发工具运行在宿主机上。

  • 嵌入式软件的体系结构:无操作系统和有操作系统
    • 无操作系统的嵌入式软件
      • 采用循环轮转和中断(前后台)两种实现方式。
        • 循环轮转方式:把系统的功能分解为若干个不同的任务,按照时间顺序逐一执行。当程序执行完一轮后,又回到程序的开头重新执行,循环不断。
        • 中断方式:又称为前后台系统形式,系统在循环轮转方式的基础上增加了中断处理功能。
          • 前台程序,无中断时运行的程序。
          • 后台程序,处理中断服务。
  • 分层结构
    • 内部分为若干个层次(0~N),各个层次之间的调用关系是单向的
    • 每个层次上都提供一组API接口函数

嵌入式系统的任务管理

  • 单道程序设计和多道程序设计
    • 单道程序设计类型

进程、线程和任务

进程(process)

  • 进程是一次执行过程,它是暂时的,是动态地产生和终止的
  • 一个程序主要由代码和数据两部分内容组成。而进程是正在执行的程序,有相应程序的代码和数据
  • 它是由程序和该程序的运行上下文两部分内容组成
  • 程序是静态的,而进程是一个动态的,变化的
  • 一个进程在运行的时候可以启动一个或多个程序,同一个程序也可能由多个进程同时执行
  • 程序可以以文件的形式存放在硬盘或光盘上,作为一种软件资源长期保存。进程是暂时的,是动态地产生和终止的

  • CPU上下文:
    • 程序在运行时,CPU中含有PC(程序计数器)、程序状态字、通用寄存器、段寄存器、栈指针寄存器等各种寄存器的当前值内容
    • 系统资源:操作系统用来管理进程的数据结构、进程的内存地址空间、进程正在使用的文件等
    • 进程具有独立性,一个进程是一个独立的实体,占有计算机的系统资源,每个进程都有自己的运行上下文和内部状态,在它运行的时候独立于其他的进程
    • 进程具有并发性,在系统中同时有多个进程存在,它们相互独立地运行

线程

  • 线程(thread)是一个比进程更小的能独立运行的基本单位。所谓的线程,就是进程当中的一条执行流程
  • 从资源组合的角度来看,进程把一组相关的资源组合起来,构成了一个资源平台(资源环境)
  • 可以把进程看成是程序代码在这个资源平台上的一条执行流程(线程),也就是可以认为
  • 在一个进程当中,或者说在一个资源平台上,可以同时存在多个线程。可以用线程来作为CPU的基本调度单位,使得各个线程之间可以并发执行

  • 任务的创建
    • 系统初始化、任务运行过程中、人机交互等过程中都可以创建任务
      • 在系统初始化时,一般都会创建系统与用户进行交互的一些前台任务,以及完成键盘扫描、系统状态检测、时间统计等一些特定功能的后台任务
      • 在任务运行过程中,也能够使用相应的系统调用来创建新的任务,以帮助它完成自己的工作
      • 在一些具有交互功能的嵌入式系统中,用户可以通过输入命令或单击图标的方式,让系统启动一个新的任务
    • 创建基本方法:是在一个已经存在的任务当中,通过调用相应的系统函数来创建一个新的任务
    • 任务的创建主要采用fork/exec和spawn两种模型
    • fork/exec模型源于IEEE/ISO POSIX 1003.1标准
    • spawn模型是从它派生出来的
  • 创建过程
    • 为新任务分配相应的数据结构,存放各种管理信息,分配内存空间,存放任务的代码和数据
    • 当新任务准备就绪后,就可以运行它

  • 任务的终止
    • 原因:
      • 正常退出:当一个任务完成了所有的工作,需要结束运行,提出退出要求
      • 错误退出:当一个任务在执行过程中,出现了致命的错误,系统强制性地终止该任务
      • 被其它任务踢出:操作系统中可以提供一些系统调用函数,用来把一个任务从系统中清除出局,称为被其它任务踢出
    • 在一些嵌入式系统中,某些任务被设计为“死循环”的模式,任务不会自行终止

  • 任务的状态:运行(running)、就绪(ready)和阻塞(blocked)
    • 运行状态,占有CPU,并在CPU上运行,在任何一个时刻,处于运行状态的任务个数必须小于或等于CPU的数目
    • 就绪状态,当一个任务已具备运行条件,但由于CPU正在运行其他的任务,暂时不能运行该任务
    • 阻塞状态,也叫等待状态(waiting),任务因为正在等待某种事件的发生而暂时不能运行
    • 在一定条件下,任务会在不同的状态之间相互转换
        • 可抢占调度解决了协同多任务系统的若干问题
          • 准备满足时限需求
          • 使用在任意时刻运行哪个进程
        • 内核:
          • 确定在CPU下一个运行的任务
          • 上下文切换: 一个进程的寄存器切换到另一个进程
            • 上下文:一组寄存器
            • 上下文切换:一个进程的寄存器切换到另一个进程的寄存器
            • 原来进程的寄存器存储到记录(TCB)里
            • 取出要执行的进程记录(TCB)中的数据放到寄存器中
            • 代码通常是汇编写的
              • 恢复上下文要特别快捷


    • 实时系统调度
      • 实时系统的调度要求实时性,RTOS调度器要让每个任务都在其最终时间期限(deadline)之前完成
      • 多采用基于优先级的可抢占调度算法

    • RTOS任务模型
      • 每一个任务用一个三元组来表示(执行时间、周期、时间期限)
      • 执行时间:E(i)是指第i个任务在CPU上执行的最长时间
      • 周期:P(i)是第i个任务连续两次运行之间的最小时间间隔
      • 时间期限:D(i)是指第i个任务所允许的最大响应时间。一般来说,
      • 启动时间t(i) :第i个任务在CPU上开始执行的时间

        • 例:没有可行的调度
          • 一组进程
            • 进程p1,执行时间2,周期4
            • 进程p2,执行时间3,周期6
            • 进程p3,执行时间3,周期12
            • 优先级:p1最高,p2次之,p3最低
          • 无调度保证
            • 长度12,p1运行3次;p2运行2次;p3运行1次;
            • CPU使用时间:32+23+1*3=15,超出周期长度

        • 例:利用率的计算
        • 进程p1,周期4,执行时间2
        • 进程p2,周期12,执行时间1
        • 周期长度:最小公倍数12;

        模型化的假设的介绍

        • 单一速率调度假定进程间不存在数据相关

        • 示例:数据相关与调度
        • 数据相关意味着一些特定进程组合永远不会出现
          • 若上下文切换时间为0,调度可以实现 嵌入式系统设计|进程与操作系统
          • 若上下文切换时间为1,则需要: 2 ( 3 + 1 ) + ( 1 + 3 ) = 12 2*(3+1)+(1+3)=12 2/span>3+1+1+3

            声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月25日
下一篇 2021年5月25日

相关推荐