1、1 课程设计报告课程设计报告 设计题目:设计题目:内存的连续分配算法 班级班级 : 学号学号: 姓名姓名: 指导老师指导老师: 设计时间:设计时间: 2012 年 8 月 2 摘要摘要 1、 主要算法包括:主要算法包括: 固定分区分配、动态分区分配、伙伴算法、可重定位分区分配。 2、内容要求:、内容要求: 1)定义与算法相关的数据结构,如 PCB,空闲分区表; 2)至少实现两种以上分配算法,且用户可以选择在某次执行过程中使用何 种算法; 3)在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功 能; 4)动态分区分配和可重定位分区分配必选一个实现。 本系统模拟了操作系统内存分配算法的
2、实现 ,实现了固定分区分配和动态分区分配,以及可重定位分区分配算法,采用 PCB 定义结构体来表示一个进程,定义了进程的名称和大小,进程内存起始地址和进 程状态。内存分区表采用单链表来模拟实现。 关键词:固定分区分配、动态分区分配、可重定位分区分配。 3 目录目录 1. 概述概述 .4 2. 课程设计任务及要求课程设计任务及要求 2.1 设计任务设计任务 4 2.2 设计要求设计要求 4 3. 算法及数据结构算法及数据结构 3.1 算法的总体思想(流程)算法的总体思想(流程) 5 3.2 PCB 模块模块 3.2.1 功能(运算)功能(运算) .5 3.2.2 数据结构(存储结构)数据结构(存
3、储结构) .5 3.2.3 算法(实现)算法(实现) .5 3.3 进程队列进程队列模块模块 3.3.1 功能功能 6 3.3.2 数据结构数据结构 6 3.3.3 算法算法 6 4. 程序设计与实现程序设计与实现 4.1 程序流程图程序流程图 7 4.2 程序说明(代码)程序说明(代码) 4.3 实验结果实验结果 9 5. 结论结论 10 6. 参考文献。参考文献。 10 7. 收获、体会和建议。收获、体会和建议。 10 4 一:概述 本系统模拟了操作系统内存分配算法的实现, 实现了固定分区分配和动态分区分 配,以及可重定位分区分配算法,采用 PCB 定义结构体来表示一个进程,定义了 进程的
4、名称和大小,进程内存起始地址和进程状态。内存分区表采用单链表来模 拟实现。 固定分区实现就是将单链表的每个节点的大小设为固定大小, 系统默认如果按固 定分区分配的话,只能分成 20 个相等大小的分区,因此系统只能最多运行 20 个进程。 动态分区的实现是根据进程所申请的内存大小来决定动态的有系统进行分配内 存空间大小,因此分区表里的空闲分区个数是不定的,根据进程数和进程大小决 定的。 可重定位分区算法比动态分区算法增加了紧凑和进程对换的功能。 二:课程设计任务及要求课程设计任务及要求 设计任务:设计任务: 使用 C+ MFC 实现模拟操作系统内存分配算法的实现, 定义结构体数据结构表示 进程,
5、定义单链表表示内存分区表。 设计要求:设计要求: 定义与算法相关的数据结构,如 PCB,空闲分区表; 至少实现两种以上分配算法, 且用户可以选择在某次执行过程中使用何种算 法; 在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功能; 动态分区分配和可重定位分区分配必选一个实现。 5 三:三:算法及数据结构算法及数据结构 #define free 0 /表示进程状态空闲 #define busy 1 /表示进程状态忙 typedef int Status; /表示进程状态 struct PCB /表示进程PCB结构体 CString name; /进程name Status status; /进程状态busy or free int lStartAddres; /进程起始地址 int Size; /进程大小 ; struct Node /表示组成链表的结点结构体 PCB data; Node *next; ; 6 class Queue /表示分区表的单链表类 public: Queue(); Queue() /void Show(); /内存区分配情况显示 int GetLength(); int GetAllFree(); /获得所有空闲分区总大小 void InitialMemory(int ); /