📄 mem.cpp
字号:
#include "Partition.h"
#include<stdlib.h>
void InfoPat(CPartition & partion);
void InfoReq(CRequest & request);
void AllocPartition(CPartition & partition,CRequest & requst);
void RevokePartition(CPartition & partition,CRequest & requst);
void Dispatch(CPartition & partition,CRequest & request);
void Addr_Logic_To_Phs(CPartition & partittion);
void Init();
int main()
{
CPartition partition;
CRequest request;
Dispatch(partition,request);
return 0;
}
void InfoPat(CPartition & partition)
{
printf("\n--------------物理内存分布---------------\n");
printf("%7s %7s %7s %7s %7s\n","ADDR","SIZE","ALLOC","JID","PID");
partition.m_pMem->Print();
printf("-----------------------------------------\n");
printf("--------------可用分区链-----------------\n");
printf("%7s %7s\n","ADDR","SIZE");
partition.m_pAvail->Print();
printf("-----------------------------------------\n");
printf("--------------已用分区链-----------------\n");
printf("%7s %7s\n","ADDR","SIZE");
partition.m_pFull->Print();
printf("-----------------------------------------\n");
}
void InfoReq(CRequest & request)
{
printf("---------------请求链分布----------------\n");
printf("%7s %7s %7s\n","JID","ADDR","SIZE");
request.Print();
printf("-----------------------------------------\n");
}
void Dispatch(CPartition & partition,CRequest & request)
{
int nsel;
while (true)
{
Init();
scanf("%d",&nsel);
switch (nsel)
{
case 1:
AllocPartition(partition,request);
break;
case 2:
RevokePartition(partition,request);
break;
case 3:
Addr_Logic_To_Phs(partition);
break;
case 4:
InfoPat(partition);
break;
case 0:
return ;
default:
printf("Wrong service...\n");
break;
}
system("pause");
system("cls");
}
}
void Addr_Logic_To_Phs(CPartition & partition)
{
int nPar,nAddr;
printf("Enter the logic partition and address :");
scanf("%d%d",&nPar,&nAddr);
printf("%d %d\n",nPar,nAddr);
int addr = partition.LoginToPhs(nPar,nAddr);
if (addr != -1)
{
printf("%d : %d maps to %d\n",nPar,nAddr,addr);
}
}
void AllocPartition(CPartition & partition,CRequest & request)
{
int jid,size;
printf("Enter the Job :");
scanf("%d",&jid);
scanf("%d",&size);
request.Append(jid,size);
pMem block = partition.Alloc(size);
if(!block)
{
printf("Partition Wrong...\n");
return ;
}
block->m_nJid = jid;
request.GetRequst(jid)->m_nAddr = block->m_nAddr;
InfoPat(partition);
InfoReq(request);
}
void RevokePartition(CPartition & partition,CRequest & request)
{
int index;
printf("Enter the job to revoke :");
scanf("%d",&index);
pReqItem item = request.GetRequst(index);
if (!item)
{
InfoPat(partition);
InfoReq(request);
return ;
}
printf("Revoke addr is %d\n",item->m_nAddr);
partition.Revoke(request.GetRequst(index)->m_nAddr);
request.Remove(index);
InfoPat(partition);
InfoReq(request);
}
void Init()
{
printf(" ------------------------------------------------------------------\n");
printf(" -- 1--内存分区;2--内存回收;3--地址映射;4--内存监测;0--退出 --\n");
printf(" ------------------------------------------------------------------\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -