零.这些是记录看看能坚持多久。
还是从内存管理开始吧,虽说看了一些文章,可是稍微过一段时间,就全忘掉了。这次以《内核源代码情景分析》为主要参考,其他英文资料为辅助。平台以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的硬件,因此,逻辑地址等同于线性地址。
阅读(834) | 评论(0) | 转发(0) |