zoukankan      html  css  js  c++  java
  • 理解X86的内存管理

    Segmentation 提供的机制是隔离格子的code, data, stack;
    Paging 提供的是一种虚拟内存系统,当然也提供多任务之间的隔离;
    虚拟地址到物理地址的转换如下图:
    如上图,进程读写的地址是VA(虚拟地址),通过分段的机制,指向到LA(线性地址)中的某些段,线性地址通过分页最终可以指向到实际的内存的PA(物理地址)。
    分段是必选的,分页是可选的,如果不选择分页的话,LA就等于PA了,那么这个地址空间就是CPU的数据总线可以访问的空间了。
    Multi-Segement Model如下图:
    每个程序都有自己的段描述符表和自己的段。
    虚拟地址到线性地址的转换如下图:
    段选择器是16bit(使用13位,共有8*1024个段描述符)的,指向段描述符表中的段描述符,段描述符是8字节的,包含基地址和段的长度limit等信息,段地址加上段偏移,就可以拿到lA了。
    32位地址,4KB 页大小时候的线性地址转换如下图:
    offset是12位,也就是4*2^10=4KB空间;
    页目录是10位,页表是10位,页大小是4KB,所以可以寻址的空间是2^10*2^10*4KB=4GB;
    32位地址,4MB页大小的时候的线性地址转换如下图:
    offset是22位,因此页的大小也就是4*1024*1024Byte=4MB;
    也目录是10位,页大小是4MB,所以可以寻址的空间是2^10*4MB=4GB;
    CPU读写内存地址的整体拓扑大概应该是如下图:

    参考文献:IA编程手册,卷3系统编程指南,第3章:保护模式的内存管理

    万事走心 精益求美


  • 相关阅读:
    HDU_oj_1003 Max Sum
    HDU_oj_1002 A+B Problem Ⅱ
    [php] 表单注意事项
    【网络基础】网速认知
    [php扩展] php安装扩展注意事项
    谷歌管理flash禁用与开启
    [php] 接口及方法和抽象类及方法的异同点
    【php】php 生僻知识点认知
    [mysql] Can't read from messagefile
    redis 散列学习要点记录
  • 原文地址:https://www.cnblogs.com/kongchung/p/15322175.html
Copyright © 2011-2022 走看看