论文部分内容阅读
随着半导体工艺的发展以及应用的推动,片上多处理器(chip multiprocessor,CMP)已成为构造现代高性能微处理器的唯一技术途径。传统超标量指令发射技术无法从典型程序指令流中发掘出足够多的并行性,使得单核微处理器的性能再也无法有效扩展。另外,处理器的功耗与散热问题日趋严重,除非使用水冷散热系统,否则很难继续依靠简单提高时钟频率的方法来改善微处理器性能。传统单核处理器架构面临挑战,取而代之的多核处理器应运而来。微处理器体系结构的变化,对操作系统的设计者提出了新的挑战,操作系统需要为多核处理器提供与其计算性能相适应的设计决策。内存管理子系统是系统内核中最重要的组成部分之一,是整个系统得以存在和运行的基础。拥有一个强大和完备的内存管理子系统是构建一个具有高可靠性以及可伸缩性系统的必备条件。多核系统在不同的处理器上可以并发执行不同的任务,实现真正意义上的并行执行。多个任务共享内存,除了要求互斥访存之外,还要求对有限的内存资源充分利用。因此,需要对Linux操作系统内核的某些数据结构和算法进行优化,以满足多核应用的要求。Linux操作系统采用分页式内存管理方式,它的内存管理算法是经典的伙伴算法。伙伴算法中对于伙伴内存块的定义要求互为伙伴块的两个内存块大小相等、地址连续并且出自同一个更大的内存块。这样的要求使得Linux操作系统在整个内存的管理上十分简洁,动态分配和回收内存算法简便。然而,在一些情况下会出现系统中存在着足够大的连续内存,但是这样的连续内存却不符合伙伴算法要求,因此无法得到合并利用,在一定程度上影响到了整个系统的内存利用率。本文对伙伴算法进行改进,修改原伙伴算法的分配和释放,改进的内存管理算法不仅可以使Linux对原有伙伴内存块进行维护、管理,同时还可以对放宽的伙伴块进行管理,在一定程度上提高了Linux对于内存资源的利用率。最后针对多处理器环境的特点,对改进之后的伙伴算法提出针对多处理器系统的改进思路,使改进之后的伙伴算法能更好的适应于多处理器系统的处理环境,实现页面分配和回收的真正并行,使得Linux操作系统真正适用于性能要求更高的多核应用。