前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈内存管理中的分页和分段

浅谈内存管理中的分页和分段

作者头像
用户4700054
发布2022-08-17 12:33:37
9600
发布2022-08-17 12:33:37
举报
文章被收录于专栏:存储内核技术交流

内存管理的必要性

  • 很早之前计算机只能运行单个进程,就算运行批处理程序,也是棑好对,一个一个的进行处理,不存在多个进程并发运行,这时候内核对于内存管理相对比较简单,直接把物理内存地址拿过来是使用即可。
  • 随着计算机演进,支持多进程的OS,多个进程都都使用同一个物理地址空间,很容易多个进程之间相互干扰而引起进程的不可预期的行为。为了解决这个问题,CPU中的MMU(内存管理单元)引入了虚拟地址空间。以32位操作系统经为例,每个进程都可以拥有4G的寻址空间,当进程需要内存时候,通过转换技术和虚拟地址进行关联。MMU通过分页的机制,提供进程的虚拟地址到物理地址的映射方法。段页机制是MMU机制提供,Linux内核是使用者。
MMU的内存管理机制
  • 在x86体系结构下CPU对内存寻址都是通过分段和分页方式进行,在保护模式下,一个段的可以理解为基地址+段的界线+类型。进程的虚拟地址就是在段中的偏移量;线性地址就是在某个段中基地址+偏移地址得出的地址;在x86中MMU提供了分页机制,如果未开启,那么线性地址就是物理地址;反之需要经过分页机制换算后,线性地址才能转为物理地址。MMU对于内存的管理主要是分段和分页,CPU把生成的逻辑地址交给MMU内的分段单元,分段单元为每个逻辑地址生成一个线性地址,然后再将线性地址交给MMU的分页单元,最终生成物理内存的地址。
分段和分页机制
  • 每个逻辑地址由两部份组成,段标识符: 段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。后面3位包含一些硬件细节,段的起始地址,段的长度,段的访问权限等,都会保存在段描述表中。
  • 在x86体系结构中,MMU支持多级分页模型,一般分为三种情况;第一种,32位系统中则是两级分页模型;如果在32位系统中开启了PAE(物理地址扩展模式),则为三级分页模型;在64位系统中则为四级分页模型。80x86的分页机制是由CR0寄存器中的PG位开启,如果PG=1则开启分页机制,把线性地址转为物理地址;如果PG=0,禁用分页机制,直接把分段单元产生的线性地址当做物理地址使用。
  • 32位或者64位系统的逻辑地址中,经过分段单元,把逻辑地址转换为线性地址,在由分页单元,根据这个地址去查找对应多级页目录,根据页目录查找页表,最终得到物理地址。
    • 页表
    • 虚拟地址和物理地址映射关系
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内存管理的必要性
    • MMU的内存管理机制
      • 分段和分页机制
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档