⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem.cpp

📁 要求首先采用动态分区方案
💻 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 + -