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章:保护模式的内存管理

    万事走心 精益求美


  • 相关阅读:
    webpack篇
    js 中对于this 的理解的 经典案例
    AMD、CMD、CommonJs和es6对比
    vue import异步加载js
    vscode 保存自动 格式化eslint 代码
    git设置
    面向对象的三大特性之继承
    面向对象 类与对象及其属性与方法 类的组合
    hashlib模块 hash算法
    configparser模块 配置文件的解析操作
  • 原文地址:https://www.cnblogs.com/kongchung/p/15322175.html
Copyright © 2011-2022 走看看