在体系功用与编程简易性之间的权衡折中是通用操作体系与实时操作体系之间的首要区分点之一。
GPOS(通用操作体系)倾向于供给较高程度的资源笼统,这不仅可经过支撑软件模块与资源阻隔来进步运用的便携性、简化开发流程,一起还能增强体系的稳健性,这使 GPOS 成为比如网络、用户界面以及显现办理等通用体系组件的抱负挑选。
可是,该笼统需求以体系资源的精密粒度操控作为价值,以满意信号处理代码等高强度算法的核算功用要求。关于完结这种高档其他操控,开发人员一般需求选用实时操作体系 (RTOS)。
从嵌入式信号处理视点上讲,咱们一般要考虑两种类型的操作体系,即通用操作体系 Linux 与实时操作体系 DSP(数字信号处理器)/BIOS(根本输入输出体系)。Linux 可支撑更高水平的笼统技能,而 DSP/BIOS 则可供给更精密的操控。
为了充分发挥这两种操作体系的优势,开发人员可选用体系虚拟机,这就使编程人员可在同一 DSP 处理器上一起运转 Linux 与 DSP/BIOS 体系。
可是,咱们要提出一个重要的问题:为什么不运用别离运转 Linux 与 DSP/BIOS 体系的 CPU+DSP 组合器材呢?究竟,CPU 在运转用户接口操控代码等方面具有更高的功率。此外,不同的内核可防止虚拟化带来的开支。不过,在同一颗芯片上集成一切功用仍是很有吸引力的,原因如下:
其一,当今高功用 DSP 比前代 DSP 要强大得多,这样可削减操控处理周期数。其二,大多数高功用 DSP 的通用功用均比前代产品更强,然后可完结更高效的操控代码处理作业。
假如一切功用都可集成在 DSP 上,那么其优势将愈加拔尖。更少的芯片数量可完结更低的本钱与更小的占用空间。此外,因为不再需求在消耗很多电力的处理器间数据传输,因而还可下降能耗。
进展组织
操作体系最常见也是最有利的一个特性便是能一起履行多个使命或多个线程。操作体系经过时刻表办理内核处理,以接连履行相关使命。
以往,嵌入式编程人员在运用 Linux 时会忧虑实时功用较低的问题。不过,对 Linux 内核的最新增强显着进步了其对体系事情的呼应才干,然后使其可满意各种企业与个人以及嵌入式产品的需求。
Linux 可完结线程的时刻切片以及优先次第的时刻组织。时刻切片技能是指在一切线程之间同享处理作业周期,以保证无封闭线程。这种办法一般适用于用户接口功用,以保证在体系超载、呼应较慢的状况下也不至于彻底丢掉用户功用。
与此构成比照的是,优先次第线程时刻组织技能则可保证体系中最高优先级线程的履行,直至该线程抛弃操控停止,这时下一个最高优先级的线程即开端履行。
Linux 内核在每次从内核到用户方式的转化时都会对可用线程的优先级进行从头评价,这就意味着内核最新评价的任何事情(如驱动程序上数据的可用性)都能当即触发新线程(调度器的时延呼应时刻内)的转化。因为确认了根据优先级的线程,其一般用于有必要满意实时要求的信号处理运用。
在推出 Linux 内核 2.6 版别之前,约束实时功用的首要因素是 Linux 内核会禁用中止,且禁用时刻有时会长达数百毫秒。
就此而言,咱们能够进步内核施行的功率。因为在禁用中止时,代码的某些部分无需从头进入,而这会添加中止呼应的时延。
现在的 2.6 版别供给了构建选项,可在整个内核代码中以更高的频率刺进中止再启用指令。Linux 社区一般将该特性称作先占内核 (preempt kernel),虽然这会让内核功用略有下降,但却能够显着进步实时功用。关于很多体系使命而言,在先占性 Linux 2.6 内核与实时线程结合运用时,将能供给满意的功用来满意实时需求。
例如,德州仪器 (TI) 的 DSP/BIOS 以软件中止和使命的方式仅支撑优先级调度。与 Linux 调度器相同,软件中止和使命都归于先占型的。可是,DSP/BIOS 也为运用编程人员供给了直接存取硬件中止的条件,该资源仅适用于 Linux 内核方式。
直接存取硬件中止使运用编程人员可在理论上完结底层硬件所支撑的最短时延呼应。对操控环路等需求肯定最低时延的运用而言,这种精密粒度的硬件中止操控机制一般是一种十分重要的特性。
受维护的资源拜访
Linux 与大多数通用操作体系的一个根本特点便是用户空间程序与所用的底层体系资源相别离。仅在作业处于监控(如内核)方式下时才答应直接拜访存储器和设备外设。
假如用户程序期望拜访体系资源,那么它有必要经过称作驱动器的内核模块从内核宣布恳求。该运用坐落用户存储器空间,并将经过虚拟文件拜访驱动程序。然后,虚拟文件将运用的恳求转至驱动器履行的内核存储器空间。
Linux 可供给特性极为丰厚的驱动器模型,其间包括规范流媒体外设、模块存储设备以及文件体系,甚至还包括网络与根据网络的文件体系。
驱动器与用户空间运用的别离可完结高度的稳健性。此外,通用驱动器接口上的笼统水平使其便于将数据撒播输给串行端口、闪存文件体系或网络同享文件夹,且仅需对底层运用代码稍作更改。
可是,完结这种灵活性需求付出价值。运用与物理资源的严厉别离会加大开支。假如用户空间程序要拜访设备外设,则内核方式有必要进行环境交流才干处理该恳求。
因为数据是成块拜访,而非逐一样本 (sample-by-sample) 拜访,因而一般来说这不会形成太大的局限性。这样,内核方式下每次块拜访仅需进行一次环境交流即可。
可是,在某些状况下,运用代码需与物理硬件严厉匹配。假如运用 DSP 等对数据吞吐量要求较高且不能容忍中止的高功用处理器时,一般就会呈现此类状况。这时,内核空间的物理资源与用户空间的运用相别离的做法就可能会严重影响体系功用。
运用与硬件的匹配
咱们无妨运用 TMS320DM643x 处理器架构来研讨在履行块视频处理时会遇到的典型状况,该架构选用一个 600 MHz / 4800 MIPS DSP 处理内核以及比如功用丰厚的视频端口子体系等各种多媒体外设。这种硬件一般用于将输入视频流进行 H.264 格局紧缩。
为了充分发挥 DSP 内核的处理才干,处理的数据应从周期操作内部存储器读取,而不是从速度较慢的外部存储器读取。虽然在技能上能够让具有满意快的片上存储器的处理器存储一个或多个完好的视频帧,但这种技能对大多数方针商场来说本钱太高。因而,选用可供给 80kB 的单周期操作片上数据存储器的处理器取而代之。
80kB 虽然小,不能存储完好的视频帧,但 TI 经过
DSP经过直接存储器存取(DMA)操控器为该存储器供给数据,这种操控器还可用于内外部存储器之间高效传输数据子块,而不会占用处理器内核的周期操作(见图 1)。
从全体体系的视点来说,这种办法可供给简直相当于具有整个视频缓冲器的芯片所供给的功用,但本钱却十分低。不过,为了完结这样的高功用,就需求运用、操作体系以及底层存储器与 DMA 硬件之间的紧密配合。
首要,运用有必要能够差异快速内部存储器与大容量外部存储器。其次,运用有必要能够履行许多时刻准确的小型 DMA 操作。因为拜访 DMA 时发生的一切时延在 DMA 拜访每个视频帧时都会扩大数百倍甚至数千倍,因而在 Linux 驱动程序模型内高效完结 DMA 操作虽非不可能,但也极为困难。
这种办法的实践施行可经过 DSP/BIOS 完结,并供给原生 API 来完结运用对内外部存储器的恳求,一起也使运用可直接拜访 DMA 寄存器,不会发生环境交流丢失。
两种操作体系的优势结合
虽然很多多媒体运用的大部分处理器周期操作都用来进行信号处理,但能满意消费需求的产品一起还有必要履行许多更高档的功用,如用户界面、显现功用、网络以及文件处理等。
因为上述特性对时刻要求不高,因而无需准确操控 DSP/BIOS。这时,Linux驱动程序模型所供给的资源提取功用就可更好地进步灵活性,缩短开发时刻,更不用说可取得 Linux 社区丰厚的开源运用代码支撑了。
可使 Linux 与 DSP BIOS 操作体系一起运转在同一设备上的解决方案,便是需求运用虚拟程序 (virtualizer) 为体系开发或集成人员供给这两种操作体系的优势(见图 2)。
虚拟程序作为快速、可猜测的交流机可在 Linux 与 DSP/BIOS 操作体系之间完结 DSP 资源。当接收到中止时对 DSP/BIOS 操作体系环境做出估测性交流,能够保证 DSP/BIOS 线程的最佳功用。
假如新抵达的中止对应于 DSP/BIOS 环境中已识其他事情,那么将在现已加载且预备运转的 DSP/BIOS 环境中对其进行处理。
在虚拟程序支撑 DSP/BIOS 的一起,运用可直接拜访所需的体系资源,且不会影响(挂起)Linux 环境中坚持的用户与内核空间。
一旦运用完结 DSP/BIOS 环境下的高功用信号处理核算,虚拟机就将强制转回到 Linux环境,以便拜访该环境下的更高档特性。
在虚拟程序的调节下,操作体系之间的交流时刻不到 10ms,这使编程人员能到达实时功用要求,相关于只包括 DSP/BIOS 的原生体系而言,功用上也没什么丢失。该解决方案对典型多媒体设备的处理资源占用仅约 1.5%。
双操作体系的更多优势
DSP/BIOS 操作体系对根据 Linux 的产品进行扩展的最显着优势之一是 :无需移植就可运用成百上千种第三方的相关算法。因为契合 xDAIS 规范,因而可保证第三方算法无缝集成于 DSP/BIOS 环境中。
DSP/BIOS 操作体系对根据 Linux 的体系进行扩展的另一个优势是:在 DSP/BIOS 环境下履行运用不受 Linux 内核 GNU 通用公共许可证 (GPL) 的约束。
在施行根据 Linux 的解决方案时,咱们有时不是很清楚开发商推出的共同软件知识产权在许可证方面到底有哪些具体要求。经过在 DSP/BIOS 而非 Linux 操作环境下履行 IP,能够防止这方面的法律问题。
定论
运用本文介绍的技能,Linux 与 DSP BIOS 可一起运转在一致的 DSP 内核上,这既能够供给 Linux 解决方案的悉数功用,又可保证 DSP/BIOS 环境下的高精度与硬件操控。
编程人员可充分利用适用于 Linux 的运用代码与适用于 DSP/BIOS的信号处理代码,无需针对不同环境进行移植。
对要在实时嵌入式运用中选用 Linux 特性的规划人员而言,经过虚拟程序晋级、一起取得 DSP BIOS 东西套件,将大幅进步信号处理功用,并可显着节约体系资源的本钱。