从操作系统设计角度看分页机制

来源:互联网 发布:淘宝标题优化技巧 编辑:程序博客网 时间:2024/06/08 06:02

锲子

之前一直对分页机制迷迷糊糊的,终于还是决定花点时间写点东西记录一下,重新梳理一遍。

什么是分页机制?

由 intel x86 CPU 提供的一种内存管理手段。

为什么需要分页机制?

在平坦的保护模式下,各个程序加载运行到物理内存,难免会造成互相的地址冲突或者空间不够等问题,分页机制就是为了解决这一问题而生。

虚拟地址、线性地址、物理地址

物理地址是指的真实存在于物理内存上的地址,数据读写都会体现在真实内存上面。
线性地址是指段机制下,段基址加段偏移所构成的地址,在平坦模式下,由于段基址为0,段限长为最大可访问,故平坦模式下,线性地址等价于物理地址
虚拟地址,为了使多个软件可以使用同一个地址而存在,此时各软件使用的相同的地址却能访问到不同的内容,这个地址就是虚拟地址。

如何实现虚拟地址

把物理地址按照一个粒度放到一个数组中表示,然后虚拟地址在访问内存的时候去数组中查询即可

例如, 0x00400000 这个地址 在进程A 中时,其对应到数组 A 中找到 0x00400000 这一项(例如把 0x00400000作为下标),然后根据这一项的值对应的物理地址加以访问,由于 进程 A 和 进程B 对应了不同的数组,故 进程A 可能查到的物理地址是 0x123 而 进程B 查到的可能是 0x234

再说分页机制开启

上面在虚拟地址中提到了 数组,,实际上这个数组在分页机制里 称为页表 页表项,页目录,页目录项,页目录指针表,页目录指针等等。。。。只是在查询的过程中 中转了几次,为什么需要这么多级,是为了节约空间

开启办法也简单
设置一下 Cr3 cr0.pg 就行了,需要注意的是,当 cr0.pg 被设置之后,系统就进入分页模式了,此时 cs:ip 会按照分页模式方式去执行,如果不加处理,就会造成接下来执行的指令不是预期的指令。

这里仅仅是做原理性的说明,因为是个人理解,故不具备代表性,且可能有错误。

先写这么多吧,想到再加

0 0
原创粉丝点击