嵌入式Linux的技术分析
权重为它的counter值加1000;设置一般进程的权重为counter。因此,实时进程总会被认为是最值得运行的进程。
然而,Linux核心的设计主要集中在应用程序的吞吐量上。追求吞吐量的必然结果,就是Linux调度器运用一种"公平共享"的策略保证所有的进程得到平均的CPU资源。而且,Linux的进程调度器只是简单地将标有实时标志的进程的权重加1000,至于实时进程间的轻重缓急还没有周密的完整的设计。因此,Linux的进程调度器还远不能称作是一个真正的实时进程凋度器。
4 拟采用的策略
根据以上分析的特点,我们决定主要从以下4个方面来修改Linux的核心代码。
(1)在内核中插入抢先点 由于Linux是一个非抢先式的操作系统。因此当一个实时进程提交时,很可能因为当前的进程正处于核心态不能被打断而不能得到及时的处理。因此有必要在Linux内核中插入抢先点,使实时进程得到处理。根据上一节分析的特点,太体有4种方法可供选择。权衡这4种方法的利弊,我们决定采用第4种方法,即在关键代码段加入一个switchaccept标志,开始该代码段时,将此标志置为否.离开时再置回原来的值。这种方法比采甩semaphore的好处是,如果采用许多种semaphore的话.要考虑是否会产生死锁的问题。比采用锁中断的好处是.将中断锁住将丢失中断,而这样不会。而以固定的周期加switch语句显然有失灵活性。这样.采用这种方法,需要我们分析Linux所有系统调用的代码,画出其结构流程图。分析出哪些部分是关键部分,也即不允许置入的部分。在关键代码前后更改switchaccept标志。这项工作比较艰巨。同时修改进程调度器,使其判断switchaccept标志来决定是否执行进程切换。
(2)修改进程调度器Linux的进程调度器虽然已经具有一定的实时性能,但还远远达不到真正实时调度器的标准,因此需要修改其进程调度器,必要的话可让Linux运行在两种模式下,实时模式和分时模式。可设计一些相关的系统调用,并在实时进程提交时,将系统转化为实时模式,当实时进程结束时,再转化为分时模式。
(3)Linux的中断管理根据前面分析过的,Linux的中断管理及时地将紧要的任务完成后,将其余不重要的缓慢的任务放置在任务队列中,等到系统空闲(cpu idle())或系统调用等返回时再完成这些任务,这样就提高了系统的响应速度,同时,Linux还支持中断嵌套。因此,不再对其作太大改动。
(4)锁定内存 在本项目的规划中本打算实现Linux锁内存的功能,使优先权高的进程在内存中的数据不被换出,从而提高实时进程的运行速度。然而,在分析了Linux代码后,发现后来版本的Linux已通过系统调用sys mlock实现了此项功能。
5 结束语
采用上述方法修改了内核代码后,由于每个修改方案都是有一定的代价的,它在增加了系统响应速度的同时也在某种程度上降低了系统的整体效率,比如说将内核设置成可抢先的,在进程频繁的切换过程中也要消耗一定的cpu处理时间。因此,还需要对各种解决方案进行测试、比较。另外,为了减少嵌入式Linux自身的长度,在存储管理部分对虚拟内存也应作进一步的处理。
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- 军事指挥系统中VxWorks下汉字显示技术(07-16)
- 基于VxWorks的文件系统的研究与实现(09-18)
- 嵌入式语音通信系统中VxWorks BSP的设计实现(09-18)
- 嵌入式系统的VxWorks安全性问题研究(11-06)
- VxWorks下的多重定时器设计(02-16)