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

本文介绍了操作系统中的分页机制,特别是在32位系统中,每个进程拥有4GB内存,其中2GB为用户空间,2GB为内核空间。虚拟地址通过页目录和页表转换为物理地址,页表项包含状态标志,如存在、可写和用户/系统权限。当页不存在时,会触发缺页中断。后来的CPU架构增加了NX位来标记页是否可执行,增强了内存保护。
摘要由CSDN通过智能技术生成

友链

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

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

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

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

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

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

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

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

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

页内存的保护机制

页表中每一项的详细结构

在这里插入图片描述

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

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

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

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值