操作系统大型实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统大型实验报告
姓名林丹学号200626410112 班级软件工程2+3(061)得分
一、实验目的:
了解动态分区分配方式中使用的数据结构,熟悉最优分配算法,并进一步加深对动态扮区存储管理方式包括理解分配内存资源及回收资源及其实现过程的理解。
二、实验环境:
Win2000/WinXP VC++6.0
三、实验内容:
(1)用C++语言分别实现采用最佳适应算法的动态分区分配过程excellent() 和回收过程mfree()。
(2)假设初试状态下,可用的内存空间为1024KB,并初始化空闲区和已分配区
(3)每次分配和回收后显示空闲内存分区链情况(共有多个空闲分区,每个空闲分区的大小分别为多大,以及空闲标记)。
(4) 回收内存时若存在连续的空闲结点则合并,处理释放内存产生的碎片。
四.实验代码及分析解释
程序主要以数组形式实现,相关函数如下:
1.void initial()
初始化空间段(空闲区和已分配区),大小可自定。
2.void excellent()
采用最优算法分配内存,。
3.void print()
输出已经分配和空闲资源情况。
4.void mfree()
回收内存,若存在连续的空闲结点则合并
5.void main()
Main主函数,实现整个过程;包括选择对作业的操作类型,选0退出程序,选1进行内存分配,选2撤消某作业并回收资源选3输出已经分配和空闲资源情况。
源程序:
#include
#include
#include
#include
#include
#include
const int MAXJOB=20; //定义最大作业数
typedef struct node
{ //结构体
int start;
int length;
char tag[20];
}job;
job frees[MAXJOB];//定义空闲区表
int free_quantity;
job occupys[MAXJOB];//定义已分配区表
int occupy_quantity;
//初始化函数
void initial()
{
int i;
for(i=0;i { frees[i].start=0; frees[i].length=1024; strcpy(frees[i].tag,"free"); //标识空闲区"free" occupys[i].start=0; occupys[i].length=0; strcpy(occupys[i].tag,""); //标识已分配区 } free_quantity++; //occupy_quantity=0; } //显示 void print() { int i; cout< cout<<"当前空闲表:"< cout<<"起始地址长度状态"< for(i=0;i { cout.setf(2); cout.width(12); cout< cout.width(10); cout< cout.width(8); cout< } cout< cout<<"当前已分配表:"< cout<<"起始地址长度作业名"< for(i=0;i { cout.setf(2); cout.width(12); cout< cout.width(10); cout< cout.width(8); cout< } } void excellent() //分配内存,给定作业采用最佳分配算法分配xk大小的空间(OPT) { char job_name[20]; int job_length; int i,flag; cout<<"请输入新申请内存空间的作业名和空间大小:"; cin>>job_name>>job_length; flag=0; //标记申请空间是否成功,"0"成功,"1"失败 for(i=0;i { if(frees[i].length>=job_length) { //如果要申请的内存空间小于当前空闲区大小,则标记flag=1表示申请空间成功flag=1; } } if(flag==0)//标记是否满足申请要求 { cout< else