实时操作系统基本概念(一)

实时操作系统基本概念

 

   这几天不忙,复习了一下UC/OSII中实时内核的基本概念,做了些简单的笔记加深记忆。  

 

 

1.前后台系统

应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,这部分可以看成前台行为(foreground)后台也可以叫做任务级。前台也可以叫做中断级。

2.代码的临界段

代码的临界段也称为临界区,指处理时不可分割的代码。一旦这段代码开始执行,则不容许任何中断打入。为确保临界代码段的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。

3.多任务

多任务运行的实现实际是靠CPU在许多任务之间转换,调度。CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行很像前后台系统,但后台任务有多个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。在实际应用中,多任务的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序更容易设计与维护。

4.任务

    一个任务,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全只属于程序自己。每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。

每个任务都处于以下5重状态下:休眠态,就绪态,运行态,挂起态,中断态。

5.任务切换

    当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态(context),即CPU寄存器中的全部内容。这些内容保存在任务自己的栈区之中。入栈完成后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行。

    做任务切换所需要的时间取决于CPU有多少寄存器要入栈。实时内核的性能不应该以每秒找能做多少次任务切换来评价。

6.调度(Scheduler)

调度是内核的主要职能之一,就是要决定该轮到哪个任务运行了。基于优先级的调度算法是指,CPU总是让处在就绪态的优先级最高的任务先运行。

7.不可剥夺型内核(Non-Preemptive Kernel)

不可剥夺型内核要求每个任务自我放弃CPU的所有权。异步事件还是由中断来处理,中断服务程序可以使一个高优先级的任务由挂起状态变为就绪状态。但中断程序结束以后控制权还是回到原来被中断了的那个任务,知道该任务主动放弃CPU的使用权。

8.可剥夺型内核

    实时内核大都采用可剥夺型内核,最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。

9.可重入性(Reentrancy)

可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。如果在可重入函数中使用了全局变量,有时是十分危险的。使用以下技术之一即可使函数具有可重入性:

Ø 函数内只使用局部变量;

Ø 调用函数前关中断,调用后再开中断;

Ø 用信号量禁止该函数在使用过程中被再次调用;

10.时间片轮转调度法

     当两个或两个以上任务有相同优先级,内核容许一个任务运行事先确定的一段时间,叫时间额度,然后切换给另一个任务,叫做时间片调度。

11.优先级反转

使用实时内核,优先级反转问题是实时内核出现得最多的问题。当当时存在多个任务,任务1优先级高于任务2,任务2优先级高于任务3。任务1和任务2处于挂起状态,任务3正在运行。如果此时任务3正在使用了共享资源,任务1等待的时间来之后将剥夺任务3CPU控制权,任务1开始运行。这是任务1恰好要使用共享资源,但被任务3占据,任务1只好放弃CPU控制权,等待任务3释放该资源。同样的情况,任务2在此期间也不能占用共享资源。结果任务1和任务2实际上的优先级就低于了任务3,任务1和任务2的优先级发生了反转。

纠正的方法是,当任务1CPU的控制权还给任务3时,内核将任务3的优先级升至任务1一样,然后回到任务3继续运行,直到任务3释放共享资源。这时将任务3的优先级恢复,任务1得以正常运行。当任务1结束后,任务2开始运行。这样将避免优先级的反转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值