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