-
大小: 7KB文件類(lèi)型: .c金幣: 1下載: 0 次發(fā)布日期: 2021-06-12
- 語(yǔ)言: C/C++
- 標(biāo)簽: PCB??優(yōu)先級(jí)??
資源簡(jiǎn)介
本程序是用單鏈表對(duì)列來(lái)管理資源(進(jìn)程),實(shí)現(xiàn)了對(duì)進(jìn)程的優(yōu)先級(jí)調(diào)度。
代碼片段和文件信息
#include
#include
#include
#define?NAME_LEN?10
#define??MAX?????5
/*?進(jìn)程的所以狀態(tài)*/
typedef?enum{
WAIT
READY
RUNNING
FINISH
}pcb_state;
/*進(jìn)程的所有優(yōu)先級(jí)級(jí)別*/
typedef?enum{
MAX_HIGH=0
HIGH=10
MIDDLE=20
LOW=30
MIN_LOW=40
DEFFAULT=50
}pcb_priority;
typedef?struct?pcb_node{
char?name[NAME_LEN];
int?priority;
int?needtime;
}PCB_NODE;
typedef?struct?node{
struct?node?*next;
PCB_NODE?imm_pcb;
int?round;
int?cputime;
int?count;
int?state;
}PCB;
/*
*?Function:?init_pcb
*
*Description:初始化進(jìn)程結(jié)點(diǎn)
*
*/
void?init_pcb(PCB?*pnode)
{
if(pnode?==?NULL)
return?;
pnode->next?=?NULL;
// pnode->imm_pcb.name?=?NULL;
memset(pnode->imm_pcb.name‘0‘NAME_LEN);
pnode->imm_pcb.priority?=MIDDLE;
pnode->imm_pcb.needtime?=0;
pnode->round?=0;
pnode->cputime?=0;
pnode->count?=0;
pnode->state?=?READY;
}
PCB?*pcb_malloc(int?size)
{
return?malloc(size);
}
/*
*?Function:?creat_pcb
*
*?Description:建立一個(gè)進(jìn)程結(jié)點(diǎn),即給進(jìn)程結(jié)點(diǎn)一個(gè)實(shí)際的意義
*
*/
PCB?*creat_pcb(PCB?*pnodePCB_NODE?*pcbNode)
{
if(pnode?==?NULL?&&?pcbNode?==?NULL)
return?NULL;
init_pcb(pnode);
strcpy(pnode->imm_pcb.namepcbNode->name);
if(pcbNode->priority?!=DEFFAULT)
pnode->imm_pcb.priority?=?pcbNode->priority;
pnode->imm_pcb.needtime?=?pcbNode->needtime;
return?pnode;
}
/*
*Function:insert_ready
*
*Description:把有實(shí)際意義的結(jié)點(diǎn)插入到準(zhǔn)備對(duì)列中。
*
*/
PCB?*insert_ready(PCB?*readyHeadPCB?*pnode)
{
PCB?*node;
PCB?*front;
if(pnode?==?NULL)
return?readyHead;
/*?準(zhǔn)備對(duì)列為空時(shí)*/
if(readyHead?==?NULL)
{
readyHead?=?pnode;
return?readyHead;
}
/**/
else?if(readyHead->next?==?NULL)
{
if(readyHead->imm_pcb.priority?>?pnode->imm_pcb.priority)
{
pnode->next?=?readyHead;
readyHead?=?pnode;
}
else
{
readyHead->next?=?pnode;
// pnode->next?=?NULL;
}
return?readyHead;
}
front?=?readyHead;
for(node?=?readyHead;node->next?!=?NULL;node=?node->next)
{
if(pnode->imm_pcb.priority?imm_pcb.priority)
{
/*pnode的優(yōu)先級(jí)比準(zhǔn)備對(duì)列中的第一個(gè)元素的優(yōu)先級(jí)還要高*/
if(front?==?node)?
{
pnode->next?=?node;
readyHead?=?pnode;
}
else
{
pnode->next?=?node;
front->next?=?pnode;
}
return?readyHead;
}
else
front?=?node;
}
/*準(zhǔn)備對(duì)列中最后一個(gè)結(jié)點(diǎn)*/
if(pnode->imm_pcb.priority?imm_pcb.priority)
{
pnode->next?=?node;
front->next?=?pnode;
}
else
{
node->next?=?pnode;
pnode->next?=?NULL;
}
return?readyHead;
}
/*
*?Function:insert_RUNNING
*
*?Description:把準(zhǔn)備對(duì)列中的第一個(gè)結(jié)點(diǎn)交給運(yùn)行對(duì)列
*
*/
PCB?*insert_run(PCB?*runHeadPCB?*pnode)
{
if(pnode?==?NULL)
return?runHead;
pnode->next?=?runHead;
pnode->state?=?RUNNING;
return?pnode;
}
/*
*Function:insert_wait
*
*Description:把運(yùn)行對(duì)列中優(yōu)先級(jí)小于準(zhǔn)備對(duì)列的頭結(jié)點(diǎn)時(shí),則把這個(gè)結(jié)點(diǎn)插入等待對(duì)列
*
*/
PCB?*insert_wait(PCB?*ppnodePCB?*waitHead)
{
ppnode->next?=?NULL;
ppnode->state?=?
評(píng)論
共有 條評(píng)論