您的当前位置:首页正文

LINUX进程的地址空间研究

2021-11-25 来源:客趣旅游网
第21卷第6期 2008年12月 四川理工学院学报(自然科学版) JOURNAL OF SICHUAN UNIVERSITY OF Vo1.2l No.6 SCIENCE&ENGINEERING(NATURAL SCIENCE EDITION) Dec.2008 文章编号:1673-1549(2008)06-0040-02 L I NUX进程的地址空间研究 蒋波,李方军,邓豫蜀,赵阳梅 (中国工程物理研究院职工工学院,四川I绵阳621900) 摘要:研究了Linux进程的虚拟地址空间管理,包括页表结构、内存分配策略、线性地址区间结构,线性地 址到物理地址的映射等。 关键词:进程;线性地址;用户模式;内核模式 中图分类号:TP316 文献标识码:A 引言 Linux从1991年的最初问世到现在已经历了很多 21)、页表(20~12)和页内偏移(1l~0),三级页表的每一 表项被扩展成64位,页表项的物理地址域从两级页表 的20位扩展成24位。为了同像Intel 64位Itanium微处 理器这样的64位结构兼容,Linux 2.6采用了四级分页 模型,分别是:页全局目录表、页上目录表、页中目录表 和页表,对于常规分页的两级页表,删去页上目录和页 中目录,即认为线性地址中这两个目录域包含0位,使 用PAE使能的三级页表则删去页上目录表。 Linux 2.6把32位的进程线性地址空间分成2部 分:一个是随上下文切换而改变的用户空间部分,一个 是保持不变的内核空间部分,两者的分界点由 PAGE—的版本,本文讨论在80x86平台上的Linux 2.6版本, 80x86微处理器把段和偏移组成的逻辑地址通过分段 单元转换成线性地址,线性地址再通过分页单元被转换 成物理地址,线性地址也被称为虚拟地址,它是一个32 位的无符号整数,它可以寻址多达4GB的存储空间。 1物理内存布局 Linux 2.6采用Node节点、Zone区和Page页三级结 构来描述物理内存,它支持非一致存储器访问(NUMA) 模型,在这种模型中,给定CPU对不同存储器单元的访 问时间可能不一样,系统的物理内存被划分为几个节 点,在一个单独的节点内,任一给定CPU访问页所需时 间都是相同的。但在实际的80x86体系结构中,IBM兼 容PC使用一致存储器访问(UMA)模型,NUMA并不真 正被需要,整个物理内存都被组织在一个单独的节点 OFFSET决定,在x86中它的值是0xe0000000,当 进程在用户模式中运行时,不同的进程使用不同的页目 录表来映射各自的线性地址,它产生的线性地址小于 0xc0000000,在内核模式下,所有的进程都使用相同的 主内核页目录表来映射高于OxeO000000的线性地址, 因为特权级关系,内核可以访问用户空间部分。 中。在这个节点内的物理内存被划分成3个Zone区: ZONE—DMA的范围是内存的头16M,它是ISA DMA可 2内核模式下的内存管理 进程的内核模式线性地址范围是0xc0000000到 0x ,大小为1GB,因此内核不能直接寻址超过1GB 访问的区域;ZONE—NORMAL的范围是16M~896M,它 是内核可直接映射区域;ZONE—HIGHMEM包含了高于 896M的页帧。 80x86微处理器常规分页使用了两级页表:页目录 表(位31~22)和页表(位21~12),从Pentium Pro开始, 的物理内存,其中的头896M线性映射到物理内存地址 上,即线性地址x映射到物理地址X一0xe0000000上, 例如OxcO000000映射到物理地址OxO0000000, 0xe0000001映射到物理地址OxO0000001,…,等等,线 性地址的最后128M被专用于映射ZONE—HIGHMEM 微处理器地址引脚从32增加到36根,Intel引入了物理 地址扩展(PAE)机制以把32位线性地址转换为36位 物理地址,PAE机制使用三级页表,32位线性地址被分 成4部分:页目录指针表PDPT(31~30)、页目录表(29~ 收稿日期:2008.05—09 中高于896M的页帧,也就是超过896M的所有物理内 存只能通过这128M线性地址空间中的“窗口”进行映 作者简介:蒋波(1963一),男,四)ll三台人,副教授,主要从事操作系统方面的研究。 第21卷第6期 蒋波等:LINUXJ ̄程的地址空间研究 41 射,这些“窗口”映射采用了固定映射线性地址、非连续 存储区管理等技术。 Linux 2.6采用伙伴(Buddy)系统算法来解决存储器 管理中著名的外碎片问题,也就是频繁地请求和释放不 同大小的一组连续页帧,导致在已分配页帧块内分散许 多小的空闲页帧块,从而即使有足够的空闲页帧可以满 足请求,但要分配一个大块的连续页帧也变得不可能, 这个算法把所有空闲页帧分组成11个块链表,每个块 链表分别包含大小为l,2,4,8,16,…,1024个连续的页 帧,假如要请求256个页帧的块,算法先在256个页帧 的块链表中检查,如果没有,算法会查找下一个更大的 512个页帧的链表,如果存在这样的块,内核就把512 个页帧分成两半,一半用作满足请求,另一半插入到 256个页帧的链表中,如果不存在,内核继续查找更大 的1024个页帧的块,如果这样的块存在,内核分配 1024个页帧中的256个页帧来满足请求,把剩下的768 个页帧中的头512个插入到512空闲链表块中,最后的 256个插入到256空闲链表块中,如果块不存在,算法 就放弃并发出错误信号。内核调用alloe—pages 0或 __get free—pages()等函数从Buddy系统算法获得页帧。目  Buddy算法以页帧作为基本分配单元,这适合于大 块存储器的请求,对于几十或几百字节的小存储区请 求,Linux 2.6采用了Slab分配器,它把存储区看作对 一 [冒 厂L 象,把对象分组放进缓存区中,缓存区按几何级数大小 进行分级,如32、64、128、256、…字节大小,一种对象的 所有实例都存在同一个缓存区中,每一缓存区有若干个 Slab对象。例如内核要创建一个新进程,它就要为进程 兰 需一描述符、打开文件对象等分配存储区,这就可以用Slab 分配器来实现,内核调用函数kmem_cache—alloc0来分 配一个Slab对象。 3用户模式下的线性地址空间 用户模式下进程的线性地址空间大小是3GB,可是 当用户模式进程请求内存时,例如通过调用malloc0函 数来扩展进程的动态区(堆)时,它并不获得请求大小的 物理内存,而仅仅获得对一个新的线性地址区间 (memory region)的使用权,使这一线性地址区间成为进 程地址空间的一部分,仅当进程访问到还未分配物理页 帧的线性地址时,才由页故障异常处理程序分配物理页 帧。Linux使用Struct vm_area struct数据结构来描述线 性地址区间,这个结构中比较重要的字段有:vm_start字 段包含区间的第~个线性地址,vm end字段包含区间 之外的第一个线性地址,vm—next字段指向进程的下一 个线性地址区间等。 一个进程的地址空间由进程描述符(struct task—struet)中类型为struct mm—struct的内存描述符mm 来描述。对于在用户模式下的进程,它所拥有的所有线 性地址区间通过一个简单的链表链接在一起,出现在链 表中的线性地址区问按内存地址的升序进行排列,每两 个线性地址区间可以用未使用的地址隔开,进程的内存 描述符中的mmap字段指向链表的第一个线性地址区 间描述符,图1显示了进程描述符、内存描述符、线性地 址区间链表和进程地址空间之间的关系。 线性地址l 间 vm area struet 、HTLst art vm end 红黑树 图1与进程地址空间相关的描述符 内核要执行的一个经常的操作就是搜寻、插入和删 除包括一个特定线性地址的区间,虽然大多数Linux进 程使用非常少的线性地址区间,但是就像面向对象的数 据库这样的某些应用具有成百甚至成千的区间,这时简 单链表管理就变得非常低效率,Linux 2.6也使用了称之 为红黑树的数据结构来存储线性地址区间描述符,它可 以大大节省区间管理的时间,这个红黑树的头由内存描 述符中的mm_rb字段来索引。 个新的区间紧邻一个已存在区间被分配时,如果它们的 访问权限匹配,内核将合并区间,如果一个线性地址范  由一个进程所拥有的线性地址区间决不重叠,当一 围从进程地址空问被移出,内核要重新确定线性地址区 间的大小,有时要使一个区间被分成两个更小的区间。 4结束语 在调用ForkO系统调用创建一个新进程时,内核调 用copy_ram0函数建立新进程的内存描述符、线性地址 区间和所有的页表,它们的内容大多是复制父进程的内 容,从而创建出子进程的新的线性地址空间。 Linux 2.6支持多线程应用,它把线程同一个轻量级 进程相联系,轻量级进程并不创建新的线性地址空间, 它共享父进程的线性地址空间、文件描述符表、信号处 理方式等,Linux也支持一种内核线程,内核线程仅在内 核模式中运行,没有用户模式上下文,也就没有用户模 式线性地址空间。 参考文献: [1]Daniel P.Bovet&Marco Cesati.Understanding the Linux Kemel[M]3rd ed.南京:东南大学出版社。2006. [2】倪继利.Linux内核分析及编程【M】.北京:电子工业出版社, 2005. (下转第52页) 52 四川理工学院学报(自然科学版) 2008年12月 对序列比对算法的敏感性和运算速度提出了更高的要 求。可以预示,知识表达系统的方法将不仅是序列比对, 而将是整个生物信息学领域的重要研究方法之一。 参考文献: 【1]Mount D W.Bioinformatics:sequence and genome analysis [M].USA:Cold Spring Harbor Laboratory Press,2002. 【2】Smith T F,Waterman M S.Identiifcation of common molecu— lar sequences[J].J.Mo1.Bio1.,1981,147:195—197. 【3】Lipman D J,Pearson W R.Rapid and sensitive protein simi・ larity searches[J].Science,1985,227:1435-1441. [4】Ahschul S F,Gish W Miller W,Myers E W,et a1.Basic local sensitivity of progressive multiple sequence alignment through sequence weighting position2speciifc gap penalties and weight matirx choice『J1.Nucleic Acids Res.,1994, 22:4673—4680. 【7】 Sankoff D,Kruskal J.Time Warps,Stirng Edits,and M acromo lecules:The Theory and Practice of Sequence Comparison[M】.ReadingMA:A ddisonWesley,1983. 【8】Motredama B.DIALIGN2:improvement of the segement-to— segment approach to multiple sequence alinment【gJ】. Bioinformatics,1999,15(3):21 l一218. 【9】Sankof D.M inimalmutation trees of sequence[J1.S IAM Journal on Applied Math.,1975,28:25-42. alignment search tool[J].J Mol Bio1..1990,215:403--410. 【5】 Wangl J,Iang T.On the complexity of multiple sequence 『lo]Jiawei Han,Micheline Kamber著范明,孟晓锋,译.数据挖 掘概念与技术【M】.北京:机械工业出版社,2001. alignment【J].J.Comput.Bio1.,1 994,1(4):337—348. [6]Thomposon J D,Gibson T J,Higgins D,et a1.improving the 【1 1】史忠植.知识发现【M】.北京:清华大学出版社,2002. 【l2】曾黄麟.智能计算【M】.重庆:重庆大学出版社,2004. Sequence Alignment Research Based Off Knowledge RepresentatiOn System WANG Cai-yun ,CAI Le—cai (1.Electronics and Information Engineering Dept.,Sichuan University of Science&Engineering,Zigong 643000,China; 2.Dept.of Computer Science,Sichuan University of Science&Engineering,Zigong 643000,China) Abstract:Sequence alignment is a basic information processing method in bioinformatics and useful for discovering functional,structural,and evolutionary information in biological sequences.Typical pair-wise sequence alignment algorithms and multiple sequence alignment algorithms are described and evaluated in this paper.After analyzing difficulties in sequence alignment,a new idea—sequence alignment research base on knowledge representation system is discussed.This paper describes the definition and data processing of knowledge representation system in this sequence alignment research. Key words:bioinformatics;sequence alinment;knowledge representatigon system ●◆◆ ●◆●◆◆● ●◆● ●●●,・● ◆●| ◆ ●一◆ ● ●lI  ◆lI一◆ ・●◆ ● ● f上接第41页) Research of Linux Process Address Space JIANG Bo,LI Fang-jun,DENG Yu・shu,ZHA0 Yang-mei (CAEP Institute of Technology,Mianyang 621900,China) Abstract:Studying the virtual address space mana gement of Linux process,including page table architecture;the strategy of memory allocation;the structure of memory region and the mapping of linear address to physical address. Key words:process;linear address;user mode;kernel mode 

因篇幅问题不能全部显示,请点此查看更多更全内容