3.1用户空间的映射:
1. 用户空间的虚拟地址vaddr通过MMU(pgd,pmd,pte)找到对应的页表项x(即为物理地址)
2. 页表项x的高20位是物理也好,物理页号index = x >> PAGE_SHIFT, 同理,index后面补上12个0就是物理页表的首地址。
3. 通过物理页号,我们可以再内核中找到该物理页的描述的指针mem_map[index],当然这个指针是虚拟地址,page结构见上文。
3.2内核空间虚拟地址的映射:
内核空间与物理地址之间有直接的映射关系,而不需要向用户空...
分类:
系统相关 时间:
2014-12-01 01:15:34
阅读次数:
332
MMU表示内存管理单元,负责虚拟内存映射到物理内存。 虚拟地址映射到物理地址的关键是构建映射表。MMU就是利用映射表格将虚拟地址转换成物理地址。虚拟地址在32系统中为4G,地址占4字节,如果映射表格中虚拟地址和物理地址是一一对应的关系,一条记录就占8字节,那么映射表就要32G.这明显是不...
分类:
其他好文 时间:
2014-11-25 23:08:52
阅读次数:
280
create_page_table完成了3种地址映射的页表空间填写:
(1)turn_mmu_on所在1M空间的平映射
(2)kernel image的线性映射
(2)bootparams所在1M空间的线性映射...
分类:
系统相关 时间:
2014-11-24 19:21:27
阅读次数:
441
20年前,对操作系统来说,虚拟内存是个高大上的玩意,它不仅仅是具备内存保护的功能,也给应用程序的独立开发带来了方便 ,其实它的底层逻辑是一个叫MMU的东西完成了一些重要的工作……...
分类:
其他好文 时间:
2014-11-24 10:06:56
阅读次数:
172
编写按键驱动的过程和编写LED灯的驱动类似。区别在于按键是在底板上的。要从底板的电路图开始看。 使用key为关键字查找电路图: 可以得知的信息:按键松开时候XEINT26为高电平。按下时候为底电平。所以要判断按键是否被按下,就要检测XEINT26的状态。 使用XEINT26为关键字,在核心...
分类:
其他好文 时间:
2014-11-21 21:48:14
阅读次数:
341
如果想运行和链接地址不一致,我能想到的办法,只能是汇编中尽量不去涉及一些绝对地址,使用PIC位置无关代码。
联想之前分析的uboot relocation原理,uboot在relocation之后,kernel在开启MMU之前,都实现了链接地址和运行地址不一致,看看它们用的什么方法?
(1)uboot在relocation时修改rel.dyn段(存储所有变量地址),实现将所有变量地址重定位到新运行地址
(2)kernel在开启MMU之前,计算运行地址(物理地址)与链接地址(虚拟地址)的偏移,对变量寻址时都进...
分类:
系统相关 时间:
2014-11-21 10:43:07
阅读次数:
367
/******************************************************************************************************************参考:说明:在学习裸机中断时重新遇到这个几个词,这次就要搞明白了。**...
分类:
其他好文 时间:
2014-11-21 10:19:24
阅读次数:
200
句柄的理解:(下面文章认真看!有关于MMU的知识)
简单汇总几点:
1、句柄就类似文件操作中的文件流,通过句柄可以对数据库进行操作;
2、当程序运行后,各个对象驻留在内存中,如果获得这个内存的首地址,我们也不一定能正确访问它的值;
为什么呢?
由于linux/windows都是以虚拟内存为基础的,各个对象地址始终再发生变化,因此我...
分类:
其他好文 时间:
2014-11-07 20:52:12
阅读次数:
197
#define PDE_FLG_RW (1<<1)
#define PDE_FLG_US (1<<2)
#define PDE_FLG_RWT (1<<3)
#define PDE_FLG_PCD (1<<4)
/*
* initialize to be zero for page directory and page table
*/
static __SECTION_ZERO_INIT("P...
分类:
其他好文 时间:
2014-10-27 17:37:25
阅读次数:
155