📄 memory.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 + -