关于windows保护模式的一些个人见解
2015-09-03 08:54
351 查看
1.寻址方式:通过段寄存器,首先需要知道的是段寄存器是一个索引值,ldtr也是。判断是在gdt中还是在ldt中,若是在gdt中,则直接根据gdtr中的一部分值先确定gdt的基址,然后根据索引就可以得到段的属性所在的位置;如果是在ldt中,则先要确定ldt所在的位置,因为ldtr其实也是一个索引值,所以根据gdt基址就可以找到ldt所在地址,然后再根据段寄存器就可以找到段相关属性所在的位置。
2.虚拟内存:因为当初实际所能拥有的物理内存并不能达到寻址方式所能实现的4GB,所以需要有虚拟内存。
然后就可以想到内存分页机制:原因就是防止TSR程序导致内存碎片化,然后实际情况下就可以随意映射。所以一般程序的线性地址并不是实际的物理地址。
虚拟内存在这里的作用就是在页面访问的时候 ,如果要访问的数据并没有映射到物理内存里面,那么就会从虚拟内存寻找,如果在虚拟内存,那么就会在RAM中寻找空闲的内存
如果没有就找到无效的数据,再找不到就把数据存到虚拟内存,然后再把要访问的数据映射到物理内存。
另外页目录要联系到cr3寄存器,CR3含有存放页目录表页面的物理地址
cr0寄存器决定了是否使用分页机制,也就决定了得到的地址是不是真正的物理地址。
另外附上罗云彬老师书上的虚拟内存实现图
![](https://img-blog.csdn.net/20150903094411949)
2.虚拟内存:因为当初实际所能拥有的物理内存并不能达到寻址方式所能实现的4GB,所以需要有虚拟内存。
然后就可以想到内存分页机制:原因就是防止TSR程序导致内存碎片化,然后实际情况下就可以随意映射。所以一般程序的线性地址并不是实际的物理地址。
虚拟内存在这里的作用就是在页面访问的时候 ,如果要访问的数据并没有映射到物理内存里面,那么就会从虚拟内存寻找,如果在虚拟内存,那么就会在RAM中寻找空闲的内存
如果没有就找到无效的数据,再找不到就把数据存到虚拟内存,然后再把要访问的数据映射到物理内存。
另外页目录要联系到cr3寄存器,CR3含有存放页目录表页面的物理地址
cr0寄存器决定了是否使用分页机制,也就决定了得到的地址是不是真正的物理地址。
另外附上罗云彬老师书上的虚拟内存实现图
相关文章推荐
- Lua的内存管理浅析
- 深入探讨PHP中的内存管理问题
- linux 内存管理机制详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- javascript内存管理详细解析
- JavaScript内存管理介绍
- Cocos2d-x的内存管理总结
- 模拟实现C语言中的内存管理
- javascript错误的认识不用关心内存管理
- Python深入学习之内存管理
- 简单说说STL的内存管理
- InnoDB存储引擎的内存管理机制
- jemalloc优化MySQL、Nginx内存管理
- 【转】JVM内存管理:深入垃圾收集器与内存分配策略
- JavaScript内存管理介绍
- C/C++内存管理详解
- Oracle 自动管理 ASMM
- Windows CE内存管理
- Java内存管理
- iOS内存管理编程指南