Linux分页错误,Linux分页机制

分页机制为传统需求页、虚拟内存系统提供了实现机制

03fe0991e4689841f4c6a1054d5922b6.png

系统中的线性地址比实际的物理地址大的多,所以进行虚拟化线性地址空间,即虚拟存储技术

当使用分页时,每个段被划分成页面(每页通常4KB或者1字节),页面会存储于物理内存或者硬盘上。通过页目录表和页表进行线性地址到物理地址的转换;如果当前被访问的页面不在物理内存中,处理器会中断程序执行(页错误异常),然后操作系统就可以从硬盘把该页面读入物理内存中,并继续执行中断的程序。

分页机制把线性地址和物理地址空间都划分成各个页面,大小相同,并在这两个空间之间提供了任意映射。

44f1629ef21af6fae8ca96f0c98d2ffe.png

当页面大小设置为4KB时,4G(2^32)的线性地址空间被划分成2^20个页面,由4K大小的页面作为一个单元映射,4K对齐,线性地址的低12位就是可以直接作为物理地址的低12位,分页机制可以看作是把线性地址的高20位转换到物理地址的高20位。

在保护模式下,允许线性地址直接映射到大容量的物理内存上,或者间接地映射到较小容量的物理内存和磁盘空间中(虚拟存储)。

页表结构

页表有2^20个表项,每项4Byte,如果是一级存放需要4MB内存,故使用两级结构。线性地址的高20位转换分两步,每步10bits。

第一级称为页目录,存放在1页4KB的页面中,有2^10(1K)个4Bytes长度的表项,来进行索引选择2^10个二级表之一。

第二级称为页表,长度也是一个页面(4KB),每个4Bytes的表项都包含相关页面的20位物理基地址。

寄存器CR3指定页目录表的基地址。

分段与分页,两种不同的地址变换机制,段表存储在线性地址空间,页表存放在物理地址空间。分页使用了固定长度的页面,段的长度通常与存放在其中的代码或者数据结构具有相同的长度,如果仅使用分段地址转换,那么存储在物理内存中的数据结构将包含其所有部分,但如果使用了分页,那么一个数据结构就可以一部分存储在物理内存中,一部分存储在磁盘中。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值