通信网--中国通信行业门户网站 | 中国行业网站集群--通信行业电子商务唯一网站 设为首页 | 收藏本站
免费注册 商机无限 商务中心 行业展会 立即发布商机
网站首页 公司库 产品库 商机库 行业资讯 展会信息 招聘信息 招商加盟 下载中心 招标信息
关键词:
热门词汇: IP网络电话   语音识别   手机充电器   手机GPS   3G手机   传输设备   交换设备
  行业要闻 | 通信市场 | 通信技术 | 网络学院 | 5G前沿 | 4G前沿 | VoIP | IPTV | WiMAX | 呼叫中心 | IT制造 | IT就业  
  企业专栏 | 企业报道 | 通信标准 | 通信百科 | 分析预测 | 手机评测 | 增值通信 | 政策法规 | 专家观点 | 网商访谈 | 招标信息 | 物联网
网上展览:
综合厂商 | 手机 | IP电话 | 交换机 | 呼叫中心 | 网络 | 终端 | 电源 | 仪器 | 光纤 | 电缆 | 电脑 | 数码 | 软件 | 其他
中国通信网最新加盟企业: 
当前位置:网站首页 > 行业资讯 > 网络学院
【创心服务 联通你我】青春逢盛世,奋斗正当时
中国通信网 时间:2010-09-17 信息来源:维库开发网
分析了嵌入式Linux在实时性方面的不足,针对Linux2.6内核的中断运行机制、内核不可抢占性、自旋锁及大内核锁等问题进行研究,提出相应的实时性改进方法。测试表明,改进后的嵌入式Linux实时性效果较好。

Linux以其功能强大、源代码开放、支持多种硬件平台、模块化设计方案以及丰富的开发工具支持等特点广泛应用在嵌入式系统领域。作为嵌入式产品的操作系统平台,具有较好的实时性、系统可靠性、任务处理随机性是系统追求的目标,目前商业嵌入式操作系统实时性能可以满足嵌入式领域的需求,但由于其价格昂贵,应用受到了限制[1]。而嵌入式Linux以其非常低廉的价格,可以大大地降低成本,逐渐成为嵌入式操作系统的首选。但由于其在实时应用领域的技术障碍,要应用在嵌入式领域,还必须对Linux内核作必要的改进。本文以S3C2410+Linux作为移动机器人操作平台,为了提高机器人任务处理的实时性,针对影响Linux OS实时性能的若干方面进行研究,并利用相应的解决方法基于标准Linux2.6内核加以实现,最后通过测试,验证了此改进方法的效果。

1 Linux内核实时性分析

1.1 Linux内核制约实时性的因素

衡量操作系统实时性的指标主要有中断延迟和抢占延迟。嵌入式系统中很多实时任务是靠中断驱动的,中断事件必须在限定的时限内处理,否则将产生灾难性的后果。大多数实时系统都是处理一些周期性的或非周期性的重复事件,事件产生的频度就确定了任务的执行时限,因此每次事件发生时,相应的处理任务必须及时响应处理,否则将无法满足时限[2]。抢占延迟就反映了系统的响应及时程度。针对Linux内核,中断关闭及中断优先级执行机制、内核不可抢占性、自旋锁(spinlock)及大内核锁及一些O(n)的任务调度算法影响了系统的实时性能。

1.2 现存增强Linux内核实时性的技术

多年来,Linux实时性改进技术的发展主要有两种技术方案:(1)直接修改Linux内核。针对内核数据结构、调度函数、中断方式进行改动,重新设计一个由优先级驱动的实时调度器,替换原有Linux内核中的进程调度器sched.c。这一方案主要是针对中断机制、任务调度算法进行改进的,较为成功的案例为Kansas大学开发的Kurt-Linux。Kurt提高了Linux系统中的实时精度,将时钟芯片设置为单触发状态。对于实时任务的调度,Kurt-Linux采用基于时间的静态实时CPU调度算法。实时任务在设计阶段就需要明确地说明其实时事件要发生的时间。这种调度算法对于那些循环执行的任务能够取得较好的调度效果;(2)在Linux内核之外进行实时性扩展,添加一个实时内核。实时内核接管硬件所有中断,并依据是否为实时任务给予响应。Fsm Labs公司开发的RTLinux就是依据这种策略开发设计的[3]。以上论述的两种技术方案有其可借鉴之处,但如果综合考虑任务响应、内核可抢占性、实时调度策略等都将影响操作系统的实时性能,因此,这两种技术还不能很好地满足实时性要求。为了增强嵌入式Linux实时性能,下面将介绍中断机制、内核的抢占性以及大内核锁等相关问题。

2 Linux实时性改进方法

Linux2.4及以前版本内核是不可抢占的,在Linux2.6中,内核已经可以抢占,实时性有所增强。但是内核中仍然有不可抢占的区域,如自旋锁spinlock保护的临界区等。另外,影响内核实时性能的因素还有中断运行机制、大内核锁机制以及调度算法等。

2.1 中断运行机制改进

在Linux标准内核中,中断是最高优先级的执行单元,硬件架构决定了硬件中断到来的时候在该中断没有被屏蔽的条件下必须处理。不管内核当时处理什么,即便是Linux中最高优先级的实时进程,只要有中断发生,系统将立即响应该事件并执行相应的中断处理程序,这就大大削弱了Linux的实时性能。特别是系统有严重的网络或I/O负载时,中断将非常频繁,实时任务将很难有机会运行,这对于Linux的实时应用来说是不可接受的。Linux采用的关中断技术在关中断区域使相应实时任务得不到响应,增加了实时任务的中断延迟。Linux实时化后自旋锁变为互斥锁的技术,但由于自旋锁的中断处理不能及时响应,降低了系统的实时性能。因此,借鉴Ingo Molnar实时补丁的实时化方法,采用中断线程化技术改进中断运行机制,中断将作为内核线程运行而且赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级,这样,实时任务就可以作为最高优先级的执行单元来运行了,即使在严重负载下仍有实时性保证。另一方面,中断处理线程也可以因为在内核同步中得不到锁而挂载到锁的等待队列中,很多关中断就不必真正的禁止硬件中断了,而是禁止内核进程抢占,从而减小了中断延迟[4]。

在初始化阶段,常规中断初始化和中断线程化的初始化在start_kernel( )函数中都调用trap_init( )和init_IRQ( )两个函数来初始化irq_desc_t结构体,区别主要体现在内核初始化创建init线程时,中断线程化的中断在init( )函数中还将调用init_hardirqs(kernel/irq/manage.c)来为每一个IRQ创建一个内核线程,最高实时优先级为50,依次类推直到25。因此,任何IRQ线程的最低实时优先级为25,具体实现是通过kthread_create函数创建的。功能实现等同于如下代码:

void __init init_hardirqs(void)

{   ……

for (i = 0; i < NR_IRQS; i++) {

//对于每一个中断建立一个中断线程

irq_desc_t *desc = irq_desc + i;

if(desc->action && !(desc->status & IRQ_NODELAY))

//有IRQ_NODELAY标志的中断不允许线程化

desc->thread = kthread_create(do_irqd,

desc, "IRQ %d", irq);     //建立线程

……

}

}

static int do_irqd(void * __desc)

//分配中断线程优先级50~25

{  ……

/*Scale irq thread priorities from prio 50 to prio 25 */

param.sched_priority = curr_irq_prio;

if (param.sched_priority > 25)

curr_irq_prio = param.sched_priority - 1;

……

}

在中断处理阶段当中断发生时,CPU调用do_IRQ( )函数来处理中断,do_IRQ( )在做了必要的相关处理之后调用_do_IRQ( )。_do_IRQ( )主要功能为判断该中断是否已经被线程化(核对终端描述符的状态字段是否包含IRQ_NODELAY标志),对于没有线程化的中断,将直接调用handle_IRQ_event( )函数来处理。功能实现等同于如下代码:

fastcall notrace unsigned int __do_IRQ(unsigned int irq,

struct pt_regs *regs)

{  ……

if (redirect_hardirq(desc))

//检测是否为线程化中断,若是则唤醒中断线程

goto out_no_end;

……

action_ret = handle_IRQ_event(irq, regs, action);

//处理非线程化中断

……

}

int redirect_hardirq(struct irq_desc *desc)

//检测irq_desc结构体,判断是否线程化

{  ……

if (!hardirq_preemption || (desc->status & IRQ_

NODELAY) || !desc->thread)

return 0;

……

if (desc->thread && desc->thread->state != TASK_

RUNNING)

wake_up_process(desc->thread);

……

}

针对已线程化的情况,调用wake_up_process( )函数唤醒中断处理线程执行,内核线程将调用do_hardirq( )来处理相应的中断。具体实现是通过handle_IRQ_event( )函数直接调用相应的中断处理函数完成的。对于紧急的中断(如时钟中断),内核保持原来的中断处理方式,而不为其创建中断线程,这样就保证了紧急中断的快速响应。

相关资讯
· 【创心服务 联通你我】青春逢盛世,奋斗正当时 (2012-01-17)
· 【创心服务 联通你我】青春逢盛世,奋斗正当时 (2012-01-14)
· 【创心服务 联通你我】青春逢盛世,奋斗正当时 (2012-01-12)
· 【创心服务 联通你我】青春逢盛世,奋斗正当时 (2012-01-11)
· 【创心服务 联通你我】青春逢盛世,奋斗正当时 (2012-01-09)
发表评论
昵   称:   匿名发表
验证码: 
 
热门资讯
【创心服务 联通你我】青春逢盛... (2009-09-15)
【创心服务 联通你我】青春逢盛... (2011-04-28)
【创心服务 联通你我】青春逢盛... (2009-09-16)
【创心服务 联通你我】青春逢盛... (2008-07-15)
【创心服务 联通你我】青春逢盛... (2008-05-23)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2012-01-09)
【创心服务 联通你我】青春逢盛... (2011-01-30)
【创心服务 联通你我】青春逢盛... (2010-05-28)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2011-02-17)
【创心服务 联通你我】青春逢盛... (2009-08-13)
【创心服务 联通你我】青春逢盛... (2011-05-03)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2009-08-12)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2008-07-31)
【创心服务 联通你我】青春逢盛... (2010-07-20)
【创心服务 联通你我】青春逢盛... (2009-08-12)
【创心服务 联通你我】青春逢盛... (2010-08-27)
【创心服务 联通你我】青春逢盛... (2009-08-12)
【创心服务 联通你我】青春逢盛... (2009-10-11)
【创心服务 联通你我】青春逢盛... (2009-07-24)
国之鑫科技 | 泰尔网 | 中华网科技 | 信息产业网 | 通讯世界 | 数字通信世界 | 文传商讯 | 中华英才网 | 电话视频会议 | 凤凰科技 | 呼叫中心 | 新浪科技 | 新传媒网 | 和讯科技 | 中国科技网 | 通信英才网 | 江苏星光发电设备 | 中劳网 | 赛迪网 | MSCBSC移动通信网 | 中国软件网 | 新华网 | 腾讯科技 | 3G通信网 | 千龙网 | 光通信人才招聘网 | 通信人才网 | 中商顾问网
返回首页 | 网站简介 | 企业理念 | 免责声明 | 广告服务 | 代理政策 | 联系我们 | 铭万网 | 中国产品推广联盟
南京国之鑫科技有限公司版权所有©2008-2016 客户服务热线:025-83752991, 客户服务邮箱:gzx@gzxinfo.com
苏ICP备18005078号-1
本站图片及文字仅供功能演示,本站保留对本演示内容及功能的最终解释权

加入铭万联盟中国行业网站集群独家技术供应商