4存储管理-任爱华版
试验四 存储管理 可变分区

存储管理实验----可变分区管理实验目的:通过分区存储管理模拟算法,了解可变分区的内存分配和回收过程,熟悉内存分配之最先、最佳、最差适应算法。
实验内容:1.阅读参考程序 ,写出该程序的内存分配算法是哪种?2.完善内存回收算法。
3.设计最先内存分配算法,分配从小地址开始;参考程序#include <>#include <>#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/ #define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/ #define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配,即不留小碎片*/struct{float address; /*已分配分区起始地址*/float length; /*已分配分区长度,单位为字节*/int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/}used_table[n]; /*已分配区表。
即存放已经分配的分区*/struct{float address; /*空闲区起始地址*/float length; /*空闲区长度,单位为字节*/int flag; /*空闲区表登记栏标志,用"0"表示空栏目,可用来登记空闲区,用"1"表示该空闲区未分配*/}free_table[m]; /*空闲区表,即存放空闲分区*//*主存分配函数*/void allocate(char J,float xk) /*给J作业,采用最佳分配算法分配xk大小的空间*/{int i,k;float ad;k=-1;for(i=0;i<m;i++) /*寻找空间大于xk的最小空闲区登记项k*/if(free_table[i].length>=xk && free_table[i].flag==1)if(k==-1||free_table[i].length<free_ta69ble[k].length)k=i;if(k==-1)/*未找到可用空闲区,返回*/{printf("无可用空闲区\n");return;}/*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于minisize 大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/if(free_table[k].length-xk<=minisize){free_table[k].flag=0;ad=free_table[k].address;xk=free_table[k].length;}else{free_table[k].length=free_table[k].length-xk;ad=free_table[k].address+free_table[k].length;}/*修改已分配分区表*/i=0;while(used_table[i].flag!=0&&i<n) /*寻找空表目*/i++;if(i>=n) /*无表目可填写已分配分区*/{printf("无表目填写已分分区,错误\n");/*修正空闲区表*/if(free_table[k].flag==0)/*前面找到的是整个空闲分区*/free_table[k].flag=1;else{/*前面找到的是某个空闲分区的一部分*/free_table[k].length=free_table[k].length+xk; return;}}else{/*修改已分配表*/used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return;}/*主存分配函数结束*//*主存回收函数*/void reclaim(char J)/*回收作业名为J的作业所占主存空间*/int i,k,j,s,t;float S,L;/*寻找已分配表中对应登记项*/s=0;while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n) s++;if(s>=n)/*在已分配表中找不到名字为J的作业*/{printf("找不到该作业\n");return;}/*修改已分配表*/used_table[s].flag=0;/*取得归还分区的起始地址S和长度L*/S=used_table[s].address;L=used_table[s].length;j=-1;k=-1;i=0;/*寻找回收分区的空闲上下邻,上邻表目k,下邻表目j*/while(i<m&&(j==-1||k==-1)){if(free_table[i].flag==1)if(free_table[i].address+free_table[i].length==S) k=i;/*找到上邻*/ if(free_table[i].address==S+L) j=i;/*找到下邻*/}i++;}if(k!=-1)if(j!=-1)/* 上邻空闲区,下邻空闲区,三项合并*/{。
第4章存储器管理共115页文档

• 由存储单元(字节或字)组成的一维连续的地 址空间,简称内存空间。用来存放当前正在运 行程序的代码及数据,是程序中指令本身地址 所指的、亦即程序计数器所指的存储器
分为: • 系统区:用于存放操作系统 • 用户区:用于装入并存放用户程序和数据
第四章 存 储 器 管 理
存储管理的功能
=存储分配和回收:分配和回收算法及相应的数据结构。 =地址变换: v可执行文件生成中的链接技术 v程序加载(装入)时的重定位技术 v进程运行时硬件和软件的地址变换技术和机构 =存储共享和保护: v代码和数据共享 v地址空间访问权限(读、写、执行) =存储器扩充:存储器的逻辑组织和物理组织; v由应用程序控制:覆盖; v由OS控制:交换(整个进程空间),虚拟存储的请求调
0 M- 1
模块 B CALL C; Retu rn;
0 模块 C
L 模块 B
JSR “ L+ M” L+ M- 1 Retu rn;
L+ M 模块 C
N- 1 Retu rn;
L+ M+ N- 1 Retu rn;
(a) 目标模块 图 4-3 程序链接示意图 (b) 装入模块
第四章 存 储 器 管 理
第四章 存 储 器 管 理
4.2 连续分配方式
4.2.1 单一连续分配
内存分为两个区域:系统区,用户区。 应用程序装入到用户区,可使用用户区全部空间。 最简 单,适用于单用户、单任务的OS。 优点:易于管理。 缺点:对要求内存空间少的程序,造成内存浪费;程序全 部装入,很少使用的程序部分也占用内存。
第四章 存 储 器 管 理
3. 运行时动态链接(Run-time Dynamic,当发现一个被调用模块尚未装入内存时,立 即由OS去找到该模块并将之装入内存, 把它链接到调用者 模块上。凡在执行过程中未被用到的目标模块,都不会被 调入内存和被链接到装入模块上,这样不仅可加快程序的 装入过程,而且可节省大量的内存空间。
操作系统-第4章-存储管理ppt课件教学提纲

< 限长
绝对地址
用户作业1 空闲分区2
越界中断
23
多对基址/限长寄存器
进程A 私有空间
共享区
进程B 私有空间
物理主存
重定位寄存器1 限长寄存器1
重定位寄存器2 限长寄存器2
进程A虚CPU
重定位寄存器1
限长寄存器1
重定位寄存器2
限长寄存器2
进程B虚CPU
多对重定位寄存器支持主存共享 24
4.2.3 伙伴系统
• 优点
能够解决单道程序运行在并发环境下不能与CPU速度匹 配的问题
解决了单道程序运行时主存空间利用率低的问题 实现简单
• 缺点
大作业可能无法装入 主存空间利用率不高,会出现内碎片 扩充困难 限制多道运行程序的个数
13
4.2.2 可变分区存储管理
可变分区存储管理是按作业的实际大小来划 分分区,且分区个数也是随机的,实现多个 作业对主存的共享,进一步提高主存资源利 用率。
2) 界限寄存器(下页图)
❖ 上、下界防护:硬件为分给用户作业的连续的主存空间 设置一对上、下界,分别指向该存储空间的上、下界
❖ 基址、限长防护:基址寄存器存放当前正执行者的程序 地址空间所占分区的始址,限长寄存器存放该地址空间 的长度
8
下限寄存器 2000 上限寄存器 3500
进程id 1 2 3
找时间比较长。
20
4)最坏适应分配算法 ➢ 分配能满足要求的最大区; ➢ 可以将空闲区按照大小从大到小排列,查找第一
个满足要求的。 ➢ 效率大致等同于最先适应法。 5) 快速适应分配算法 ➢ 为经常用到的长度的空闲区设置单独的链表。 ➢ 优点:查找快速; ➢ 缺点:归还时与相邻空闲区的合并即复杂又费时
第四章 内存管理

2022/12/21
1
第四章 内存管理
4.0 问题导入
在现代操作系统中同时有多个进程在运行,每 个进程的程序和数据都需要放在内存中,那么 程序员在编写程序时是否需要知道程序和数据 的存放位置呢?
如果不知道,那么多个进程同时在内存中运 行,每个进程应占用哪些空间呢,
如何保证各个进程占用的空间不冲突呢? 内存空间如何进行分配和管理呢?
2022/12/21
2
第四章 内存管理
4.1 内存管理概述 4.2 内存管理的基础 4.3 连续内存分配存储方式 4.4 虚拟存储
2022/12/21
2
4.1 内存管理概述
4.1.1 存储结构
存储层次
➢ CPU寄存器
➢ 辅存:固定磁盘、可移动 介质
层次越高,访问速度越快,
价格也越高,存储容量也
最小
7
4.1 内存管理概述
4.1.3 操作系统在内存中的位置
图4-2 仅有RAM时操作系统与用户程序的内存分配
2022/12/21
8
4.1 内存管理概述
4.1.3 操作系统在内存中的位置
图4-3 备有ROM时操作系统和用户程序之内存分配
2022/12/21
9
4.1 内存管理概述
4.1.3 操作系统在内存中的位置
多个小分区 适量中分区 少量大分区
34
内存分配例子
分区号 大小(K) 起始地址(K) 状态
1
12
20
已分配
2
32
32
已分配
3
64
64
已分配
4
128
128
未分配
固定分区使用表
2019年全国计算机等级考试四级复习纲要:存储管理

2019年全国计算机等级考试四级复习纲要:存储管理四、存储管理1.引言现代计算机系统中的存储系统常是多级存储体系,至少有主存(内存)和辅存(外存)两级。
有的系统有更多级。
主存是由系统实际提供的存储单元(常指字节)组成的一个连续地址空间,处理器可直接存取。
辅存是指软盘、硬盘、光盘和磁带等一些外部存储部件,常用来存放暂不执行的程序和数据,处理器不能直接访问,需**启动I/O 设备,才能实行内存、外存交换。
其访问速度慢,但价格便宜,常用作主存的后援设备。
主存大小由系统硬件决定,是实实在在的存储,它的存储容量受到实际存储单元的限制。
虚拟存储(简称虚存)不考虑实际主存的大小和数据存取的实际地址,只考虑相互相关的数据之间的相对位置,其容量由计算机的地址的位数决定。
系统中主存的使用一般分成两部分,一部分为系统空间,存放操作系统本身及相关的系统数据,另一部分为用户空间,存放用户的程序和数据。
(1)地址重定位用户程序需调入主存运行,即从辅存把用户已经编译链接的目标程序(有时称为可执行程序)装入主存。
因为用户作业的存储空间是运行时确定的,所以程序中的操作地址都采用相对地址(逻辑地址)的形式。
把相对地址空间的程序转换成在绝对地址(物理地址)空间上能够执行的过程称为地址重定位,也称为地址映射或地址映像。
地址重定位有两种:静态重定位和动态重定位。
静态重定位是指在程序装入时完成,一般由软件实现;动态重定位是指在程序执行时实现地址转换,它通常由一个基本地址寄存器和一个加法器组成的动态重定位机制实现。
(2)存储管理的功能早期的单用户操作系统,一次只允许一个用户程序驻留,它拥有用户地址空间的全部访问权限,存储管理的任务是存储空间的分配与回收。
在多道程序系统,多个程序同时驻留内存,如何有效地利用主存,如何让需要较大运行空间的作业运行,如何保护与共享主存等,都是存储管理应解决的问题。
存储管理应提升存储资源的利用效率,又方便用户使用,存储管理的任务应具有如下功能:①分配与回收:主存分配方法有两种:静态分配与和动态分配。
第四章存储器管理 136页PPT文档

和结构的限制,即使在用户程序比实际主存 容量还要大的情况下,程序也能正确运行.
4.1.2存储管理的功能
4.1.2.1 地址映射 一、什么是地址映射 地址映射 将程序地址空间中使用的逻辑地
址变换成主存中的物理地址的过程 称为地址映射。有时也称为地址重 定位 。
L- 1
模块 A
JSR“ L” Retu rn;
0 模块 B
L 模块 B
CALL C;
JSR “ L+ M”
M- 1 Retu rn;
L+ M- 1 Retu rn;
0 模块 C
L+ M 模块 C
N- 1 Retu rn;
L+ M+ N- 1 Retu rn;
(a) 目标模块 图 4-3 程序链接示意图 (b) 装入模块
4.2 内存分配
1、首次适应算法
首次适应算法的表是按空闲区首址升
序的(即空闲区表是按空闲区首址从小到
大)方法组织的。
4.2 内存分配
4.2 内存分配
分配时从表首开始,以请求内存区的 大小逐个与空闲区进行比较,找到第 一个满足要求的空闲后,若空闲区大 小与请求区的大小相等,则将该空闲 区分配给请求者,并撤消该空闲区所 在表目;若大于请求区,就将该空闲 区的一部分分配给请求者,然后,修 改空闲区的大小和首址。
第四章 存储器管理
4.1程序的装入与链接
4.1.1基本概念
存储器分成两类:
内存储器(简称内存、主 外存储器(简称外存、辅
存、物理存储器)
助存储器)
处理机能直接访问的存储 处理机不能直接访问的存
四章节存储器管理-资料
• 采用循环查找的方式 • 优点:空闲分区的分布得更均匀;缺点:会缺乏大空闲分区;
(3) 最佳适应算法。
• 找到满足要求,又是最小的空闲分区 • 从小到大形成一空闲分区链 • 但切割剩余部分是最小的
第四章 存 储 器 管 理
从头 开始 查表
可以采用这样两个方法来解决这一问题: ① 采用离散分配方式来解决难以找到一块连续的大内存空间的问题: ② 只将当前需要的部分页表项调入内存, 其余的页表项仍驻留在磁盘上, 需要时再调入。
第四章 存 储 器 管 理 1. 两级页表(Two-Level Page Table)
逻辑地址结构可描述如下:
第四章 存 储 器 管 理
• 为加快转换速度,增设重定位寄存器,用于存放起始 地址
• 在小分区“拼凑”时,不需对程序作任何修改
第四章 存 储 器 管 理 2.
0 100
LOAD1,2500
2500 365
相对地址 2500
重定位寄存器 10000
10000 10100
LOAD1,2500
+
12500
365
5000
作业J
15000
第四章 存 储 器 管 理
4.2 连续分配方式
4.2.1 单一连续分配 (单用户、单任务)
把内存分为系统区和用户区两部分 系统区仅提供给OS使用,通常是放在内存的低址部分; 用户区是指除系统区以外的全部内存空间, 提供给用户使 用。
第四章 存 储 器 管 理
4.2.2 固定分区分配
1. 划分分区的方法 (1) 分区大小相等。 (2) 程序太小时浪费内存,程序太大时可能不足以装入。 (3) (2) 分区大小不等。 (4) 多个较小的分区,适量的中等分区,少量大分区
存储管理
第四章 存储管理
OS 作业1 (8 KB) 作业4 (24 KB) 作业5 (128 KB)
作业4 (24 KB)
作业6 (256 KB) 作业7 (256 KB)
888 KB
1024 KB (a) (b)
(c)
图 4.9 可再定位式分区分配的靠拢过程
第四章 存储管理
352 KB 有效地址 352 KB + 50 L 1,352 K + 9800 352 KB + 9800 浮动寄存器 -32 KB
第四章 存储管理
第四章
存储管理
4.1 4.2 4.3 4.4 4.5 4.6 存储管理的基本概念 早期的存储管理 分页存储管理 请求分页存储管理 分段存储管理 段页式存储管理
第四章 存储管理
4.1 存储管理的基本概念
存储管理的主要内容:
1. 2.
存储分配问题:研究存储共享和各种分配算法。 地址再定位问题:研究各种地址变换机构, 以及 静态和动态再定位方法。 存储保护问题:研究保护各类程序、 数据区的方 法。 存储扩充问题:主要研究虚拟存储器问题及其各种 调度算法。
实现了主存的共享,因而有助于多道程序设计,更 有效地利用了处理机和I/O设备,从而使系统的吞吐 量和作业周转时间得到了相应的改善。 相对于后面介绍的存储管理方式,本方案为实现分 区分配所使用的表格、占用的存储容量相对较少, 算法也相对简单。 实现存储保护的措施也比较简单。 多重分区分配方案能实现对子程序、 数据段的共享。
剩余容量 7KB 23KB 23KB 87KB 399KB 539 KB
可变式分区法
作业4 24 KB 作业5 128 KB 作业6 256 KB
第四章 存储管理