7.内存管理基础+连续分配

发布时间 2023-12-22 17:22:46作者: 风雨zzm

程序执行基本原理

  1. 程序是一条一条被读入寄存器内执行的

  2. 内存卡是一个临时保存中介,磁盘是永久保存介质

  3. 地址总线的选中原理(译码器原理)

  4. 四大存储器的速度和所处位置

    寄存器>Cache>内存卡>磁盘

概念辨析

CPU位数、OS位数、内存地址总线数、内存数据总线数、逻辑地址位数、物理地址位数、真实内存大小、虚拟内存大小

image

内存管理逻辑图

  • 怎么装入?
  • 装在哪里?(记录(表格),查询(表格))
image

程序基础知识

  • 编译:源代码翻译成若干个目标模块

  • 链接:将目标模块和库函数链接形成一个装入模块(静态链接、装入时动态链接、运行时动态链接

  • 装入:将装入模块装入内存(绝对装入)

    • 绝对装入:装入前就确定好程序的装入位置,使逻辑地址与物理地址对齐,避免错位(只适用单道程序
    • 可重定位装入:又称静态重定位,装入时,由装入程序对逻辑地址进行一次性修改,从而避免错位。多用于多道程序,地址0开始,装入时修改(早期多道批处理阶段
    • 动态运行时装入:又称动态重定位,需要重定位寄存器辅助。程序运行时,利用重定位寄存器的弥补作用,让CPU认为逻辑地址和物理地址对齐,避免错位(现代操作系统

连续分配存储管理

  1. 单一连续分配:

    优点:简单、无外部碎片、无需进行内存保护

    特点

    • ①单用户,单任务 ;

    • ②内存利用率极低(有内部碎片);

    • ③通常采用绝对装入方式

  2. 固定分区分配:

    将内存用户区分成若干个固定大小的区域,每个区域内驻留一道程序,一旦内存中空闲一个分区,即从外存后备队列中调度一个作业进来运行

    系统首先建立一张分区使用表(分区使用表=分区号+分区大小+起始地址+状态标记)。内存的分配方法一般可分成以下两种:

    • 最先(首次)适应法:当一个作业到达时,即从该表中顺序检索出尺寸能满足要求且未分配的分区分配给它

    • 最佳适应法:当一个作业到达时,即从该表中检索出尺寸能满足要求且未分配的最小分区分配给它

    特点

    • ①每个分区只装入一道程序;

    • ②分区大小重要(太小装不进,太大内存利用率低);

    • ③有内部碎片;

    • ④通常采用静态重定位装入方式

  3. 动态分区分配

    根据进程的实际需要,动态分配内存

    特点没有内部碎片,但有外部碎片。而且外部碎片会越来越多,直到碎片小到无法分配为止。此时就需要紧凑技术(动态重定位)来整理内存。

    为解决碎片问题,就必须将部分作业在内存中移动,以便空出较大的自由分区,这个过程称为“拼接”“紧凑"

    动态分区算法

    • 最先(首次)适应法空闲分区地址递增的次序链接。(简单,通常也最好和最快,低地址易出现很多小的空闲区;保留高址部分大空闲区,低址部分碎片多,查找开销大

    • 循环首次适应法(邻近适应算法):由首次适应法演变而来,只不过从上一次的空闲分区开始查找集中在高地址分配空间,高地址形成细小碎片,空闲分区分布均匀,缺乏大的空闲分区

    • “最佳”适应法空闲分区容量递增的次序链接(实际上性能很差,而且十分容易留下数不清的细小的外部碎片

    • “最坏”适应法空闲分区容量递减的次序链接(将大空闲区切割为小空闲区,久了会导致找不到足够大的内存块来用