西安博威建设工程有限公司招聘网站网站seo外包
目录
1需求分析 3
2概要设计 3
总体结构 3
数据结构. 4
分区分配算法. 5
回收分区算法. 5
首次适应算法寻找分区位置. 6
循环首次适应算法寻找分区位置. 7
最佳适应算法寻找分区位置. 7
最坏适应算法寻找分区位置. 7
绘制状态图算法. 8
程序界面. 8
3运行环境 8
硬件环境. 8
软件环境. 9
4开发工具和编程语言 9
5详细设计 9
链表初始化 9
分配分区函数. 9
回收分区函数. 10
首次适应算法. 11
循环首次适应算法. 12
最佳适应算法. 12
最坏适应算法. 13
分配状态显示图与表. 13
输入分配回收序列控制函数. 15
6调试分析 17
7测试结果 17
8参考文献 21
9心得体会 22
2 概要设计
总体结构:
在 C 语言面向过程编程方法中,常用分层方法进行编程,降低各模块之间的耦合度。在操作系统中,也用到了分层思想进行设计,每一步设计都建立在可靠的基础上,这样易于扩充和维护系统。
在此次的课程设计中,同样也使用分层的方法,可以将各种算法很简单方便的一起实现。最底层是基本的数据结构,用来存储分区的信息。上一层是分配分区的函数 alloc()和回收分区的函数 free()。通过调用 alloc()和 free()函数可以实现四种算法。通过图形展示算法可以直观地显示分配和回收过程。最上一层是程序的界面,允许用户可以自由的对内存进行分配和回收,程序展示动态结果。
总体结构如图 1。
图 1 程序总体结构
数据结构:
在实际的操作系统中,分配出去的内存记录在进程控制块中,为了加快内存的分配过程,动态分区最常采用的数据结构是空闲表或空闲链表,数据结构只记录未分配的内存分区。为了降低模拟程序的复杂度,本模拟将分配出去的和未分配出去的内存分区记录在同一个数据结构中,用一个标志表示是否已被分配。各分区按地址递增次序排列。内存的分配和回收只要是对数据结构做插入和删除操作,采用双向链表结构。
为使程序具有扩展性灵活性, 分区大小采用宏定义方式( #define MEMORY_SIZE 640),可修改分区的大小,展示在不同分区大小下的分配情况。
typedef struct SubAreaNode *SubAreaList;
struct SubAreaNode
{
int addr; //分区起始地址int size; //分区大小
int stat; //分区状态 宏定义 ALLOCED 1 FREE 0 int pid; //已分配分区的进程 idSubAreaList pre; SubAreaList next;
};
SubAreaList head; //全局变量 分区链表首指针
SubAreaList nowList; //当前位置分区指针 用于循环首次适应算法