分页式内存管理.docx
分页式内存管理分页式内存管理模拟系统 124221013 司潜 一、实验目的和要求 通过编写模拟系统来了解分页式内存管理的方法和细节。 二、实验环境 利用VC6用C语言编写 三、实验步骤 1.建立模拟物理内存块 struct MacVol int VolAddress; float Vol; float VolLast; struct MacVol *next; ; 初始化每块内存信息 struct MacVol * mac100; struct MacVol * machead; machead=(struct MacVol *)malloc(sizeof(struct MacVol *); for(int i =0 ;i<100;i+) maci = (struct MacVol *)malloc(sizeof(struct MacVol *); maci->VolAddress = 10000 + i; maci->Vol = 1000; maci->VolLast = 1000; if(i>0) maci-1->next = maci; machead->next = mac0; mac99->next =NULL; 2.添加模拟程序 struct Pro /程序模拟块 int ProNum; /程序编号 float ProVol; /程序大小 ; int ProAddress; struct Pro* next; int aready; 添加程序并初始化 printf("添加一个模拟程序,请输入大小:n"); struct Pro *program; program = (struct Pro *)malloc(sizeof(struct Pro *); program->ProNum = num; scanf("%f",&program->ProVol); program->aready = 0; program->next = NULL; /printf("-1-n"); struct Pro *temp; temp = prohead; for(int j=0;j<num;j+) if(j = num-1) temp->next = program; else temp = temp->next; printf("程序编号:%d程序内存:%fn",program->ProNum,program->ProVol); 4.为模拟程序分页并为每页分配内存 struct MacVol *mhead; mhead = machead; struct Pro *head; head = prohead; for(int k=0; k<num; k+) head = head->next; Vol = head->ProVol; while(1) mhead = mhead->next; if(mhead->VolLast >= Vol) mhead->VolLast = mhead->Vol - Vol; program->aready = 1; program->ProAddress = mhead->VolAddress; break; 四、实验结果 成功为每一个程序分页,可以查找到每一个程序所在内存块 查找结果的程序段: int j; struct Pro *temp; temp = head; int count = 0; if( num= 0) printf("当前没有模拟程序正在运行:n"); else printf("有%d个模拟程序正在运行,请输入要查询的编号 (输入0查询所有程序列表):n",num); scanf("%d",&j); if(j = 0) for(int m=0;m<100;m+) if(temp->next = NULL) return; temp = temp->next; printf("程序编号:%d程序内存大小:%fn",temp->ProNum,temp->ProVol); else for(int k=0;k<j;k+) if(temp->next = NULL) printf("没有该程序n"); break; else temp = temp->next; if(temp->next!= NULL) printf("程序编号:%d程序内存大小:%fn",temp->ProNum,temp->ProVol); 五、实验总结 实验开始没有搞清楚分页存储的方式,搞成先分页,给页分内存,在输入程序,给程序分页。后来通过老师纠正,先输入程序,在分页分内存,最后还是成功完成了实验