---------------------------------作者:_____________-----------------------------日期::_____________实验三-存储管理实验实验三存储管理实验一. 目的要求: 1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。 2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。:1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。算法描述:本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区,其中分区的表项有分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。算法原程序#include""#include""#include<>#include<>#definePCB_NUM5//模拟进程数量#defineINT800//内存分区数量structMemInf{intaddr;//分区起始地址intsize;//分区大小intstate;//0表示空闲,>0时表示已分配,存储的是进程ID};structPCB{intpcbID;//进程IDintsize;//进程大小intRunState;//运行状态,0表示就绪,1表示已分配内存正运行,2表示运行结束且退出内存intTolTime;//总需要运行时间intRunTime;//已运行时间}pcbList[PCB_NUM];voidmenu()//菜单{intm;system("cls");printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t固定分区存储程序演示\n");printf("\t\t*********************************************\t\t\n");printf("\n\t\t\.");printf("\n\t\t\.");scanf("%d",&m);switch(m){case1:break;case0:system("cls");menu();break;default:system("cls");break;}}voidpaixu(Mem,intn){inti,j,t;for(j=0;j<n-1;j++)for(i=0;i<n-j-1;i++)Mem[i].Mem[i+1].size){Mem[i].Mem[i].Mem[i+1].Mem[i+1].size=t;}}voidpaixu2(){inti,j,t;for(j=0;j<4;j++)for(i=0;i<4-j;i++)if(pcbList[i].size>pcbList[i+1].size){t=pcbList[i].size;pcbList[i].size=pcbList[i+1].size;pcbList[i+1].size=t;}}voidmain(){DD:menu();charch;inti,j,n,a=0;Mem;system("cls");printf("你要分多少个分区呢,请输入数值吧:");scanf("%d",&n);ComMem=(structMemInf*)malloc(n*sizeof(structMemInf));printf("请划分内存固定大小分区:\n");//划分内存固定大小分区for(i=0;i<n;i++){printf("输入固定分区%d分区的长度:",i);//输入固定分区每个的长度scanf("%d",&ComMem[i].size);if(i==Mem[i].addr=40;//Mem[i].Mem[i-1].Mem[i-1].size;//Mem[i].state=0;//Mem[i].size+a;if(a>=INT){printf("超出规定内存范围");ch=getchar();ch=getchar();gotoDD;}}Mem,n);//初始化就绪进程队列pcbList[0].pcbID=1;pcb
实验三-存储管理实验 来自淘豆网m.daumloan.com转载请标明出处.