7.内存管理基础+连续分配
程序执行基本原理
-
程序是一条一条被读入寄存器内执行的
-
内存卡是一个临时保存中介,磁盘是永久保存介质
-
地址总线的选中原理(译码器原理)
-
四大存储器的速度和所处位置
寄存器>Cache>内存卡>磁盘
概念辨析
CPU位数、OS位数、内存地址总线数、内存数据总线数、逻辑地址位数、物理地址位数、真实内存大小、虚拟内存大小
内存管理逻辑图
- 怎么装入?
- 装在哪里?(记录(表格),查询(表格))
程序基础知识
-
编译:源代码翻译成若干个目标模块
-
链接:将目标模块和库函数链接形成一个装入模块(静态链接、装入时动态链接、运行时动态链接)
-
装入:将装入模块装入内存(绝对装入)
- 绝对装入:装入前就确定好程序的装入位置,使逻辑地址与物理地址对齐,避免错位(只适用单道程序)
- 可重定位装入:又称静态重定位,装入时,由装入程序对逻辑地址进行一次性修改,从而避免错位。多用于多道程序,地址0开始,装入时修改(早期多道批处理阶段)
- 动态运行时装入:又称动态重定位,需要重定位寄存器辅助。程序运行时,利用重定位寄存器的弥补作用,让CPU认为逻辑地址和物理地址对齐,避免错位(现代操作系统)
连续分配存储管理
-
单一连续分配:
优点:简单、无外部碎片、无需进行内存保护
特点:
-
①单用户,单任务 ;
-
②内存利用率极低(有内部碎片);
-
③通常采用绝对装入方式
-
-
固定分区分配:
将内存用户区分成若干个固定大小的区域,每个区域内驻留一道程序,一旦内存中空闲一个分区,即从外存后备队列中调度一个作业进来运行
系统首先建立一张分区使用表(分区使用表=分区号+分区大小+起始地址+状态标记)。内存的分配方法一般可分成以下两种:
-
最先(首次)适应法:当一个作业到达时,即从该表中顺序检索出尺寸能满足要求且未分配的分区分配给它
-
最佳适应法:当一个作业到达时,即从该表中检索出尺寸能满足要求且未分配的最小分区分配给它
特点:
-
①每个分区只装入一道程序;
-
②分区大小重要(太小装不进,太大内存利用率低);
-
③有内部碎片;
-
④通常采用静态重定位装入方式
-
-
动态分区分配:
根据进程的实际需要,动态分配内存
特点:没有内部碎片,但有外部碎片。而且外部碎片会越来越多,直到碎片小到无法分配为止。此时就需要紧凑技术(动态重定位)来整理内存。
紧凑:为解决碎片问题,就必须将部分作业在内存中移动,以便空出较大的自由分区,这个过程称为“拼接”或“紧凑"
动态分区算法:
-
最先(首次)适应法:空闲分区以地址递增的次序链接。(简单,通常也最好和最快,低地址易出现很多小的空闲区;保留高址部分大空闲区,低址部分碎片多,查找开销大)
-
循环首次适应法(邻近适应算法):由首次适应法演变而来,只不过从上一次的空闲分区开始查找(集中在高地址分配空间,高地址形成细小碎片,空闲分区分布均匀,缺乏大的空闲分区)
-
“最佳”适应法:空闲分区以容量递增的次序链接(实际上性能很差,而且十分容易留下数不清的细小的外部碎片)
-
“最坏”适应法:空闲分区以容量递减的次序链接(将大空闲区切割为小空闲区,久了会导致找不到足够大的内存块来用)
-
注意:
- 固定分区分配——产生内部碎片
- 动态分区分配——产生外部碎片
本文来自博客园,作者:风雨zzm,转载请注明原文链接:https://www.cnblogs.com/zzmxj/p/17922036.html