快速业务通道

深入理解Linux内存映射机制

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-09
一. 绪 论

  我们经常在程序的反汇编代码中看到一些类似0x32118965这样的地址,操作系统CPU线性地址,或虚拟地址.虚拟地址有什么用?虚拟地址又是如何转换为物理内存地址的呢?本章将对此作一个简要阐述.

  1.1 Linux内存寻址概述

  现代意义上的操作系统都处于32位保护模式下.每个进程一般都能寻址4G的物理空间.但是我们的物理内存一般都是几百M,进程怎么能获得4G的物理空间呢?这就是使用了虚拟地址的好处,通常我们使用一种叫做虚拟内存的技术来实现,可以使用硬盘中的一部分来当作内存使用.例外一点现在操作系统都划分为系统空间和用户空间,使用虚拟地址可以很好的保护内核空间被用户空间破坏.

  对于虚拟地址如何转为物理地址,这个转换过程有操作系统和CPU共同完成. 操作系统为CPU设置好页表.CPU通过MMU单元进行地址转换.

  1.2 浏览内核代码的工具

  现在的内核都很大, 因此我们需要某种工具来阅读庞大的源代码体系,现在的内核开发工具都选用vim ctag cscope浏览内核代码,网上已有现成的makefile文件用来生成ctags/cscope/etags.

  一、用法:

  找一个空目录,把附件Makefile拷贝进去.然后在该目录中选择性地运行如下make命令:

  

$Content$nbsp;make
  将处理/usr/src/linux下的源文件,在当前目录生成ctags, cscope

  注:SRCDIR用来指定内核源代码目录,如果没有指定,则缺省为/usr/src/linux/

  1) 只创建ctags  

$Content$nbsp;make SRCDIR=/usr/src/linux-2.6.12/ tags

  2) 只创建cscope  

$Content$nbsp;make SRCDIR=/usr/src/linux-2.6.12/ cscope

  3) 创建ctags和cscope  

$Content$nbsp;make SRCDIR=/usr/src/linux-2.6.12/

  4) 只创建etags 

$Content$nbsp;make SRCDIR=/usr/src/linux-2.6.12/ TAGS

  二、处理时包括的内核源文件:

  1) 不包括drivers,sound目录

  2) 不包括无关的体系结构目录

  3) fs目录只包括顶层目录和ext2,proc目录

  三、最简单的ctags命令

  1) 进入

  进入vim后,用:tag func_name跳到函数func_name

  2) 看函数(identifier)

  想进入光标所在的函数,用CTRL ]

  3) 回退

  回退用 CTRL T

  1.3 内核版本的选取

  本次论文分析, 我选取的是linux-2.6.10版本的内核.最新的内核代码为2.6.25.但是现在主流的服务器都使用的是RedHat AS4的机器,它使用2.6.9的内核.我选取2.6.10是它很接近2.6.9,现在红帽企业Linux 4以Linux2.6.9内核为基础,是最稳定、最强大的商业产品.在2004年期间,Fedora等开源项目为Linux 2.6内核技术的更加成熟提供了一个环境,这红帽企业 Linux v.4内核可以提供比以前版本更多更好的功能和算法,具体包括:

  • 通用的逻辑CPU调度程序:处理多内核和超线程CPU.

  • 基于对象的逆向映射虚拟内存:提高了内存受限系统的性能.

  • 读复制更新:针对操作系统数据结构的SMP算法优化.

  • 多I/O调度程序:可根据应用环境进行选择.

  • 增强的SMP和NUMA支持:提高了大型服务器的性能和可扩展性.

  • 网络中断缓和(NAPI):提高了大流量网络的性能.

  Linux 2.6 内核使用了许多技术来改进对大量内存的使用, Linux 比以往任何时候都更适用于企业.包括反向映射(reverse mapping)、使用更大的内存页、页表条目存储在高端内存中,以及更稳定的管理器.因此,我选取linux-2.6.10内核版本作为分析对象.

二. X86的硬件寻址方法

  三. 内核对页表的设置

  CPU做出映射的前提是操作系统要为其准备好内核页表,而对于页表的设置,内核在系统启动的初期和系统初始化完成后

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号