資源簡介
本程序是用單鏈表對列來管理資源(進程),實現了對進程的優先級調度。
代碼片段和文件信息
#include
#include
#include
#define?NAME_LEN?10
#define??MAX?????5
/*?進程的所以狀態*/
typedef?enum{
WAIT
READY
RUNNING
FINISH
}pcb_state;
/*進程的所有優先級級別*/
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:初始化進程結點
*
*/
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:建立一個進程結點,即給進程結點一個實際的意義
*
*/
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:把有實際意義的結點插入到準備對列中。
*
*/
PCB?*insert_ready(PCB?*readyHeadPCB?*pnode)
{
PCB?*node;
PCB?*front;
if(pnode?==?NULL)
return?readyHead;
/*?準備對列為空時*/
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的優先級比準備對列中的第一個元素的優先級還要高*/
if(front?==?node)?
{
pnode->next?=?node;
readyHead?=?pnode;
}
else
{
pnode->next?=?node;
front->next?=?pnode;
}
return?readyHead;
}
else
front?=?node;
}
/*準備對列中最后一個結點*/
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:把準備對列中的第一個結點交給運行對列
*
*/
PCB?*insert_run(PCB?*runHeadPCB?*pnode)
{
if(pnode?==?NULL)
return?runHead;
pnode->next?=?runHead;
pnode->state?=?RUNNING;
return?pnode;
}
/*
*Function:insert_wait
*
*Description:把運行對列中優先級小于準備對列的頭結點時,則把這個結點插入等待對列
*
*/
PCB?*insert_wait(PCB?*ppnodePCB?*waitHead)
{
ppnode->next?=?NULL;
ppnode->state?=?
- 上一篇:使用c語言編寫的灰色預測模型
- 下一篇:C語言實現DES算法對任意文件加解密報告
評論
共有 條評論