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

📄 memory.h

📁 要求首先采用动态分区方案
💻 H
字号:
// Memory.h: interface for the CMemory class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MEMORY_H__C18D22CE_D7CD_40DB_AB31_38CF60EB3DA8__INCLUDED_)
#define AFX_MEMORY_H__C18D22CE_D7CD_40DB_AB31_38CF60EB3DA8__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <stdio.h>

#define MAX_SIZE 1024 * 1024
#define SYS_SIZE 1024 * 16
#define SYS_ADDR 1024 * 16
#define SYS_PART 0

typedef struct MemBlock
{
	int m_nAddr;	//存储块的始址
	int m_nSize;	//存储块的大小
	int m_nPid;		//存储块所属的分区
	int m_nJid;		//存储块所属的作业号
	bool m_bAlloc;	//存储块分配状态
	MemBlock * next;
	MemBlock * prev;

	MemBlock(int addr,int size):m_nAddr(addr),m_nSize(size),
		m_nPid(-1),m_nJid(-1),m_bAlloc(false),next(0),prev(0)
	{
	}
	void Print()const
	{
		//printf("ADDR %d SIZE %d ALLOC %d JID %d PID %d\n",m_nAddr,m_nSize,m_bAlloc,m_nJid,m_nPid);
		printf("%7d %7d %7d %7d %7d\n",m_nAddr,m_nSize,m_bAlloc,m_nJid,m_nPid);
	}
} * pMem;

class CMemory  
{
public:
	pMem GetBlockFromPat(int nPar)const;
	void UnloadSystem();
	void LoadSystem();
	pMem GetBlockFromAddr(int addr)const;
	pMem GetBlock()const;
	pMem Compact(pMem block);
	pMem Split(pMem block,int size);
	void Print()const;
	//constructors and destructors
	CMemory();
	virtual ~CMemory();
	
	//member variables
	pMem m_pBlock;	//内存块链
private:
};

//分区链中的项
typedef struct Item
{
	int m_nAddr;	//块始址
	int m_nSize;
	Item * next;	
	Item * prev;

	Item(int addr,int size):m_nAddr(addr),m_nSize(size),prev(0),next(0){}
} * pItem;

class CAvail  
{
public:
	pItem Compact(pItem item);
	void Update(int addr,int size,bool bPlus);
	pItem GetAvail()const;
	void Remove(int addr);
	void Print();
	void Add(int addr,int size);
	CAvail();
	virtual ~CAvail();
	
	//
	pItem m_pAvail; //维持一个可用分区号链
};

class CFull  
{
public:
	pItem GetFull()const;
	void Print()const;
	void Remove(int addr);
	void Add(int addr,int size);
	CFull();
	virtual ~CFull();

	pItem m_pFull;	//维持一个分配分区链
};

typedef struct ReqItem
{
	int m_nJid;//请求作业号
	int m_nSize;//请求分区大小
	int m_nAddr;//请求分区地址
	bool m_bAck;//作业请求应答
	ReqItem * next;
	
	ReqItem(int jid,int size):m_nJid(jid),m_nSize(size),m_nAddr(-1),next(0)
	{
	}
	void Print()const
	{
		//printf("JID %d ADDR %d SIZE %d\n",m_nJid,m_nAddr,m_nSize);
		printf("%7d %7d %7d\n",m_nJid,m_nAddr,m_nSize);
	}
} * pReqItem;

class CRequest  
{
public:
	pReqItem GetRequst(int jid)const;
	void Print()const;
	void Remove(int id);
	void Append(int id,int size);
	CRequest();
	virtual ~CRequest();

	pReqItem m_pReq;
};



#endif // !defined(AFX_MEMORY_H__C18D22CE_D7CD_40DB_AB31_38CF60EB3DA8__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -