从操作系统设计角度看分页机制
来源:互联网 发布:淘宝标题优化技巧 编辑:程序博客网 时间: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 会按照分页模式方式去执行,如果不加处理,就会造成接下来执行的指令不是预期的指令。
这里仅仅是做原理性的说明,因为是个人理解,故不具备代表性,且可能有错误。
先写这么多吧,想到再加
- 从操作系统设计角度看分页机制
- 从操作系统的角度看程序
- 从操作系统角度看可执行文件的装载
- 【Android】从源码角度看Handler机制
- 从设计角度上看 同步、异步
- 从设计模式角度看ArcGIS Engine
- 从操作系统角度看可执行文件的装载和执行
- 从操作系统的角度看进程的建立过程
- 从进程和线程的角度看操作系统
- 重新从源码的角度看Handler消息通信机制
- 从地址角度看
- 从游戏系统角度看游戏活动设计
- 从nginx角度看服务器多进程模型设计(一)
- 从nginx角度看服务器多进程模型设计(二)
- 从节能角度看数据中心软硬件设计(一)
- 从节能角度看数据中心软硬件设计(二)
- 设计师:从客户角度看web网页设计
- 从实体和关系角度看 PowerDesigner 设计数据库模型
- 关于HTTP和HTTPS的权限开关
- Spring 的 BeanPostProcessor接口实现
- ActivityGroup中onBackPressed无效
- Python Tornado Echarts 之坑一
- js实现进度条(不带百分比)
- 从操作系统设计角度看分页机制
- git日志导出为csv格式文件、excel格式文件
- Java 内存模型及GC原理算法
- Oracle数据库限定特定用户 特定IP 登录
- RxJava 1.2.1主要API的使用Demo
- angular前后端交互
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
- Docker学习总结(18)——阿里超大规模Docker化之路
- android studio 引入arr包的方法