计算机操作系统动态分区.docx

上传人:b****7 文档编号:11414815 上传时间:2023-02-28 格式:DOCX 页数:15 大小:182.06KB
下载 相关 举报
计算机操作系统动态分区.docx_第1页
第1页 / 共15页
计算机操作系统动态分区.docx_第2页
第2页 / 共15页
计算机操作系统动态分区.docx_第3页
第3页 / 共15页
计算机操作系统动态分区.docx_第4页
第4页 / 共15页
计算机操作系统动态分区.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算机操作系统动态分区.docx

《计算机操作系统动态分区.docx》由会员分享,可在线阅读,更多相关《计算机操作系统动态分区.docx(15页珍藏版)》请在冰豆网上搜索。

计算机操作系统动态分区.docx

计算机操作系统动态分区

动态分区算法

源代码:

#include"stdio.h"

#defineN5

intstart;

structfreearea

{

intstartaddress;

intsize;

intstate;

}freeblock[N]={{20,20,1},{80,50,1},{150,30,1},{300,30,0},{600,10,1}};

intalloc(intapplyarea)

{

inti,tag=0;

for(i=0;i

if(freeblock[i].state==1&&freeblock[i].size>applyarea)

{

freeblock[i].startaddress=freeblock[i].startaddress+applyarea;

freeblock[i].size=freeblock[i].size-applyarea;

tag=1;

returnfreeblock[i].startaddress-applyarea;

}

else

if(freeblock[i].state==1&&freeblock[i].size==applyarea)

{

freeblock[i].state=0;

tag=1;

returnfreeblock[i].startaddress;

}

if(tag==0)

return-1;

}

intalloc2(intapplyarea,ints)

{

inti,tag=0;

for(i=s;i

if(freeblock[i].state==1&&freeblock[i].size>applyarea)

{

freeblock[i].startaddress=freeblock[i].startaddress+applyarea;

freeblock[i].size=freeblock[i].size-applyarea;

tag=1;

start=freeblock[i].startaddress-applyarea;

returni;

}

else

if(freeblock[i].state==1&&freeblock[i].size==applyarea)

{

freeblock[i].state=0;

tag=1;

start=freeblock[i].startaddress;

returni;

}

if(tag==0)

return-1;

}

intalloc3(intapplyarea)

{

inti,k,h,flag,tag=0,j=0;

inta[N];

structfreeareamin;

structfreeareamid;

for(i=0;i

{

if(freeblock[i].state==1&&freeblock[i].size==applyarea)

{

freeblock[i].state=0;

tag=1;

returnfreeblock[i].startaddress;

}

}

for(i=0;i

{

if(freeblock[i].state==1&&freeblock[i].size>applyarea)a[j++]=i;

}

if(j>1)

{

h=a[0];

min=freeblock[h];

for(k=1;k

{

h=a[k];

if(freeblock[h].size

{

mid.size=freeblock[h].size;

mid.state=freeblock[h].state;

mid.startaddress=freeblock[h].startaddress;

freeblock[h].size=min.size;

freeblock[h].state=min.state;

freeblock[h].startaddress=min.startaddress;

min.size=mid.size;

min.state=mid.state;

min.startaddress=mid.startaddress;

}

}

min.startaddress=min.startaddress+applyarea;

min.size=min.size-applyarea;

tag=1;

returnmin.startaddress-applyarea;

}

elseif(j==1)

{

h=a[0];

min=freeblock[h];

min.startaddress=min.startaddress+applyarea;

min.size=min.size-applyarea;

tag=1;

returnmin.startaddress-applyarea;

}

if(tag==0)

return-1;

}

voidsetfree()

{

ints,l,tag1=0,tag2=0,tag3=0,i,j;

printf("inputfreeareastartaddress:

\n");

scanf("%d",&s);

printf("inputfreeareasize:

\n");

scanf("%d",&l);

for(i=0;i

{

if(freeblock[i].startaddress==s+l&&freeblock[i].state==1)

{

l=l+freeblock[i].size;

tag1=1;

for(j=0;j

if(freeblock[j].startaddress+freeblock[j].size==s&&freeblock[j].state==1)

{

freeblock[i].state=0;

freeblock[j].size=freeblock[j].size+l;

tag2=1;

break;

}

if(tag2==0)

{

freeblock[i].startaddress=s;

freeblock[i].size=l;

break;

}

}

}

if(tag1==0)

{

for(i=0;i

if(freeblock[i].startaddress+freeblock[i].size==s&&freeblock[i].state==1)

{

freeblock[i].size=freeblock[i].size+l;

tag3=1;

break;

}

if(tag3==0)

for(j=0;j

if(freeblock[j].state==0)

{

freeblock[j].startaddress=s;

freeblock[j].size=l;

freeblock[j].state=1;

break;

}

}

}

voidadjust()

{

inti,j;

structfreeareamiddata;

for(i=0;i

for(j=0;j

if(freeblock[j].startaddress>freeblock[j+1].startaddress)

{

middata.startaddress=freeblock[j].startaddress;

middata.size=freeblock[j].size;

middata.state=freeblock[j].state;

freeblock[j].startaddress=freeblock[j+1].startaddress;

freeblock[j].size=freeblock[j+1].size;

freeblock[j].state=freeblock[j+1].state;

freeblock[j+1].startaddress=middata.startaddress;

freeblock[j+1].size=middata.size;

freeblock[j+1].state=middata.state;

}

for(i=0;i

for(j=0;j

if(freeblock[j].state==0&&freeblock[j+1].state==1)

{

middata.startaddress=freeblock[j].startaddress;

middata.size=freeblock[j].size;

middata.state=freeblock[j].state;

freeblock[j].startaddress=freeblock[j+1].startaddress;

freeblock[j].size=freeblock[j+1].size;

freeblock[j].state=freeblock[j+1].state;

freeblock[j+1].startaddress=middata.startaddress;

freeblock[j+1].size=middata.size;

freeblock[j+1].state=middata.state;

}

}

voidprint()

{

inti;

printf("|---------------------------------------------------------------|\n");

printf("|startsizestate|\n");

printf("|---------------------------------------------------------------|\n");

for(i=0;i

{

printf("|%3d%3d%3d|\n",

freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);

printf("|---------------------------------------------------------------|\n");

}

}

voidshouci()

{

intapplyarea,start,i,j;

charend;

getchar();

printf("\nisthereanyjobrequestmemory?

yorn:

");

while((end=getchar())=='y')

{

printf("atfirstthefreememoryisthis:

\n");

adjust();

print();

printf("inputrequestmemorysize:

");

scanf("%d",&applyarea);

start=alloc(applyarea);

if(start==-1)

printf("thereisnofitmemory,pleasewait\n");

else

{

adjust();

printf("afterallocation,thefreememoryisthis:

\n");

print();

printf("job'smemorystartaddressis:

%d\n",start);

printf("jobsizeis:

%d\n",applyarea);

printf("jobisrunning.\n");

printf("jobisterminated.\n");

}

for(j=1;j<100000;j++);

setfree();

adjust();

print();

printf("isthereanyjobthatiswaiting?

y/n:

");

end=getchar();

}

}

voidxunhuan()

{

intapplyarea,i=0,j;

charend;

getchar();

printf("\nisthereanyjobrequestmemory?

yorn:

");

while((end=getchar())=='y')

{

printf("atfirstthefreememoryisthis:

\n");

adjust();

print();

printf("inputrequestmemorysize:

");

scanf("%d",&applyarea);

if(i==N-1)

{

i=alloc2(applyarea,i);

if(i==-1)i=0;

}

elseif(i

i=alloc2(applyarea,i);

if(i==-1)

printf("thereisnofitmemory,pleasewait\n");

else

{

adjust();

printf("afterallocation,thefreememoryisthis:

\n");

print();

printf("job'smemorystartaddressis:

%d\n",start);

printf("jobsizeis:

%d\n",applyarea);

printf("jobisrunning.\n");

printf("jobisterminated.\n");

}

for(j=1;j<100000;j++);

setfree();

adjust();

print();

printf("isthereanyjobthatiswaiting?

y/n:

");

end=getchar();

}

}

voidbest()

{

intapplyarea,start,i,j;

charend;

getchar();

printf("\nisthereanyjobrequestmemory?

yorn:

");

while((end=getchar())=='y')

{

printf("atfirstthefreememoryisthis:

\n");

adjust();

print();

printf("inputrequestmemorysize:

");

scanf("%d",&applyarea);

start=alloc3(applyarea);

if(start==-1)

printf("thereisnofitmemory,pleasewait\n");

else

{

adjust();

printf("afterallocation,thefreememoryisthis:

\n");

print();

printf("job'smemorystartaddressis:

%d\n",start);

printf("jobsizeis:

%d\n",applyarea);

printf("jobisrunning.\n");

printf("jobisterminated.\n");

}

for(j=1;j<100000;j++);

setfree();

adjust();

print();

printf("isthereanyjobthatiswaiting?

y/n:

");

end=getchar();

}

}

main()

{

chars;

printf("choseonemethod:

a首次适应b循环首次c最佳适应\n");

s=getchar();

switch(s)

{

case'a':

shouci();

case'b':

xunhuan();

case'c':

best();

default:

printf("error\n");

}

}

运行结果:

调试、编辑、运行程序,开始显示如图:

输入a,选择进行首次适应,然后输入y显示空闲区,显示如图:

再输入区间大小20,选择进行分配空间,作业开始运行,显示如图:

输入空闲区的开始地址1000,空闲区大小30,显示如图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1