技术开发 频道

切莫轻视Windows CE陷阱调度

  【IT168 专稿】Windows CE的陷阱调度是嵌入式系统开发的一个重要内容,陷阱调度的好坏关系到系统的健壮性和稳定度。陷阱调度看起来只有几个常用语句,故有些开发人员常常会对陷阱调度轻视和在使用上思路模糊。

  近期我在一个嵌入式开发项目中就体验到轻视陷阱调度的惨痛教训,因为对陷阱调度没有处理好,后果是严重影响系统稳定性。因此,我认为陷阱调度并不是表面看起来的那么简单。本文分享在此项目过程中对陷阱调度的一些看法。

  一.什么是陷阱调度机制?

  一般来说,嵌入式操作系统主要由两部分组成:运行在核心态的内核系统和运行在用户态的环境子系统组成。因此,Windows CE系统被划分为两层:执行体和内核。而内核始终运行在核心态下,除了中断服务例程(Interrupt Service Routine,ISR),正在运行的线程是不能抢先内核的。为此,Windows CE为执行体、内核、设备驱动程序等核心态提供了一些基础系统机制。

  (1)Windows CE系统机制

  Windows CE系统机制包括陷阱调度、执行体对象管理器、各种同步对象以及本地过程调用等。一般来说,可以分成两种对象类型:执行体对象和内核对象。内核以内核对象的形式给执行体提供其它的同步机构,称为“调度程序对象”。包括进程、线程、事件、信号量、互斥体、可等待的定时器、文件等同步对象。每个同步对象有两种状态:“有信号”,“无信号”。内核还提供一组严格定义的、可预测的、使操作系统得以工作的基础设施,这为执行体的高级组件提供了必须的低级功能接口。内核除了执行线程调度外,几乎将所有的策略制定留给了执行体。同时,Windows CE运行中的CPU 会支持两个级别的权限,其中较高级别的权限称为内核态,较低级别的权限称为用户态。

  (2)陷阱调度(Trap Dispatching)机制
  Windows CE的基本机制之一是陷阱调度,属于内核功能。包括中断调度、延迟过程调用(DPC)、异步过程调用(APC)、异常调度、系统服务调度。

  陷阱处理程序是Windows CE用来处理意外事件的硬件机制。当异常或中断发生时,硬件或软件就能检测到它们,并捕获正在执行的线程,CPU会从用户态切换到核心态,将暂停正在处理的事情,把控制转交给内核的陷阱处理程序。同时,该模块还能检测异常和中断的类型,并将控制交给处理相应情况的代码。因此,陷阱调度机制是当异常或者中断发生时,能够保存当前线程状态并转向相应处理的一种系统机制。

  在Windows CE系统里,内核通过以下方式来分辨中断和异常:中断是一个异步事件(可以在任何时间产生),不管处理器在执行什么程序。典型的中断由I/O设备、时钟、定时器产生,必要时可以屏蔽中断。而异常是一个同步事件,它是由正在执行的特定代码产生的,重新执行相同的代码会重复产生特定的异常。比如访问非法内存、除数为0等。系统把系统服务也作为异常来处理。
 

0
相关文章