实验三存储管理实验.docxVIP

  • 121
  • 0
  • 约2.04万字
  • 约 26页
  • 2019-03-22 发布于湖北
  • 举报
实验三 存储管理实验 一.? 目的要求:? 1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。? 2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二.实验内容: 1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。 算法描述: 本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区,其中分区的表项有分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。 算法原程序 #include stdio.h #include windows.h #include stdlib.h #include conio.h #define PCB_NUM 5 //模拟进程数量 #define INT 800//内存分区数量 struct MemInf { int addr; //分区起始地址 int size; //分区大小 int state; //0表示空闲,0时表示已分配,存储的是进程ID }; struct PCB { int pcbID; //进程ID int size; //进程大小 int RunState; //运行状态,0表示就绪,1表示已分配内存正运行,2表示运行结束且退出内存 int TolTime; //总需要运行时间 int RunTime; //已运行时间 } pcbList[PCB_NUM]; void menu() //菜单 { int m; 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\t1.执行程序.); printf(\n\t\t\t0.退出程序.); scanf(%d,m); switch(m) { case 1: break; case 0: system(cls); menu(); break; default: system(cls); break; } } void paixu(struct MemInf* ComMem,int n) { int i,j,t; for(j=0; jn-1; j++) for(i=0; in-j-1; i++) if(ComMem[i].sizeComMem[i+1].size) { t=ComMem[i].size; ComMem[i].size=ComMem[i+1].size; ComMem[i+1].size=t; } } void paixu2() { int i,j,t; for(j=0; j4; j++) for(i=0; i4-j; i++) if(pcbList[i].sizepcbList[i+1].size) { t=pcbList[i].size; pcbList[i].size=pcbList[i+1].size; pcbList[i+1].size=t; } } void main() { DD: menu(); char ch; int i,j,n,a=0; struct

文档评论(0)

1亿VIP精品文档

相关文档