理解内存管理机制

简介: 概念• 假设计算机的内存就像一个大仓库,这个仓库被人为地划分成几个固定大小的区域,每个区域就是一个分区。比如把100MB的内存划分成5个分区,每个分区20MB。当一个程序需要运行时,操作系统会根据程序的大小,把它分配到一个合适的分区中。如果程序大小是15MB,就把它放到一个20MB的分区里。• 这种方式的优点是实现简单。就像仓库管理员只需要按照固定的格子来存放货物,不需要复杂的计算和调整。缺点是内存利用率低。因为分区大小是固定的,如果程序大小只有10MB,却分配了20MB的分区,那么剩下的10MB就浪费了。而且如果程序太大,超过了分区的大小,就无法运行。应用场景• 在早期的计算机系统中

固定分区分配

概念

  • 假设计算机的内存就像一个大仓库,这个仓库被人为地划分成几个固定大小的区域,每个区域就是一个分区。比如把100MB的内存划分成5个分区,每个分区20MB。当一个程序需要运行时,操作系统会根据程序的大小,把它分配到一个合适的分区中。如果程序大小是15MB,就把它放到一个20MB的分区里。
  • 这种方式的优点是实现简单。就像仓库管理员只需要按照固定的格子来存放货物,不需要复杂的计算和调整。缺点是内存利用率低。因为分区大小是固定的,如果程序大小只有10MB,却分配了20MB的分区,那么剩下的10MB就浪费了。而且如果程序太大,超过了分区的大小,就无法运行。

应用场景

  • 在早期的计算机系统中,当程序比较简单,数量也比较少的时候,固定分区分配是一种可行的方案。比如一些小型的嵌入式设备,它的功能相对固定,运行的程序种类有限,就可以采用这种简单的内存管理方式。

动态分区分配

概念

  • 这种方式就好比仓库管理员不再把仓库划分成固定大小的格子,而是根据货物(程序)的大小来灵活划分区域。当一个程序需要15MB内存时,操作系统就在内存中找到一块连续的、足够大的空间(15MB或者更大),把它分配给这个程序。如果内存中有多个足够大的空间,操作系统会根据一定的算法(如最先适应、最佳适应等)来选择一个区域进行分配。
  • 比如最先适应算法,就是从内存的起始位置开始查找,找到第一个满足大小要求的空闲区域就分配。这种方式的优点是内存利用率比固定分区分配高,因为它可以根据程序的实际大小来分配内存。但是,随着程序的运行和结束,内存中会产生很多大小不一的空闲区域,这就可能出现“碎片”问题。就像仓库里货物搬进搬出后,留下很多零散的空间,很难再找到一块足够大的连续空间来存放新的货物。

应用场景

  • 在现代计算机操作系统中,如Windows、Linux等,动态分区分配是主要的内存管理方式之一。因为现代计算机需要运行各种大小不一的程序,这种灵活的分配方式能够更好地满足需求。不过,为了减少碎片问题,操作系统会采用一些技术,比如内存紧缩(把内存中的程序和数据移动,使空闲区域集中)等。

分页管理

概念

  • 分页管理是把内存和程序都分成固定大小的页面。就像把一本厚厚的书(程序)分成很多页,每一页的大小是固定的,比如4KB。内存也被划分成同样大小的页框。当程序运行时,操作系统会把程序的页面装入内存的页框中。而且,这些页面在内存中可以是不连续存放的。
  • 举个例子,一本100页的书,每页4KB。内存有足够多的页框。操作系统可能把第1页装入内存的第10个页框,第2页装入第25个页框,第3页装入第5个页框,等等。程序运行时,通过一个地址转换机制(就像一个导航系统),把程序中的逻辑地址(比如书的页码)转换成内存中的物理地址(页框的位置)。这种方式的优点是内存利用率比较高,而且可以实现虚拟内存技术。因为程序的页面可以部分装入内存,其他页面可以暂时存放在硬盘上,当需要的时候再调入内存。

应用场景

  • 几乎所有的现代计算机操作系统都采用分页管理作为基础的内存管理技术。它能够很好地支持多任务操作,让多个程序的页面在内存中合理分布,同时通过虚拟内存技术,使得程序可以运行在比实际物理内存更大的虚拟空间中。

分段管理

概念

  • 分段管理是把程序按照逻辑模块划分成多个段。就像把一个软件项目分成多个功能模块,每个模块是一个段。每个段的大小是不固定的,根据模块的实际大小来确定。内存也被划分成段,但是内存中的段是动态分配的。当程序运行时,操作系统会把程序的段装入内存的段中。
  • 例如,一个图形绘制软件,它有绘图模块、图像处理模块和用户界面模块等。绘图模块是一个段,图像处理模块是另一个段。操作系统根据每个模块的大小,在内存中找到合适的区域来存放这些模块。这种方式的优点是符合程序的逻辑结构,方便程序员进行模块化编程和管理。但是,它也会产生内存碎片问题,而且地址转换相对复杂。

应用场景

  • 在一些对程序模块化要求较高的系统中,会采用分段管理。比如一些大型的工业控制系统软件,它有很多功能模块,分段管理能够更好地体现这些模块之间的逻辑关系。不过,现在大多数操作系统采用的是分页和分段相结合的方式,取长补短,既能体现程序的逻辑结构,又能有效管理内存。

段页式管理

概念

  • 这是分页和分段管理的结合体。程序先被分成多个段,每个段再被分成多个页。内存管理也分为两层,先按照段来分配,段内再按照页来管理。就像先把书(程序)按照章节(段)划分,每个章节再按照页划分。操作系统先找到合适的内存段,然后在这个段内找到合适的页框来装入程序的页面。
  • 例如,一个大型数据库管理系统软件,它有数据存储模块、查询处理模块和用户交互模块等几个大的段。数据存储模块又被分成很多小的页面,操作系统先把数据存储模块这个大段装入内存的一个区域,然后在这个区域内为数据存储模块的各个页面分配具体的页框。这种方式综合了分页和分段的优点,内存利用率高,又能很好地体现程序的逻辑结构。

应用场景

  • 在一些对内存管理要求非常高的复杂系统中,如大型服务器操作系统,段页式管理能够充分发挥其优势。它能够高效地管理大量的内存资源,同时支持复杂的程序结构,让系统运行更加稳定和高效。
目录
相关文章
|
Cloud Native Java 编译器
Java生态系统的进化:从JDK 1.0到今天
Java生态系统的进化:从JDK 1.0到今天
|
5月前
|
Kubernetes Java 应用服务中间件
1.开发篇(脚手架下载)
本文介绍基于Spring Cloud Alibaba与Kubernetes的微服务开发实践,重点分享项目初始化与本地启动的高效工具。通过阿里云EDAS 3.0及配套插件,开发者可快速搭建应用并自动对接注册中心,显著提升开发体验。后续将深入讲解云端部署与端云互联能力。
1.开发篇(脚手架下载)
|
5月前
|
人工智能 弹性计算 数据可视化
跨境电商全栈上云:从建站、支付、物流到数据分析的阿里云方案
阿里云提供跨境电商全栈上云解决方案,涵盖全球化建站、跨境支付、智慧物流与数据驱动运营四大核心模块,助力企业实现低延迟访问、高转化支付、高效履约及精细化运营,提升全球竞争力。
|
存储 算法 Serverless
数据校验的艺术:从奇偶校验到CRC校验与海明校验
数据校验的艺术:从奇偶校验到CRC校验与海明校验
3423 0
|
搜索推荐 机器人 云计算
纳米机器人:医疗领域的微型革命与精准治疗
【9月更文挑战第16天】随着科技的飞速发展,纳米技术成为推动多个领域变革的重要力量。在医疗领域,纳米机器人以其独特优势引领着微型革命与精准治疗新时代。本文探讨其在药物输送、癌症治疗、手术辅助及疾病诊断中的应用,并分析其小型化、精准化、智能化与综合化的优势。尽管面临制造技术、体内控制等挑战,但随着科技的进步,纳米机器人有望成为人类健康的重要保障。
1255 10
|
传感器 人工智能 数据可视化
数字孪生在航空航天领域的应用
【10月更文挑战第31天】数字孪生技术通过创建物理实体的虚拟复制品,实现实时模拟、预测和优化,已在航空航天领域广泛应用。例如,NASA在阿波罗工程中使用地面飞船模拟实际飞行状态,中国嫦娥五号探测器利用数字孪生技术进行在轨运行评估。此外,C919客机研发中也应用了数字孪生系统,提高了设计和制造效率。未来,数字孪生将结合物联网、大数据等技术,进一步提升航空航天领域的智能化水平。
|
Java 开发者
在Java编程中,正确的命名规范不仅能提升代码的可读性和可维护性,还能有效避免命名冲突。
【10月更文挑战第13天】在Java编程中,正确的命名规范不仅能提升代码的可读性和可维护性,还能有效避免命名冲突。本文将带你深入了解Java命名规则,包括标识符的基本规则、变量和方法的命名方式、常量的命名习惯以及如何避免关键字冲突,通过实例解析,助你写出更规范、优雅的代码。
457 3
|
缓存 开发工具 Android开发
Launcher3 一键改变Icon Shape 原理浅析
Launcher3 一键改变Icon Shape 原理浅析
731 0
|
存储 缓存
【顺序表和链表的对比】
【顺序表和链表的对比】
934 0