linux0.11内存管理与分页机制

在linux0.11中对内存的管理是以页为单位的,一个页面是指连续的4K字节物理内存。
通过页目录和页表项可以寻址或管理指定的页面。

内存管理的主要功能

虚拟地址–>物理内存

在8086CPU中,程序寻址使用的是由段选择符和偏移地址构成的地址,这个地址并不能直接寻址物理内存,因此被称为虚拟地址。

虚拟(逻辑)地址首先通过分段管理机制首先变换成CPU32位线性地址(称作中间地址)

  • 实际函数中操作的地址为当前进程数据段的段内偏移,然后会根据该段的段基址和段内偏移确定一个线性地址

然后利用分页管理机制将此线性地址映射到物理地址。

  • 分页机制会将线性地址分为页目录项、页表项、和页内偏移三部分。利用这三部分确定该线性地址指向的实际物理地址

分页管理机制

一个系统中可以同时存在多个页目录表,在linux0.11中只使用了一个页目录表,当前页目录表用寄存器CR3来确定。

  • 页目录(占用一页内存)中每个页目录项(4字节)用来寻址一个页表
  • 页表(占用一页内存)中的每个页表项(4字节)用来寻址一页物理内存页
  • 所以我们可以用一个页目录项和一个页表项确定一个对应的物理内存页。
  • 因为每页为4K字节,所以页目录=页表=4K字节
  • 而页目录和页表中每项占4字节,所以页目录和页表中最多有1024项
  • 所以一个页目录最多寻址:1页目录×1024页表×1024页表项×4K字节页大小 = 4G的内存空间

为了使用分页管理机制
一个32位的线性地址如下图被分为了三个部分
线性地址
三部分分别寻址页目录项、寻址页表项、和代表页偏移地址。从而能寻址到线性地址指定的物理内存位置。

页表项结构如下图
页表项结构
31~12位为页的物理起始地址,因为每个页的物理地址都应为4K(0x1000)的整数倍,所以低12位地址恒为0,这里在页表项中用来做一些标志位。

1/0
P页面存在于内存标志存在/否
R/W读/写
U/S用户/超级用户
A页面已访问是/否
D页面内容已修改是/否





以上部分图片出自《linux内核完全注释》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值