linux进程调度算法实时性,嵌入式Linux系统实时进程调度算法改进

1  嵌入式Linux系统分析

1.1  嵌入式系统

嵌入式系统(Embedded Systems)是以应用为中心,以计算机技术为基础,软件硬件可剪裁(可编程、可重构),适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其它设备的控制、监视或管理等功能。其中,嵌入式处理器是嵌入式系统中的核心部件。

1.2 实时操作系统

实时操作系统(RTOS,Real-Time Operation System)是指一个能够在指定的时间范围内完成特定的功能或者对外部的异步时间做出响应的操作系统[3]。其操作的正确性不仅依赖于逻辑判断和逻辑设计的正确程度,而且跟这些操作进行的时间有关。“在指定的时间范围内”是这个定义的核心,也就是说,实时系统是对响应时间有严格要求的。这个定义要求了:系统应该有在事先定义的时间范围内识别和处理离散事件的能力;系统能够处理和存储控制系统所需要的大量的数据。

1.3 嵌入式实时操作系统

由嵌入式系统的概念和特点可以看出,一个嵌入式系统对操作系统的可靠性、实时性都有很高的要求。尤其在嵌入式技术广泛应用的工业控制、航空军事等领域,对嵌入式操作系统的实时响应能力提出了非常严格的要求,哪怕出现很小的时间偏差,都有可能造成无法挽回的损失。这便是为何绝大多数嵌入式操作系统都采用实时操作系统的主要原因。实时操作系统应用到嵌入式领域,便出现了嵌入式实时操作系统,它是实时操作系统与嵌入式系统相结合的产物,具有实时性的同时又具有嵌入式系统的特点。

2 实时进程调度算法分析

2.1 Linux进程调度相关概念

进程调度分成两个部分,一个是调度的时机,即什么时候调度;一个是调度的算法,即如何调度和调度哪个进程。

Linux进程调度时机[1]:

调度时机是指在什么情况下运行调度程序来选择进程运行。在Linux系统中调度程序是通过函数schedule()来实现的,这个函数被调用的频率很高,由它来决定要运行的进程。

Linux调度时机主要分两种情况[2]:主动调度和被动调度。主动调度是指当进程状态发生变化时直接调用schedule()来实现调度。被动调度是指当一个进程运行时间片到或就绪队列中增加了一个进程,此时系统并不立即进行调度,而仅仅是将当前进程的调度标志位置1,当系统由核心态向用户态转变之前检查当前进程的调度标志是否为1,若为1,则调用schedule()进行调度。

2.2 进程调度的原理

进程调度分成两个部分,一个是调度的时机,即什么时候调度;一个是调度的算法,即如何调度和调度哪个进程。

调度程序运行时,要在所有可运行的进程中选择最值得运行的进程。选择进程的依据主要有进程的调度策略(policy)、静态优先级(priority)、动态优先级(counter)、以及实时优先级(rt-priority)四个部分。首先,Linux从整体上区分为实时进程和普通进程,二者调度算法不同,实时进程优先于普通进程运行。进程依照优先级的高低被依次调用,实时优先级级别最高[3]。

2.3 实时调度算法及缺陷

目前,实时调度算法主要可以分为三大类:时间驱动调度、优先级驱动调度、比例共享调度。三者各有优缺点,时间驱动调度、优先级驱动调度侧重于硬实时任务,比例共享调度更为适合于软实时任务,在网络系统中应用较多。比例共享调度基本思想就是按照一定的权重比例对一组需要调度的任务进行调度,让它们的执行时间与它们的权重成正比,是一种加权轮转调度[4]。

Linux进程采用的是多级轮转调度算法,尽管Linux通过将进程划分为实时进程和普通进程,按照优先级进行调度来实现实时的特性,但是仅能获得秒级响应时间,Linux虽然给实时进程提供了较高的优先级,但是没有加入时间限制,在高实时响应情况下还不能满足要求。当进程进入核心态时,其它进程不管优先级多高也必须等待。

3 实时调度算法的改进

3.1 实时模型

作为实时系统调度算法应综合考虑进程的价值和截止两个概念,以保证实时进程在截止期内尽可能多地完成,在这里提出新的调度算法,改进Linux的实时性。

即:进程的优先级数(Vi)=该进程重要程度(Wi)+其紧迫度(pi/(d-Ti))*系数k。紧迫度的值越大,说明从时间上看这个任务越紧迫。优化后调度算法仍以进程的价值为基础,同时也关注了完成进程的紧迫度,对于优先级相同的进程,采用FIFO调度策略。进程的价值越大说明该进程越重要,CPU越应完成它。

优化后调度算法仍以进程的价值为基础,同时也关注了完成进程的紧迫度,对于优先级相同的进程,采用FIFO调度策略。进程的价值越大说明该进程越重要,CPU越应完成它,可是对一些价值和它相差不多,而紧迫度要比它大得多的进程来说,就不公平了。例如,有两个进程A,B同时提交,A的价值是1001,估计执行时间是1ms,相对截止期是5ms,B的价值是1000,估计执行时间是1ms,相对截止期是2ms,假设这里的系数因子k是10,则更应该执行进程B。这是因为进程A,B的价值相近,而B的紧迫度要比A的大一些,A的优先级=1001+1/5*10=1003,B的优先级=1000+1/2*10=1005,因此选择B先运行,以防止B的夭折(注:Linux中实时进程的值设为从1000到1099,非实时进程的值设为从1到99,因此选择系数因子k为10)优化后的调度算法依然采用时间片轮转策略,依照Linux分配给进程的时间片为20次时钟滴哒,也就是200ms =20*10ms[5]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值