地址的映射机制,主要完成主存.辅存和虚存之间的关联 。包括磁盘文件到虚存的映射和虚存与内存的映射关系。为了虚拟存储和进程调度相一致。linux 采用可一系列的数据结构,和一个硬件缓存(tlb)来实现地址映射机制。 mm_strut 用来描述进程的缓存。 struct mm_struct { struct vm_area_struct * mmap; /* list of vmas */ struct vm_area_struct * mmap_avl; /* tree of vmas */ struct vm_area_struct * mmap_cache; /* last ...
by Echo CHEN - Linux文档专区 - 2007-04-17 09:22:13 阅读(778) 回复(0)
目前刚开始看LINUX内存管理部分的源代码,有个疑问请各位释疑.我看代码中通过宏PGDIR_SHIFT定义了PGD下标位段的起始位置,为22.请问这个位置是和MMU的硬件相关吗?是否I386系列的MMU就是将第22位起的位段作为PGD下标的?我现在对MMU进行地址映射的过程还很模糊,谁有相关资料帮忙提供一下,感谢各位.
目前刚开始看LINUX内存管理部分的源代码,有个疑问请各位释疑.我看代码中通过宏PGDIR_SHIFT定义了PGD下标位段的起始位置,为22.请问这个位置是和MMU的硬件相关吗?是否I386系列的MMU就是将第22位起的位段作为PGD下标的?我现在对MMU进行地址映射的过程还很模糊,谁有相关资料帮忙提供一下,感谢各位.
高端内存是指物理地址大于 896M 的内存。 对于这样的内存,无法在“内核直接映射空间”进行映射。 为什么? 因为“内核直接映射空间”最多只能从 3G 到 4G,只能直接映射 1G 物理内存,对于大于 1G 的物理内存,无能为力。 实际上,“内核直接映射空间”也达不到 1G, 还得留点线性空间给“内核动态映射空间” 呢。 因此,Linux 规定“内核直接映射空间” 最多映射 896M 物理内存。 对 于高端内存,可以通过 alloc_page() 或者其它...
一:引子 我们在前面分析过,在linux内存管理中,内核使用3G—>4G的地址空间,总共1G的大小。而且有一部份用来做非连续空间的物理映射(vmalloc).除掉这部份空间之外,只留下896M大小供内核映射到物理地址。通常,我们把物理地址超过896M的区域称为高端内存。内核怎样去管理高端内存呢?今天就来分析这个问题。 内核有三种方式管理高端内存。第一种是非连续映射。这我们在前面的vmalloc中已经分析过了,在vmalloc中请求页面的时候...
内存映射和DMA——Linux 的内存管理 地址类型: 用户虚拟地址:这是用户空间程序能看到的常规地址。 物理地址: 该地址在处理器和系统内存之间使用 总线地址:该地址在外设总线和内存之间使用 内核逻辑地址:组 成了内核的常规地址空间。该地至映射了部分内存,并经常被视为物理地址,在大多数体系结构中,逻辑地址与相关的物理地址的不同,仅仅在于它们之间相差一个 固定的偏移量。逻辑地址通常保存在UNSIGNED LONG ,和void*这样...
Linux内存管理之高端内存映射(转贴) 来源: ChinaUnix博客 日期: 2008.09.17 18:28 (共有0条评论) 我要评论 ------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:引子 我们在前面分析过,在linux内存管理中,内核使用3G—>4G的地址空间,总共1G的大小。而且有一部份用来做非连续空间的物理映射(vmalloc)....
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:引子 我们在前面分析过,在linux内存管理中,内核使用3G—>4G的地址空间,总共1G的大小。而且有一部份用来做非连续空间的物理映射(vmalloc).除掉这部份空间之外,只留下896M大小供内核映射到物理地址。通常,我们把物理地址超过896M的区域称为高端内存。内核...
高端内存是指物理地址大于 896M 的内存。 对于这样的内存,无法在“内核直接映射空间”进行映射。 为什么? 因为“内核直接映射空间”最多只能从 3G 到 4G,只能直接映射 1G 物理内存,对于大于 1G 的物理内存,无能为力。 实际上,“内核直接映射空间”也达不到 1G, 还得留点线性空间给“内核动态映射空间” 呢。 因此,Linux 规定“内核直接映射空间” 最多映射 896M 物理内存。 对于高端内存,可以通过 alloc_page() 或者其它函...
分析完linux内存管理的基本概念与实现之后,就可以接着分析用户空间与内核空间的交互操作了。Brk系统调用属于那种常用但是“可见度”不高的操作,常用于用户空间堆的管理(请参阅本站的中的malloc机制分析>>一文)。 Brk在用户空间的接口为int brk(void *end_data_segment)。它通过系统调用进入内核空间。在内核的相应接口为sys_brk(). 闲言少叙,言归正传。转入相应的代码。同以往一样,linux内核代码版本为2.6.21 //sys_brk:用...