• 天书夜读笔记——内存分页机制


    友链

    现代操作系统中,都会用到分页机制

    在32bit操作系统中,对于一个进程来说,他拥有4GB的内存空间

    其中低2G属于进程自己的,高2G的空间属于内核空间,所有进程看到的内核空间中的值都是一样的,也就是说是共享的,但是进程并没有权限直接去访问这段内存,不同的进程也无法直接访问其他进程的低2GB内存空间(用户空间)

    所有的进程看到的内存地址都是一样的,这些地址实际上都是虚拟地址,他们和物理地址有一个转换关系

    这个转换关系是下面这样的:
    在这里插入图片描述

    目录:分页目录,你可以把他理解成一个表的目录,每一项都指向一个页表(我们约定这个表叫做CNMDTABLE),是一个地址,把这个地址加上cr3寄存器的值,得到页表的地址
    页:用于指示我们要的是CNMDTABLE中的那一项,还是一个地址(我们用定位WCNMADDR)
    偏移:用这个偏移量+WCNMADDR就可以得出物理地址了

    在计算出页的时候,我们就可以判断这个页是否存在了,因为在页表中记录了页的状态,如果这个页不存在,就触发缺页中断,将页从磁盘中换到内存

    12位的偏移量说明,每一个页最大可以达到4MB,但是实际上一个页是4kb

    切换不同的进程时,cr3的值的不一样,这样就可以通过同样的虚拟内存地址来计算出不同的物理地址了

    页内存的保护机制

    页表中每一项的详细结构

    在这里插入图片描述

    P用于指示这个页是否存在
    W用于指示是否可写
    U:1表示为用户页R3级,0表示为系统页 R0级

    但是并没有指示页是否可以执行的标志位

    后来的CPU架构解决了这一问题

    页表项被扩展为64bit,其中NX启用则表示页不可执行

    在这里插入图片描述

  • 相关阅读:
    【设计师必学】在SketchUp中Enscape的灯光照明技巧
    数据结构-图的基本概念
    欧科云链研究院:锚定金融市场,香港从STO再出发
    四元数常用方法
    Spring——AOP用到的代理模式
    Java线程池ThreadPoolExecutor源码解析
    NLP(2)--搭建简单的模型(nn)
    (附源码)计算机毕业设计SSM基于的高校在线办公系统
    Q-Tester 3.2:适用于开发、生产和售后的诊断测试软件
    时间溯源的系统设计思路
  • 原文地址:https://blog.csdn.net/ma_de_hao_mei_le/article/details/125445860