操作系统源代码Word下载.docx
- 文档编号:18061343
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:23
- 大小:20.22KB
操作系统源代码Word下载.docx
《操作系统源代码Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统源代码Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
\nPressanykeytoexit!
"
getch();
exit
(1);
}
voidopenFile(FILE**fp,char*filename,char*mode)
/*以要求的方式打开文件*/
if((*fp=fopen(filename,mode))==NULL)
{
printf("
\nCan'
topen%sinmode%s."
filename,mode);
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'
openFile(&
fp,"
d:
\\"
"
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];
openFile(&
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;
intupdateJobFile(structjobList*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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 源代码