论文部分内容阅读
摘要:通过研究一套基于Xscale架构实训的嵌入式操作系统,使得学生在运用此操作系统构造嵌入式应用系统时变得相对简单、明了,该系统学起来比较容易,更便于学生掌握与理解,该系统是一套应用程序和系统分离的全新设计的嵌入式操作系统;系统应用程序可以独立编译和下载,与嵌入式系统分离;系统具有针对性强、体积小、无关代码少等优点。系统研究是针对嵌入式系统教学实验的要求,紧密结合教学实践,该系统内核精巧,结构清晰,利于学生理解和认识操作系统;外围模块易于扩展,便于在实验中扩展外围设备,应用程序容易构造,便于学生编写实验控制的程序。运用本系统开发嵌入式系统,可降低系统开发难度,提高开发效率。
关键词:Xscale架构;任务调度;资源管理;实训
作者简介:邱小林(1962-),男,江西樟树人,南昌理工学院理事长,教授;周亦人(1958-),男,江西宜春人,南昌理工学院实验中心,高级工程师。(江西 南昌 330044)
中图分类号:G642.44 文献标识码:A 文章编号:1007-0079(2011)20-0125-03
近几年来随着嵌入式系统突飞猛进的发展,对技术人员的专业能力要求也越来越高,这就增加了嵌入式人才培养的难度,而高校在培养嵌入式人才时使用的操作系统基本上是基于Linux的,对通用的Linux系统进行裁剪,将不需要的模块和功能去除掉,仅保留与需求相关的模块,这样就可以实现应用系统。但是,这种系统在裁剪时很容易出问题,首先,从应用上看,这一类经过裁剪得到的系统其实还是面向一个通用的平台,比如HOpen实际上是一个桌面系统;手机操作系统其实也是一个“五脏俱全”的通用平台。其次,这一类系统大多对系统资源要求比较高,在手机、PDA、机顶盒上跑起来比较顺,如果应用到微波炉控制就“装”不下了。再次,能够裁剪这一类系统的专业水平要求更高,不是普通程序员通过简单看资料就能做到的,即使是有些系统配备了裁剪软件,那也对技术人员要求很高,这给嵌入式系统教学带来了很大难度。而且这些操作系统都是在服务器上(PC)编写实验程序,应用服务器的编译系统生成一套完整的嵌入式操作系统下载到目标板上,每次改写程序都需要重新生成一遍系统。这就造成了资源浪费、实验周期加长,下载过程中出错概论增大等弊病。为解决这些问题,本文介绍了一套基于Xscale架构的应用程序和系统分离的全新设计的嵌入式操作系统,该系统应用程序可以独立编译和下载,与嵌入式系统分离。该系统还具有针对性更强,体积更小,无关代码更少等优点,学起来比较容易,更便于学生掌握,该系统具有很好的推广价值。
一、基于Xscale架构实训的嵌入式操作系统的设计
1.内核功能分析与设计
一个完整的操作系统由如下几个部分组成:内存管理;任务调度;输入输出管理;设备管理;文件管理。嵌入式操作系统面向特定的应用,本身不追求大而全,相反,嵌入式系统更强调的是精巧使用,量身定制,不使用无关的代码。嵌入式系统将做主要的管理功能保留在内核中,其余模块则作为可扩展模块根据具体的应用,确定是否链接到系统中。嵌入式系统的内核中主要是任务调度和资源管理。
(1)任务调度。任务调度是嵌入式操作系统内核的核心,无论是实时性还是多任务操作系统,任务调度提供决定何时必须执行哪个任务,即在嵌入式硬件系统环境下,准时地完成多个任务的运行。实时性操作系统和多任务操作系统以及多任务实时性操作系统,差别在与内核中对任务和实时性处理的机制不同。多任务是操作系统在设定的时序内处理多个活动的能力,即多个执行线程在并发地运行。在单处理器环境下,内核是依据预先设定的调度算法,按照任务的优先级执行的。各个扩展功能在不同的任务或者进程中体现,不嵌入到内核中。
(2)资源管理。对于嵌入式系统来说,资源往往是有限的,如何管理好系统资源,保证在任务切换的时候,资源和任务能够相互匹配,不出现资源争用或者使用内存跨界等问题,保证任务运行能够有足够的资源支撑,同时在访问可共享资源的时候不出现冲突导致死锁等异常情况。本系统面向嵌入式教学实验,所以选择多任务操作系统作为整个操作系统设计目标。
任务调度部分包括创建任务、删除任务、改变任务的目前状态和查询任务状态等功能。重点在于任务调度策略的设计和实现上,调度策略是否适合嵌入式应用的特定要求,是直接影响操作系统的关键因素。资源管理,重点是资源和任务的关联,互斥资源的管理,资源申请和释放,在任务切换的时候,能够释放资源,启用的时候能够申请到资源。在资源不能满足的情況下,挂起任务,并暂时释放已经申请到的互斥资源。
将文件管理、中断管理、设备管理等,作为扩展模块,不纳入内核,但是同时要建立标准的格式规范,任务在使用这些功能的时候要遵循规范,这样才能有效被内核调度和管理。
2.硬件驱动模块对硬件设备支持的设计
嵌入式系统与硬件关系密切,可以说是为硬件量身定制的,如掌上电脑、机顶盒、智能仪器、娱乐设备等等,硬件组成大相径庭,如果单独为每个硬件编写控制程序,那就成了单纯的单片机,失去了嵌入式系统的优势,产品的开发、维护和后续发展都会很困难,产品就会失去可持续发展力。如果让操作系统管理起来这些功能不同、控制不同、形态各异的硬件设备,就是要通过硬件驱动模块。硬件驱动模块,在硬件实体和操作系统之间建立起来一个承上启下的中间层。对上,操作系统看到的是统一接口的硬件,按照接口规范,操作系统可以用同一种方式去操控和访问不同的设备;对下,硬件驱动模块要能够解释来自上层的命令,转化成实际的控制操作。
硬件驱动接口主要包括:打开;关闭;存取——读入、写出;状态查询;状态控制。
3.用户程序接口的设计
用户程序对于整个嵌入式系统来说,其实就是一个任务。内核加载用户程序作为一个任务开始运行。用户程序申请内存、申请各项资源、实现输入输出,完成自身预定的功能。用户程序接口,主要是用户对于资源的申请、对于硬件设备的操控和任务完成时的退出机制。
4.研究调用这些接口函数访问系统所提供的功能
任务在运行过程中会和系统有如下的交互:申请资源——申请内存,申请设备端口如USB、串口、无线口等;使用硬件设备——如键盘、触摸屏、数据采集模块、通讯模块等;实现输入输出——数据输入,数据分析综合之后的输出;任务完成——任务完成后,通知内核删除任务。
对应地,内核在向任务提供这些接口时要根据整个系统中所有任务的运行情况进行有效调度和管理。一个任务被启动后,要分配唯一的ID号,这个ID号要和该任务调度和使用的所有资源关联起来。任务被删除后,所有占用的资源被释放。任务在申请资源的时候,如申请串口,如果其他任务已经独占本资源或者某个硬件模块,则这个任务将被挂起,直到申请的资源被释放才继续运行。不同的任务可以赋予不同的优先级,优先级别高的任务会优先得到资源。
本操作系统已经完成了上述设计和实现。内核中主要包括任务调度管理和资源管理,建立了设备驱动规范,用户接口规范。用户可以自行编写驱动程序,挂载到系统中。可以编写应用程序,在系统中运行。通过内核、硬件驱动、应用程序三级构架,让学生对嵌入式操作系统有了明晰的认识;规范的概念,降低了嵌入式应用开发的难度,方便学生编写实验程序,甚至编写复杂的应用程序。同时,在本操作系统的基础上,还实现了一个复杂的抄表应用,证明了我们设计思想是正确的,本系统有很好的实用性。
二、基于Xscale架构实训的嵌入式操作系统的集成
1.算法设计
我们选择基于多任务系统的设计目标作为面向教学应用的嵌入式系统的实现方案。在系统中,实现一个微内核,内核包括任务调度和资源管理两大块。内核结构要紧凑,重点是设计任务调度算法,资源管理算法。
(1)任务调度算法。每一个任务(task)是一个独立执行的线程,该线程可以占用CPU、内存、IO和外设等资源,完成相应的功能。每一个应用可以启动多个任务,在系统内并发执行,任务之间通过通讯接口相互协调,共享某些资源或者数据。系统根据调度算法调度不同任务运行,赋予任务访问资源的权限,在任务资源不能申请到或者出现更高优先级的任务时,能够选择适时的时机,将任务挂起;在被挂起的任务重新获得资源之后,能够继续运行。任务在满足终止条件时,可以终止并删除任务。任务还要划分优先级,优先级高的任务被优先调度。这样在设计任务管理模块时,给每个任务要分配如下的信息字段:1)任务编号(Task ID),这是系统生成的,用以区分不同的任务。2)任务名称(Task Name),这个是应用软件给任务起的名称,主要是应用层管理和区分任务使用的。3)任务优先级:在教学系统中,不设置过多的优先级,以免过于复杂,优先级设置为4级别,分别为0-3,3为最高级。4)任务状态:设置了就绪(ready),挂起(suspend)和阻塞(pended)三种状态,其中,就绪态处于该状态的任务等待CPU分配资源,挂起态处于该状态的任务不能被执行,等待调度,阻塞态是因为申请的资源不能满足,被暂时阻塞,等待其他任务释放资源之后,满足资源要求才能被调度为就绪态,排队等待CPU资源处于就绪态的任务,优先级最高的被先执行。5)资源列表:任务占用的资源列表。资源列表是给资源管理模块查询使用的。当系统出现资源争用时,系统查看处于阻塞态的任务,可以将申请到而未使用的资源释放,以便某些任务先完成,之后释放所占资源,解除阻塞态任务。6)其他字段:每个任务还有其他的一些附加字段,存储一些信息。
(2)资源管理算法。嵌入式系统的资源是有限的,在多个任务间有效地管理资源,实现资源的合理分配回收,最大限度降低任务由于资源不足而被迫阻塞的情况,提高系统运行效率。
每个资源分配如下信息字段:资源名称(任务按照这个名称来申请资源);资源类别;资源状态(空闲,已被申请);资源拥有者(当前谁申请到);资源使用状态(使用中,未使用);其他字段。系统中的内存、IO、中断资源等等都可以规划为资源,供任务申请使用。
2.编码实现
(1)任务调度。
数据结构
struct TaskNode{
UINT uTaskID; // 任务编号
char szTaskName[MAXTASKNAMELEN+1]; //任务名称
UINT uPrior; // 任务优先级
UNIT uStatus; // 任务状态
FUNCPTR entryPt; // 任务函数入口
struct ResourceNode *lpResource; // 资源列表
…
}
调度算法:
1)在不同优先级的任务中采用抢先式多任务调度,优先级别高的任务被优先分配CPU资源(见图1)。
2)同一级别的任务之间采用时间片轮转机制,确保每个任务都会有取得CPU资源的机会,都会被公平地调度和执行。如果不采用轮转机制,当系统中存在多个相同优先级的任务共享CPU时,第一个获得CPU的任务可以不被阻塞地独占CPU。如果没有阻塞或其他情况出现,他从不会给其他相同优先级的任务运行的机会。轮转机制是使用时间片来实现这种相同优先级任务CPU公平分配的。一组任务中的每个任务执行一个预先确定的时间段,称为时间片;然后另一个任务执行相等的一个时间片,依次进行。这种分配是公正的,它保证一个优先级组中,在所有任务都得到一个时间片之前,不会有任务得到第二个时间片。
(2)资源管理。
数据结构
struct ResourceNode {
UINT resID;// 资源编号
UINT resType; //资源类型
UINT resStatus;// 资源状态
UINT resOwner;// 资源拥有者
…
}
资源调度:
1)申请资源。
BOOL resApplication(TASKPTR lpTask,UINT resID)
参数:lpTask——要申请资源的任务;resID——资源编号;返回——如果申请成功,返回TRUE,任务可以自主使用;如果不成功,返回FALSE,任務会被阻塞。
2)释放资源。
void resDelete(TASKPTR lpTask,UINT resID)
参数:lpTask——要释放资源的任务;resID——资源编号。
说明:资源被释放后,资源调度模块会查看其他被阻塞的模块是否在等待本资源,如果是,则优先分配给被阻塞的任务,如果该任务所有资源都申请到了,则将其置为就绪态,等待获得CPU资源。
3.系统调试
由于嵌入式系统的运行环境往往和开发环境的硬件资源不一致,通常开发环境运行在x86系列微机上,操作系统多为Windows系列;而嵌入式系统测试则是嵌入式CPU,如ARM、PowerPC、C51等等。这两者在目标代码级上不能兼容。在上位机上不能直接调试,而目标机由于资源有限,不能运行开发环境。解决问题的办法就是采用交叉编译环境,即在微机上编辑编译出目标板的代码,传入到目标板上执行。我们的开发环境是:Microsoft Visual Studio 2008 + IAR Embeded Workbench。经过代码分模块编辑、编译、调试。然后组装调试,已经完成了系统开发。在中科院计算所嵌入式开发板中能够成功运行。
三、应用前景
基于xScale构架的面向教学培训的嵌入式操作系统已成功运用到智能手持设备中,运用该系统已成功地研发了智能数据采集终端,应用于电力数据采集、水表、燃气表抄表、物流、盘点等领域,收到了良好的效果。表1~表3是基于本操作系统的几款机型。
SE400是面向智能移动应用的新型掌上电脑,采用嵌入式CPU,智能操作系统平台,多扩展模块,适用于供电、供水、供气、物流、测绘、公安、海关、邮政、餐饮、宾馆等行业的应用,具有功能丰富、配置灵活、运行高效、可靠性高、安全性强等特点。
综上所述,基于Xscale架构的嵌入式操作系统是一套应用前景广阔的操作系统。
参考文献:
[1][美]RobertLove.Linux内核设计与实现[M].北京:机械工业出版社,
2006.
[2]陈是知.uC/OS-Ⅱ内核分析、移植与驱动程序开发[M].北京:人民邮电出版社,2007.
[3][美]弗斯特.PalmOS编程宝典[M].北京:人民邮电出版社,2006.
[4]李忠民,杨刚,等.ARM嵌入式VxWorks实践教程[M].北京:机械工业出版社,2006.
[5][美]拉布罗斯.嵌入式系统构件(第二版)[M].北京:机械工业出版社,2002.
[6]李向蔚,桑楠,熊光泽.嵌入式操作系统定制的通用性研究[J].单片机与嵌入式系统应用,2005,(3).
(责任编辑:麻剑飞)
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文
关键词:Xscale架构;任务调度;资源管理;实训
作者简介:邱小林(1962-),男,江西樟树人,南昌理工学院理事长,教授;周亦人(1958-),男,江西宜春人,南昌理工学院实验中心,高级工程师。(江西 南昌 330044)
中图分类号:G642.44 文献标识码:A 文章编号:1007-0079(2011)20-0125-03
近几年来随着嵌入式系统突飞猛进的发展,对技术人员的专业能力要求也越来越高,这就增加了嵌入式人才培养的难度,而高校在培养嵌入式人才时使用的操作系统基本上是基于Linux的,对通用的Linux系统进行裁剪,将不需要的模块和功能去除掉,仅保留与需求相关的模块,这样就可以实现应用系统。但是,这种系统在裁剪时很容易出问题,首先,从应用上看,这一类经过裁剪得到的系统其实还是面向一个通用的平台,比如HOpen实际上是一个桌面系统;手机操作系统其实也是一个“五脏俱全”的通用平台。其次,这一类系统大多对系统资源要求比较高,在手机、PDA、机顶盒上跑起来比较顺,如果应用到微波炉控制就“装”不下了。再次,能够裁剪这一类系统的专业水平要求更高,不是普通程序员通过简单看资料就能做到的,即使是有些系统配备了裁剪软件,那也对技术人员要求很高,这给嵌入式系统教学带来了很大难度。而且这些操作系统都是在服务器上(PC)编写实验程序,应用服务器的编译系统生成一套完整的嵌入式操作系统下载到目标板上,每次改写程序都需要重新生成一遍系统。这就造成了资源浪费、实验周期加长,下载过程中出错概论增大等弊病。为解决这些问题,本文介绍了一套基于Xscale架构的应用程序和系统分离的全新设计的嵌入式操作系统,该系统应用程序可以独立编译和下载,与嵌入式系统分离。该系统还具有针对性更强,体积更小,无关代码更少等优点,学起来比较容易,更便于学生掌握,该系统具有很好的推广价值。
一、基于Xscale架构实训的嵌入式操作系统的设计
1.内核功能分析与设计
一个完整的操作系统由如下几个部分组成:内存管理;任务调度;输入输出管理;设备管理;文件管理。嵌入式操作系统面向特定的应用,本身不追求大而全,相反,嵌入式系统更强调的是精巧使用,量身定制,不使用无关的代码。嵌入式系统将做主要的管理功能保留在内核中,其余模块则作为可扩展模块根据具体的应用,确定是否链接到系统中。嵌入式系统的内核中主要是任务调度和资源管理。
(1)任务调度。任务调度是嵌入式操作系统内核的核心,无论是实时性还是多任务操作系统,任务调度提供决定何时必须执行哪个任务,即在嵌入式硬件系统环境下,准时地完成多个任务的运行。实时性操作系统和多任务操作系统以及多任务实时性操作系统,差别在与内核中对任务和实时性处理的机制不同。多任务是操作系统在设定的时序内处理多个活动的能力,即多个执行线程在并发地运行。在单处理器环境下,内核是依据预先设定的调度算法,按照任务的优先级执行的。各个扩展功能在不同的任务或者进程中体现,不嵌入到内核中。
(2)资源管理。对于嵌入式系统来说,资源往往是有限的,如何管理好系统资源,保证在任务切换的时候,资源和任务能够相互匹配,不出现资源争用或者使用内存跨界等问题,保证任务运行能够有足够的资源支撑,同时在访问可共享资源的时候不出现冲突导致死锁等异常情况。本系统面向嵌入式教学实验,所以选择多任务操作系统作为整个操作系统设计目标。
任务调度部分包括创建任务、删除任务、改变任务的目前状态和查询任务状态等功能。重点在于任务调度策略的设计和实现上,调度策略是否适合嵌入式应用的特定要求,是直接影响操作系统的关键因素。资源管理,重点是资源和任务的关联,互斥资源的管理,资源申请和释放,在任务切换的时候,能够释放资源,启用的时候能够申请到资源。在资源不能满足的情況下,挂起任务,并暂时释放已经申请到的互斥资源。
将文件管理、中断管理、设备管理等,作为扩展模块,不纳入内核,但是同时要建立标准的格式规范,任务在使用这些功能的时候要遵循规范,这样才能有效被内核调度和管理。
2.硬件驱动模块对硬件设备支持的设计
嵌入式系统与硬件关系密切,可以说是为硬件量身定制的,如掌上电脑、机顶盒、智能仪器、娱乐设备等等,硬件组成大相径庭,如果单独为每个硬件编写控制程序,那就成了单纯的单片机,失去了嵌入式系统的优势,产品的开发、维护和后续发展都会很困难,产品就会失去可持续发展力。如果让操作系统管理起来这些功能不同、控制不同、形态各异的硬件设备,就是要通过硬件驱动模块。硬件驱动模块,在硬件实体和操作系统之间建立起来一个承上启下的中间层。对上,操作系统看到的是统一接口的硬件,按照接口规范,操作系统可以用同一种方式去操控和访问不同的设备;对下,硬件驱动模块要能够解释来自上层的命令,转化成实际的控制操作。
硬件驱动接口主要包括:打开;关闭;存取——读入、写出;状态查询;状态控制。
3.用户程序接口的设计
用户程序对于整个嵌入式系统来说,其实就是一个任务。内核加载用户程序作为一个任务开始运行。用户程序申请内存、申请各项资源、实现输入输出,完成自身预定的功能。用户程序接口,主要是用户对于资源的申请、对于硬件设备的操控和任务完成时的退出机制。
4.研究调用这些接口函数访问系统所提供的功能
任务在运行过程中会和系统有如下的交互:申请资源——申请内存,申请设备端口如USB、串口、无线口等;使用硬件设备——如键盘、触摸屏、数据采集模块、通讯模块等;实现输入输出——数据输入,数据分析综合之后的输出;任务完成——任务完成后,通知内核删除任务。
对应地,内核在向任务提供这些接口时要根据整个系统中所有任务的运行情况进行有效调度和管理。一个任务被启动后,要分配唯一的ID号,这个ID号要和该任务调度和使用的所有资源关联起来。任务被删除后,所有占用的资源被释放。任务在申请资源的时候,如申请串口,如果其他任务已经独占本资源或者某个硬件模块,则这个任务将被挂起,直到申请的资源被释放才继续运行。不同的任务可以赋予不同的优先级,优先级别高的任务会优先得到资源。
本操作系统已经完成了上述设计和实现。内核中主要包括任务调度管理和资源管理,建立了设备驱动规范,用户接口规范。用户可以自行编写驱动程序,挂载到系统中。可以编写应用程序,在系统中运行。通过内核、硬件驱动、应用程序三级构架,让学生对嵌入式操作系统有了明晰的认识;规范的概念,降低了嵌入式应用开发的难度,方便学生编写实验程序,甚至编写复杂的应用程序。同时,在本操作系统的基础上,还实现了一个复杂的抄表应用,证明了我们设计思想是正确的,本系统有很好的实用性。
二、基于Xscale架构实训的嵌入式操作系统的集成
1.算法设计
我们选择基于多任务系统的设计目标作为面向教学应用的嵌入式系统的实现方案。在系统中,实现一个微内核,内核包括任务调度和资源管理两大块。内核结构要紧凑,重点是设计任务调度算法,资源管理算法。
(1)任务调度算法。每一个任务(task)是一个独立执行的线程,该线程可以占用CPU、内存、IO和外设等资源,完成相应的功能。每一个应用可以启动多个任务,在系统内并发执行,任务之间通过通讯接口相互协调,共享某些资源或者数据。系统根据调度算法调度不同任务运行,赋予任务访问资源的权限,在任务资源不能申请到或者出现更高优先级的任务时,能够选择适时的时机,将任务挂起;在被挂起的任务重新获得资源之后,能够继续运行。任务在满足终止条件时,可以终止并删除任务。任务还要划分优先级,优先级高的任务被优先调度。这样在设计任务管理模块时,给每个任务要分配如下的信息字段:1)任务编号(Task ID),这是系统生成的,用以区分不同的任务。2)任务名称(Task Name),这个是应用软件给任务起的名称,主要是应用层管理和区分任务使用的。3)任务优先级:在教学系统中,不设置过多的优先级,以免过于复杂,优先级设置为4级别,分别为0-3,3为最高级。4)任务状态:设置了就绪(ready),挂起(suspend)和阻塞(pended)三种状态,其中,就绪态处于该状态的任务等待CPU分配资源,挂起态处于该状态的任务不能被执行,等待调度,阻塞态是因为申请的资源不能满足,被暂时阻塞,等待其他任务释放资源之后,满足资源要求才能被调度为就绪态,排队等待CPU资源处于就绪态的任务,优先级最高的被先执行。5)资源列表:任务占用的资源列表。资源列表是给资源管理模块查询使用的。当系统出现资源争用时,系统查看处于阻塞态的任务,可以将申请到而未使用的资源释放,以便某些任务先完成,之后释放所占资源,解除阻塞态任务。6)其他字段:每个任务还有其他的一些附加字段,存储一些信息。
(2)资源管理算法。嵌入式系统的资源是有限的,在多个任务间有效地管理资源,实现资源的合理分配回收,最大限度降低任务由于资源不足而被迫阻塞的情况,提高系统运行效率。
每个资源分配如下信息字段:资源名称(任务按照这个名称来申请资源);资源类别;资源状态(空闲,已被申请);资源拥有者(当前谁申请到);资源使用状态(使用中,未使用);其他字段。系统中的内存、IO、中断资源等等都可以规划为资源,供任务申请使用。
2.编码实现
(1)任务调度。
数据结构
struct TaskNode{
UINT uTaskID; // 任务编号
char szTaskName[MAXTASKNAMELEN+1]; //任务名称
UINT uPrior; // 任务优先级
UNIT uStatus; // 任务状态
FUNCPTR entryPt; // 任务函数入口
struct ResourceNode *lpResource; // 资源列表
…
}
调度算法:
1)在不同优先级的任务中采用抢先式多任务调度,优先级别高的任务被优先分配CPU资源(见图1)。
2)同一级别的任务之间采用时间片轮转机制,确保每个任务都会有取得CPU资源的机会,都会被公平地调度和执行。如果不采用轮转机制,当系统中存在多个相同优先级的任务共享CPU时,第一个获得CPU的任务可以不被阻塞地独占CPU。如果没有阻塞或其他情况出现,他从不会给其他相同优先级的任务运行的机会。轮转机制是使用时间片来实现这种相同优先级任务CPU公平分配的。一组任务中的每个任务执行一个预先确定的时间段,称为时间片;然后另一个任务执行相等的一个时间片,依次进行。这种分配是公正的,它保证一个优先级组中,在所有任务都得到一个时间片之前,不会有任务得到第二个时间片。
(2)资源管理。
数据结构
struct ResourceNode {
UINT resID;// 资源编号
UINT resType; //资源类型
UINT resStatus;// 资源状态
UINT resOwner;// 资源拥有者
…
}
资源调度:
1)申请资源。
BOOL resApplication(TASKPTR lpTask,UINT resID)
参数:lpTask——要申请资源的任务;resID——资源编号;返回——如果申请成功,返回TRUE,任务可以自主使用;如果不成功,返回FALSE,任務会被阻塞。
2)释放资源。
void resDelete(TASKPTR lpTask,UINT resID)
参数:lpTask——要释放资源的任务;resID——资源编号。
说明:资源被释放后,资源调度模块会查看其他被阻塞的模块是否在等待本资源,如果是,则优先分配给被阻塞的任务,如果该任务所有资源都申请到了,则将其置为就绪态,等待获得CPU资源。
3.系统调试
由于嵌入式系统的运行环境往往和开发环境的硬件资源不一致,通常开发环境运行在x86系列微机上,操作系统多为Windows系列;而嵌入式系统测试则是嵌入式CPU,如ARM、PowerPC、C51等等。这两者在目标代码级上不能兼容。在上位机上不能直接调试,而目标机由于资源有限,不能运行开发环境。解决问题的办法就是采用交叉编译环境,即在微机上编辑编译出目标板的代码,传入到目标板上执行。我们的开发环境是:Microsoft Visual Studio 2008 + IAR Embeded Workbench。经过代码分模块编辑、编译、调试。然后组装调试,已经完成了系统开发。在中科院计算所嵌入式开发板中能够成功运行。
三、应用前景
基于xScale构架的面向教学培训的嵌入式操作系统已成功运用到智能手持设备中,运用该系统已成功地研发了智能数据采集终端,应用于电力数据采集、水表、燃气表抄表、物流、盘点等领域,收到了良好的效果。表1~表3是基于本操作系统的几款机型。
SE400是面向智能移动应用的新型掌上电脑,采用嵌入式CPU,智能操作系统平台,多扩展模块,适用于供电、供水、供气、物流、测绘、公安、海关、邮政、餐饮、宾馆等行业的应用,具有功能丰富、配置灵活、运行高效、可靠性高、安全性强等特点。
综上所述,基于Xscale架构的嵌入式操作系统是一套应用前景广阔的操作系统。
参考文献:
[1][美]RobertLove.Linux内核设计与实现[M].北京:机械工业出版社,
2006.
[2]陈是知.uC/OS-Ⅱ内核分析、移植与驱动程序开发[M].北京:人民邮电出版社,2007.
[3][美]弗斯特.PalmOS编程宝典[M].北京:人民邮电出版社,2006.
[4]李忠民,杨刚,等.ARM嵌入式VxWorks实践教程[M].北京:机械工业出版社,2006.
[5][美]拉布罗斯.嵌入式系统构件(第二版)[M].北京:机械工业出版社,2002.
[6]李向蔚,桑楠,熊光泽.嵌入式操作系统定制的通用性研究[J].单片机与嵌入式系统应用,2005,(3).
(责任编辑:麻剑飞)
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文