目录
(3)当有很多空闲分区均满足要求时,选择哪个分区?——动态分区分配算法
一、覆盖
用来解决程序大小超过物理总和的问题,分为两个区,常用的放到固定区,不常用的放在覆盖区
优点:逻辑上增大内存
缺点:必须由程序员写好,增加用户编程负担
二、交换
(1)思想
当内存 紧张的时候,内存 会将一些进程换出到外存去,叫做挂起队列,
当内存不紧张的时候,内存会将一些进程换入到内存
(2)pcb不移动不换出
pcb需要记录换出到外存去的位置信息
(3)需要中级调度
(4)放在外存的什么位置
对换区。磁盘分为文件区和对换区,文件区适用于离散型,对换区速度比文件区快,采用连续型分配方式
(5)什么时候交换,交换哪种进程
当内存紧张的时候,交换阻塞进程和优先级低的进程
覆盖和交换的区别:
覆盖是在一个进程当中完成的,交换是在多个进程之间进行的
三、连续分配管理方式
分为单一连续分配,固定分区,可变分区(动态分区)
1.单一连续分配
(1)特点:
分为系统区和用户区,内存中只有一道程序
(2)优缺点:
简单,无外部碎片,可用覆盖技术;
单任务单用户,又内部碎片(使用了但浪费了的),储存率低
(3)内存保护
不一定需要,但是CPU会设置两个处理器:界限寄存器(放置用户区的长度)和重定位寄存器(放置用户区的起始地址)
运行机制:将物理地址和界限寄存器的地址进行比较,如果没有超出地址范围则继续执行,如果超过了就中断指令
(4)采用静态重定位方式
2.固定分区分配
(1)特点
每个分区只装入一道作业,可并发执行,是提前划分好大小,数目及大小一旦确定好之后就不能改变
(2)分类
a、分区大小相等
b、分区大小不等
(3)固定分区运行过程
系统会先建立一个分区分配表(包括大小,起始地址,状态),当有进程想进入时,会先去查找这张表里面有没有满足要求的,尚未分配的分区,如果有就将它分配给进程,如果没有则拒绝分配
(4)优缺点
优点:简单,无外部碎片
缺点:大作业不能运行,产生内部碎片,内存利用率不高
(5)保护机制
设置低界限寄存器和高界限寄存器
(6)采用静态重定位方式
3.动态分区(可变分区)
(1)特点
不会预先划分内存分区,会根据进程的大小动态建立分区
(2)用什么数据结构记录内存的使用情况
常用的2种数据结构:空闲分区表和空闲分区链
空闲分区表——已配表和空闲表,
当有数据请求分配时,已配表会增加一条记录,空闲表减少一条记录,
当有数据请求释放时,已配表会减少一条记录,空闲表增加一条记录
(3)当有很多空闲分区均满足要求时,选择哪个分区?——动态分区分配算法
动态分区分配算法:首次适应,最佳适应,最坏适应,邻近适应
a、每次都按照从低地址开始查找,按照地址递增的次序排列
b、尽可能多的留下大片的空闲区,按容量递增次序链接(空闲区域和大小差不多),会产生很多外部碎片
c、和最佳适应算法相反,按照容量递减的顺序
d、是首次适应的改良,区别在于如果不用重复排序
(4)可变分区的回收——合并相邻分区
需要根据不同条件合并,改变分区大小和起始地址的信息
(5)优缺点
优点:灵活性强
缺点:存在外部碎片(空闲区间太小用不了)——可以用紧凑技术解决
(6)保护
设置基址寄存器和限长寄存器