(计算机系统结构专业论文)linux内存管理子系统在龙芯2号上的优化.pdf_第1页
(计算机系统结构专业论文)linux内存管理子系统在龙芯2号上的优化.pdf_第2页
(计算机系统结构专业论文)linux内存管理子系统在龙芯2号上的优化.pdf_第3页
(计算机系统结构专业论文)linux内存管理子系统在龙芯2号上的优化.pdf_第4页
(计算机系统结构专业论文)linux内存管理子系统在龙芯2号上的优化.pdf_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 龙芯2 号是由中国科学院计算技术研究所自主研制开发高性能通用6 4 位处理器。 在龙芯2 号上运行的是l i n u x 操作系统,要提高应用程序的性能,就离不开操作系统 性能的提高j 而操作系统中与性能联系最为紧密的就是内存管理子系统。现在龙芯2 号系统性能的瓶颈在于前端总线的带宽和访存的延时上。所以针对龙芯2 号系统的实 际情况,提高l i n u x 的内存管理予系统的性能,对于提高龙芯2 号系统的整体性能有 着非常重要的意义。 本文从介绍提高l i n u x 内存管理子系统性能的意义出发,根据龙芯2 号内存管理 和t l b 的特点,分析l i n u x 内存管理子系统对内存资源的分配,管理和释放过程,提 出了利用软t l b 和多页技术来提高系统性能的方法。最后通过对系统性能评测,证明 该技术能够显著的提高目前龙芯2 号系统的性能。 关键字:龙芯2 号:l i n u x 内存管理子系统;软t l b :多页技术 i m p r o v i n gp e r f o r m a n c eo fl i n u xm e m o r ym a n g e m e n to ng o d s o n 2s y s t e m l i n , w e i ( c o m p u t e ra r c h i t e c t u r e ) d i r e c t e db yt a n gz h i n g m i n t h eg o d s o ns e r i e sm i c r o p r o c e s s o r sa r ct h ef l r s ta t t e m p tt od e s i g ng e n e r a l - p u r p o s e m i c r o p r o c e s s o r si nc h i n a t h eo p e r a t o rs y s t e mr u n n i n g0 1 1g o d s o n 2i sl i n u x i no r d e rt o i m p r o v et h ep e r f o r m a n c eo f g o d s o n 2s y s t e m , w em u s ti m p r o v et h ep e r f o r m a n c eb o t ht h e a p p l i c a t i o n sa n do p e r a t o rs y s t e m t h i sp a p e rf o c u s e st h ep e r f o r m a n c eo f o p e r a t o rs y s t e m0 1 1 g o d s o n 2 t h i st h e s i sa n a l y z e dt h ep r o c e d u r eo f l i n u xm e m o r y m a n a g e m e n to i lg o d s o n 2 , i m p r o v et h ep e r f o r m a n c eb ys o f t w a r et l ba n dm u l t i - p a g e s r e s u l t ss h o wt h a tt h e yc a l l r e d u c em u c hf i f t l br e f i l le x c e p t i o n sa n dr e d u c em u c ho f e x c r e s c e n tm e m o r ya c e e s s e sa n d i m p r o v et h ep e r f o r m a n c eb ya b o u t1 0 k e y w o r d s :g o d s o n 2 ,l i n u xm e m o r ym a n a g e m e n t ,s o f t w a r et l b ,m u l t i - p a g e s n 图目录 图1 1s p e c 2 0 0 0 的t l b 表项替换的次数2 图2 1 龙芯2 的t l b 表项。8 图2 2 龙芯2 中m m u 相关的控制寄存器9 图3 1l i n u x 下进程的地址空间1 3 图3 2 与进程地址空间相关的描述符。1 5 图3 3l i n u x 的三级页表结构1 6 图3 4l i n u x 下内存子系统的结构图2 1 图4 1 软t l b 的表项2 5 图4 2 软t l b 的结构图2 7 图5 1 多页系统的页表项构成。3 l 图5 2 多页系统的页表结构。3 2 图5 3 页的降解过程3 3 图6 1 相联关系对软t l b 命中率的影响4 0 图6 2 软t l b 缓冲区大小对于软t l b 命中率的影响。4 l 图6 3s p e c 2 0 0 的r e f 规模的软t l b 的命中率4 1 图6 4 软t l b 对s p e c 2 0 0 0 分数的提高率4 2 图6 5 多种页系统的s p e c 2 0 0 0 测试程序的性能4 3 图6 6 多种页系统下部分s p e cc p u 2 0 0 0 测试程序的t l b 重载入次数。4 4 图6 7 多种页系统的文件系统性能。4 5 v 表目录 表1 1 龙芯2 模拟器下t e s t 规模下s p e c 2 0 0 0 的t l b 重载入异常处理开销。2 表2 1p a g e m a s k 中m a s k 域与页大小1 0 表3 1 与创建、释放线性区相关的系统调用1 4 表3 2 内存管理子系统的一些操作函数1 7 表3 3l i n u x 中t l b 的处理函数2 3 表4 1 软t l b 的处理函数2 6 表6 1l m b e n c h 的各种测试4 6 v i 声明 我声明本论文是我本人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谓 的地方外,本论文中不包 含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所 做的任何贡献均已在论文中作了明确的说明并表示了谢意。 作者签名:希 帛日期:2 0 0 t 、多、z 7 论文版权使用授权书 本人授权中国科学院计算技术研究所可以保留并向国家有关部门或 机构送交本论文的复印件和电子文档,允许本论文被查阅和借阅,可以将 本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印 或扫描等复制手段保存:汇编本论文。 作者签名。林佛 沏5 j z 7 f 第一q - g i 占 第一章引言 随着计算机的发展,程序规模变得越来越大,它们所需的内存大小往往有上百兆 到几千兆不等为了不要求物理内存跟着程序的需求而增大,现代系统提出了虚空间 的概念,即程序运行在自己独立的虚空间,当虚空间被访问的时候才从实际物理内存 中建立与之对应的空间,建立虚空问和物理空日j 的映射t l b 是用来实现虚空间和物 理空间的地址映射过程,因此位于c p u 处理的关键路径上。为了提高c p u 的频率, 地址转译在所有的t l b 表项中同时进行匹配,即t l b 一般是全相联的。在电路上实 现全相联其代价比较高,也比较困难,所以t l b 的表项数往往很有限,从而使得t l b 能够覆盖的空间非常有限,这样便使得程序在运行的时候,将会大量发生t l b 替换, 研究表n 6 1 1 7 ,系统处理时间的4 0 0 一9 0 的开销在于1 1 l b 的替换处理中 龙芯2 号是由中国科学院计算技术研究所自主研制开发高性能通用“位处理器 【2 】。龙芯2 号的访存性能是当前系统性能的瓶颈。t l b 替换处理的主要过程就是查找 页表的过程,即需要从内存读入对应的页表项,并将其写入到t l b 中,数据表明在 t l b 替换处理中最占时间的操作就是访存操作,故提高t l b 的使用效率,减少t l b 替换的开销可以减少不必要的访存操作,减少访存性能对系统性能的影响。这对于提 高龙芯的整体系统性能有着非常重要的意义。提高t l b 替换的效率可以从两个方面入 手:一是减少t l b 替换的处理时间,二是减少t l b 替换的次数。本文主要就是分别 从这两个方面来入手对龙芯2 号的l i n u x 内存管理系统进行优化的。 本章先简单分析龙芯2 号系统性能和内存管理子系统的关系,指出在龙芯2 号上 提高内存管理子系统性能的意义,随后简单介绍了软t l b 和多页技术的原理,最后说 明本文的总体安排组织。 1 1 龙芯2 号系统性能与t i b 龙芯2 号采用的前端总线为s y s a d ,数据和地址分时传输,不具备倍频,使得静 端总线带宽非常有限,和其他c p u 相比,有着一定的差距。使得访存成为制约龙芯2 号系统性能提高最重要的因素之一如何在有限的资源上提高访存的效率,减少不必 要的访存是提高龙芯2 号系统性能一个重要的方面。随着计算机的发展,软件规模日 趋扩大,需要的程序空问很大。如果c p u 内t l b 的覆盖空日j 不足以覆盖程序的运行 空间,则会产生大量的t l b 表项的替换龙芯2 号具有6 4 项t l b 表项,每个表项可 以为两个连续的页进行地址转译,当我们以1 6 k 大小为一页的话,则龙芯2 号的t l b 只能覆盖2 m 的程序地址空间我们在龙芯2 号系统上,运行某些s p e c 2 0 0 0 测试程 序,对其产生的t l b 表项替换进行了统计,结果如下: 1 2 0 0 0 0 1 0 0 0 0 0 ,、8 0 0 0 0 赵 s6 0 0 0 0 坦 咎4 0 0 0 0 2 0 0 0 0 j0 v p rl l v o r t 窿 ll a p p l ua m p l 羹 圉冒 p a r s e r l圜r l b m 蟪 圉一一 豳 幽i is p e c 2 0 0 0 的t l b 表项替换的次数 可以看到v p r 、m c f p a r s e r 、v o r t e x 、a p p l u 、a m m p 这些测试中发生t l b 表项替换 的次数非常的大,都在2 亿次以上。 每次发生t l b 替换需要去查询页表,找到对应的页表项,将其填入t l b 中,在 “位系统我们采用的是三级页表,在这个过程需要访存5 次,故这些测试程序需要多 达l o 亿多次的访存操作来处理t l b 的替换。 我们利用龙芯2 号模拟器对t l b 替换与系统性能的关系进行更为深入的分析,因 为模拟器的速度较慢,我们只是统计了s p e c 2 0 0 0 在t e s t 规模下一些程序执行的前1 0 亿拍数据,结果如下: 表1 1 龙芯2 号模拟器下t e s t 规模下s p e c 2 0 0 0 的t l b 重载入异常处理开销 j 测试的总拍系统处理总拍t l b 重载入异常系统所占百 数数数分比 e o n 9 4 1 9 0 4 1 2 38 4 7 8 8 1 72 1 4 7 0 9 0 p a r s e r1 0 7 1 2 4 8 3 8 l51 3 2 8 2 3 49 8 9 7 64 7 9 e q u a k e 1 0 7 1 0 0 8 0 0 46 8 7 3 7 9 0 71 0 7 7 2 76 4 2 g e e1 0 7 2 5 3 9 1 7 77 3 0 2 5 3 7 02 8 4 1 2 26 8 1 m c f6 8 1 7 6 5 3 6 96 3 1 4 3 5 6 25 5 7 8 1 49 2 6 c r a f t y 1 0 7 2 1 6 1 0 9 71 2 51 7 2 4 5 51 0 6 1 4 2 01 1 6 7 m e s a1 0 7 1 8 6 9 4 4 21 9 6 0 8 8 4 1 01 3 0 5 8 4 31 9 2 9 v o r t e x1 0 7 2 1 2 7 1 6 42 1 4 6 4 8 1 3 91 4 1 2 0 3 82 0 0 2 b z i p 1 0 7 1 2 2 8 9 6 93 2 6 0 6 3 2 4 72 5 2 6 9 9 23 0 4 4 可 以容易看到操作系统处理占程序运行的总时日j 的比列与t l b 重载入异常的次数成正 相关的关系,t l b 重载入异常越多,其操作系统处理的时日】所占的比例也就越大 2 第一帝l ;i 等 所以如何提高t l b 的覆盖空间,减少发生t l b 替换的次数,减少t l b 替换处理 的时间,就能减少龙芯2 号的很多不必要的访存,提高龙芯2 号的系统性能为了提 高t l b 的覆盖空间,龙芯2 号的每个t l b 的表项可以设置不同的页大小,从4 k 到 1 6 m ,以2 的幂次增长。所以如果每个t l b 表项都采用1 6 m 大小的页,那么6 4 项 t l b 将可以覆盖2 g 的内存。并且龙芯2 号采用软件和硬件协同来实现内存管理过程, 由硬件来完成t l b 中的地址转译,由软件来完成t l b 表项的替换,使得我们有机会 来优化t l b 处理程序,减少t l b 替换次数和处理时间,提高系统性能。 1 2 软t l r 简介 软t l b 主要针对如何减少t l b 替换的处理时间,因为龙芯2 号的访问主存延时 比较大,所以减少t l b 替换处理函数中的可能出现c a c h e 失效的访存操作,提高其中 访存的c a c h e 命中率,就可以减少整体的处理时间,提高系统的性能。 软t l b 采用的方法就是在系统空间中建立一个t l b 的缓冲区。当系统需要进行 t l b 表项替换的时候,先查询该缓冲区,如果所需要的内容在缓冲区内( 我们称这为 在软t l b 中命中) ,则将该内容填入t l b 中,如不在缓冲区内( 称为在软t l b 中失 效) ,则按照原来的过程查询页表找到所需的内容填入缓冲区和硬件t l b 中。因为在 6 4 位系统下,页表需要三级,且访问页表的操作地址不连续,所以发生c a c h e 失效的 可能性比只访问一次缓冲区且访存操作连续的软t l b 方法要高。当然这是当软t l b 命中的情况。如果在软t l b 中失效,那么该次查询软t l b 的操作就会带来多一次访 问的额外代价所以软t l b 技术能减少t l b 替换的处理时间从而提高系统性能的关 键在于访问页表的时候c a c h e 的失效率和软t l b 的命中率。前者决定了优化的空间, 后者决定了是否能够带来性能的提高。 国外在不同系统上的对此进行了相应的研究,如: 1 【6 】中在模拟器上从理论的方面分析了s p e cc p u 2 0 0 0 在软t l b 下能有多大的 性能提高。 2 【7 】通过哈希页表( h a s hp a g et a b l e ) 来减少查询页表的级数来减少t l b 替换 处理的时间。 3 9 1 在d e ct 作站5 0 0 0 2 4 0 的m a c h 系统上对软t l b 进行了研究。 1 3 多页技术简介 多页技术主要针对是提高t l b 的覆盖空间,减少发生t l b 替换的次数来提高系 统的性能。 多页技术就是利用龙芯2 号的t l b 中每个表项可以分配不同的页大小,我们根据 用户的需求,实现按需分配页大小,从而扩大了t l b 的覆盖的空问目前现在学术界 的方法主要分为两类:第一类是在操作系统中添加一个新的系统调用,当用户需要某 3 j 中国科学院硕七学位论文- - l i n u x 内存管理于系统n 屁芯2f 的优化 个空间以大页作为基本页进行分配的时候,就通过该系统调用来申请。这种技术在操 作系统上实现比较简单,用户根据自己应用程序的需求来进行页分配控制,如果对程 序行为有着非常深刻的认识,这种方法可以达到最佳的优化效果。但是该种方法需要 对应用程序进行修改,对已有的可执行程序需要进行重新编译,并且像库程序中的函 数,其编译的时候并不知道其运行的时候行为。所以也就无法知道该用什么策略来进 行页分配;第二类是通过修改操作系统的内存管理子系统,由操作系统自动的根掘用 户的需要来进行页分配。这种技术在操作系统上实现比较复杂,但足用户可以不修改 应用程序来得到多页技术的好处。 国外也有这个方面类似的工作,如: 1 【6 】分析了s p e c 2 0 0 0 在多页的支持下理论上能够有多大的提高。 2 8 】在s p a r c 的模拟器上对多页系统进行了研究 3 【2 0 】在h p - u x 上实现了多页支持 4 【z s 是s u n 公司在s 0 1 i s 上实现多页支持。 5 【1 3 1 为s g i 在其工作站上实现多页支持。 6 【1 9 1 在p e n t i u m 4 的l i n u x 上实现了多页支持。 7 【1 5 】在a l p h a 的f r e e b s d 系统上实现了多页支持。 以上的工作中,l 和2 主要是在模拟器上对多页技术能够带来多大性能提高进行 了理论分析其他则是在不同的系统和平台上实现了多页支持。6 是通过添加系统调 用的方式来实现多页支持,它需要用户对应用程序进行一定的修改。4 ,5 则是通过修 改现有的系统调用来实现多页支持,其对用户是透明了,不需要用户对应用程序进行 修改其中4 实现了用户可控的多页支持,用户可以根据需求来决定在堆、栈、代码 段和数据段等不同的程序空间上实现不同多页支持,从而达到资源的最优化。7 没有 提到它属于以上两类哪一类。 1 4 软t l b 和多页技术在龙芯上实现的意义 访存是龙芯2 号系统性能的瓶颈所在,本文通过软t l b 和多页技术对l i n u x 内存 管理子系统进行优化,大大减少内存管理子系统中处理t l b 替换中访存操作,从而把 有限的内存带宽更加有效的提供给应用程序,提高系统的性能。 1 5 论文组织 论文从提高龙芯2 号上l i n u x 内存管理子系统的意义出发,在本章中提出了龙芯 2 号内存管理子系统中存在的问题,分析了优化的空问,介绍了提高内存管理子系统, 减少t l b 替换处理的不必要访存的两种方法的原理。 在第二垂中介绍了龙芯2 号的内存管理模式以及和t l b 的关系。 以上一章为铺垫,第三章详细描述了l i n u x 内存管理子系统的结构。 4 第一帝i 高 接着在随后的章节中着重研究了如何通过减少t l b 替换丌销来提高内存管理子 系统性能。我们分别从减少t l b 替换处理的时间和减少t l b 替换次数两个方面提出 了优化的方法。 在第四章和第五章分别介绍了软t l b 和多页支持两种优化方法。第六章基于广泛 收集的测试程序集,对这两种优化方法进行了综合评测和分析。 最后,对整个论文进行了总结,并给出了将来的研究方向。 第二章龙芯2 的内存管理与t l b 第二章龙芯2 号的内存管理与t l b 内存管理系统主要是对内存进行分配、释放等管理,实现虚地址到物理地址转译 工作龙芯2 号是一款r i s c 的处理器,其地址转译过程是在硬件和软件的协同下来 完成的【1 】【2 】【l l 】我们把c p u 内的进行地址转译硬件称为m m u ,全称为m e m o r y m a n a g e m e n tu n i t 。在龙芯2 号中m m u 主要是由t l b 和为了程序读写t l b 所需要的 一些控制寄存器所组成。因此了解龙芯2 号的内存管理机制,t l b 的构造以及软硬件 是如何进行分工的是我们进行龙芯2 号系统内存管理子系统优化的基础。 本章首先介绍了地址转译的概念和龙芯2 号的m m u 的构成;然后详细介绍了龙 芯2 号的软硬件是如何协同来完成地址转译的工作的;最后总结本章龙芯2 号的内存 管理的特点,o 指出优化的方向。 2 1 龙芯2 号的m m u 虚空问的实现是计算机发展的一个重要里程碑,每个进程都有各自的程序空间, 彼此之间互不干扰,现代操作系统的概念才得以产生【2 6 】。程序地址( 又称为虚地址) 经c p u 的m m u 部件进行转换变为到实际物理地址,这个过程就称为地址转译过程。 虚地址与物理地址的对应关系保存在每个进程的页表内,页表的建立和维护由操作系 统来完成。因为地址转译存在于访存操作的关键路径上所以如何提高其效率,减少 转译的时间对提高系统性能非常重要。于是就产生了t l b 的技术,即在c p u 内部建 立一个小的但是快速的缓冲区,将最近的地址转译的对应关系保存下来,当地址进行 转译的时候,先在该缓冲区内查找是否有其相对应的映射,如果没有才从进程的页表 中取得对应的页表项,将其存入t l b 中从而实现地址转译在x 8 6 系列的c p u 中, 这些过程都是硬件自动完成,对程序员是透明的,操作系统只需要在进程切换的时候i 将页目录的起始地址存于c r 3 寄存器中即可。龙芯2 号则简化了m m u 的硬件实现, 通过操作系统来协同硬件来完成地址转译的工作。当进行地址转译的时候,硬件在 t l b 中查找对应该程序地址的映射关系,如果有匹配项,则根据该映射关系实现地址 转译过程;如果t l b 中不存在该程序地址的映射关系,硬件产生一个异常,并将产生 该次异常的程序地址保存在一个控制寄存器中( b a d a d d r 寄存器) 。操作系统的异常处 理程序根据硬件保存的异常地址来查询页表,并将对应页表项所保存的映射关系填入 t l b 中,然后c p u 再重新执行产生异常的访存操作,这时候硬件就能完成地址转译 了 7 中国科学院硕十学位论文- - l i n u x 内存管理于系统确_ i 屯芯2f 的优化 2 1 1 龙芯2 号的t l b 的特点 因为地址转译操作处在于访存操作的关键路径上,所以t l b 被大量使用。这就要 求其访问延迟要很短,所以要求t l b 都处于芯片内部,其表项也要很少龙芯2 号采 用的是“项全相联的t l b ,每一项都由键值域和数据域组成。龙芯2 号的每个t l b 项可以把两个连续的虚页映射为两个独立指定的物理页。全相联使得所有的键值可以 同时并行的进行匹配,从而减少了进行t l b 匹配的时间。 龙甚2 的t l b 表项映射两个的物理地址 r 广t r n r t 一1 v p n 2 l p a g e b l “k l a s i d l o i p h q l 。字vi p f n l 。l a 鲈。i 图2 1 龙芯2 号的t l b 表项 如图所示,左边是表项的键值,右边是数据域,t l b 表项的键值包括以下内容: 1 v p n 2 :虚地址的高位( 即虚页号) 。因为每个t l b 表项可以对两个连续的虚 页进行映射。所以这罩保存的是偶数虚页地址,我们称为v p n 2 ,即虚页地址的最后 位将不保存在t l b 的表项的键值域中,而是用该位来选择两个映射的哪一个。 2 p a g e m a s k :用它来控制虚地址多少位用来和v p n 2 进行匹配,多少位作为页 内地址,从而使得每个t l b 表项对应的页大小可以不同龙芯2 号中可以从4 k 到1 6 m 不等,以2 的幂次增加。 3 a s i d :用以标记这个地址映射属于哪个进程空间因此除非c p u 的当前进程 的a s i d ( 保存在控制寄存器e n t r y h i 中) 与之相吻合,否则匹配是不会成功的。 4 g :全局位,如果设置了该位,则关闭a s i d 部分的匹配,从而使得该映射适 应于所有的进程空间。即该t l b 表项所表示的空间是被所有进程共享的。 t l b 的数据区( 也称为输出区) 用来保存虚页地址对应的物理地址的高位( 即物 理页号) 和一些表示该物理页属性的标志位: 1 物理页号:物理地址的高位,低1 2 位被去掉 2 c a c h e 控制位( c ) :用3 位来表示访存时候通过哪种协议来进行,0 1 1 表示该 页的访存经过c a c h e 。0 1 0 表示不经过c a c h e ,l l l 表示经过u n c a c h e a c c e l e r a t e 方式。 3 写控制位( d ) :置1 则允许数据写入相应的页。 4 有效位( v ) :如果为0 则表示相应的映射是无效的。看上去似乎毫无意义: 既然我们不想转译机制工作,为什么要把其相应的记录存入t l b 中呢? 这是因为进行 t l b 替换的时候为了减少替换处理的时间,我们不去检查特例,而用同样的软件代码 将页表项中保存的地址映射写入t l b 中,如果这时页表项没有有效的地址映射关系, 其对应的v 为即为0 ,当c p u 访问该t l b 表项的时候,就会产生另外缺页异常,继 而调用缺页异常处理程序来进行处理从而使得我们不用在每次替换时都对映射内容 进行检查了。 j 第二章龙芯2 的内存管理与t l b 2 1 2 龙芯2 号的m m u 控制寄存器 龙芯2 号的地址转译过程是软件协同硬件来完成的,龙芯2 号提供了一些控制寄 存器和特权指令( 只能在系统态下使用的指令) 给软件,操作系统可以通过它们来对 t l b 进行操乍下图给出了本文将会提及一些m m u 的控制寄存器: e i i 竹h i ,寄存器 6 36 26 1 1 31 287 0 e n t r y l 0 0 i 寄存器 3 i3 02 96532l0 p a g e m a s k 寄存器 3 12 52 41 21 2 0 图2 2 龙芯2 号中m m u 相关的控制寄存器 这些寄存器共同装下一个t l b 表项所需的所有信息,所有对t l b 读写操作都必 须通过它们来完成。 1 e n t r y h i 寄存器:v p n 2 为虚地址的高位,当t l b 产生重载入异常( t l b 需要 替换的时候硬件产生的异常我们称为t l b 重载入异常) 后,硬件将会自动将无法转译 的虚地址保存在该域中当程序员想写入一个关于某个虚地址的映射到t l b 的时候, 也必须将建立映射的虚地址写入该域。a s i d 用束保存当前用户进程的进程号,它不 会随异常而改变,而由程序员来决定,所以当进行进程切换的时候,需要将新的进程 号填入该域。r 来控制访问的权限,o o 为用户级,o l 为超级管理员态,l l 为系统态。 2 e n t r y l 0 0 ,l 寄存器:p f n 为e n t r y h i 的v p n 2 所转译的物理地址高位。c 、d 、 v 、g 对应于1 1 卫表项中相应位 3 p a g e m a s k 寄存器:m a s k 域在t l b 表项创立的时候被拷贝到t l b 中,置l 的 位可以使得虚地址中相应位在匹配t l b 时被忽略掉,并且将该位原封不动的传给最终 9 j 中固科学院颀 学位论文- - l i n u x 内存管理予系统在屁芯2i 的优化 的物理地址所以不同的m a s k 域就可以使得t l b 的表项对应于不同的页大小。下表 中给出了龙芯2 号的p a g e m a s k 不同值和对应的页大小。 表2 1p a g e m a s k 中m a s k 域与页大小 4 i n d e x 寄存器:用来指定t l b 的表项索引号。 5 r a n d o m 寄存器:保存t l b 的表项索引号,c p u 每执行一条该指令,该寄存 器就减一,减到零后在从最大值重新开始。该寄存器在t l b 的t l b w r 指令执行时作为 t l b 的索引,我们可以利用它来支持写t l b 的随机替换策略。 2 1 3 龙芯2 号的m m u 控制指令 l - t l b r :读t l b 的i n d e x 寄存器所指示的表项。 2 u b 、v i :写t l b 的i n d e x 寄存器所指示的表项。 上面这两条指令用来在i n d e x 寄存器所选中的t l b 表项和e n t r y h i ,e n t r y l o 以及 p a g e m a s k 寄存器之问传递m m u 的相关数据。 3 t l b w r :写t l b 的r a n d o m 寄存器所指示的表项 4 t l b p :t l b 查询指令在t l b 中查询虚页号和a s i d 跟e n t r y h i 寄存器中当前 内容相匹配的表项,并把查询到的相应表项索引号存入i n d e x 寄存器。如果匹配失败, i n d e x 寄存器的p 位被置为i ,使得该寄存器的值看上为一个负数,使得软件很容易检 测。 2 2 龙芯2 号的地址转译过程 龙芯2 号的地址转译过程包括以下几个软硬件步骤: 1 一个虚地址被分割为两个部分,地址低位为页内地址,不必经过转译直接通过。 2 虚地址的高位也就是v p n 2 ,并上当前正在运行的进程的a s i d 形成需要匹配 的键值。 3 我们在t l b 中查询是否有匹配该键值的表项匹配的时候,如果该t l b 的表 项设置了g 位,则忽略键值中的a s i d 。同时忽略键值中对应于表项中的p a g e m a s k 域为l 的相应位 i o 第二章尼苍2 的内存管理与t l b 4 如果在1 1 l b 存在匹配且该对应项有效,如果该次访存是写操作,那么还需要 保证t l b 表项中的d 位为i ,则从表项中取出物理页号和虚地址的低位的页内地址形 成物理地址,完成地址转译过程。如果对应项的v 位为0 ,则c p u 产生一个缺页异常, 交给操作系统去分配物理页。如果该次访存为写操作,但是t l b 表项中d 位为0 ( 即 表示该t l b 指示的空间不可读写) ,c p u 则产生一个t l b 写异常交给操作系统去处理。 5 如果在t l b 不存在匹配,则c p u 会产生t l b 重载入异常,交给操作系统来 进行t l b 的替换。 以上都是由龙芯2 号的硬件完成。而异常的处理则是交给操作系统来完成。 6 t l b 重载入异常,操作系统根据e n t r y h i 记录的产生异常的虚地址,查询页表, 找到对应的映射关系,通过e n t r y h i ,e n t r y l o 和p a g e m a s k 利用t l b w r 指令将内容填入 t l b 中。 7 缺页异常,操作系统根据e n t r y h i 记录的产生异常的虚地址,调用分配页的函 数,然后在页表中建立该虚地址到所分配物理地址的映射,通过t l b p 指令在t l b 中查 询对应的项,再通过e n t r y h i ,e n t r y l o 和p a g e m a s k 利用t l b w i 指令将内容填入对应的 t l b 表项中。 8 t l b 写异常,操作系统决定该页是否可以写,如果可以则通过f l b p 和t l b w i 指 令来置起t l b 相应表项的d 位。 5 软件在完成对相应的异常处理后,就恢复产生异常的现场,重新执行产生异常的 访存操作,这个时候硬件就可以通过1 步骤来完成地址转译工作。 2 3 小结 通过本章的介绍可以看到龙芯2 号的m m u 管理模式不同于x 8 6 的方式,它采取 软硬件协同的方式来完成,硬件更为精简,软硬件分工也更细。在硬件上龙芯2 号可 以支持不同的页大小。t l b 的替换和页的分配由软件来完成,使得我们通过优化软件 方法束提高系统性能成为可能。 第三章l i n u x 内存管理子系统 第三章l i n u x 内存管理子系统 龙芯2 号运行的是l i n u x 操作系统 3 1 1 4 5 】,为了对其内存管理子系统进行优化, 我们先要了解l i n u x 操作系统是怎样来进行内存管理的。 本章我们从l i n u x 进程的地址空间的组成说起,介绍了l i n u x 下描述进程地址空 间的数据结构。接着我们详细介绍了l i n u x 下程序空间是如何建立,如何进行实际的 内存分配,如何管理,如何释放的。然后我们介绍了t l b 重载入异常的处理函数。最 后小结本章。 3 1l i n u x 下进程的地址空间 l i n u x 下程序地址空间的组成如下【4 】。整个虚空间分为两个部分,用户空间和内 核空间,所有进程的内核空间是共享的,而用户空间互不干扰。一个进程的地址空间 由代码区、数据区、堆和栈组成,堆空间地址向上增长,栈空间从用户空间的最高地 址处向下增长。 高地址 低地址 堆( 向上增长) 。 数据区 程序代码 图3 1l i n u x f 进程的地址空间 l i n u x 通过一种称为线性区的资源来表示线性地址区间,线性区是由起始线性地 址,长度和一些存储权限来描述的,其是l i n u x 内核管理线性空间的最基本单位,每 个线性区的特性和存储权限都是一样的。为了效率起见,线性区的起始地址和长度都 必需是物理页大小的倍数,以便用每个线性区所指的数据能够完成填满内核分配给他 的物理页因为进程空间代码区、数据区、堆和栈的程序功能和行为不同,l i n u x 采 用不同的系统调用和缺页处理来完成它们的线性区的创建和释放 i 璺= t姚 内 腔i 用 中国科学院硕士学位论文- - l i n u x 内存管理子系统右:尼芯2l 。的优化 表3 1 与创建,释放线性区相关的系统调用 系统调用 j 描述 b r k o改变进程堆的大小 e x e c v e o装入一个新的可执行文件,从而改变进程的地址空间 e x i t o结束当前进程并撤销它的地址空间 f o r k o创建一个新进程,并为它创建新的地址空问 m m a p o为一个文件创建一个内存映射,从而扩大进程的地址空间 m u n m a p o撤销对文件的内存映射,从而缩小进程的地址空间 s h m a t o创建一个共享线性区 s h m d t 0撤销一个共享线性区 3 2l i n u x 下描述进程地址空间的数据结构 与进程地址空间有关的全部信息都包含在由进程描述符的i n n l 域所指向的一个结 构中,这结构为n l ms t r u c t ,如下所示: s t r u c tm m _ s t r u c t s t r u c tv m a r e a s t r u c t + m m a p ; r b r o o t tm m _ r b ; s t r u c tv m a r e a s t r u c t + m m a p _ c a c h e ; p g d _ t p g d ; a t o m i c _ t m m _ u s e r s ; a t o m i c _ tr a m _ c o u n t ; i n tm a p _ c o u n t ; s t r u c tr ws e m a p h o r e m m a p _ s e m ; s p i i l l o c k _ tp a g e _ t a b l e _ l o c k ; s t r u c tl i s t _ h e a dm m l i s t ; u n s i g n e dl o n gs t a r t _ c o d e ,e n d _ c o d e ,s t a r t _ d a t a , e n d _ d a t a ; t l n s i g n e dl o n gs t a r t _ b r k , b r k ,s t a r t _ s t a c k ; u n s i g n e dl o n ga r g _ s t a r t ,a r g _ e n d ,e n v _ s t a r t , e n v e n d ; u n s i g n e dl o n gr s s ,t o t a l _ v m ,l o c k e d _ v m ; u n s i g n e dl o n gd e f _ f l a g s ; u n s i g n e dl o n gc p u _ v m _ m a s k ;: u n s i g n e dl o n gs w a p _ a d d r e s s ; u n s i g n e dd u m p a b l e :l ; m m c o m e x t _ tc o n t e x t ; ) ; 其中p g d 指向进程的页全局目录地址,m m a p 指向的是进程的线性区的链表头, 因为内核中会经常查找某个线性地址属于哪个线性区,所以为了加快查询,l i n u x 将 每个进程的线性区组成一个平衡二叉树,并将其根保存在m mr b 中 l i n u x 通过类型v m a r e a s t r u c t 的描述符来描述一个线性区: s a u c tv m a r e a s t r u c t 1 4 第三章l i n u x 内存管理子系统 s t r u c tm m _ s t r u c t v m _ r n m ; u n s i g n e dl o n gv m _ s t a r t ; u n s i g n e dl o n gv m _ e n d ; s t m c tv m a r e a s t r u e t v m _ n e x t ; p g p r o t _ tv m _ p a g ep r o t ; u n s i g n e dl o n gv m _ f l a g s ; r j o _ n o d e _ tv m _ r b ; s t r c u tv m a r e a s t m c t + v m n e x t s h a r e ; s t r u c tv m a r e a s t r u c t ”v m _ p p r e _ s h a r e ; s t r u c tv m _ o p e r a t i o n s _ s t r u c t v m _ _ o p s ; u n s i g n e dl o n gv m p g o f f ; s t r u c tf i l e + v m _ f i l e ; u n s i g n e dl o n gv mr a e n d ; v o i d + v m _ p r i v a t e _ d a m ; ; 每个线性描述符表示一个线性地址区间。v mm n 域指向拥有这个区间的进程的 n n ns t r u c t 内存描述符;v i i is t a r t 域表示区间的第一个线性地址,v me n d 域表示区间 之外的第一个线性地址;v l ne n d v r ns t a r t 表示线性区的长度;v m 包含一些函ops 数与文件操作相关的函数指针,比如o p e n o ,c l o s e 0 和n o p a g e o ,用这些函数来操作与 该线性区相差的文件数据;v mf i l e 指向一个与该线性区域相关文件的文件描述符; v m _ p g o f f 表示该线性区域在相关文件中的页的偏移量;v m _ f l a g s 保存了与线性区的页 相关的标志,这些标志给内核提供有关这个线性区的全部页的属性信息,例如它们包 含有什么内容,进程访问每个页的权限是什么,该区域应该如何增长。所以线性区是 l i n u x 虚空间管理的单位。下图显示了进程的地址空间,它的内存描述符以及线性区 链表三者之间的关系。 图3 2 与进程地址空间相关的描述符 操作系统将实际的物理内存以同样的页大小分成块,我们称这种块为页框,l i n u x 中用类型p a g e 来描述页框: 1 5 j 中国科学院硕士学位论文1i n u x 内存管理子系统在屁芯2i 一的优化 t y p e d e f s t r u c tp a g e s t r u c tl i s th e a dl i s t ; s t m c ta d d r e s s _ s p a c e m a p p i n g ; u n s i g n e dl o n gi n d e x ; s t r u c tp a g e + n e x t _ h a s h ; a t o m i c _ tc o u n t ; u n s i g n e dl o n gf l a g s ; s t r u c tl i s t _ h e a dh - u ; s t r u c tp a g e + + p p r e v _ h a s h ; s t r u c tb u f f e r _ h e a d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论