当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 3.3 实时任务ix = o ns = &q
 

 

    摘要:第五章 rtlinux的性能测试 根据2.2节有关中断延迟的介绍。在这一章,我们将对rtlinux的中断延迟进行测试。测试的机器为celeron 412mhz,196mb内存,rtlinux3.1+linux-2.2.19(与前面测试的linux版本相同)的机器上进行了测试(测试程序在附录2)。测试的结果如表5.1所示: 负载类型 平均值 最小值 最大值 ......
    摘要:第六章 感想与体会 当前,以信息家电为中心的嵌入式系统正得到蓬勃的发展。并且现在出现的市场只是冰山一角。我相信,随着嵌入式系统和网络技术的发展,整个世界将更加网络化,计算化。 世界是丰富多彩的,因而无处不在的嵌入式系统也要适应这个千变万化的世界。嵌入式系统也是千变万化的!嵌入式系统的这种特点注定了其市场的碎片化。任何公司都没有足够的能量统一市场。这带来新的游戏规则,给新生的公司以机会。 ......


Linux嵌入式实时操作系统开发与设计(六)
3.3  实时任务

最开始的设计是给每一个实时任务有自己的地址空间来提供内存保护.这通过80x86处理器内置的分页机制[10].在每次上下文切换中,页目录是基于寄存器的变化来指向新任务的页目录. 【程序编程相关:代码生成器的存在价值

实时任务是一个用户定义的程序,它按照在内核控制下的特定的调度方式来执行. 【推荐阅读:保存数据库中其他对象不变,删除数据库中所

一种提高性能的方法是所有的实时任务运行在一个地址空间.通过使用内核地址空间,除去了保护模式变换的系统开销.linux一个很有用的特性是:可装载内核模块.内核模块可以动态连接到内核地址空间,与链接为内核代码.每个模块定义了两个例程:init_module()与cleanup_module().init_module()在模块装载到内核是调用,cleanup_module()在删除模块时调用.这就提供了一个简单的方法在linux中操作驱动程序与文件系统. 【扩展信息:Squid 详细介绍2

任务间的切换非常频繁,如果在tlb没有命中时,使得系统在上下文切换的开销很大,系统性能会降低.别的系统开销还有是系统的调用,在保护模式下也是个费时的操作.

可链接模块用以在当前的rtlinux中动态创建实时任务.这种实现方法也更脆弱:一个实时任务的错误可能引起整个系统的崩溃.c语言的使用加重了这个问题.数组.指针等的应用,很容易引起与内存相关的程序错误.另一方面,由于实时任务一般控制昂贵的外围设备,理所当然要使用与系统内核编程时相同的警告级别.

实时任务运行在内核地址空间有几个好处.除了上面提到的tlb命中问题与保护模式切换的问题外,这种方法使我们通过名字引用函数与对象,胜于通过描述符来引用.比如,实时任务表现为一个c的结构体.每个任务可以赋予一个c标识符,别的任务也可以通过这个标识符引用任务.动态链接执行过程中,模块装载解决了符号寻址问题,所以访问是非常高效的.

所有的任务在系统的地址空间,任务的切换也更简单.一个上下文切换是保存所有整数寄存器到栈中,改变栈的指针指向新的任务.同样也支持有浮点运算的任务.

为实时任务进行实时编程的接口将在第四章介绍.

 

3.3.1  实时线程数据结构

struct rtl_thread_struct

struct rtl_thread_struct {

     int *stack;  

     int fpu_initialized;

     rtl_fpu_context fpu_regs;

     int uses_fp;

     int *kmalloc_stack_bottom;

     struct rtl_sched_param sched_param; /* 线程调度参数 */


...   下一页
    摘要:概要 java 提供了一个丰富的异常处理框架,但是许多程序员发现:跳过这个丰富的异常处理框架只使用类属exceptions要容易得多。本文探讨了产生、捕捉和忽视类属exceptions的风险,并为处理复杂软件项目内的一般的复杂异常建议了最好的处理方法。 在最近的一个项目中,有一块代码实现源代码的清除。因为它有许多不同的调用,很有可能会产生六个不同的异常。原来的程序员在试图简化代码(或者保存键入程......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE