博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验四 主存空间的分配和回收
阅读量:7091 次
发布时间:2019-06-28

本文共 3653 字,大约阅读时间需要 12 分钟。

实验四、主存空间的分配和回收

专业:商软2班   姓名:柯晓君  学号:201406114210

一、        实验目的

用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。

二、        实验内容和要求

1.  实验要求

采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计。

(1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。

(2)或在程序运行过程,由用户指定申请与释放。

(3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。

把空闲区说明表的变化情况以及各作业的申请、释放情况显示。

2.  实验内容

根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。 

三、        实验方法、步骤及结果测试

1. 原理分析及流程图

2.主要程序段及其解释

1 #include
2 #include
3 #include
4 #define MAX 24 5 struct partition{ 6 char pn[10]; 7 int begin; 8 int size; 9 int end; 10 char status; 11 }; 12 typedef struct partition PART; 13 PART pcb[MAX]; 14 int C=512; 15 int k=0; 16 void Init() 17 { 18 pcb[0].begin = 0; 19 pcb[0].size = C; 20 pcb[0].end = C; 21 pcb[0].status = 'f'; 22 } 23 24 void next(int i) 25 { 26 pcb[i+1].begin = pcb[i].end; 27 pcb[i+1].size = C-pcb[i].size; 28 C=C-pcb[i].size; 29 pcb[i+1].end=512; 30 pcb[i+1].status='f'; 31 } 32 void Output() 33 { 34 int i; 35 printf("空闲区表Free:\n"); 36 printf("No.\tproname\tbegin\tend\tsize\tstatus\n"); 37 for(i=0;i<=k;i++) 38 { 39 if(pcb[i].status=='f') 40 printf("No.%d \t %s \t %d \t %d \t %d \t %c \n",i+1,pcb[i].pn,pcb[i].begin,pcb[i].end,pcb[i].size,pcb[i].status); 41 } 42 43 printf("\n\n==================================================\n"); 44 printf("已分配分区表Used:\n"); 45 printf("No.\tproname\tbegin\tend\tsize\tstatus\n"); 46 for(i = 0;i<=k;i++) 47 { 48 if(pcb[i].status=='u') 49 printf("No.%d \t %s \t %d \t %d \t %d \t %c \n",i+1,pcb[i].pn,pcb[i].begin,pcb[i].end,pcb[i].size,pcb[i].status); 50 } 51 printf("\n内存使用情况,按起始址增长的排::\n"); 52 printf("printf sorted by address::\n"); 53 printf("No.\tproname\tbegin\tsize\tstatus\n"); 54 printf("\n================================================\n"); 55 for(i=0;i<=k;i++) 56 { 57 printf("No.%d\t%s\t%d\t%d\t%c\n",i,pcb[i].pn,pcb[i].begin,pcb[i].size,pcb[i].status); 58 } 59 } 60 void First(int i) 61 { 62 strcpy(pcb[i].pn,""); 63 if(pcb[i-1].status=='f' && pcb[i+1].status=='f') 64 { 65 pcb[i-1].size = pcb[i-1].size+pcb[i].size+pcb[i+1].size; 66 pcb[i-1].end = pcb[i+1].end; 67 for(i=i;i
=C)156 {157 printf("内存空间不足!\n");158 Inputsize();159 }160 else{161 next(k);162 k++;163 }164 }165 166 void choice()167 {168 int c;169 printf("\n\n");170 printf("\t=======================\n");171 printf("\t| 1.分配内存空间 |\n");172 printf("\t| 2.回收内存空间 |\n");173 printf("\t=======================\n");174 printf("请输入您的选择(1或2):");175 scanf("%d",&c);176 switch(c)177 {178 case 1:179 Inputname();180 Inputsize();181 Output();182 break;183 case 2:184 Retreat();185 break;186 default:187 printf("\n\n输入有误,请重新输入\n");188 choice();189 break;190 }191 }192 193 void main()194 {195 Init();196 printf("\n请输入操作系统占用的分区大小: ");197 scanf("%d",&pcb[k].size);198 printf("\n请输入操作系统的名称: ");199 scanf("%s",&pcb[k].pn);200 pcb[k].begin=0;201 pcb[k].end=pcb[k].begin+pcb[k].size;202 pcb[k].status='u';203 next(k);204 k++;205 printf("初始化,设内存总容量%d k\n",C);206 printf("系统从低地址部分开始使用,占用%d k\n",pcb[0].size);207 Output();208 while(pcb[k].end>=C)209 {210 choice();211 }212 }

3.运行结果及分析 

四、实验总结

       加深了对操作系统主存空间的分配和回收程序以及动态分区分配方式的理解。

 

转载于:https://www.cnblogs.com/950525kxj/p/5615296.html

你可能感兴趣的文章
美团客户端响应式框架 EasyReact 开源啦
查看>>
前有BAT,后出独角兽,第二梯队很焦虑
查看>>
煲仔饭与软件测试
查看>>
ORACLE同义词总结
查看>>
在linux下安装android以及C/C++开发环境
查看>>
分享:【视频:淘宝手机生活节测试分享】
查看>>
idea maven 新建多模块项目
查看>>
Sqlserver 过期
查看>>
vs2013新建文件自动保存为utf-8编码
查看>>
用系统命令加载磁盘 (隐藏文件) "学习资料"放的再深也不怕
查看>>
mysql忘记没密码
查看>>
nsq服务器安装使用与golang客户端使用
查看>>
kubernetes1.5新特性(二):支持Photon卷插件
查看>>
Navicat 10 for MySQL 注册码
查看>>
单例模式 事例操作 最喜欢枚举类型单例模式
查看>>
记录一次linux线上服务器被黑事件
查看>>
gitlab ssh key
查看>>
Java记录 -81- EnumSet和EnumMap
查看>>
我的友情链接
查看>>
服务器节能
查看>>