80386内存分页机制
来源:互联网 发布:协同过滤推荐算法java 编辑:程序博客网 时间:2024/04/30 08:48
80386内存分页机制
笔者为在校大学生,水平有限,走过路过的大神勿喷!
80386内存分页机制是实现windows多任务的基础。
首先来了解一下什么是线性地址,什么是物理地址。
所谓线性地址,笔者认为就是CPU能够看到的地址,并不是实际上物理内存的地址空间。而物理地址很容易理解,就是
我们内存中的地址空间,实实在在的东西。
线性地址对于每个程序来说是一样的,都是4GB的大小,但是真正能被应用程序用到的大概就2GB。那我们知道cpu能看到的只是线性地址,而线性地址必须得映射到物理空间上才可以被使用,没错,这里用映射,映射都不陌生,高数里面的函数就是个映射关系。f:线性地址→物理地址。怎么映射,这就是我们要讨论的内存分页机制
了。
内存分页机制——将线性地址转换成物理地址
我们首先假设线性地址为zzzzzzzzH,用32位来表示,内存分页将4GB的物理地址空间分成1G个页面,每个页面大小为4K,也就是说,如果找到是那个页的,然后在页内只用12为来就能够索引到这个页的所有内容,windows就是这样做的,windows直接将线性地址的低12位作为物理地址的低12位来处理,至于高的20位,当然是用来索引这个页了,打个比方说,将物理内存比作一本书,这本书有1GB页,而这本书的每一页都有4K的内容,我们怎么在这4K的内容里面找到特定的内容,首先就是通过页目录找到这本页,因为这本书就有1GB页,我们必须得用20位来才能表示完所有的页码。这里我们虽然说是是页码,但实际上是页的一些属性,我们根据页的这些属性去找页。内存分页机制就是这样来实现由线性地址转换成物理地址的。这里我们还得注意一点,有时候我们通过线性地址无法找到对应映射关系的物理地址,这时候就会出现异常,这时候,操作系统是这样子给我们解决的,首先跳转到异常处理的代码上去执行,如果数据在虚拟内存中,那我们就尽量把虚拟内存中的数据调入内存,再重新映射。跳转回引发异常的指令,这样子指令就可以正常执行下去了。
为了更好的说明,笔者引用罗云彬老师的《windows环境下的32位汇编语言程序设计》一书的两个图。借花献佛,呵呵
由于笔者表达能力有限,技术有限,前辈们多多指教
- 80386内存分页机制
- 80386内存分页机制
- 80386的内存分页机制
- 80386的内存分页机制
- 内存分页机制
- 理解内存分页机制
- linux 内存分页机制
- linux 内存分页机制
- 【内存管理】分页机制
- 内存分页机制总结
- Windows内存分页机制
- 内存分页机制的理解
- 【操作系统知识】内存分页机制
- 详解Windows内存分页机制
- 详解Windows内存分页机制
- 详解Windows内存分页机制
- 内存分段与分页机制
- linux内存管理-分页机制
- Block知识整理
- 在Android模拟器中,安装、卸载apk
- 大小字节序
- Google Java编程风格指南
- 题目1137:浮点数加法 (错在哪?)
- 80386内存分页机制
- 二叉树的遍历(c语言非递归算法)
- ubuntu12.04-32bit安装R、RHive
- 输出职员的相关信息
- 十大C++经典教程
- uva 10878 Decode the tape
- 求最低价格
- 递归的应用(二)
- grub4dos 教程