模拟实现可变分区存储管理(其他几个算法)

设计内容三  模拟实现可变分区存储管理

1.目的和要求

在熟练掌握计算机分区存储管理方式的原理的基础上,利用一种程序设计语言模拟实现操作系统的可变分区存储管理的功能,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。

2.设计内容

设计合理的数据结构来描述存储空间:对于未分配出去的部分,可以用空闲分区队列或空闲分区链表来描述,对于已经分配出去的部分,由装入内存的作业占据,可以将作业组织成链表或数组。

实现分区存储管理的内存分配功能,要求选择至少两种适应算法(首次适应算法和循环首次适应算法至少选一,最佳适应算法和最坏适应算法至少选一)。

实现分区存储管理的内存回收算法:要求能够正确处理回收分区与空闲分区的四种邻接关系。

当碎片产生时,能够进行碎片的拼接。

3.设计环境

Windows操作系统、VC++6.0

C语言

4.设计提示

(1)基础知识

分区存储管理是操作系统进行内存管理的一种方式。现代操作系统广泛采用多道程序设计的技术来提高系统吞吐量和内存的利用率。由于可变分区存储管理将一个连续的作业装入一片大小与作业恰好相等的内存中,因而地址变换的算法简单,需要的硬件支持少,变换效率高。但是最大的缺点是随着作业不断地进出内存,会将内存逐渐分割成一些大小很小而数目较多的小块,而且一块中仅能容纳一道作业,导致内存利用率较低。分区存储管理的另一个缺点是由于必须将整个作业的逻辑地址空间全部装入内存作业才可以开始运行,因而这种存储管理的方式无法实现内存的扩充。

(2)数据结构

要模拟实现可变分区存储管理,有如下一些对象需要用相关的数据结构来描述:

l  内存中没有被存储管理程序分配给作业的部分,属于空闲内存,要求以分区为单位进行统一管理以合理分配。包括对分区的描述(结构体)和对多个分区的组织(表格或链表)。

l  对于内存中已经分配给作业的那部分内存,当作业完成后应该将占据的内存归还给系统,以便进行再分配。因此必须对已分配分区进行描述和组织,以便进行内存的回收。

(2)功能模块划分

大体上可以将整个程序的模块划分成如下几个部分:

1)主模块:主要是初始化(设置物理内存的用户区的大小,选取适应算法)和界面,界面参考如下:

1------初始化

2------作业进入内存(内存分配算法1)

3------作业进入内存(内存分配算法2)

4------作业完成(内存回收,相对于内存分配算法1)

5------作业完成(内存回收,相对于内存分配算法2)

6------显示当前自由分区链

7------显示当前内存中的作业占据的分区

8------碎片拼接

9------退出

2)内存分配算法(实现两种适应算法)

3)内存回收算法(考虑四种邻接情况,尤其是采用最佳(坏)适应算法时的分区合并)

4)碎片拼接算法

5)空闲分区队列显示

6)作业队列显示

除此之外,有些反复执行的操作考虑用过程或函数实现。总而言之,整个程序应该结构清晰,界面友好,可读性好,易调试,易扩充,易维护。

1、这个程序的头文件

Link.h

2、这个程序的头文件定义

Link.cpp

3、这个程序的主函数

main.cpp

时间: 2024-10-15 07:11:02

模拟实现可变分区存储管理(其他几个算法)的相关文章

存储管理的页面置换算法

存储管理的页面置换算法在考试中常常会考到,操作系统教材中主要介绍了3种常用的页面置换算法,分别是:先进先出法(FIFO).最佳置换法(OPT)和最近最少使用置换法(LRU).大家要理解3种置换算法的含义,然后能熟练地运用在具体的练习中就可以了. 为什么要进行页面置换 在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入. 这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断.操作系统在处理缺页中断时,要把所需页面从外存

JAVA模拟内存分配与释放——首次适应算法

前言 首次适应算法(FF,first fit)是内存基于顺序搜索的动态分配分区算法,在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止,然后在按照作业的大小从该分区中划出一块内存空间,分配给请求者,余下的空闲分区仍留在空闲链中.若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已没有足够大的内存分配给该进程,内存分配失败,返回. 该算法倾向于优先利用内存中低地址部分的空闲分区,从而保留了高地址部分不断被划分.这为以后到达的大作业分配大的的内存空间创造了条件.其缺

NOIp模拟1 Incr(LIS的nlogn算法)

[分析] 这题就是拿总长度减去LIS啦,很明显. 问题是数据范围,这里用n^2就会超时,所以我们选用LIS的nlogn算法,如下. [代码] 1 #include <bits/stdc++.h> 2 #define inf 0x7fffffff 3 using namespace std; 4 5 int n, a[100005], k, f[100005], ans; 6 int g[100005];//记录当前的最优子序列 7 8 int main() { 9 cin >> n

Laoj P1659 noip模拟 - 道路规划(LCS的nlogn算法)

试题描述 吉丽王国有n个城市,每个城市有两个"附属城市",其中北部有n个城市,每个城市的编号都是1~n中的一个,且互不相同,南部的n个城市也是如此.很遗憾,南北两边的城市之间还没有道路连接,这个南北交通运输带来了很大的麻烦.国王吉丽设计规划了一种方案,决定先建n条道路,即编号相同的两个城市之间连上一条道路.如图所示,这就是建完道路后的样子.如果第i个城市和第j个城市的两条道路相交了,那么我们称这两个城市"平等互惠".吉丽想找出一个城市集合,使得集合中的任意两个城市都

声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码

上周看到一个变调算法,挺有意思的,原本计划尝试用来润色TTS合成效果的. 实测感觉还需要进一步改进,待有空再思考改进方案. 算法细节原文,移步链接: http://blogs.zynaptiq.com/bernsee/pitch-shifting-using-the-ft/ C++开源的项目,比较老的一个项目了. 源码下载地址: http://blogs.zynaptiq.com/bernsee/download/ 本人对这份算法源码进行简单的优化调整. 稍微提升了一点性能. 修改后的完整代码:

【操作系统】Link.cpp

/************************************************************************/ /* 功能: 模拟实现可变分区存储管理的最佳适应算法的链表类 时间:2014年9月1日21:57:21 作者:信管1201 1205020116 肖锋 */ /************************************************************************/ #include "Link.h"

【操作系统】main.cpp

/************************************************************************/ /* 功能: 模拟实现可变分区存储管理的最佳适应算法的链表类定义实现 时间:2014年9月1日9:25:17 作者:信管1201 1205020116 肖锋 */ /************************************************************************/ #include "Link.h&q

操作系统存储管理实验课程设计报告

操作系统报告 存储管理 姓名: 郑兆涵                                     专业: 计算机科学与技术(嵌入式方向) 一.设计目的.意义 本次实验针对:(1)存储管理实验,(2)主存储器空间的分配和回收实验,两个实验进行学习. (1)存储管理实验:本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法. (2)主存储器空间的分配和回收实验:本实验的目的是理解在不同的存储管理方式下应怎样实现主存空间

操作系统原理4——存储管理

本章考核知识点: 1.重定位 2.固定分区存储管理 3.可变分区存储管理 4.页式存储管理 5.段式存储管理 6.虚拟存储器 自学要求 : 明确存储管理的职能是对主存储器中的用户区域进行管理: 理解在不同的管理方式下如何实现存储保护.地址转换.以及主存空间的分配和回收: 比较各种管理方式的特点: 掌握虚拟存储器的实现原理和方法. 重点是: 各种管理方式的特点: 可变分区方式的主存分配算法以及移动技术: 分页式虚拟存储管理的实现以及页面调度算法: 分段式虚拟存储管理的实现. 操作系统的存储管理如同