发布时间 : 星期日 文章《计算机操作系统》实验指导书更新完毕开始阅读
专业资料
#include \#include \
typedef struct MEMORY_BLOCK {
int name; int address; int length; int flag;
MEMORY_BLOCK *next; }MEMORY_BLOCK;
int allocation(MEMORY_BLOCK *Header,int name,int time); int reclaim(int processname, MEMORY_BLOCK *Header); int main() {
#define NUM 10 int time,i;
MEMORY_BLOCK *Header,*t;
Header = (struct MEMORY_BLOCK *)malloc(sizeof(struct MEMORY_BLOCK)); //
Header->name=-1; Header->address=0; Header->length=100; Header->flag=0; Header->next=NULL; srand(100);
for(i=0;i time=rand() ; // time=time ; allocation(Header,i,time); } t=Header; while(t!=NULL) { printf(\ ,t->name,t->address,t->length,t->flag); t=t->next; } int processname=3;//回收 printf(\回收 process name %d\\n\ reclaim(processname,Header); t=Header; while(t!=0) { printf(\ ,t->name,t->address,t->length,t->flag); t=t->next; word完美格式 初始化存储空间 专业资料 } processname=4; printf(\回收 process name %d\\n\ reclaim(processname,Header); t=Header; while(t!=0) { printf(\ ,t->name,t->address,t->length,t->flag); t=t->next; } return 1; } int reclaim(int processname, MEMORY_BLOCK *Header) { MEMORY_BLOCK *temp,*t,*tt; t=Header; temp=t; while(t->name!=processname) { temp=t; t=t->next; } if(t==0) {printf(\ else { if(t->next!=NULL) if(temp->flag==0&&t->next->flag==0)//左右为空 { temp->name=-1; temp->length=temp->length+t->length+t->next->length; tt=t->next; temp->next=tt->next; free (tt); free (t); } else if(temp->flag==0) //左为空 { temp->name=-1; temp->length=temp->length+t->length; temp->next=t->next; free (t); } else if(t->next->flag==0) //右为空 { t->name=-1; t->length=t->length+t->next->length; t->flag=0; word完美格式 专业资料 tt=t->next; t->next=tt->next; free (tt); } else { t->name=-1; t->flag=0; } else { if(temp->flag==0) //左为空 { temp->name=-1; temp->length=temp->length+t->length; temp=t->next; free (t); } else { t->name=-1; t->flag=0; } } } return 1; } int allocation(MEMORY_BLOCK *Header,int name,int time) { MEMORY_BLOCK *temp,*t,*tt; int thresh=2; t=Header; while(t!=0) { if(t->length>time&&t->flag==0) break; t=t->next; } if(t==0) { printf(\ else{ if(t->length-time>thresh) //分割 { temp=new MEMORY_BLOCK; temp->name=-1; temp->flag=0; temp->length=t->length-time; temp->address=t->address+time; word完美格式 专业资料 t->name=name; t->flag=1; t->length=time; temp->next=t->next; t->next=temp; } else //直接分配 { t->name=name; t->flag=1; } } return 1; } 7)编写测试程序,对存储分配表进行初始化,存储分配情况和回收一个进程的存储空间后的结果在屏幕上显示出来,显示的结果如图5.4所示。 图5.4模拟输出的示意图 七、 实验步骤 1)进入vi编辑器 2)在编译器中输入所要运行的程序代码 3)退出编辑器,返回命令行输入方式,使用gcc编译器编译程序,获得能运行的目标程序。 4)运行目标程序,查看运行结果。 八、 注意事项 1)随机数的产生由rand()函数实现,rand()的输出随机数范围在0~215之间,需要转换到0~20范围。 2)节点的删除和插入方式。 3)回收内存空间时,分四种情况讨论是否需要合并。 九、 实验报告要求 需要列出运行了的程序清单及相应结果,并对结果进行分析和讨论。对结果的分析主要讨论首次适应存储分配算法的优缺点,实验结果是如何体现的? word完美格式