当前课程知识点:嵌入式系统设计 >  第三章:嵌入式操作系统 >  3.3 Linux 操作系统实时性改造 >  Video

返回《嵌入式系统设计》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《嵌入式系统设计》慕课在线视频列表

Video课程教案、知识点、字幕

首先,我们来看一下实时系统的概念

实时系统可以定义为对外部事件及时响应的系统

它要求在接到数据的同时能够在规定的时间内予以响应

并及时将处理结果送出

目前,大多数嵌入式系统都是实时系统

非实时、软实时、硬实时这三个概念并不是以速度作为标准的

而是以确定性作为标准

这个确定性的概念呢,我们通过这个例子来看一下

比如:Linux与RTLinux相比,高优先级任务到达的时候

无论是最短时间还是平均时间,Linux均优于RTLinnx

但是RTLinux的最后时限优于Linux

所以说RTLinux的实时性优于Linux

这就是确定性的含义

也就是说,这个任务的最后时限

这才是确定了它是软实时、硬实时还是非实时

实时操作系统,通常会要求3个特征

第一个要求高精度的计时系统

第二个要有多级的中断机制

第三个要能进行实时的调度机制

这个调度机制呢包括两个方面

一是在调度策略和算法上保证优先调度实时任务

第二个建立更多“安全切换”的时间点,保证及时调度实时任务

那么,目前普通的Linux

它的计时系统是不满足高精度计时的

它的时间片的划分是10ms

满足不了我们实时系统的通常要求到微秒级的定时要求

同样,一般的Linux

它的内核临界区需要关中断

此外,实时调度机制

它需要的时间片

在常规的Linux下面呢

是固定的

为了满足实时性,必须把它改成可变的优先级调度

因此,要将普通的Linux改造成实时Linux

在这三方面都必须进行考虑

下面介绍一下 RTLinux

RTLinux是美国新墨西哥的有限状态机实验室

在1999年利用Linux开发的面向实时和嵌入式应用的操作系统

它采用了双内核方式和中断虚拟化技术来实现实时化

目前,它的版本有两个

一个是免费的版本 由社区支持

另外一个是商业版本

这个需要付费的

RTLinux的双内核结构

从这个图,我们来比较一下

普通的Linux操作系统

由中断控制硬件传过来的中断信号

直接送给Linux内核

由上层的进程来进行处理这个中断

而改成RTLinux双内核之后

中断控制硬件传过来的(信号)

被RTLinux的内核截下来

如果这个中断是实时任务的话

那么,就会直接送到这个地方进行处理

如果是非实时任务就送回原来的Linux内核进行处理

这里就体现了双内核的这个概念

就是包括一个实时内核和普通的Linux内核

那么经过这样的改造之后

实时任务就可以顺利的由这部分来进行处理

下面看一下RTLinux基于双内核

它的设计原则

第一个,在实时模块中的工作尽量少

如果能在Linux中完成而不影响实时性能的话

就尽量在Linux中完成

第二个,RTLinux内核中

不应该等待资源,也不使用共享旋转锁

第三个,实时任务和Linux之间的通信是非阻塞的

第四个,RTLinux将系统和设备的初始化交给Linux完成

对动态资源的申请和分配 Linux来完成

第五点,RTLinux使用静态分配的内存来完成硬件实时任务

那么基于这样的设计原则,我们要解决刚才的三个问题

首先,第一个我们就要实现中断的虚拟化

在RTLinux中,通过在Linux内核与中断控制硬件之间增加一个虚拟软件

这个虚拟软件将Linux源代码中原来的禁止中断、开中断和中断返回指令

替换为相应的宏

这三个宏

从而使得所有的硬件中断指令都被中断模拟器捕捉

从而进行实时任务的处理

那么具体的代码

我们来看一下

这一段代码就是实现对应的这三个宏

那么这个CLI和这个STI呢

都是常规的新标志和保存内容

然后,在STI的后面

调用IRSET中断返回这一部分

我们来看一下这一部分是关键

那么首先呢,当然也是一些保存的压栈的内容

关键是在这个地方

获取中断标志检测、判断

如果,没有对应的中断呢

它就跳转到这段子程序

子程序直接弹出返回就行了

如果有,中断跳转到对应的实时

这个中断处理程序

那么,这样将刚才的中断产生的实时信号

可以截下来进行处理

第二个问题要解决的是实时调度的问题

首先,我们来看一下

如何判断我们结果的正确性

那么这个正确性不仅取决于程序的逻辑正确性

还取决于结果产生的时间

这就体现了实时的概念

也就是说

即使你的结果是对的

但是结果产生的时间超过了最后期限

那么系统也是错误的

第二点,RTLinux中,允许用户编写自己的调度器代码

并且把它实现为一个可装载的内核模块

使得可以实验不同的调度策略和算法

以找到一个最适合自己应用的调度方式

目前,在RTLinux中实现了两种调度器

第一个是基于优先级的占先式调度器

也就是说,每一个任务都赋一个优先级

那么有几个任务处于就绪状态的情况呢

优先级最高的那个将运行

只要一个优先级更高的任务就绪

它可以中断当前较低中断优先级任务的执行

那么也就是说,总是由优先级最高的任务执行

这是第一种调度器

第二种是最早期限有限算法

它让最靠近最终期限的任务总是最先执行

第二个要解决的问题就是计时问题

计时问题在Linux系统中使用了三种时钟

一个是实时时钟RTC

第二个是时钟标记计数器

第三个可编程间隔定时器PIT

PIT呢,是由内核编程,以固定的、预先设定的频率发出中断

用于Linux中任务的调度

它的中断频率被设为100Hz

那么算下来就是

10ms产生一次定时中断

那么10ms产生一次定时中断

显然满足不了实时的要求

因此,在RTLinux中改进

采用单触发时钟中断来提高计时的精度

最终可以达到1微秒左右

单触发时钟的原理

我们来看一下

它是指需要在每次发生中断的时候

检查每个进程的运行时间是否过期

并把下一次时钟中断的时间设定为最近的过期时间

那我们看这个图来比较一下

这是普通的Linux

可以看到,每隔10ms它才会产生一个中断

那么也就是说我的任务最长要等10ms

我才可能得到一次新的调度

那么单触发时钟呢

也就是说它在前一次运行的时候就判断下一次要过期的时间

比如说,这里是2ms就要过期,那么他就要把下一次设置为2ms

让我们的任务能够及时得到调度

嵌入式系统设计课程列表:

第一章:嵌入式系统基础

-1.1 嵌入式系统概念

--Video

-第一章:嵌入式系统基础--1.1 嵌入式系统概念

-1.2 嵌入式系统组成

--Video

-第一章:嵌入式系统基础--1.2 嵌入式系统组成

第二章:嵌入式处理器

-2.1 嵌入式处理器发展历史

--Video

-第二章:嵌入式处理器--2.1 嵌入式处理器发展历史

-2.2 三星S3C2440 微处理器

--Video

-第二章:嵌入式处理器--2.2 三星S3C2440 微处理器

第三章:嵌入式操作系统

-3.1 嵌入式操作系统概述

--Video

-第三章:嵌入式操作系统--3.1 嵌入式操作系统概述

-3.2 嵌入式Linux 操作系统

--Video

-第三章:嵌入式操作系统--3.2 嵌入式Linux 操作系统

-3.3 Linux 操作系统实时性改造

--Video

-第三章:嵌入式操作系统--3.3 Linux 操作系统实时性改造

第四章:嵌入式软件开发平台

-4.1 基于Linux的开发流程

--Video

-第四章:嵌入式软件开发平台--4.1 基于Linux的开发流程

-4.2 GCC 编译器

--Video

-第四章:嵌入式软件开发平台--4.2 GCC 编译器

-4.3 GDB 调试器

--Video

-第四章:嵌入式软件开发平台--4.3 GDB 调试器

第五章:嵌入式Linux驱动开发

-5.1 Linux 设备驱动技术

--Video

-第五章:嵌入式Linux驱动开发--5.1 Linux 设备驱动技术

-5.2 Linux 设备驱动程序

--Video

-第五章:嵌入式Linux驱动开发--5.2 Linux 设备驱动程序

第六章:嵌入式系统实验

-实验一:基于ARM的嵌入式Linux开发环境建立

--Video

-第六章:嵌入式系统实验--实验一:基于ARM的嵌入式Linux开发环境建立

-实验二:基于ARM的模块方式驱动程序实验

--Video

-第六章:嵌入式系统实验--实验二:基于ARM的模块方式驱动程序实验

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。