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

📄 processlink.cpp

📁 模拟操作系统的内存页式模拟
💻 CPP
字号:
// ProcessLink.cpp: implementation of the CProcessLink class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "PageManage.h"
#include "ProcessLink.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CProcessLink::CProcessLink()
{
	preadyhead = NULL;
	preadyrear = NULL;
	pblockhead = NULL;
	pblockrear = NULL;
	pexec = NULL;
}

CProcessLink::~CProcessLink()
{

}


BOOL CProcessLink::AddtoReady(PCB *p)
{
	if(preadyhead == NULL)
	{
		if(pexec == NULL)
		{
			p->state = "执行状态";
			pexec = p;
			return true;		//表示进入了执行状态
		}
		p->state = "就绪状态";
		preadyhead = preadyrear = p;
		return false;
	}
	p->state = "就绪状态";
	preadyrear->pNext = p;
	preadyrear = p;
	return false;
}

struct PCB * CProcessLink::GetReadyHead()
{
	return preadyhead;
}

struct PCB * CProcessLink::GetOtherBlockHead()
{
	return pblockhead;
}

struct PCB * CProcessLink::GetExec()
{
	return pexec;
}

void CProcessLink::ProcessRun()
{
	struct PCB *pcb = pexec;
	pexec = preadyhead;
	pexec->state = "执行状态";
	preadyhead = preadyhead->pNext;
	pexec->pNext = NULL;
	pcb->state = "就绪状态";
	preadyrear->pNext = pcb;
	preadyrear = preadyrear->pNext;
	preadyrear->pNext = NULL;
}

BOOL CProcessLink::Block_Other()
{
	struct PCB *pcb = pexec;
	pcb->state = "阻塞状态";
	if(pblockhead == NULL)
	{
		pblockhead = pblockrear = pcb;
	}
	else
	{
		pblockrear->pNext = pcb;
		pblockrear = pblockrear->pNext;
	}
	if(preadyhead != NULL)
	{
		pcb = preadyhead;
		pcb->state = "执行状态";
		preadyhead = preadyhead->pNext;
		pcb->pNext = NULL;
		pexec = pcb;
		return TRUE;
	}
	else
	{
		pexec = NULL;
		return FALSE;
	}
}


BOOL CProcessLink::WakeUp(int cur)
{
	struct PCB *pcb = pblockhead;
	struct PCB *temp;
	for(int i = 0;i<cur;i++)
	{
		temp = pcb;
		pcb = pcb->pNext;
	}
	if(pcb == pblockhead)
		pblockhead = pblockhead->pNext;
	else
		temp->pNext = pcb->pNext;
	pcb->pNext = NULL;
	pcb->state = "就绪状态";
	if(AddtoReady(pcb) == TRUE)
		return TRUE;
	else
		return FALSE;
}

void CProcessLink::End()
{
	struct PCB *pcb = pexec;
//	struct PCB *temp;
	if(preadyhead != NULL)
	{
		pexec = preadyhead;
		preadyhead = preadyhead->pNext;
		pexec->pNext = NULL;
	}
	else
		pexec = NULL;
	delete pcb;
}

⌨️ 快捷键说明

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