操作系统源代码Word文档格式.docx

上传人:b****5 文档编号:21099357 上传时间:2023-01-27 格式:DOCX 页数:24 大小:20.86KB
下载 相关 举报
操作系统源代码Word文档格式.docx_第1页
第1页 / 共24页
操作系统源代码Word文档格式.docx_第2页
第2页 / 共24页
操作系统源代码Word文档格式.docx_第3页
第3页 / 共24页
操作系统源代码Word文档格式.docx_第4页
第4页 / 共24页
操作系统源代码Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

操作系统源代码Word文档格式.docx

《操作系统源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统源代码Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

操作系统源代码Word文档格式.docx

\a"

);

\nPressanykeytoexit!

"

getch();

exit

(1);

}

voidopen**fp,char**mode)

/*以要求的方式打开文件*/

if((*fp=fopen())==NULL)

{

printf("

\nCan'

topen%sinmode%s、"

);

errorMessage();

}

voidmakeFreeNode(structfreeList**empty,intstartAddress,intsize)

/*根据参数startAddress、size创建空闲节点,由empty指针返回*/

if((*empty=malloc(sizeof(structfreeList)))==NULL)

\nNotenoughtoallocateforthefreenode、"

(*empty)->

startAddress=startAddress;

size=size;

next=NULL;

voidiniMemory(void)/*初始化存储空间起始地址、大小*/

charMSA[10],MS[10];

\nPleaseinputthestartaddressofthememory!

scanf("

%s"

MSA);

memoryStartAddress=atoi(MSA);

\nPleaseinputthesizeofthememory!

MS);

memorySize=atoi(MS);

charselectFitMethod(void)/*选择适应算法*/

FILE*fp;

charfitMethod;

do{

\n\nPleaseinputacharasfallowtoselectthefitmethod!

\

\n1(Bestfit)\

\n2(Worstfit)\

\n3(Firstfit)\

\n4(Lastfit)\n"

fitMethod=getche();

}while(fitMethod<

'

1'

||fitMethod>

4'

open,"

d:

\\result、cl"

"

a"

switch(fitMethod)

case'

:

fprintf(fp,"

\n\n\n\n\tBestfit"

\n**********************************************"

break;

2'

\n\n\n\n\tWorstfit"

fprintf(fp,"

3'

\n\n\n\n\tFirstfit"

\n\n\n\n\tLastfit"

fprintf(fp,"

fclose(fp);

returnfitMethod;

voidinputJob(void)/*从键盘输入作业到D盘的JOB文件*/

int/*id,size,*/status=0,jobnum=0;

charid[10],size[10];

open,"

\\job、cl"

w"

job_ID\tsize\tstatus"

\n\n\n\nPleaseinputthejobsasfallow!

\nEnteraintegersmallerthan1toquit、\njob_ID\tsize\n"

/*scanf("

%d%d"

&

id,&

size);

*/

scanf("

%s\t%s"

id,size);

if(atoi(id)>

0&

&

atoi(size)>

0)

{

\n%s\t%s\t%d"

id,size,status);

/*fprintf(fp,"

\n%d\t%d\t%d"

jobnum++;

}

elsebreak;

}while

(1);

if(jobnum)

\nFinishedtoinputthejobs!

else

\nNojobwasgiven、"

intmakeJobList(structjobList**jobs)

/*从JOB文件中读出作业并创建作业链表*/

charjobID[10],size[10],status[10];

structjobList*rear;

r"

fscanf(fp,"

%s%s%s"

jobID,size,status);

if((*jobs=malloc(sizeof(structjobList)))==NULL)

\nNotenoughtoallocateforthejob、"

fclose(fp);

rear=*jobs;

(*jobs)->

while(!

feof(fp))

structjobList*p;

fscanf(fp,"

if((p=malloc(sizeof(structjobList)))==NULL)

printf("

fclose(fp);

errorMessage();

p->

next=rear->

next;

rear->

next=p;

rear=rear->

id=atoi(jobID);

size=atoi(size);

status=atoi(status);

return0;

intupdateJobjobList*jobs)/*更新作业链表中作业的状态*/

structjobList*p;

for(p=jobs->

p;

p=p->

next)

p->

id,p->

size,p->

status);

intshowFreeList(structfreeList*empty)/*空闲分区队列显示*/

structfreeList*p=empty->

intcount=0;

\n\nNowshowthefreelist、、、"

if(p)

\nnumber\tsize\tstartAddress"

for(;

++count,p->

size,p->

startAddress);

count,p->

return1;

\nThememorywasusedout!

return0;

voidgetJobInfo(structjobList*jobs,intid,int*size,int*status)

/*获取作业的信息*/

structjobList*p=jobs->

next;

while(p&

p->

id!

=id)

p=p->

if(p==NULL)

tfindthejobwhichidis:

%d、"

id);

*size=p->

size;

*status=p->

status;

voidupdateJobStatus(structjobList**jobs,intid,intstatus)

structjobList*p=(*jobs)->

status=status;

intshowUsedList(structjobList*jobs,structusedList*used)

/*作业占用链表显示*/

structusedList*p=used->

intcount=0,size,status;

\n\nNowshowtheusedlist、、、"

\nnumber\tjobID\tsize\tstartAddress"

getJobInfo(jobs,p->

jobID,&

size,&

\n%d\t%d\t%d\t%d"

++count,p->

jobID,size,p->

count,p->

\nNojobinthememory!

Youshouldinputsomejobstoit、"

intshowJobList(structjobList*jobs)/*显示作业链表*/

p=jobs->

\nNojobinthelist!

Tryagainnexttime、"

\n\nThejoblistisasfallow:

\njob_ID\tsize\tstatus"

while(p)

return1;

voidmoveFragment(structjobList*jobs,structfreeList**empty,structusedList**used)

intsize,status;

structusedList*p;

intaddress=memoryStartAddress;

/*全局变量,初始化时分配存储空间始址*/

if((*empty)->

next==NULL)/*空闲分区链表为空,提示并返回*/

printf("

\nThememorywasusedoutatall、\nMaybeyoushouldfinishsomejobsfirstorpressanykeytotryagain!

getch();

return;

for(p=(*used)->

p=p->

next)

/*循环的修改占用分区的始址*/

startAddress=address;

getJobInfo(jobs,p->

/*由作业ID获得作业大小*/

address+=size;

next->

startAddress=address;

/*修改空闲分区的首节点始址、大小*/

(*empty)->

next->

size=memorySize-(address-memoryStartAddress);

next=NULL;

/*删除首节点后的所有节点*/

voidorder(structfreeList**empty,intbySize,intinc)

structfreeList*p,*q,*temp;

intstartAddress,size;

for(p=(*empty)->

{/*按bySize与inc两个参数寻找合适的节点,用temp指向它*/

for(temp=q=p;

q;

q=q->

switch(bySize)

{

case0:

switch(inc)

{

case0:

if(q->

size<

temp->

size)

temp=q;

break;

default:

size>

}break;

default:

startAddress<

startAddress)

startAddress>

}

}/*交换节点的成员值*/

if(temp!

=p)

{

startAddress=p->

startAddress;

size=p->

size;

p->

startAddress=temp->

size=temp->

temp->

intallocate(structfreeList**empty,intsize)

/*为作业分配存储空间、状态必须为0*/

structfreeList*p,*prep;

intstartAddress=-1;

p=(*empty)->

size)

p=p->

if(p!

=NULL)

if(p->

size>

startAddress=p->

startAddress;

p->

startAddress+=size;

size-=size;

else

startAddress=p->

prep=*empty;

while(prep->

next!

prep=prep->

prep->

next=p->

free(p);

elseprintf("

\nMaybeyoushouldmovethefragmenttogether、"

/*Unsuccessful!

returnstartAddress;

voidinsertUsedNode(structusedList**used,intid,intstartAddress)/*插入释放的空间到used链表中(作业号为id,startAddress由函数13返回)*/

structusedList*q,*r,*prer;

if((q=malloc(sizeof(structusedList)))==NULL)

\nNotenoughtoallocatefortheusednode、"

q->

startAddress=startAddress;

jobID=id;

prer=*used;

r=(*used)->

while(r&

r->

startAddress)

prer=r;

r=r->

next=prer->

prer->

next=q;

intfinishJob(structusedList**used,intid,int*startAddress)

/*结束一个作业号为id的作业,释放存储空间(由*startAddress返回空间的起始地址)*/

structusedList*p,*prep;

prep=*used;

p=prep->

p->

jobID!

prep=p;

\nThejobwhichidis:

%disnotinthememory!

*startAddress=p->

prep->

free(p);

vo

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

当前位置:首页 > 总结汇报 > 学习总结

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

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