Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345632
  • 博文数量: 167
  • 博客积分: 2867
  • 博客等级: 少校
  • 技术积分: 1306
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-12 00:08
文章分类

全部博文(167)

文章存档

2017年(10)

2016年(5)

2015年(9)

2014年(10)

2013年(5)

2012年(17)

2011年(110)

2010年(1)

我的朋友

分类: LINUX

2010-05-12 00:10:11

零.这些是记录看看能坚持多久。
还是从内存管理开始吧,虽说看了一些文章,可是稍微过一段时间,就全忘掉了。这次以《内核源代码情景分析》为主要参考,其他英文资料为辅助。平台以x86_32为基础,内核是linux-2.6.24

一.自己容易搞混的地方
   这几天把mm前半部分仔细的读了一遍,总结了下,有几个概念需要理清一下。
1.底层的内存管理概念应该是对应两套定义的,一套是硬件给出的,一套是软件给出的,当然是先有硬件,后有软件,或者说软件是在迁就硬件定义的基础上来提升自己性能的.现在接触到的有:
  x86的段式管理概念
  x86的


1.数据结构
Linux 管理内存时,为了兼容各个平台,引入三个概念,在不同的平台上具体实现时,可能会有所不同,比如在X86上,只是对应两级页表,忽略掉了PMD 
PGD  页面目录
PMD  中间目录
PT   页面表
PTE   page table entry,是PT的表项的内容。

入口文件
 
./include/asm-x86/pgtable-2level-defs.h
./include/asm-x86/pgtable-3level-defs.h
分别定义了二级映射和三级映射
给出 pgtable-2level-defs.h
 #ifndef _I386_PGTABLE_2LEVEL_DEFS_H
  2 #define _I386_PGTABLE_2LEVEL_DEFS_H
  3
  4 #define SHARED_KERNEL_PMD       0
  5
  6 /*
  7  * traditional i386 two-level paging structure:
  8  */
  9
 10 #define PGDIR_SHIFT     22
 11 #define PTRS_PER_PGD    1024
 12
 13 /*
 14  * the i386 is two-level, so we don't really have any
 15  * PMD directory physically.
 16  */
 17
 18 #define PTRS_PER_PTE    1024
 19
 20 #endif /* _I386_PGTABLE_2LEVEL_DEFS_H */

硬件MMU的组成
    MMU包含两个部分, 一个是分段单元,一个是分页单元,其中,分段单元将一个逻辑地址转换为线性地址,而分页单元把线性地址转换为物理地址,它们的关系转换过程如下图所示:
    逻辑地址--->分段单元--->线性地址--->分页单元--->物理地址
而对于linux来说,分段单元的处理只是一个伪操作,为了迁就cpu的硬件,因此,逻辑地址等同于线性地址。
阅读(802) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:今天被问到的几个问题

给主人留下些什么吧!~~