《Linux内核实时性以及网络实时性的研究》
Posted Jiamings
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Linux内核实时性以及网络实时性的研究》相关的知识,希望对你有一定的参考价值。
[1]沈涛. Linux内核实时性以及网络实时性的研究[D].南京邮电大学,2013.
Linux虽然自身面向通用操作系统,但是由于其源码级的定制修改属性,Linux具备实时性成为了可能。
本文目标:对于Linux下网络的实时化改进。
+ 双内核Linux实时化改造方案 Xenomai
+ 两套嵌入式平台上基于 Xenomai 完成对 Linux 的内核的实时化改造
实时操作系统特点:
1. 时间约束性(截止时间)。软实时:监控系统和信息采集系统
2. 可预测性(系统能够对实时任务的执行时间进行判断)。硬件延迟的预测、软件系统的可预测(应用程序的响应时间)、操作系统的可预测性(保证应用程序执行时间的有界性,调度函数等运行开销是有界的)
3. 可靠性(采用静态分析和保留资源的方法及冗余配置,保障系统)
衡量实时性的指标(如果以下两个指标是确定的,可预测的,那么就可以说该操作系统是实时的):
1. 中断时延(很多实时任务是靠中断驱动的,外部事件发生到相应中断处理函数的开始执行的时间)
2. 抢占/调度时延(从一个外部事件发生到处理该外部事件的时延)
实时 Linux 改造方法(增加实时内核的双内核方案/改进现有内核/虚拟机来完成Linux实时应用的方案(虚拟机系统取代了实时内核)):
1. 双内核方案 RT-Linux,RTAI,Xenomai:
1. 非实时内核+实时内核。RTLinux、实时应用程序接口(RTAI)、Xenomai
2. 超微内核。对硬件进行抽象,对更高级别的操作系统提供优先权。ADEOS
2. 改进内核方案:MontaVista Linux、Time Sys Linux、RT-Preempt Patch、ART-Linux
1. 资源内核法。为内核增加一个可移植的资源模块。Linux/RK
2. kernel 2.6 软实时 + 内核补丁 = 硬实时
3. 实时虚拟机方案:实时虚拟机包括 VLX、L4、XtratuM 以及由 WindRiver、Freescale、Xen、Trangon/VMware 主导的其他项目。
XtratuM:
而实时虚拟机的一般都是运行于裸机上的虚拟机;
利用域作为基本调度的任务单位(具有硬件资源,比进程范围更大的任务单位),Linux也运行在其中一个域上;
客户操作系统被分为两类:Linux为代表的非实时系统、PartiKle为代表的实时系统;
采用超微内核,直接管理系统中与实时性密切相关的中断、定时器等底层资源;
Linux 不够实时的原因:
1. 中断具有最高优先级(包括软中断)。实时任务的优先级得不到保证。
2. 内核可抢占性不足。Linux2.4和之前的版本中,如果当前任务运行在内核态,无论当前是否有优先级更高的任务需要运行,正在执行的任务也不能被抢占,等待让出的 CPU。
1. 自愿抢占。加入可抢占点,改善系统调度。
2. Linux2.6版本开始,内核具备了一定的可抢占性。除了不可抢占区域(自旋锁保护的临界区),其余都可以实现抢占。
3. 自旋锁。一种数据同步机制。
4. 调度算法。Linux2.6之后引入可抢占内核,引入了时间复杂度O(1)的调度器
5. 关中断指令的使用。增大中断时延。损害实时性。
Xenomai —— 强实时扩展框架
双内核方案。RT-Linux、RTAI、Xenomai
Xenomai nucleus + Linux kernel = 提供与接口无关的硬实时性能。
Xenomai 技术能够提供强实时的内核扩展:1. 存在一个支持强实时的微内核——Xenomai nucleus,与Linux内核共同运行于硬件平台上,优先级高于Linux内核,负责实时任务;2. Linux 内核负责非实时任务,只有当没有实时任务时,它才能得到运行的机会。
Xenomai 优势
- 具有良好的移植性和兼容性。不盲目追求极致实时性,宁可为良好的移植性和兼容性牺牲实时性也可以接受,因为其所提供的实时性能已经足以应付绝大部分的实时任务需求。
- 具有丰富的实时API(Skin)。
- 广泛的硬件架构支持。
- 活跃的开源项目
Adeos —— 操作系统可适应域环境
Xenomai 基于 Adeos 实现双内核机制。 Adeos 操作系统可适应域环境,是一个实时系统框架,提供了在同一套硬件上同时运行 GNU/Linux 和 RTOS 的途径。与 Linux 全称应该是 GNU/Linux 一样,Adeos/Xenomai。
- Adeos 在同一套硬件上提供了多个域,彼此独立,但能够和 Adeos 通信。一个域通常包含一个完整的操作系统,所有的域都有能力根据被赋予的系统优先级,处理外部事件或者内部事件。
- Adeos 屏蔽了底层硬件,对上层域提供通用 API,系统的移植工作完全取决于 Adeos 的移植。
Xenomai是什么?
是一种技术,对应的微内核称为Xenomai Nucleus
Xenomai域的地位?
类似"模块",由根域来加载。
为内核代码打上Xenomai补丁,安装Xenomai实时库文件,所有的测试脚本和可执行文件会在/usr/xenomai/bin 目录下,而共享库文件则在/usr/xenomai/lib 目录下。
Adeos 特性:
1. 事件管道
基于事件控制链的客户域是 Adeos 的基本结构,我认为进行了一个软分片,规定了什么时候处理什么事情。
- Adeos 向域发出每一个外部中断;
- Adeos 向域发出每一个系统调用;
- Adeos 向域发出内核代码产生的系统事件(Linux 任务交换、信号通知)
Adeos 将事件管道中的事件按照由高优先级到低优先级的顺序排列,并依次传递给对应的优先级域处理。 将事件分为了三个大类(域)进行集中处理。
其它域都需要 Linux 来对它们进行安装,通常是作为 Linux 内核模块的方式加载。
2. 主动中断保护
- 在处理事件管道中的某个域时,事件管道处于延阻状态(推迟状态),下一个到来的中断不会被提交,会被阻塞并记录在中断日志中,之后进行同步操作),也杜绝低优先级的事件抢占。
- 对处于管道前列,并且高于当前域优先级的事件,仍然会响应抢占。
- 当处理完一个域后,执行 Adeos 系统服务,将 CPU 交给事件管道中的下一个域,直到最后一个优先级最低的域。
3. 系统事件传递
事件管道中的内容:中断、内核或应用程序产生的陷阱和异常。
大部分对 Adeos 提起的服务请求都来自于 HAL。
Adeos 和 Xenomai
Adeos 和 Xenomai:Adeos 必须在 Linux 内核得知中断之前首先处理中断,并且无论 Linux 内核是否通过 CPU 中断掩码屏蔽中断都必须立刻处理中断。Xenomai 能够根据这些Adeos的保证,准确给出微秒级的中断时延预测,无论 Linux 在执行什么活动。通过对 Xenomai 快速对 Linux 任务的协作调度技术,为实时线程提供了可预测的抢占时延。
Xenomai 的主域(Xenomai(primary)Xenomai线程)和次域(Linux(secondary)Xenomai线程)(优先级的区别)
Xenomai 管理的线程工作在实时内核(Xenomai-nucleus)上。实时线程可以处于内核空间或者普通进程空间,可以运行在任何域上,会依据线程优先级来执行。试想这样一个场景:当管道正在处理从域事件,但是此刻来了一个更低优先级的主域线程,那么并不会发生抢占(意味着该线程虽然是Xenomai核心处理,但是优先级较低)。
中断屏蔽域:Xenomai 线程受linux内核调度时启动,在其它状态下停用。Xenomai 线程在linux域(系统环境中的)执行时 (Xenomai线程并不意味着就是实时线程?),保障不会被非实时的linux中断活动中断 (保障了非实时的Xenomai线程的优先级?)。
当 Xenomai 核被加载时,底层的 Adeos 管道会经历三个阶段(实时核心域、中断屏蔽域、linux域),而所有的中断都会按优先级在管道中流过。
系统调用拦截
Xenomai 通过 Xenomai 线程拦截每个系统陷阱和异常,无论来自 Xenomai 域还是 Linux 域。通过 Adeos 服务来登记每个事件处理器。
- 将来自应用的实时服务请求传递给对应的系统调用处理器,而这些处理器由实时核心上不同的 API 来实现。
- 确保每个系统调用都由恰当的域来控制,无论是 Xenomai 域或是 Linux 域。
- 对Xenomai域的系统调用可以看作是linux的扩展。
中断传播
中断处理程序必须调用中断传递服务指定域,从而将中断在广播中继续传播,如果 Xenomai 没有对指定的中断提供中断处理程序,那么该中断将被无条件地传递给linux内核。
在 Xenomai 域中的实时核心总能在中断到来时第一个得知,并对中断进行处理,在对中断进行适当标记后通过管道向下传递,Xenomai 域在没有实时活动阻塞时将 CPU 交给中断屏障域,而中断屏障域则根据是否启用中断屏障来决定是否将中断传递给 Linux 内核。
XtratuM 实时虚拟机
以上是关于《Linux内核实时性以及网络实时性的研究》的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核实时调度类 ① ( 进程分类 | 实时进程普通进程 | Linux 内核 SCHED_FIFOSCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )