Linux内核26进程调度分析与改进
- 格式:pdf
- 大小:260.72 KB
- 文档页数:3


Linux内存管理和进程调度的实时化研究与改进计算机应用专业研究生卜俊伟指导教师徐虹摘要随着计算机,网络和通信技术地发展,实时系统越来越多得被应用于工业控制、网络通信、实时监控,多媒体等领域。
这些新的实时网络应用的出现给实时系统地发展提出了新的要求和挑战。
同时,随着开源项目的兴起,作为典型代表的Linux得到了迅速普及和发展,已成长为稳定的、性能优秀的操作系统。
但是Linux本身是一个只是一个类UNIX的通用的操作系统,其在实时性能方面有着比较大的缺陷。
然而基于Linux本身的特点,将其改造成为一个合适的实时系统是完全可行的。
论文在深入分析和研究Linux2.4版本内核源代码的基础上,结合实时操作系统的原理.选择了对Linux在内存管理和进程调度这两方面进行研究和实时化改进,取得了显著的效果。
首先通过对内核代码的分析,了解到Linux的内存管理是采用了虚拟内存管理的方式,使得系统中的每个进程可以使用比实际内存多很多的虚拟内存,提高了系统内存的使用效率。
但正是由于虚拟内存的存在,使得进程每次获得的内存都是先分配虚拟内存,在分配物理内存。
系统对物理内存的分配总是会放在最后一步,即在相关指令执行的时候才进行,而且也仅将进程所需要的部分内存分配给进程。
当进程所需要的页面不在内存时,系统会发生缺页中断,将进程所需的页面调入内存,而这个中断时间是不确定的,那么就必然不能满足实时进程的需求,又考虑到虚拟内存的强大功能,在不删除虚拟内存结构的情况下,针对实时进程采用一次将实时进程所需的内存全部分配的方法来完成在内存管理这块的改进。
同时在研究分析的过程中,发现系统中的空闲内存总量需要放在一个较高的量上才有可能使系统中有足够的内存可以满足一般实时进程对内存的需求,那么有必要提高系统中空闲内存的数量,从而加快实时进程的响应时间。
由于Linux的进程调度是采用的不可抢占式的内核调度。
其进程调度发生在每次中断发生的时刻,因此要提高Linux在调度方面的实时性,改变时钟中断的粒度是首要工作。
1.前言Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。
目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力:缺乏对实时任务的支持,多处理机可扩展性差。
在 2.4 内核中,造成这两个弱项的关键原因之一就是调度器设计上的缺陷。
2.6 调度系统从设计之初就把开发重点放在更好满足实时性和多处理机并行性上,并且基本实现了它的设计目标。
主要设计者,传奇式人物 Ingo Molnar 将新调度系统的特性概括为如下几点:∙继承和发扬 2.4 版调度器的特点:o交互式作业优先o轻载条件下调度/唤醒的高性能o公平共享o基于优先级调度o高 CPU 使用率o SMP 高效亲和o实时调度和 cpu 绑定等调度手段∙在此基础之上的新特性:o O(1)调度算法,调度器开销恒定(与当前系统负载无关),实时性能更好o高可扩展性,锁粒度大幅度减小o新设计的 SMP 亲和方法o优化计算密集型的批处理作业的调度o重载条件下调度器工作更平滑o子进程先于父进程运行等其他改进2.4 的就绪队列是一个简单的以 runqueue_head 为头的双向链表,在 2.6 中,就绪队列定义为一个复杂得多的数据结构 struct runqueue,并且,尤为关键的是,每一个 CPU 都将维护一个自己的就绪队列,--这将大大减小竞争。
O(1)算法中很多关键技术都与 runqueue 有关,所以,我们对调度器的分析就先从 runqueue 结构开始。
1) prio_array_t *active, *expired, arrays[2]runqueue 中最关键的数据结构。
每个 CPU 的就绪队列按时间片是否用完分为两部分,分别通过 active 指针和 expired 指针访问,active 指向时间片没用完、当前可被调度的就绪进程,expired 指向时间片已用完的就绪进程。