非连续内存分配

简介: 非连续内存分配

非连续内存分配


为什么要非连续内存分配?

  • 分段
  • 分页
  • 页表


连续内存分配的缺点:

  • 分配给一个程序的物理内存是连续的
  • 内存利用率较低
  • 有外碎片,内碎片的问题


非连续分配的优点:

  • 一个程序的物理地址空间是非连续的
  • 更好的内存利用和管理
  • 允许共享代码与数据
  • 支持动态加载和动态链接


非连续分配的缺点:

  • 如何简历虚拟地址和物理地址的转换
  • 软件方案
  • 硬件方案


硬件方案


分段


  • 程序的分段地址空间
  • 分段寻址方案
  • 一个段一个内存“块”:一个逻辑地址空间
  • 一个二维的二元组(s, addr):s 一个段号,addr 一段内偏移


分页


  • 分页地址空间
  • 划分物理内存至固定大小的帧:大小是2的幂
  • 划分逻辑地址空间至相同大小的页:大小是2的幂
  • 建立方案 转换落地地址为物理地址:
  • 页表
  • MMU/TLB
  • 帧:物理内存被分割成大小相等的帧
  • 页:一个程序的逻辑地址空间被划分为大小相等的页
  • 页寻址方案
  • 页表保存了逻辑地址-物理地址之间的映射关系
  • 页寻址机制
  • 页映射到帧
  • 页是连续的虚拟内存
  • 帧是非连续的物理内存
  • 不是所有的页都有对应的帧


页表


  • 每一个运行的程序都有一个页表


属于程序运行状态,会动态变化

PTRB:页表基址寄存器


  • 分页机制的性能问题:


访问一个内存单元需要2次内存访问:

一次用于获取页表项

一次用于访问数据


页表可能非常大

64位机器如果每页1024字节,那么一个页表大小会是多少?


如何处理:


缓存 TLB


缓存TLB使用associative memory 关联内存实现,具备快速访问性能

如果TLB命中,物理页号可以很快被获取

如果TLB未命中,对应的表项被更新到TLB中(跟CPU有关,可能由操作系统或者是硬件来实现)

间接访问

多级页表:通过把页号分为k个部分,来实现多级间接页表

建立页表


大地址空间问题


有大地址空间,前项映射页表变的繁琐


不是让页表与逻辑地址空间的大小相对应,而是让页表与物理空间的大小相对应


  • 基于页寄存器的方案


每个帧和一个寄存器关联,寄存器包括哟

residence bit 此帧是否被使用

occupier 对应的页号p

protection bits 保护位


  • 优点
  • 转换表的代销相对于物理内存来说很小
  • 转换表的大小和逻辑地址大小无关
  • 缺点
  • 需要的信息对调了,即根据帧号可找到页号
  • 如何转换回来?
  • 在需要的反向页表中搜索想要的页号


  • 使用关联内存的方案
  • 基于hash计算的查找方案
目录
相关文章
|
人工智能 JavaScript 前端开发
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定
Vue是采用数据劫持结合发布者-订阅者模式的方式,通过使用ES5中的Object.defineProperty()方法来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。
701 0
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定
|
Java Spring
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
222 0
|
Prometheus 负载均衡 监控
详解Gateway
详解Gateway
1813 0
|
前端开发 Java 测试技术
【软件测试】个人博客系统测试
【软件测试】个人博客系统测试
197 1
|
10月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
579 3
|
存储 人工智能 弹性计算
通义万相AI绘画创作解决方案体验
在数字化时代,艺术创作正以前所未有的方式被重塑。最近,我有幸深入了解并亲身体验了阿里云的通义万相——一款集成了人工智能技术的绘画工具。我将从部署流程、功能表现、用户体验等方面分享我的一些体验心得。
646 4
|
设计模式 Java 开发者
【搞懂设计模式】享元模式:共享节约,皆大欢喜!
【搞懂设计模式】享元模式:共享节约,皆大欢喜!
151 0
|
SQL 分布式计算 资源调度
实时计算 Flink版产品使用合集之Flink CDCRangeMap该怎么使用
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
104 0
|
算法 调度
操作系统丨测试(三)
操作系统丨测试(三)
284 0
|
开发框架 前端开发 JavaScript
BSC链上进行智能合约开发部署规则详情
BSC(Binance Smart Chain)是一个基于区块链的智能合约平台,类似于以太坊。它提供了一个开发者友好的环境,可以用于创建和部署智能合约。如果你有一些编程经验,并且熟悉区块链和智能合约的基本概念,你可以按照以下步骤在BSC链上进行智能合约开发: