当前位置: 首页 > news >正文

操作系统 == 内存管理

内存管理概念

内存管理的基本原理

内存管理主要功能包括:

地址转换,内存分配和回收,内存空间的扩充(虚拟存储技术),内存共享,存储保护

逻辑地址和物理地址

       编译后,每个模块都从0开始进行编址,这称为目标模块的逻辑地址

       Note:进程在运行过程中,看到的和使用的都是逻辑地址

       逻辑地址经过地址转换变为物理地址

       物理地址指的是内存中的实际地址,内存地址空间是内存中物理单元的合集

       地址转换是由MMU(内存管理部件)实现的

程序的链接和装入

       将用户程序编程可执行程序,一般需要以下几步

              编译,链接,装入

       装入分为以下几种

  1. 绝对装入:

逻辑地址与实际地址完全相同,只适合单道程序环境,在编译时就知道程序存放在内存哪个位置

  1. 可重定位装入(静态重定位)

地址转换在进程装入时就完成,缺点是一个作业装入内存,必须给它分配足够的存储空间,且运行期间无法移动

  1. 动态运行时装入

看到这个名字,相比你就知道其与上面的区别了,虽然装入模块被装入到内存,但是只有运行的时候才会发生地址转换,存在一个重定位寄存器来实现动态运行时装入‘

       然后就是链接:分为静态链接·和动态链接

  1. 静态链接

将各目标模块与其所需库函数链接成一个完整的装入模块,以后不在拆分

  1. 动态链接

采用边装入边链接的方式

  1. 运行时动态链接

在程序运行需要某目标模块的时候,才对其进行链接

内存映像

内存映像一般包含:代码段,数据段,堆,栈等基本要素

内存保护

  1. 在CPU设置一对上下限寄存器,存放用户进程在主存中的下限和上限地址
  2. 采用重定位寄存器和界地址寄存器进行越界检查,重定位寄存器内存放的为初始物理地址,界地址寄存器存放的为进程最大逻辑地址(由于逻辑地址从0开始,所以这就是长度)

内存共享:只有只读区域才可以共享

内存分配和回收

连续分配管理方式

指的是为一个用户空间分配一篇连续的内存空间

  1. 单一连续分配:用户独占用户区,内存中只有一道程序
  2. 固定分区分配:将用户空间划分为多个固定大小的分区
    1. 分区大小相等
    2. 分区大小不等

使用分区使用表来标识各跟去的起始地址,大小和状态

  1. 动态分区分配:根据进程需要,动态分配内存

动态分区分配涉及多种分配算法:

  1. 首次适应算法:按地址递增次序排列,每次分配,顺序查找
  2. 临近适应算法(循环首次适应算法)
  3. 最佳适应算法:空闲分区按照容量递增排序,每次顺序查找第一个满足大小的分区
  4. 最坏适应算法:空闲分区按照容量递减排序
  5. 索引分配算法:
    1. 伙伴系统:所有分区大小伟2的k次幂
    2. 哈希算法:
    3. 快速适应算法:用常用空间大小进行划分

这三种算法的共同特点就是在主存中连续存放用户程序

基本分页存储管理

思想:将内存分为若干固定大小的分区,称为页框,页帧,物理块

进程的逻辑地址空间同样分为若干与块大小相等的区域,称为页或者页面

这样就不会产生外部碎片,且只会在进程最后一个不完整的块申请主存块空间的时候,才会产生内部碎片

分页存储的几个基本概念

  1. 页面和页面大小
    进程的逻辑地址空间每个页面有一个编号,称为页号,从0开始,同样的,内存页框也有自己的编号,称为页框号,从0开始,为方便地址转换,页面大小为2的整数次幂。
  2. 地址结构
    1. 逻辑地址,每个分页存储管理的逻辑地址由页号和页内偏移量组成
  3. 页表
    为了便于找到每个页面在内存中存放位置,系统为每个进程建立了一张内存映射表,简称页表,进程每个页面对应一个页表项,记录页号和块号
  4. 基本地址变换机构
    主要任务是将逻辑地址转换为物理地址,为了提高地址变换速度,系统中存在一个页表寄存器,存放页表在内存中的起始地址和页表长度,一般单CPU系统只有一个页表寄存器,当进程被调度执行的时候,将页表的起始地址和页表长度放到页表寄存器中。
  5. 物理地址的计算
    页号P = A/L ,就是逻辑地址/页面大小
    页内偏移两 W = A%L 就是逻辑地址%页面大小
    先判断是否越界,如果没有越界的话,那么就区找对应页表项,即查询物理块号
    note:这里的P对应页表项的地址为页表起始地址加上P乘以页表项长度
    计算物理地址 E = bL * W,b为对应物理块号
    note:地址转换是由硬件来完成的

快表(TLB)

具有并行查询能力的高速缓冲寄存器
由于局部性原理,这里面会存储一些访问过的若干页表项,对快表进行遍历查询的时间几乎可以忽略不计,通过快表命中访存次数就会降低到1次

多级页表

如果页表项较多,但是页表还要求连续存储,这显然不切实际

故为了使得页表离散存储,引入多级页表,对页表在进行分页,然后上一级页表项存储对应页表对应的块号

基本分段存储管理

分段管理的方式考虑到了程序员和用户,将用户进程逻辑地址空间划分为若干大小不等的段,并分配一段连续的地址空间

段表:包含段号,段长,本段在主存中的起始地址

分段和分页的区别

  1. 页是物理信息的基本单位,段是信息的逻辑单位
  2. 页的大小固定,段大小不固定
  3. 分页管理的地址空间是一维的,分段管理的地址空间是二维的

段的共享

内存中配置张共享段表,所有共享的段在共享段表中占据一个表项

段页式存储管理

其实就是将每段再分为若干页

逻辑地址结构如下

段号 页号 业内偏移量

相关文章:

  • FAISS 与机器学习、NLP 的关系
  • android-ndk开发(11): 安装 repo 命令
  • 一场陟遐自迩的 SwiftUI + CoreData 性能优化之旅(下)
  • YOLOv1模型架构、损失值、NMS极大值抑制
  • auto推导类型原则
  • 2025数维杯数学建模竞赛B题完整参考论文(共38页)(含模型、代码、数据)
  • 如何优化系统启动时间--基于米尔瑞萨MYD-YG2LX开发板
  • LeetCode百题刷001双指针·快慢指针
  • Kaggle图像分类竞赛实战总结详细代码解读
  • 图像来源:基于协同推理的双视角超声造影分类隐式数据增强方法|文献速递-深度学习医疗AI最新文献
  • 插槽、生命周期
  • RabbitMQ消息的重复消费问题如何解决?
  • 港大今年开源了哪些SLAM算法?
  • Cluster Interconnect in Oracle RAC
  • 一些模型测试中的BUG和可能解决方法
  • PostgreSQL逻辑复制(logic replication)
  • [AI ][Dify] Dify Tool 插件调试流程详解
  • 浅聊大模型-有条件的文本生成
  • 具身智能时代的机器人导航和操作仿真器综述
  • MySQL数据库故障排查与解决方案
  • 西甲上海足球学院揭幕,用“足球方法论”试水中国青训
  • 上海发布首份直播电商行业自律公约,禁止虚假宣传、商业诋毁
  • 深圳两家会所涉卖淫嫖娼各被罚7万元逾期未缴,警方发催告书
  • 金地集团:今年前4个月实现销售额109.3亿元,同比下降52.44%
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 特朗普称美军舰商船应免费通行苏伊士运河,外交部:反对任何霸凌言行