logo资料库

操作系统实验实验四 模拟内存管理程序.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
题目:实验四 模拟内存管理程序
操作系统实验 题目:实验四 模拟内存管理程序 实验四 模拟内存管理程序(4 学时) 1、 实验目的 了解简单的固定大小内存分配方法,掌握分区存储管理技术,了解在分区管 理机制下所需的数据结构。 2、 实验内容 1)、 将 1024K 内存按如下块大小分成十个内存块。 内存块号 内存块大小 起始地址 内存块状态 1 2 3 4 5 6 7 8 9 10 10 522 778 1034 1162 1290 1418 1450 1482 1498 512 256 256 128 128 128 32 32 16 16 NO NO NO NO NO NO NO NO NO NO 其中,在内存状态中用 NO 代表该内存块未被分配;用进程名代表该内存块已被 分配。 2)、 编制模拟内存管理程序,根据调入内存的进程大小分别采用最先适应法 和最佳适应法分配内存块。最佳适应法,如有一个 12K 的程序被运行时,它应 该被分配到内存块号 9,若有 200K 的程序运行时,应将其调入内存块号 2。最 先适应法,则是按内存块号的顺序,依次放入各进程名。有关编程请仔细阅读后 面的参考流程。
3、 实验要求 1)、 要求通过键盘输入若干进程名称和程序所占内存空间的大小,把这些进 程分配到内存表中,显示内存分配情况。 2)、 编制程序可以循环输入,输入某进程结束或某进程添加进来、进程占用 存储空间的大小,并显示内存分配情况。 3)、 当没有区间存放程序时,应有提示。 4)、 所编写的程序,应有退出功能。 5)、 每添加、结束一个进程,应有输出显示,输出显示的格式如下: 内存块号 内存块大小 起始地址 进程名(内存状态) 1 2 3 4 5 6 7 8 9 10 4、实验报告格式要求 10 522 778 1034 1162 1290 1418 1450 1482 1498 512 256 256 128 128 128 32 32 16 16 A1 NO A2 A3 NO NO NO NO NO NO 1)、实验题目 2)、程序所采用的数据结构、符号说明,及采用哪一种内存分配方法 采用的数据结构:堆栈。 a. 最先适应法 从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配 给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空 闲区链)中的空闲分区要按地址由低到高进行排序。 b. 最优适应法 它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方 法能使碎片尽量小。为适应此算法,空闲分区(空闲区链)中的空闲分区要 按大小从小到大进行排序。自表头开始查找到第一个满足要求的自由分区分 配。该算法保留大的空闲区,但造成许多小的空闲区。 3)、写出源程序清单 程序源清单如下所示: // 实验.cpp : 定义控制台应用程序的入口点。 #include #include #define L 1010 /*int x=0; int getx(){ typedef struct Lnode { int number; //内存块号 x=x+1; return x; }*/
int startaddress; int size; int state; }LNode; LNode //起始地址 //内存块大小 //内存块状态 P[L]={{1,10,512,0},{2,522,256,0},{3,778,256,0},{4,1034,128,0},{5,1162,128,0} ,{6,1290,128,0},{7,1418,32,0},{8,1450,32,0},{9,1482,16,0},{10,1498,16,0}}; int N=10; void print() { int i; printf("Number Staraddress Size State\n"); for (i=0;i<10;i++) //用 for 循环,显示内存块的分配状况 printf("%3d%12d%12d%10d\n",P[i].number,P[i].startaddress,P[i].size,P[i].state); } void First() { m 为要分配的内存大小 int i,l=0,m; //i 用于循环内存块的块数;l 为标识符,用于显示分配成功; printf("please input the memory size:"); scanf("%d",&m); for(i=0;i<10;i++) //用循环依次寻找内存块的大小是否满足输入要分配 的内存大小 { if(P[i].size
printf("address alocate successful\n\n"); { print(); } else printf("no used memory space\n"); } //最优适应分配法 Best() void Best() { int a[L];//定义新的一维数组 a[L] printf("\n please intput the size\n"); scanf("%d",&m); for(i=0;i
if(l==1||i
最 佳 置 换 算 法 的 运 行 结 果 如 下 所 示 :
4)、写出内存分配的变化情况 开始时总内存是 1024k,分成了 10 块,每块的内存大小如下: 内存块号 内存块大小 1 2 3 4 5 6 7 8 9 10 512 256 256 128 128 128 32 32 16 16
分享到:
收藏