-
大小: 9KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-12
- 語(yǔ)言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
操作系統(tǒng)中的實(shí)驗(yàn),用C語(yǔ)言實(shí)現(xiàn)循環(huán)首次適應(yīng)算法的功能
代碼片段和文件信息
#include?
#include?
#define?MAX_SIZE?128?//系統(tǒng)分配給用戶的最大內(nèi)存
typedef?struct?MCB{//內(nèi)存控制塊
int?add;???????//分區(qū)起始地址
int?sta;???????//分區(qū)狀態(tài),0為可用
int?size;??????//分區(qū)大小
int?jno;???????//分區(qū)裝入作業(yè)號(hào)作業(yè)號(hào)從1開始
struct?MCB*?next;?//鏈連指針8
}MCB;
MCB?*free_table*ft;??//可用分區(qū)的頭指針,尾指針
MCB?*used_table*ut;??//已分配分區(qū)的頭指針,尾指針
MCB?*next_ft=NULL;????//??********************?added?下一個(gè)可用分區(qū)的頭指針
/*?函數(shù)聲明?*/
void?initFree_table();
void?initUsed_table();
void?add_ut(MCB?*pfint?sizeint?jno);
int?Is_Jno_Exists(int?jno);?//??********************??added???判斷改作業(yè)是否存在
void?allot(int?jnoint?size);
void?reclaim(int?jno);
void?displayUt(MCB?*pMCB);
void?displayFt(MCB?*pMCB);
/*?函數(shù)定義?*/
void?initFree_table()//初始化可用區(qū)鏈表初始大小為整個(gè)用戶分區(qū)
{
if(!(free_table=(MCB*)malloc(sizeof(struct?MCB))))
exit(1);
free_table->add?=?0;
free_table->size?=?MAX_SIZE;
free_table->sta?=?0;
free_table->jno?=?0;
free_table->next?=?NULL;
ft=free_table;
}
void?initUsed_table()//初始化已分配分區(qū)鏈表
{
if(!(used_table=(MCB*)malloc(sizeof(struct?MCB))))
exit(1);
used_table->add?=?0;
used_table->size?=?0;
used_table->sta?=?1;
used_table->jno?=?0;
used_table->next?=?NULL;
ut=used_table;
}
void?add_ut(MCB?*pfint?sizeint?jno)
{
//修改已分配鏈表
if(used_table->next?==?NULL?&&?used_table->size?==?0)
{//已用分區(qū)表的第一塊
used_table->add?=?pf->add;
used_table->size?=?size;
used_table->jno?=?jno;
}else{//將新增分區(qū)加到已分配鏈表末尾
//pt為臨時(shí)MCB
MCB?*pt;
if(!(pt=(MCB*)malloc(sizeof(struct?MCB))))
exit(1);
pt->size?=?size;
pt->add?=?pf->add;
pt->jno?=?jno;
pt->sta?=?1;
pt->next?=?NULL;
ut->next?=?pt;
ut?=?ut->next;
}
}
int?Is_Jno_Exists(int?jno)//??********************??added?
{
int?Is_Exists?=?0;
MCB?*tmp_usedtable=used_table;
while(NULL?!=?tmp_usedtable)
{
if?(jno?==?tmp_usedtable->jno)
{
Is_Exists?=1;
break;
}
tmp_usedtable?=?tmp_usedtable->next;
}
return?Is_Exists;
}
void?allot(int?jnoint?size)//首次適應(yīng)法為作業(yè)分配存儲(chǔ)空間
{
????????MCB?*pf?=?NULL;
???? MCB?*p?=?NULL;?
MCB?*q?=?free_table;///
if((jno?<=?0?)||(1?==?Is_Jno_Exists(jno)))??/*?jno小于0或jno有重復(fù)?*/
{
printf(“輸入作業(yè)號(hào)有誤請(qǐng)重新輸入!\n“);
return;
}
if(size?>?MAX_SIZE)
{
printf(“作業(yè)太大,無(wú)法分配!\n“);
return;
}
if(size?<=?0)
{
printf(“作業(yè)大小不合法!\n“);
}
/*********************??startadded??*/
if?(NULL?==?next_ft)??//?下一個(gè)空閑列表節(jié)點(diǎn)為空,表明已到末尾,則回到空閑列表開頭開始掃描?
{
????pf?=?free_table;
????p?=?pf;
}
else
{
????pf?=?next_ft;
????p?=?pf;?
}
while?(q->next?!=next_ft)?//new
????????????????????{
??????????????????????next_ft?=?q->next?;
????????????????????}
????????????
//查空白分區(qū)鏈表
while(pf?!=?NULL?&&?pf->size? {
p?=?pf;
pf?=?pf->next;
}
????????????????/*********************??endadded??*/???
if(?(pf?==?NULL)?&&?(?NULL?!=?ne
- 上一篇:控制臺(tái)嵌入MFC
- 下一篇:c++primerplus第六版源碼
評(píng)論
共有 條評(píng)論