实验四 主存空间的分配和回收
Posted 寂静孜御
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验四 主存空间的分配和回收相关的知识,希望对你有一定的参考价值。
1. 目的和要求
1.1. 实验目的
用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。
1.2. 实验要求
采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计。
(1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。
(2)或在程序运行过程,由用户指定申请与释放。
(3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。
把空闲区说明表的变化情况以及各作业的申请、释放情况显示。
2. 实验内容
根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。
3. 实验环境
可以选用Visual C++作为开发环境。也可以选用Windows下的VB,CB或其他可视化环境,利用各种控件较为方便。自主选择实验环境。
4. 参考数据结构:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 24
struct partition{
char pn[10];
int begin;
int size;
int end; ////////
char status; //////////
};
typedef struct partition PART;
第一步:(第13周完成)
完成程序数据结构的创建,初始化内存分配情况,创建空闲分区表和已分配分区表。
1 #include<stdio.h> 2 #include<conio.h> 3 #include<string.h> 4 #define MAX 24 5 #define Memory 512 6 struct partition{ 7 8 char pn[10]; 9 int begin; 10 int size; 11 int end; //////// 12 char status; ////////// 13 }; 14 typedef struct partition PART; 15 16 PART Free[MAX],Used[MAX],addresses[MAX]; 17 int sumFree,sumUsed,sumaddresses; 18 19 void addFree(int i,int j) 20 { 21 strcpy(addresses[i].pn,Free[j].pn); 22 addresses[i].begin=Free[j].begin; 23 addresses[i].size=Free[j].size; 24 addresses[i].status=Free[j].status; 25 } 26 27 void addUsed(int i,int j) 28 { 29 strcpy(addresses[i].pn,Used[j].pn); 30 addresses[i].begin=Used[j].begin; 31 addresses[i].size=Used[j].size; 32 addresses[i].status=Used[j].status; 33 } 34 35 void init()//初始化 36 { 37 38 sumFree=0,sumUsed=0,sumaddresses=0; 39 40 strcpy(Used[1].pn,"SYSTEM"); 41 Used[1].begin=0; 42 Used[1].size=100; 43 Used[1].status=‘u‘; 44 sumUsed++; 45 46 sumaddresses++; 47 addUsed(sumaddresses,sumUsed); 48 49 50 printf("初始化,设内存总容量为512k\n"); 51 printf("系统从低地址部分开始使用,占用100k\n\n"); 52 53 54 55 strcpy(Free[1].pn,"----"); 56 Free[1].begin=100;//OS占用100K 57 Free[1].size=Memory-Free[1].begin; 58 Free[1].status=‘f‘; 59 sumFree++; 60 61 sumaddresses++; 62 addFree(sumaddresses,sumFree); 63 } 64 65 66 void PT()//打印 67 { 68 int i; 69 printf("空闲区表Free\n"); 70 printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n"); 71 for(i=1;i<=sumFree;i++) 72 printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,Free[i].pn,Free[i].begin,Free[i].size,Free[i].status); 73 74 printf("已分配分区表Used\n"); 75 printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n"); 76 for(i=1;i<=sumUsed;i++) 77 printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,Used[i].pn,Used[i].begin,Used[i].size,Used[i].status); 78 79 printf("内存使用情况,按起始址增长的排:\n"); 80 printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n"); 81 for(i=1;i<=sumaddresses;i++) 82 printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,addresses[i].pn,addresses[i].begin,addresses[i].size,addresses[i].status); 83 } 84 85 int main() 86 { 87 init(); 88 PT(); 89 return 0; 90 }
#include<stdio.h> #include<conio.h> #include<string.h> #define MAX 24 #define Memory 512 struct partition{ char pn[10]; int begin; int size; int end; //////// char status; ////////// }; typedef struct partition PART; PART Free[MAX],Used[MAX],addresses[MAX]; int sumFree,sumUsed,sumaddresses; void ft() { int i; for(i=1;i<=sumFree;i++) { if(Free[i].size>=) { sumaddresses++; sumUsed++ addUsed(sumaddresses,sumUsed,1); cpy(i); } } } void cpy(int i)//覆盖 { strcpy(Free[i].pn,Free[i+1].pn); Free[i].begin=Free[i+1].begin; Free[i].size=Free[i+1].size; Free[i].end=Free[i+1].end; Free[i].status=Free[i+1].status; } void addFree(int i,int j) { strcpy(Free[j].pn,"----"); Free[j].begin=100;//OS占用100K Free[j].size=Memory-Free[1].begin; Free[j].status=‘f‘; strcpy(addresses[i].pn,Free[j].pn); addresses[i].begin=Free[j].begin; addresses[i].size=Free[j].size; addresses[i].status=Free[j].status; } void addUsed(int i,int j,int bo) { if(bo==0) { strcpy(Used[j].pn,"SYSTEM"); Used[j].begin=0; Used[j].size=100; Used[j].status=‘u‘; } strcpy(addresses[i].pn,Used[j].pn); addresses[i].begin=Used[j].begin; addresses[i].size=Used[j].size; addresses[i].status=Used[j].status; } void init()//初始化 { sumFree=0,sumUsed=0,sumaddresses=0; sumUsed++; sumaddresses++; addUsed(sumaddresses,sumUsed); printf("初始化,设内存总容量为512k\n"); printf("系统从低地址部分开始使用,占用100k\n\n"); strcpy(Free[1].pn,"----"); Free[1].begin=100;//OS占用100K Free[1].size=Memory-Free[1].begin; Free[1].status=‘f‘; sumFree++; sumaddresses++; addFree(sumaddresses,sumFree,0); } void PT()//打印 { int i; printf("空闲区表Free\n"); printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n"); for(i=1;i<=sumFree;i++) printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,Free[i].pn,Free[i].begin,Free[i].size,Free[i].status); printf("已分配分区表Used\n"); printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n"); for(i=1;i<=sumUsed;i++) printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,Used[i].pn,Used[i].begin,Used[i].size,Used[i].status); printf("内存使用情况,按起始址增长的排:\n"); printf("\t\t\tNo.\tproname\tbegin\tsize\tstatus\n"); for(i=1;i<=sumaddresses;i++) printf("\t\t\tNo.%d\t%s\t%d\t%d\t%c\n",i,addresses[i].pn,addresses[i].begin,addresses[i].size,addresses[i].status); } int main() { init(); PT(); return 0; }
以上是关于实验四 主存空间的分配和回收的主要内容,如果未能解决你的问题,请参考以下文章