内核页表中是否存前896M的物理内存和虚拟地址之间的映射关系
2014-11-06 18:23
260 查看
我们知道物理内存的前896M和内核空间的虚拟地址存在3G的偏移量,他们之间的换算可以直接通过va()和pa()进行。
那么内核空间的物理地址和虚拟地址之间的映射关系是否也保存在内核主页表中?
我自己的理解是:操作系统中任何物理地址和虚拟地址之间的映射关系都必须保存在页表中,因此,他们之间的映射关系同样存在于内核主页表中,只不过他们之间的换算可以不通过MMU进行每级的转换,而直接通过va或pa。
Linux用虚拟地址,所以CPU 发出的地址(都是虚拟地址)必须经过MMU 转换到实际的物理地址, 所有的地址都需要经过MMU转换,只不过你说的896M(取决于实际物理内存大小和vmalloc
区域的定义)是直接映射区域, 他们的映射关系(物理地址和虚拟地址之间有一个常量偏移PHYS_OFFSET - PAGE_OFFSET) 是启动的时候建立的, 在这些物理页上分配的内存,齐虚拟地址不需要重建立, 由于这段区域的物理地址和虚拟地址偏移是常量 所以可以用va 和pa 这些宏去计算。
但是MMU打开后,从CPU发出去的任何地址都是虚拟地址,必须能够转换到物理地址,否则就会出现Abort
那么内核空间的物理地址和虚拟地址之间的映射关系是否也保存在内核主页表中?
我自己的理解是:操作系统中任何物理地址和虚拟地址之间的映射关系都必须保存在页表中,因此,他们之间的映射关系同样存在于内核主页表中,只不过他们之间的换算可以不通过MMU进行每级的转换,而直接通过va或pa。
Linux用虚拟地址,所以CPU 发出的地址(都是虚拟地址)必须经过MMU 转换到实际的物理地址, 所有的地址都需要经过MMU转换,只不过你说的896M(取决于实际物理内存大小和vmalloc
区域的定义)是直接映射区域, 他们的映射关系(物理地址和虚拟地址之间有一个常量偏移PHYS_OFFSET - PAGE_OFFSET) 是启动的时候建立的, 在这些物理页上分配的内存,齐虚拟地址不需要重建立, 由于这段区域的物理地址和虚拟地址偏移是常量 所以可以用va 和pa 这些宏去计算。
但是MMU打开后,从CPU发出去的任何地址都是虚拟地址,必须能够转换到物理地址,否则就会出现Abort
相关文章推荐
- 内核物理地址和虚拟地址之间的静态映射过程
- 内核虚拟地址与物理地址的关系
- mmap方法实现物理内存到用户虚拟地址的映射
- [置顶] Linux 虚拟地址与物理地址的映射关系分析【转】
- mmap方法实现物理内存到用户虚拟地址的映射
- 虚拟地址、线性地址和物理地址之间的关系
- 虚拟地址、线性地址和物理地址之间的关系
- Linux 虚拟地址与物理地址的映射关系分析
- 进程虚拟地址空间与物理内存关系
- 进程虚拟地址空间中的虚拟内存区域(vma)---可执行程序与虚拟地址空间的映射关系
- 从MDL(把应用层的地址空间映射到系统内核空间)得到系统虚拟空间地址
- Linux 虚拟地址与物理地址的映射关系分析【转】
- 虚拟地址_物理地址_逻辑地址_页表_内存映射
- 虚拟地址_物理地址_逻辑地址_页表_内存映射
- Linux 虚拟地址与物理地址的映射关系分析
- 逻辑地址、线性地址、物理地址和虚拟地址之间的关系
- MMU与逻辑地址,物理地址和虚拟地址之间的关系
- linux 进程的虚拟地址和内核中的虚拟地址有什么关系
- Linux 虚拟地址与物理地址的映射关系分析