实时系统基本概念介绍(持续更新中)

资源:

  • 任何被任务所占用的实体都可以称为资源。
  • 资源可以是具体的文件、输入/输出设备,也可以是一个变量、一个结构或一个数组。

共享资源:

  • 可以被一个以上的任务使用的资源叫做共享资源。为了防止数据被破坏,每个任务在使用共享资源时必须独占该资源,这叫做互斥。

代码临界区:

  • 代码临界区也称为临界段,指处理时不可分割的代码。
  • 临界区的代码开始执行,不允许任何中断打入,因此在进入临界区之间必须关中断,临界区代码执行完之后要立即把中断打开。

任务:

  • 一个任务就是一个线程,一个应用程序的实现可能会包含多个任务,每个任务都是应用的一部分,都被赋予一定的优先级,有一套自己的cpu寄存器和栈空间。

任务状态:

  • 休眠态相当于任务驻留在内存中,但并不会被多任务内核所调度;
  • 就绪态意味着任务已经准备好了,可以运行,但由于该任务的优先级比正在运行任务的优先级要低,因此暂时还不能运行;
  • 运行态是指该任务已经掌握了CPU的使用权,正在运行中;
  • 挂起态也可以叫做事件等待态(waiting),指任务在等待,等待某一事件的发生,(例如等待某外设的I/O操作,等待共享资源由不能使用状态变为用状态,等待定时脉冲到来,等待超时信号到来,以结束目前的等待,等等);
  • 中断状态是指发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂时无法运行,就进入了被中断状态。

任务切换:

  • context switch 有时翻译为上下文切换,实际含义是任务切换,或是CPU寄存器内容切换。
  • 当多任务内核决定运行其他任务时,他会保存当前正在运行的任务的状态(context),即CPU寄存器中全部内容。这些内容保存在任务的当前状况保存区(task’scontext storage area),也就是任务自己的栈区当中。入栈工作完成之后就把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器,并开始该任务的运行,这一过程叫做任务切换。
  • 任务切换过程增加了应用程序的额外负荷,CPU的内部寄存器越多,额外负荷就越重。任务切换所需要的时间取决于CPU有多少寄存器要入栈。 

前/后台系统:

  • 前台也叫中断级,后台也叫任务级。
  • 中断服务程序处理异步事件,这部分可以看成前台行为。
  • 有些应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。
  • 事件相关性很强的关键操作一定是靠中断服务来保证的,因为中断服务提供的信息要等到后台运行到该信息时才能得到处理。

内核:

  • 多任务系统中,内核(kernel)负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务间的通信。
  • 内核的基本服务是任务切换。
  • 使用实时内核可以大大简化应用系统的设计,因为实时内核允许将应用分成若干个任务,由实时内核来管理他们。

调度:

  • schedulers/dispatcher,都是调度的意思。这是内核的主要职责之一,就是决定当前去运行哪个任务。
  • 多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同,被赋予一定的优先级。
  • 基于优先级的调度法是指,CPU总是让处于就绪态的、优先级最高的任务先运行。何时高优先级的任务掌握CPU的使用权,由使用的内核类型确定,基于优先级的内核有两种类型,可抢占型和不可抢占型。

不可抢占型内核:

  • 不可抢占性内核要求每个任务主动放弃CPU控制权。
  • 异步事件还是由中断来处理。中断服务可使一个高优先级的任务由挂起态变为就绪态,但中断服务结束以后,使用权还是回到原来那个被中断了的那个任务,直到该任务主动放弃CPU的使用权,一个新的高优先级任务才能获得CPU的使用权。
  • 不可抢占型内核的一个优点是响应中断快。
  • 在任务级,不可抢占型内核允许使用不可重入函数,每个任务都可以调用不可重入函数,而不必担心其他函数可能正在使用该函数,而造成数据的破坏,因为每个任务都在运行结束后才会释放CPU使用权。当然不可重入函数本身不得有放弃CPU使用权的企图。
  • 不可抢占型内核的另一个优点是,几乎无需使用信号量保护共享数据,运行着的任务占有CPU,而不必担心被别的任务抢占。
  • 不可抢占型内核最大的缺陷在于其响应时间。高优先级的任务已经进入就绪态,但还不能运行,要等待不确定时间,直到运行着的任务释放CPU。

可抢占型内核:

  • 在可抢占型内核中最高优先级的任务一旦就绪,总能得到CPU的使用权。
  • 当一个任务在运行时,一个优先级比他高的任务进入了就绪态时,当前CPU的使用权就被抢占了,该优先级任务就获得了CPU的使用权。
  • 如果是中断服务子程序完成时,有比被抢占的任务优先级要搞得任务进入就绪态了,那么不再运行中断了的任务,将其挂起,高优先级任务开始执行。
  • 可抢占型内核中,应用程序不应改直接使用不可重入函数。调用不可重入函数时,应满足互斥条件,这一点可以用互斥信号量来实现,因为不同优先级的两个任务可能会同时调用同一个函数。如果调用不可重入函数时,低优先级任务的CPU使用权被高优先级任务抢占,不可重入函数中的数据可能被破坏。

可重入函数:

  • 可重入函数可以被一个以上的任务调用,而不用担心数据被破坏。
  • 可重入函数任何时候都可以被中断,一段时间后又可以运行。
  • 可重入函数只使用局部变量,即变量保存在CPU寄存器中或堆栈中;或者使用全局变量,则要对全局变量予以保护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值