快捷搜索:   nginx

深入理解Linux内存映射机制

        一. 绪 论

  我们经常在程序的反汇编代码中看到一些类似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

 [2] [3] [4] 下一页

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论