#include"stdio.h"
#include"stdlib.h"
#include"time.h"
struct wuli{
int wuli_number;
char pname; /*已分配区表登记栏标志,用"0"表示空栏目*/
}; /*内存表*/
struct wuli wuli_table[20]={0};
struct page{
char pname;//进程名称
int psize;//进程大小
int pagetable[10];//进程页表
};//页表
struct page page_table[10]={0};
int allocate(int wulisize,int i,int pagesize);//为进程分配内存空间
int reclaim(int wulisize,char pname);//释放进程占用的空间
void output();
int main()
{
int pagesize;//分页大小
int wulisize=80;//内存大小
char pname;
int xuanze;//操作选择
int i;
printf("输入页面大小:\n");
scanf("%d",&pagesize);
//初始化
for(i=0;i<20;i++)
{
wuli_table[i].wuli_number=i;
wuli_table[i].pname='0';
}
for(i=0;i<10;i++)
{
page_table[i].pname='0';
}
//初始化后的内存空间有一部分已经被使用
srand((unsigned)time(NULL));
for(i=0;i<7;i++)
{
int number=rand()%19+1;
wuli_table[number].pname='a';
wulisize--;
}
output();
//进入存储分配
while(wulisize!=0)
{
printf("选择操作\n1.分配 2.回收\n");
scanf("%d",&xuanze);
if(xuanze==1)
{
for( i=0;i<10;i++)
{
if(page_table[i].pname=='0')
{
getchar();
printf("输入进程名称:");
scanf("%c",&page_table[i].pname);
getchar();
printf("输入进程大小:");
scanf("%d",&page_table[i].psize);
break;
}
}
wulisize=allocate(wulisize,i,pagesize);
}else
{
printf("输入进程名称:");
getchar();
scanf("%c",&pname);
wulisize=reclaim(wulisize,pname);
}
output();
}
return 0;
}
int allocate(int wulisize,int i,int pagesize)
{
int k;
int j;
for(k=0;k<(page_table[i].psize/pagesize);k++)
{
for( j=0;j<20;j++)
{
if(wuli_table[j].pname=='0')
{
wuli_table[j].pname=page_table[i].pname;
page_table[i].pagetable[k]=j;
wulisize--;
break;
}
}
}
return wulisize;
}
int reclaim(int wulisize,char pname)
{
int j;
int k;
for( j=0;j<20;j++)
{
if(wuli_table[j].pname==pname)
{
wuli_table[j].pname='0';
wulisize++;
}
}
for (j=0;j<10;j++)
{
if(page_table[j].pname==pname)
{
page_table[j].pname='0';
page_table[j].psize=0;
for(k=0;k<10;k++)
{
page_table[j].pagetable[k]=0;
}
break;
}
}
return wulisize;
}
void output(){
int i;
printf("————————内存分配情况——————————\n");
printf("物理块号 进程名\n");
for(i=0;i<20;i++)
{
printf("%d %c\n",wuli_table[i].wuli_number , wuli_table[i].pname);
}
}
这个实验让我对存储的管理理解得更加透彻了。