页式存储-

本文详细介绍了80386处理器中的分页机制,指出分页除了配合分段机制提供保护外,主要是为了实现虚拟存储器的灵活性。通过中断15来获取内存大小,并演示如何在保护模式下初始化页表。通过改变CR3寄存器实现地址映射的切换,展示了分页如何影响线性地址到物理地址的转换。
摘要由CSDN通过智能技术生成
  • :就是一块内存,在80386中,页的大小是固定的4096字节
  • 逻辑地址、线性地址、物理地址:在未打开分页机制时,线性地址等同于物理地址(逻辑地址通过分段机制直接转换成物理地址);当分页开启时,情况发生变化,分段机制将逻辑地址转换成线性地址,线性地址再通过分页机制转换成物理地址(分页机制类似于一个函数)。
    在这里插入图片描述
  • 为什么分页:分段管理机制已经提供了很好的保护机制,分页主要目的在于实现虚拟存储器,线性地址中任意一个页都能映射到物理地址中的任何一个页,这无疑使得内存管理变得相当灵活
    在这里插入图片描述

编写代码启动分页机制

在这里插入图片描述

克勤克俭用内存

  • 我们必须知道内存的大小,根据内存的大小确定多少页表
  • 可以利用中断15来确定内存的大小
    在这里插入图片描述
  • ax=0E820h时调用int 15h得到的不仅仅是内存的大小,还包括对不同内存段的一些描述,这些描述都被保存在一个缓冲区中。在我们调用int 15h之前,必须先有缓冲区。我们可以在每得到一次内存描述时都使用同一个缓冲区,然后对缓冲区里的数据进行处理,也可以将每次得到的数据放进不同的位置,比如一块连续的内存,然后在想要处理它们时再读取
  • 在这里,我们使用了后一种方法,定义了一块256字节的缓冲区,最多可以用来存放12个20字节大小的结构体。我们将把每次得到的内存信息连续写入这块缓冲区,形成一个结构体数组。然后在保护模式下把它们读出来,显示在屏幕上,并且凭借它们得到内存的容量。
    在这里插入图片描述
  • 现在我们来到保护模式下的32位代码,添加显示内存信息的过程
    在这里插入图片描述
  • 根据内存大小计算应初始化多少PDE以及多少页表
    在这里插入图片描述
    所以在GDT中,这样初始化页表
    在这里插入图片描述

进一步体会分页机制

  • 先执行某个线性地址处的模块,然后通过改变cr3来转换地址映射关系,再执行同一个线性地址处的模块,由于地址映射已经改变,所以两次得到的应该是不同的输出
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值