久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

操作系統(tǒng)實(shí)驗(yàn)四主存空間的分配與回收首次適應(yīng)算法和循環(huán)首次適應(yīng)算法

2020-12-04 03:20:01下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了這篇《操作系統(tǒng)實(shí)驗(yàn)四主存空間的分配與回收首次適應(yīng)算法和循環(huán)首次適應(yīng)算法》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《操作系統(tǒng)實(shí)驗(yàn)四主存空間的分配與回收首次適應(yīng)算法和循環(huán)首次適應(yīng)算法》。

實(shí)驗(yàn)報(bào)告

【實(shí)驗(yàn)名稱】

首次適應(yīng)算法和循環(huán)首次適應(yīng)算法

【實(shí)驗(yàn)?zāi)康摹?/p>

理解在連續(xù)分區(qū)動(dòng)態(tài)的存儲(chǔ)管理方式下,如何實(shí)現(xiàn)主存空間的分配與回收。

【實(shí)驗(yàn)原理】

首次適應(yīng)(first

fit,F(xiàn)F)算法

FF算法要求空閑分區(qū)鏈以地址遞增的次序鏈接。在分配內(nèi)存時(shí),從鏈?zhǔn)组_(kāi)始順序查找,直至找到一個(gè)大小能滿足要求的空閑分區(qū)即可。然后再按照作業(yè)的大小,從該分區(qū)中劃出一塊內(nèi)存空間,分配給請(qǐng)求者,余下的空閑分區(qū)仍留在空閑鏈中。若從鏈?zhǔn)字敝伶溛捕疾荒苷业揭粋€(gè)能滿足要求的分區(qū),則表明系統(tǒng)中已經(jīng)沒(méi)有足夠大的內(nèi)存分配給該進(jìn)程,內(nèi)存分配失敗,返回。

循環(huán)首次適應(yīng)(next

fit,NF)算法

為避免低址部分留下許多很小的空閑分區(qū),以及減少查找可用空閑分區(qū)的開(kāi)銷,循環(huán)首次適應(yīng)算法在為進(jìn)程分配內(nèi)存空間時(shí),不再是每次都從鏈?zhǔn)组_(kāi)始查找,而是從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開(kāi)始查找,直至找到一個(gè)能滿足要求的空閑分區(qū),從中劃出一塊玉請(qǐng)求大小相等的內(nèi)存空間分配給作業(yè)。

【實(shí)驗(yàn)內(nèi)容】

實(shí)現(xiàn)主存空間的分配與回收:

1.采用可變式分區(qū)管理,使用首次適應(yīng)算法實(shí)現(xiàn)主存空間的分配與回收;

2.采用可變式分區(qū)管理,使用循環(huán)首次適應(yīng)算法實(shí)現(xiàn)主存空間的分配與回收。

數(shù)據(jù)結(jié)構(gòu)和符號(hào)說(shuō)明:

typedef

struct

PCB//進(jìn)程控制塊

{

char

ProgressName[10];

//進(jìn)程名稱

int

Startaddress;

//進(jìn)程開(kāi)始地址

int

ProgressSize;

//進(jìn)程大小

int

ProgressState

=

0;

//進(jìn)程狀態(tài)

};

typedef

struct

FREE

//空閑區(qū)結(jié)構(gòu)體

{

int

Free_num;

//空閑區(qū)名稱

int

Startaddress;

//空閑區(qū)開(kāi)始地址

int

Endaddress;

//空閑區(qū)結(jié)束地址

int

Free_Space;

//空閑區(qū)大小

};

算法流程圖:

首次適應(yīng)算法

循環(huán)首次適應(yīng)算法

程序代碼及截圖:

#include

#include

#include

#include

#define

N

1024

typedef

struct

PCB//進(jìn)程控制塊

{

char

ProgressName[10];

//進(jìn)程名稱

int

Startaddress;

//進(jìn)程開(kāi)始地址

int

ProgressSize;

//進(jìn)程大小

int

ProgressState

=

0;

//進(jìn)程狀態(tài)

};

typedef

struct

FREE

//空閑區(qū)結(jié)構(gòu)體

{

int

Free_num;

//空閑區(qū)名稱

int

Startaddress;

//空閑區(qū)開(kāi)始地址

int

Endaddress;

//空閑區(qū)結(jié)束地址

int

Free_Space;

//空閑區(qū)大小

};

int

count

=

0;

//當(dāng)前內(nèi)存中進(jìn)程個(gè)數(shù)

bool

ROM[N];//設(shè)置內(nèi)存塊

int

p

=

0;//循環(huán)首次使用需要標(biāo)記當(dāng)前的空閑區(qū)塊

FREE

FREE[100];//設(shè)置空閑區(qū)數(shù)組為100個(gè)

int

FREE_counter

=

0;//空閑區(qū)的個(gè)數(shù)

PCB

num[20];

//作業(yè)隊(duì)列

void

init()//初始化操作

{

for(int

i=0;

i

i++)

ROM[i]

=

0;

}

void

showProgress(PCB

&a)

{

printf(“----------------------------------------------------------------------\n“);

printf(“進(jìn)程名\t\t開(kāi)始地址\t\t大小\t\t結(jié)束地址\n“);//輸出內(nèi)存信息

printf(“----------------------------------------------------------------------\n“);

for(int

i=0;

i

i++)

for(int

j=i;

j

j++)

if(num[j].Startaddress>num[j+1].Startaddress)

{

a

=

num[j];

num[j]

=

num[j+1];

num[j+1]

=

a;

}

for(int

i=0;

i

i++)

if(num[i].ProgressState!=0)

printf(“%s\t\t%d\t\t\t%d\t\t%d\t\t\n“,num[i].ProgressName,num[i].Startaddress,num[i].ProgressSize,num[i].ProgressSize+num[i].Startaddress-1);

printf(“----------------------------------------------------------------------\n“);

}

void

showFree()//打印空閑區(qū)的情況

{

printf(“----------------------------------------------------------------------\n“);

printf(“

空閑區(qū)名\t|

開(kāi)始地址\t|

大小

\t|

結(jié)束地址\n“);

printf(“----------------------------------------------------------------------\n“);

for

(int

i=1;

i<=

FREE_counter;

i++)

{

printf(“\t%1d\t%8d\t%11d\t

%d\n“,FREE[i].Free_num,FREE[i].Startaddress,FREE[i].Free_Space,FREE[i].Endaddress);

printf(“----------------------------------------------------------------------\n“);

}

}

void

find_FREE()

//尋找空閑區(qū)

{

int

i,j,p;

//計(jì)數(shù)值

FREE_counter

=

0;//預(yù)設(shè)空閑區(qū)數(shù)為0

for(i

=

0;

i

N;

i++)

if(ROM[i]

==

0)

{

p

=

i;

for(j

=

i;

j

N;

j++)

{

if(ROM[j]==0)//未找到空閑區(qū),則將j賦值給i后繼續(xù)循環(huán)

{

i

=

j;

continue;

}

if(ROM[j]==1)//找到空閑區(qū)

{

FREE_counter++;//空閑區(qū)個(gè)數(shù)+1;

FREE[FREE_counter].Free_num

=

FREE_counter;//設(shè)置空閑區(qū)編號(hào)

FREE[FREE_counter].Startaddress

=

p;

FREE[FREE_counter].Endaddress

=

j-1;

FREE[FREE_counter].Free_Space

=

j-p;

i=j+1;

break;

}

}

if(j

==

N

&&

ROM[j-1]

==

0)//對(duì)最后一個(gè)內(nèi)存進(jìn)行特殊操作

{

FREE_counter++;

FREE[

FREE_counter].Free_num

=

FREE_counter;//對(duì)空閑區(qū)進(jìn)行處理

FREE[

FREE_counter].Startaddress

=

p;

FREE[

FREE_counter].Endaddress

=j-1;

FREE[

FREE_counter].Free_Space

=

j-p;

}

}

}

void

First_Fit(PCB

&a)//首次適應(yīng)算法

{

int

i,j,k;

for(i=0;

i

i++)

if(ROM[i]==0)

{

for(j=i;

j<=(i+a.ProgressSize)&&j

j++)//查詢第一個(gè)空閑區(qū),并判斷是否適合插入作業(yè)

if(ROM[j]==1)

{

i

=

j

+

1;

break;

}

if(j==i+a.ProgressSize+1)

{

a.Startaddress

=

i;//設(shè)置作業(yè)的開(kāi)始地址

a.ProgressState

=

1;//標(biāo)記作業(yè)在內(nèi)存中

for(k=i;

k

k++)

ROM[k]=1;

printf(“進(jìn)程%s插入成功,進(jìn)程%s的初始地址為%d,結(jié)束地址為%d\n“,a.ProgressName,a.ProgressName,a.Startaddress,a.Startaddress+a.ProgressSize-1);

return;

}

}

if(i==N)//未查詢到合適的區(qū)域

printf(“插入失敗,無(wú)可用空間!\n“);

}

void

Next_Fit(PCB

&a)//循環(huán)首次適應(yīng)算法來(lái)實(shí)現(xiàn)作業(yè)調(diào)度

{

int

i,j,k;

for(i=p;

i

i++)//從所標(biāo)記的當(dāng)前區(qū)域開(kāi)始查詢,查詢到末內(nèi)存

{

if(ROM[i]==0)

{

for(j=i;

j<=(i+a.ProgressSize)&&j

j++)

if(ROM[j]==1)

{

i

=

j+1;

break;

}

if(j==i+a.ProgressSize+1)//找到合適的空閑區(qū)

{

a.Startaddress=i;

a.ProgressState=1;

for(k=i;

k

k++)

ROM[k]=1;

printf(“插入成功,進(jìn)程%s的初始地址為%d,結(jié)束地址為%d\n“,a.ProgressName,a.Startaddress,a.Startaddress+a.ProgressSize-1);

p=i+a.ProgressSize;

return;

}

}

}

for(i=0;

i

i++)//當(dāng)未找到時(shí),從第一個(gè)空閑區(qū)開(kāi)始查詢,結(jié)束條件為小于所標(biāo)記的P

if(ROM[i]==0)

{

for(j=i;

j<=(i+a.ProgressSize)&&j

j++)

if(ROM[j]==1)

{

i=j+1;

break;

}

if(j==i+a.ProgressSize+1)//成功找到結(jié)束,并標(biāo)記當(dāng)前P為現(xiàn)在的作業(yè)的尾部

{

a.Startaddress=i;

a.ProgressState=1;

for(k=i;

kk++)

ROM[k]=1;

printf(“插入成功,進(jìn)程%s的初始地址為%d\n“,a.ProgressName,a.Startaddress);

p=i+a.ProgressSize;

break;

}

}

if(i==p)//查詢兩部分都未找到合適的區(qū)域,輸出插入失敗語(yǔ)句

printf(“插入失敗,無(wú)可用空間\n“);

}

void

Delete(PCB

&a)//刪除作業(yè),修改內(nèi)存信息和初始化該作業(yè)信息

{

int

i;

for(i=a.Startaddress;

i

i++)

ROM[i]=0;

a.ProgressState=0;//狀態(tài)標(biāo)記為未使用

printf(“進(jìn)程%s刪除成功\n“,a.ProgressName);

}

int

main()

{

int

choose1,choose;

char

ProgressName[10];

PCB

a;

init();

printf(“\t主存空間的分配與回收\n“);

printf(“---------------------------------------\n“);

printf(“\t1、首次適應(yīng)算法\n“);

printf(“\t2、循環(huán)首次適應(yīng)算法\n“);

printf(“---------------------------------------\n“);

printf(“請(qǐng)選擇分配算法:“);

scanf(“%d“,&choose1);

system(“cls“);

while(1)

{

w:system(“cls“);

printf(“當(dāng)前分配算法:“);

if(choose1

==

1)

printf(“首次適應(yīng)算法\n“);

else

printf(“循環(huán)首次適應(yīng)算法\n“);

printf(“---------------------------------------\n“);

printf(“\t1、插入進(jìn)程\n“);

printf(“\t2、刪除進(jìn)程\n“);

printf(“\t3、顯示進(jìn)程的信息\n“);

printf(“\t4、顯示空閑區(qū)\n“);

printf(“---------------------------------------\n“);

printf(“請(qǐng)輸入:“);

scanf(“%d“,&choose);

system(“cls“);

switch(choose)

{

case

1:

printf(“請(qǐng)輸入進(jìn)程名:“);

scanf(“%s“,&a.ProgressName);

printf(“請(qǐng)輸入進(jìn)程的大小:“);

scanf(“%d“,&a.ProgressSize);

for(int

i

=

0;

i

count;

i++)

if(strcmp(num[i].ProgressName,a.ProgressName)==0)

{

printf(“已存在同名進(jìn)程,無(wú)法插入。\n“);

system(“pause“);

goto

w;

}

if(choose1==1)//首次適應(yīng)算法

First_Fit(a);

else

Next_Fit(a);//循環(huán)首次適應(yīng)算法

num[count++]=a;

break;

case

2:

if(count

==

0)

{

printf(“當(dāng)前沒(méi)有進(jìn)程在內(nèi)存中,無(wú)法刪除!\n“);

system(“pause“);

goto

w;

}

printf(“輸入刪除的進(jìn)程名字:“);

scanf(“%s“,&ProgressName);

for(int

i=0;

i

i++)

if(!strcmp(num[i].ProgressName,ProgressName))

Delete(num[i]);

else

printf(“沒(méi)有找到對(duì)應(yīng)進(jìn)程,請(qǐng)重新輸入。\n“);

break;

case

3:

showProgress(a);

break;

case

4:

find_FREE();

showFree();

break;

default:

printf(“\n無(wú)效的輸入。\n“);

}

system(“pause“);

}

return

0;

}

主界面:

首次適應(yīng)算法,初始空閑區(qū):

插入進(jìn)程:

插入3個(gè)進(jìn)程:

空閑區(qū)信息:

刪除進(jìn)程2:

刪除后空閑區(qū)狀況:

再插入一個(gè)進(jìn)程,可以看到其其初始地址為100:

循環(huán)首次適應(yīng)算法,插入3個(gè)進(jìn)程

刪除進(jìn)程2后:

再插入進(jìn)程A,發(fā)現(xiàn)其從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開(kāi)始查找,其初始地址為750而不是200:

下載操作系統(tǒng)實(shí)驗(yàn)四主存空間的分配與回收首次適應(yīng)算法和循環(huán)首次適應(yīng)算法word格式文檔
下載操作系統(tǒng)實(shí)驗(yàn)四主存空間的分配與回收首次適應(yīng)算法和循環(huán)首次適應(yīng)算法.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

主站蜘蛛池模板: 免费a级毛片在线播放| 河北真实伦对白精彩脏话| 久久青草资料网站| 亚洲男人的天堂网站| 亚洲成av人片在线观看www| 成人午夜免费无码福利片| 人妻少妇无码精品视频区| 新版天堂资源中文8在线| 国产97人人超碰cao蜜芽prom| 国产顶级熟妇高潮xxxxx| 国产偷窥女洗浴在线观看| 国产97人人超碰cao蜜芽prom| 国产太嫩了在线观看| 亚洲国产成人久久综合碰| 无码av无码天堂资源网影音先锋| 亚洲国产精品高清在线第1页| 日本强伦姧人妻久久影片| 日本韩国亚洲欧美在线| 99久久综合精品五月天| 欧美大片欧美激情性色a∨在线| 中文字幕有码无码人妻av蜜桃| 一二三四在线观看免费视频| 久久香蕉国产线看观看怡红院妓院| 成人性生交大片免费看96| 久久精品道一区二区三区| 国产美女久久精品香蕉69| 在线看片免费人成视频福利| 亚洲精品无码精品mv在线观看| 人妻无码一区二区三区四区| 国产av影片麻豆精品传媒| 伊人精品成人久久综合全集观看| 毛片内射-百度| 国产99在线 | 亚洲| 美女视频黄频大全视频免费| 丁香五月亚洲中文字幕| 色欲av永久无码精品无码蜜桃| 欧洲熟妇色xxxx欧美老妇多毛网站| 欧美性xxxx狂欢老少配| 亚洲人成无码区在线观看| 少妇愉情理伦片丰满丰满午夜| 中文字幕无线码免费人妻|