实验报告
学院(系)名称:计算机与通信工程学院
姓名 班级 张君卓 2013级1班 课程名称 学号 实验项目 操作系统 2015 年11月13日 第5、6节 2011 年12月1 日 第3、4节 2011 年12月5 日 第7、8节 专业 计算机科学与技术 实验二:存储器的分配与回收算法实现 课程代码 软件实验室7-216 软件实验室7-219 软件实验室7-215 实验时间 实验地点 批改意见 成绩 教师签字: 实验内容: 1. 模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。 2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。 3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。 4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。 5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。 实验要求: 1. 详细描述实验设计思想、程序结构及各模块设计思路; 2. 详细描述程序所用数据结构及算法; 3. 明确给出测试用例和实验结果; 4. 为增加程序可读性,在程序中进行适当注释说明; 5. 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等; 6. 实验报告撰写要求结构清晰、描述准确逻辑性强; 7. 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。
1 / 14
【实验过程记录(源程序、测试用例、测试结果及心得体会等)】
#include
typedef struct FreeLink{//定义自由链 struct FreeLink *prior; char name; int start; int size; bool flag;
struct FreeLink *next; }* ptr,*head; head top; ptr p;
void print(){//将内存分配情况打印到屏幕上 p=top;
cout<<\内存分配情况表************************\ cout<<\区号\\t\\t\起始位置\\t\区间长度\\t\区间状态\\t\ do{ cout<
while(p!=NULL); }
void clear(){//结束操作时清空“内存”以备其他操作 do{ p=top; top=top->next; free(p); }
while(top!=NULL); }
void asc(ptr &p){//最佳适应法的内存分配函数 int min; ptr op;
FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink)); cout<<\请输入要分配内存的进程名\ cin>>fl->name;
cout<<\请输入要分配内存的大小\ cin>>fl->size; min=256;
2 / 14
fl->flag=true; do{ if(p->flag==false&&p->size<=min&&p->size>=fl->size){ min=p->size; op=p; } p=p->next; }
while(p!=NULL); if(op->size>fl->size){ fl->start=op->start;
op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op;
fl->prior=op->prior; op->prior->next=fl; op->prior=fl; goto flag1; }
if(op->size==fl->size){ op->flag=fl->flag; op->name=fl->name; free(fl); goto flag1; }
cout<<\内存过小,分配失败!\flag1: cout<<\分配成功!\flag2: ; }
void dec(ptr &p){//最坏适应法的内存分配函数 int max; ptr op;
FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink)); cout<<\请输入要分配内存的进程名\ cin>>fl->name;
cout<<\请输入要分配内存的大小\ cin>>fl->size; max=fl->size; fl->flag=true; do{ if(p->flag==false&&p->size>=max){ max=p->size; op=p; } p=p->next;
3 / 14
相关推荐: