操作系统(12)内存分配

前言

操作系统内存分配是操作系统内存管理的重要组成部分,涉及将物理内存分配给各个程序以使用的过程。

一、内存分配的基本概念

内存分配指的是操作系统将物理内存分配给程序以使用。操作系统通过内存分配,确保每个程序都能获得足够的内存资源来执行其任务。内存分配的方式经历了从连续型分配到非连续型分配的发展过程,现代操作系统通常使用非连续型分配方式。

二、连续型内存分配

连续型内存分配是最早出现的一种存储器分配方式,分配的策略为一个用户程序分配一个连续的物理内存空间。这种方式包括以下几种类型:

  1. 单一连续分配:

    • 特点:内存被分为系统区和用户区,系统区存放操作系统,用户区存放用户程序。内存中仅有一道程序运行,无外部碎片,但内部碎片较大。
    • 适用场景:适用于单用户、单任务的操作系统,如早期的UNIX和DOS系统。
  2. 固定分区分配:

    • 特点:将内存划分为若干个固定大小的分区,每个分区可装入一个程序。分区大小在创建时被确定,之后不可改变。
    • 优点:简单、易于实现,无外部碎片。
    • 缺点:内部碎片可能较大,分区大小固定,缺乏灵活性。
  3. 动态分区分配:

    • 特点:不预先划分内存,而是在程序装入内存时,根据进程的大小动态地建立分区,并使得分区的大小正好适合进程的需要。
    • 优点:分区大小可变,灵活性高。
    • 缺点:可能产生外部碎片,需要紧凑技术来减少碎片。紧凑技术实现复杂,且影响系统效率。

三、非连续型内存分配

非连续型内存分配允许一个程序分散地装入到不相邻的物理内存分区中,是现代操作系统常用的分配方式。非连续型内存分配包括分页存储管理和分段存储管理两种方式。

  1. 分页存储管理:

    • 特点:将进程的地址空间划分为若干大小相等的页,将物理内存划分为若干大小相等的页框(或页帧)。每个页映射到一个页框中,通过页表来管理这种映射关系。
    • 优点:提高了内存的利用率,允许共享代码和数据,支持动态加载和动态链接。
    • 缺点:需要额外的页表空间来存储映射关系,可能产生内部碎片(但页面大小通常设置得较为合理,内部碎片较小)。
  2. 分段存储管理:

    • 特点:将进程的地址空间划分为若干逻辑段(如代码段、数据段、堆栈段等),每个段映射到物理内存中的一个或多个连续区域。通过段表来管理这种映射关系。
    • 优点:每个段被视为相对独立的逻辑单位,方便编程和信息共享。段与段之间的信息保护较好。
    • 缺点:可能产生外部碎片,且段的大小不固定,管理起来相对复杂。

四、内存分配的实现机制

操作系统通过一系列机制来实现内存分配,包括虚拟内存技术、内存保护机制、内存分配与回收算法等。

  1. 虚拟内存技术:

    • 原理:操作系统抽象出一层虚拟的内存空间,当进程创建时,给每个进程都分配一个虚拟的内存空间。程序所使用的地址是虚拟内存地址,实际运行时再将其映射到物理地址。
    • 优点:提高了内存的利用率和灵活性,允许程序使用比实际物理内存更大的地址空间。
  2. 内存保护机制:

    **原理:**通过内存保护机制(如页表或段表中的保护位)来确保每个进程只能访问其分配的虚拟地址空间,防止进程间的内存冲突和数据泄露。

  3. 内存分配与回收算法:

    • 分配算法:操作系统采用各种算法(如首次适应、循环首次适应、最佳适应、最坏适应等)来分配内存块。这些算法在分配时考虑内存块的大小、位置等因素,以优化内存利用和减少碎片。
    • 回收算法:当进程结束时,操作系统会回收其使用的内存块,并将其归还给系统以供其他进程使用。回收过程中可能需要合并相邻的空闲内存块以减少碎片。

五、优化内存使用的方法

为了优化内存使用,操作系统和程序员可以采取一系列方法,包括选择合适的内存分配策略、及时回收内存、使用虚拟内存、内存压缩、内存碎片整理和内存预分配等。这些方法有助于减少内存浪费、提高内存利用率和系统性能。

总结

综上所述,操作系统内存分配是一个复杂而精细的过程,涉及多种分配方式和实现机制。通过合理的内存分配和优化方法,操作系统能够确保每个程序都能获得足够的内存资源来执行其任务,并提高系统的整体性能和稳定性。

结语

患难困苦

是磨练人格之最高学校

!!!

相关推荐
openEuler社区18 小时前
openEuler 26.09创新版本发布,深化全场景创新
开源·操作系统·openeuler
云计算练习生2 天前
什么是操作系统的体系结构?宏内核、微内核与外核
操作系统·内核·外核·操作系统结构
流浪0013 天前
Linux系统篇44——线程(九) 互斥锁的接口与原理,从 xchgb 的原子交换说起
linux·操作系统·线程·互斥锁·互斥锁原理
福兮说4 天前
秋招复习操作系统并发,我让 AI 生成了一张知识图谱,15 条关系里改了 5 条
人工智能·操作系统·知识图谱·秋招
流浪0016 天前
Linux系统篇43——线程(八) 线程的数据不一致问题,从 ticket-- 的非原子性说起
linux·操作系统·线程·线程安全·锁
小小小小钰儿8 天前
2.3-云端API集成
人工智能·计算机·网络安全·操作系统·编程
做系统的大强8 天前
脚本说 PASS、OS 读全零 —— 到底是谁在撒谎?
后端·操作系统
小小小小钰儿8 天前
2.2-模型微调
人工智能·深度学习·机器学习·计算机·网络安全·操作系统·编程
小小小小钰儿9 天前
2.1-Windows本地部署大模型
人工智能·windows·计算机·网络安全·操作系统·编程
流浪0019 天前
Linux系统篇39——线程(四) pthread库的由来和线程的创建与等待
linux·操作系统·线程·pthread库