热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

第三章、连续式内存分配

操作系统的内存管理:3.1计算机体系结构及内存分层体系操作系统的内存层次:操作系统在内存管理方面需要完成的目标:抽象:逻

操作系统的内存管理:


3.1 计算机体系结构及内存分层体系

在这里插入图片描述

在这里插入图片描述


操作系统的内存层次:

在这里插入图片描述


操作系统在内存管理方面需要完成的目标:


  1. 抽象: 逻辑地址空间
  2. 保护: 独立地址空间(保证多个进程间不会相互干扰)
  3. 共享: 访问共同的地址空间(当多个进程需要操作同一块操作地址时,需要共享地址空间)
  4. 虚拟化: 由于缓存及寄存器的存储空间有限,当存储大量数据时,就需要使用虚拟空间在这里插入图片描述

操作系统管理内存的不同方法:


  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存

操作系统在完成内存管理操作同时还需要高度依赖于硬件


  • 必须知道内存架构
  • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

3.2 地址空间及地址生成


① 地址空间的定义:


物理地址空间:

物理地址空间是指一些硬件支持的地址空间,比如硬盘和内存条、高速缓存…


逻辑地址空间:

逻辑地址空间是指一个运行程序所拥有的内存范围,它的结构很简单,就是一条线性的地址空间

但是最终逻辑地址空间还是会指向物理地址空间,操作系统需要协调这二者的关系,通过映射来使得逻辑地址指向物理地址。


② 逻辑地址的生成:

在这里插入图片描述


③ 物理地址的生成:

=>CPU方面

a. CPU执行指令时,它的ALU部件会需要指令的某个内容,它发出的请求中的参数会携带逻辑地址;

b. CPU的内存管理单元MMU 寻找逻辑地址的映射表中是否存在物理地址。如果没有找到,那么就会产生一个处理过程,去内存中找。如果最终找着了,那么CPU的控制器从总线发送在物理地址的内存内容的请求;

=>内存方面

a. 内存发送物理地址内存内容给CPU(CPU开始处理对应的指令)

=>操作系统方面

a. 建立逻辑地址和物理地址之间的映射关系,该关系可以放在内存中由CPU缓存来加快进程(确保程序不相互干扰)

在这里插入图片描述


④ 地址安全检查:

在这里插入图片描述


3.3 连续内存分配:内存碎片与分区的动态分配


内存碎片问题:

碎片是指内存空闲不能被利用,碎片分为内部碎片和外部碎片,外部碎片是指分配单元之间不能被使用;内部碎片是指分配单元中不能被使用。


简单的内存管理方法:

操作系统管理内存的简单方法:当一个程序准许运行在内存中时分配一个连续的空间;分配一个连续的内存空间给运行的程序以访问数据。


分区的动态分配策略:


1、首次适配:

概念:现在想要分配n 字节,那么就会从低地址开始查找,当查找到第一个空间大于n字节就结束返回。

需求:


  • 存在一个按照地址排序的空闲块列表
  • 分配需要寻找一个合适的分区
  • 重分配需要检查,看是否自由分区能够合并于相邻的空闲分区(回收)

优点:


  • 简单、易于操作
  • 便于生成更大的空间块,向着空间地址的结尾(如果在前边找到后就结束,那么不会破坏之后的空间块)

缺点:


  • 易于产生外部碎片(前后两个可利用空间块之间的小块不能被使用,会被忽视)
  • 不确定性

2、最优适配:

概念:会在空闲块间查找最适合的空间块,为了避免分割大的空闲块,同时为了最小化外部碎片产生的尺寸

需求:


  • 按照尺寸排列的空闲块列表
  • 分配需要查找一个合适的分区
  • 重分配需要搜索合并于相邻的空闲分区

优点:


  • 当大部分是小尺寸时非常有效
  • 比较简单

缺点:


  • 会产生外部碎片
  • 重分配慢
  • 易于产生很多没用的微小碎片

3、最差适配:

概念:为了分配n字节,使用最大的空闲块,以至块的尺寸比n大

需求:


  • 按尺寸排列的空闲块
  • 分配很快(每次获得最大的分区)
  • 重分配需要合并于相邻的空闲分区

优点:对于分配的是中等尺寸效果最好

缺点:


  • 重分配慢
  • 会产生外部碎片
  • 易于破坏大的空闲块以至于需要分配大分区时无法被分配

3.4 连续内存分配:压缩式与交换式碎片整理


1、压缩式碎片整理(紧致)

在这里插入图片描述


  • 重置程序以合并空洞
  • 要求所有程序是动态可重置的
  • 问题:何时重置,开销大

如图:如果能够将程序占用的内存进行拷贝重分配,那么会产生更多可用的内存空间,但是仅仅靠软件来操作会有很大的开销,对系统的性能会有更大的影响。


2、交换式碎片整理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBNh7Kvi-1601035285720)(第三章、连续式内存分配.assets/image-20200919205114421.png)]

如果在运行P3时需要更多的内存,而此时P4正在等待,那么就可以将P4的数据拷贝到磁盘(虚拟内存)中,此时P3就获得了足够多的内存可以运行;当P4需要执行时再从磁盘上拷贝回 memory(主存)中即可。

有很大的开销,对系统的性能会有更大的影响。


2、交换式碎片整理

在这里插入图片描述

如果在运行P3时需要更多的内存,而此时P4正在等待,那么就可以将P4的数据拷贝到磁盘(虚拟内存)中,此时P3就获得了足够多的内存可以运行;当P4需要执行时再从磁盘上拷贝回 memory(主存)中即可。


推荐阅读
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
author-avatar
旧眸M_557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有