网站大量收购闲置独家精品文档,联系QQ:2885784924

深入理解Linux内存映射机制.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入理解Linux内存映射机制 创建时间:2008-08-31 文章属性:原创 文章提交:wzt (wzt_at_) 深入理解Linux内存映射机制 Author: wzt EMail: wzt@ Site: /wzt85 Date: 2008-6-13 一. 绪 论 二. X86的硬件寻址方法 三. 内核对页表的设置 四. 实例分析映射机制 一. 绪 论 我们经常在程序的反汇编代码中看到一些类似0样的地址,操作系统中称为线性地址,或虚拟地址。虚拟地址有什么用?虚拟地址 又是如何转换为物理内存地址的呢?本章将对此作一个简要阐述。 1.1??Linux内存寻址概述 现代意义上的操作系统都处于32位保护模式下。每个进程一般都能寻址4G的物理空间。但是我们的物理内存一般都是几百M,进程怎么能获得4G 的物理空间呢?这就是使用了虚拟地址的好处,通常我们使用一种叫做虚拟内存的技术来实现,因为可以使用硬盘中的一部分来当作内存使用 。例外一点现在操作系统都划分为系统空间和用户空间,使用虚拟地址可以很好的保护内核空间被用户空间破坏。 对于虚拟地址如何转为物理地址,这个转换过程有操作系统和CPU共同完成. 操作系统为CPU设置好页表。CPU通过MMU单元进行地址转换。 1.2??浏览内核代码的工具 现在的内核都很大, 因此我们需要某种工具来阅读庞大的源代码体系,现在的内核开发工具都选用vim+ctag+cscope浏览内核代码,网上已有 现成的makefile文件用来生成ctags/cscope/etags。 一、用法: ????找一个空目录,把附件Makefile拷贝进去。然后在该目录中选择性地运行如下make命令: $ make 将处理/usr/src/linux下的源文件,在当前目录生成ctags, cscope ?? 注:SRCDIR用来指定内核源代码目录,如果没有指定,则缺省为/usr/src/linux/ 1) 只创建ctags $ make SRCDIR=/usr/src/linux-2.6.12/ tags 2) 只创建cscope $ make SRCDIR=/usr/src/linux-2.6.12/ cscope 3) 创建ctags和cscope $ make SRCDIR=/usr/src/linux-2.6.12/ 4) 只创建etags $ 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的硬件寻址方法 请参考Intel x86手册^_^ 三. 内核对页表的设置 CPU做出映射的前提是操作系统要为其准备好内核页表,而对于页表的设置,内核在系统启动的初期和系统初始化完成后都分别进行了设置。 3.1 与内存映射相关的几个宏 这几个宏把无符号整数转换成对应的类型 ????#define __pte(x)???????

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档