Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈内存管理中的分页和分段

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

作者头像
用户4700054
发布于 2022-08-17 04:33:37
发布于 2022-08-17 04:33:37
1.1K0
举报

内存管理的必要性

  • 很早之前计算机只能运行单个进程,就算运行批处理程序,也是棑好对,一个一个的进行处理,不存在多个进程并发运行,这时候内核对于内存管理相对比较简单,直接把物理内存地址拿过来是使用即可。
  • 随着计算机演进,支持多进程的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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux内存寻址之分段机制及分页机制【转】
本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制; 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。
233333
2018/08/01
3.6K0
Linux内存寻址之分段机制及分页机制【转】
操作系统的内存管理
内存管理无疑是操作系统最重要的工作之一,本文我们就来详细介绍一下操作系统是如何管理内存的,分段、分页机制又是什么,线性地址、逻辑地址、物理地址、虚拟地址分别指的又是什么。
用户3147702
2022/06/27
5460
操作系统的内存管理
系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
虚拟内存是一种操作系统提供的机制,用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上。通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题。
努力的小雨
2023/11/13
9540
Linux虚拟内存管理
Linux的内存管理分为 虚拟内存管理 和 物理内存管理,本文主要介绍 虚拟内存管理 的原理和实现。在介绍 虚拟内存管理 前,首先介绍一下 x86 CPU 内存寻址的具体过程。
用户7686797
2020/08/25
4.2K0
Linux虚拟内存管理
Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看
fliter
2023/09/23
2710
Linux内核分析与应用2-内存寻址
写一个操作系统_06 内存寻址
  实模式是有很大弊端的,首先,直接操作物理内存,这样的话每次只能运行一个程序,并且不安全;另外,内存最大使用到1M,限制太大。
changan
2020/11/04
6920
写一个操作系统_06 内存寻址
「linux」物理地址,虚拟地址,内存管理,逻辑地址之间的关系2
GDT在内存中的地址和大小存放在CPU的gdtr控制寄存器中,而LDT则在ldtr寄存器中。
用户8639654
2021/08/30
2K0
【操作系统复习】物理地址虚拟地址
在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。
韩旭051
2021/04/14
2.2K0
真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗
操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。
小林coding
2020/07/03
9900
Linux 内存管理
      程序到运行主要经过程序(外存)编译,链接,装入(内存)。《程序如何运行:编译、链接、装》:
黄规速
2022/06/15
8.1K0
Linux 内存管理
【操作系统】内存管理概述
常见的内存分配函数有malloc,mmap等,但大家有没有想过,这些函数在内核中是怎么实现的?换句话说,Linux内核的内存管理是怎么实现的?
嵌入式与Linux那些事
2024/05/11
2140
【操作系统】内存管理概述
Linux 0.12 内核管理存储器
每一个进程都有一张段表LDT。整个系统有一张GDT表。且整个系统仅仅有一个总页表。
全栈程序员站长
2022/07/05
1.1K0
Linux 0.12 内核管理存储器
Linux分页机制之分页机制的演变--Linux内存管理(七)
分段,是指将程序所需要的内存空间大小的虚拟空间,通过映射机制映射到某个物理地址空间(映射的操作由硬件完成)。分段映射机制解决了之前操作系统存在的两个问题:
233333
2018/12/19
2.1K0
Linux分页机制之概述--Linux内存管理(六)
在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address).
233333
2018/12/17
5.7K0
Linux分页机制之概述--Linux内存管理(六)
想和你聊聊操作系统的内存管理
之所以这样构造是因为会使操作系统很方便的为每个应用程序构造页表,即虚拟页和物理页映射关系表
Java宝典
2021/04/02
5950
想和你聊聊操作系统的内存管理
操作系统:分段与分页内存
现代操作系统的普遍做法是引入“虚拟内存”的机制,应用程序是面向虚拟内存编写的而不是面向物理内存。应用程序在运行的时候使用的是虚拟地址,CPU负责将虚拟地址转换为物理地址。
灯珑LoGin
2022/10/31
9020
操作系统:分段与分页内存
深入理解Linux内核页表映射分页机制原理
操作系统用于处理内存访问异常的入口操作系统的核心任务是对系统资源的管理,而重中之重的是对CPU和内存的管理。为了使进程摆脱系统内存的制约,用户进程运行在虚拟内存之上,每个用户进程都拥有完整的虚拟地址空间,互不干涉。而实现虚拟内存的关键就在于建立虚拟地址(Virtual Address,VA)与物理地址(Physical Address,PA)之间的关系,因为无论如何数据终究要存储到物理内存中才能被记录下来。
嵌入式Linux内核
2022/10/25
3.9K0
深入理解Linux内核页表映射分页机制原理
操作系统开发:启用内存分页机制
目前我们已进入保护模式,但依然会受到限制,虽然地址空间达到了4GB,但此空间是包括操作系统共享的4GB空间,我们把段基址+段内偏移地址称为线性地址,线性地址是唯一的,只属于某一个进程。在我们机器上即使只有512MB的内存,每个进程自己的内存空间也是4GB,这是指的虚拟内存空间。一直以来我们都是在内存分段机制下工作的,该模式下如果系统里面的应用程序过多,或者内存碎片过多无法容纳新的进程,则可能会出现进程需要等待,或无法直接运行的局面,而内存分页机制,理论上只要4KB内存就可以让程序运行下去。
王 瑞
2023/02/25
8890
操作系统开发:启用内存分页机制
内存分段与分页机制
8086CPU以后总线寻址和CPU位数趋于一致,操作系统结构向下兼容,线性地址基址置0:
sofu456
2019/07/09
1.3K0
内存分段与分页机制
体系结构及内存分配
就上图而言, p1, p2 ,p3 ,p4 这四个进程在执行相对应的应用程序, 假设p1 先执行, p4 最后执行,那么我们就可以暂时将p4所需要的资源放到 磁盘中, 暂缓放到内存中 。而将真正需要内存的p1所需要的资源放到 内存中。
用户11097514
2024/05/30
1830
体系结构及内存分配
相关推荐
Linux内存寻址之分段机制及分页机制【转】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档