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

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

作者头像
用户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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
虚拟内存是一种操作系统提供的机制,用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上。通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题。
努力的小雨
2023/11/13
8870
Linux内存寻址之分段机制及分页机制【转】
本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制; 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。
233333
2018/08/01
3.6K0
Linux内存寻址之分段机制及分页机制【转】
五万字 | 深入理解Linux内存管理
作者简介: 程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。 1.1 内存管理的意义 1.2 原始内存管理 1.3 分段内存管理 1.4 分页内存管理 1.5 内存管理的目标 1.6 Linux内存管理体系 2.1 物理内存节点 2.2 物理内存区域 2.3 物理内存页面 2.4 物理内存模型 2.5 三级区划关系 3.1 Buddy System 3.1.1 伙伴系统的内存来源 3.1.2 伙伴系统的管理数据结构 3.1.3 伙伴系统的算法逻辑 3.1.4 伙伴系统的接口 3.1
刘盼
2022/08/26
4K0
五万字 | 深入理解Linux内存管理
图文详解: 操作系统之内存管理 ( 内存模型,虚拟内存,MMU, TLB,页面置换算法,分段等)
每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页 (Page, 4KB)。
一个会写诗的程序员
2021/12/16
2.2K0
图文详解: 操作系统之内存管理 ( 内存模型,虚拟内存,MMU, TLB,页面置换算法,分段等)
操作系统的内存管理
内存管理无疑是操作系统最重要的工作之一,本文我们就来详细介绍一下操作系统是如何管理内存的,分段、分页机制又是什么,线性地址、逻辑地址、物理地址、虚拟地址分别指的又是什么。
用户3147702
2022/06/27
5280
操作系统的内存管理
Linux分页机制之概述--Linux内存管理(六)
在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address).
233333
2018/12/17
5.7K0
Linux分页机制之概述--Linux内存管理(六)
操作系统八内存管理
      CPU可以在一个cpu时钟内执行一个或多个其内置寄存器的指令。而访问内存需多个cpu时钟。由于内存频繁访问,可以再cpu与内存之间增加高速缓存
bear_fish
2018/09/20
9380
操作系统八内存管理
「linux」物理地址,虚拟地址,内存管理,逻辑地址之间的关系2
GDT在内存中的地址和大小存放在CPU的gdtr控制寄存器中,而LDT则在ldtr寄存器中。
用户8639654
2021/08/30
2K0
内存分段与分页机制
8086CPU以后总线寻址和CPU位数趋于一致,操作系统结构向下兼容,线性地址基址置0:
sofu456
2019/07/09
1.3K0
内存分段与分页机制
Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看
fliter
2023/09/23
2600
Linux内核分析与应用2-内存寻址
操作系统段页结合的实际内存管理--13
能否站在程序员的视角看来,程序分段存放在内存上的模样是连续的,但是站在物理内存视角看来,却是分页管理的呢?
大忽悠爱学习
2022/08/23
8880
操作系统段页结合的实际内存管理--13
分页与分段的区别及应用场景
计算机科学领域中,分页和分段是两种重要的存储管理技术,它们在虚拟内存管理和程序运行中的角色至关重要。尽管这两种方法都旨在优化内存利用率和支持多任务环境,但它们在设计理念、实现方式及应用场合上存在显著差异。
编程小妖女
2025/01/30
960
分页与分段的区别及应用场景
写一个操作系统_06 内存寻址
  实模式是有很大弊端的,首先,直接操作物理内存,这样的话每次只能运行一个程序,并且不安全;另外,内存最大使用到1M,限制太大。
changan
2020/11/04
6830
写一个操作系统_06 内存寻址
体系结构及内存分配
就上图而言, p1, p2 ,p3 ,p4 这四个进程在执行相对应的应用程序, 假设p1 先执行, p4 最后执行,那么我们就可以暂时将p4所需要的资源放到 磁盘中, 暂缓放到内存中 。而将真正需要内存的p1所需要的资源放到 内存中。
用户11097514
2024/05/30
1590
体系结构及内存分配
计算机组织结构(十) 内存管理
📚 文档目录 合集-数的二进制表示-定点运算-BCD 码-浮点数四则运算-内置存储器-Cache-外存-纠错-RAID-内存管理-总线-指令集: 特征- 指令集:寻址方式和指令格式 过去, 只有操作系统和一个程序在内存中. 现在, 操作系统和多个程序都在内存中. 程序等待 I/O 时, 为了避免处理器等待, 需要进行优化, 使得更多的程序可以加载入内存. 内存管理: 在多程序设计系统中, 内存的 “用户部分” 应该被进一步划分以适应多个程序, 这是由系统动态决定的. 加载更多程序的途径 增大内存
Rikka
2022/01/18
3930
计算机组织结构(十) 内存管理
操作系统:分段与分页内存
现代操作系统的普遍做法是引入“虚拟内存”的机制,应用程序是面向虚拟内存编写的而不是面向物理内存。应用程序在运行的时候使用的是虚拟地址,CPU负责将虚拟地址转换为物理地址。
灯珑LoGin
2022/10/31
8840
操作系统:分段与分页内存
想和你聊聊操作系统的内存管理
之所以这样构造是因为会使操作系统很方便的为每个应用程序构造页表,即虚拟页和物理页映射关系表
Java宝典
2021/04/02
5830
想和你聊聊操作系统的内存管理
【操作系统】内存管理概述
常见的内存分配函数有malloc,mmap等,但大家有没有想过,这些函数在内核中是怎么实现的?换句话说,Linux内核的内存管理是怎么实现的?
嵌入式与Linux那些事
2024/05/11
1960
【操作系统】内存管理概述
Linux分页机制之分页机制的演变--Linux内存管理(七)
分段,是指将程序所需要的内存空间大小的虚拟空间,通过映射机制映射到某个物理地址空间(映射的操作由硬件完成)。分段映射机制解决了之前操作系统存在的两个问题:
233333
2018/12/19
2.1K0
Linux 0.12 内核管理存储器
每一个进程都有一张段表LDT。整个系统有一张GDT表。且整个系统仅仅有一个总页表。
全栈程序员站长
2022/07/05
1.1K0
Linux 0.12 内核管理存储器
相关推荐
系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档