1.软件:虚拟机VMware
2.环境:Linux系统环境
设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。
可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。
设计一个可变式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 对分区的管理法可以是下面三种算法之一:首次适应算法;最坏适应算法;最佳适应算法。
编写并调试一个段页式存储管理的地址转换的模拟程序。
#include
#include
#include
#define NUM 4
typedef struct partiTab
{int no;int size;int firstAddr;char state;
}PARTITAB;
PARTITAB parTab[NUM];
typedef struct jcb/*定义作业控制块JCB部分信息*/
{char name[10];//作业名int size;//作业大小struct jcb *link;//链指针
}JCB;
typedef struct
{JCB *front,*rear;
}jcbQue;
jcbQue *jcbReadyQue;
void AllocateMemory(int size)
{int i;PARTITAB p;for(i=0;ip=parTab[i];if(p.state='N' && p.size>size)parTab[i].state='Y';elseprintf("没有空闲分区,无法分配内存!\n");}
}
void createTab()
{int i;for(i=0;i//getPartiTab(PARTITAB);parTab[i].no=i+1;parTab[i].size=20;parTab[i].firstAddr=21;parTab[i].state='N';}
}
void checkTab()
{int i;printf("分区号\t大小\t起址\t状态\n");for(i=0;iprintf("%d\t",parTab[i].no);printf("%d\t",parTab[i].size);printf("%d\t",parTab[i].firstAddr);printf("%c\n",parTab[i].state);}
}
void recycleMemory(int i)
{parTab[i-1].state='N';
}
int main()
{int i;printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t 存储管理实验\n");printf("\t\t\t\t 固定式分区分配存储管理\n");printf("\t\t*********************************************\t\t\n");createTab();checkTab();printf("请按任意键继续:\n");getchar();printf("每个分区装入一道作业:\n");for(i=0;iAllocateMemory((i+1)*3);}checkTab();printf("请按任意键继续:\n");getchar();printf("假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)\n");recycleMemory(2);checkTab();printf("请按任意键继续:\n");getchar();printf("接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为10)\n");AllocateMemory(10);checkTab();return 0;
}
好好学习,天天向上。