ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:20.22KB ,
资源ID:5098143      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5098143.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统源代码.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统源代码.docx

1、操作系统源代码#include#includeint memoryStartAddress = -1;int memorySize = -1;struct jobListint id; /* 作业ID */int size; /* 作业大小(需要的存储空间大小) */int status; /* 作业状态 0 : new job ,1 : in the memory , 2 : finished . */struct jobList *next; /* 作业链表指针 */;struct freeList int startAddress; /* 分区起始地址 */ int size; /* 分

2、区大小 */ struct freeList *next; /* 分区链表指针 */;struct usedList int startAddress; /* 分区起始地址 */int jobID; /* 分区中存放作业ID */struct usedList *next; /* 分区链表指针 */;void errorMessage(void) /*出现严重错误时显示信息并结束程序*/ printf(ntError !a); printf(nPress any key to exit !); getch(); exit(1);void openFile(FILE *fp,char *file

3、name,char *mode) /*以要求的方式打开文件*/ if(*fp = fopen(filename,mode) = NULL) printf(nCant open %s in mode %s.,filename,mode); errorMessage(); void makeFreeNode(struct freeList *empty,int startAddress,int size) /*根据参数startAddress、size创建空闲节点,由empty指针返回*/ if(*empty = malloc(sizeof(struct freeList) = NULL) pri

4、ntf(nNot enough to allocate for the free node .); errorMessage(); (*empty)-startAddress = startAddress; (*empty)-size = size; (*empty)-next = NULL;void iniMemory(void) /*初始化存储空间起始地址、大小*/ char MSA10,MS10; printf(nPlease input the start address of the memory !); scanf(%s,MSA); memoryStartAddress = ato

5、i(MSA); printf(nPlease input the size of the memory !); scanf(%s,MS); memorySize = atoi(MS);char selectFitMethod(void) /*选择适应算法*/ FILE *fp; char fitMethod; do printf(nnPlease input a char as fallow to select the fit method ! n 1 (Best fit) n 2 (Worst fit) n 3 (First fit) n 4 (Last fit)n); fitMethod

6、= getche(); while(fitMethod 4); openFile(&fp,d:,a); switch(fitMethod) case 1: fprintf(fp,nnnntBest fit); fprintf(fp,n*); break; case 2: fprintf(fp,nnnntWorst fit); fprintf(fp,n*); break; case 3: fprintf(fp,nnnntFirst fit); fprintf(fp,n*); break; case 4: fprintf(fp,nnnntLast fit); fprintf(fp,n*); bre

7、ak; fclose(fp); return fitMethod;void inputJob(void) /*从键盘输入作业到D盘的JOB文件*/ int /*id,size, */status = 0,jobnum = 0; FILE *fp; char id10,size10; openFile(&fp,d:,w); fprintf(fp,job_IDtsizetstatus); printf(nnnnPlease input the jobs as fallow ! nEnter a integer smaller than 1 to quit .njob_IDtsizen); do /

8、* scanf(%d%d,&id,&size); */ scanf(%st%s,id,size); if(atoi(id) 0 & atoi(size) 0) fprintf(fp,n%st%st%d,id,size,status); /* fprintf(fp,n%dt%dt%d,id,size,status); */ jobnum+; else break; while(1); if(jobnum) printf(nFinished to input the jobs !); else printf(nNo job was given .); errorMessage(); fclose(

9、fp);int makeJobList(struct jobList *jobs) /*从JOB文件中读出作业并创建作业链表*/ char jobID10,size10,status10; struct jobList *rear; FILE *fp; openFile(&fp,d:,r); fscanf(fp,%s%s%s,jobID,size,status); if(*jobs = malloc(sizeof(struct jobList) = NULL) printf(nNot enough to allocate for the job .); fclose(fp); errorMes

10、sage(); rear = *jobs; (*jobs)-next = NULL; while(!feof(fp) struct jobList *p; fscanf(fp,%s%s%s,jobID,size,status); if(p = malloc(sizeof(struct jobList) = NULL) printf(nNot enough to allocate for the job .); fclose(fp); errorMessage(); p - next = rear - next; rear - next = p; rear = rear - next; rear

11、 - id = atoi(jobID); rear - size = atoi(size); rear - status = atoi(status); fclose(fp); return 0;int updateJobFile(struct jobList *jobs) /*更新作业链表中作业的状态*/ FILE *fp; struct jobList *p; openFile(&fp,d:,w); fprintf(fp,job_IDtsizetstatus); for(p = jobs - next;p;p = p - next) fprintf(fp,n%dt%dt%d,p-id,p-

12、size,p-status); fclose(fp); return 0;int showFreeList(struct freeList *empty) /*空闲分区队列显示*/ FILE *fp; struct freeList *p = empty - next; int count = 0; openFile(&fp,d:,a); fprintf(fp,nnNow show the free list.); printf(nnNow show the free list.); if(p) fprintf(fp,nnumbertsizetstartAddress); printf(nnu

13、mbertsizetstartAddress); for(;p;p = p - next) fprintf(fp,n%dt%dt%d,+count,p - size,p - startAddress); printf(n%dt%dt%d,count,p - size,p - startAddress); fclose(fp); return 1; else fprintf(fp,nThe memory was used out !); printf(nThe memory was used out !); fclose(fp); return 0; void getJobInfo(struct

14、 jobList *jobs,int id,int *size,int *status) /*获取作业的信息*/ struct jobList *p = jobs-next; while(p & p-id != id) p = p-next; if(p = NULL) printf(nCant find the job which id is : %d .,id); errorMessage(); else *size = p - size; *status = p - status; void updateJobStatus(struct jobList *jobs,int id,int s

15、tatus) struct jobList *p = (*jobs)-next; while(p & p-id != id) p = p-next; if(p = NULL) printf(nCant find the job which id is : %d .,id); errorMessage(); else p - status = status;int showUsedList(struct jobList *jobs,struct usedList *used) /*作业占用链表显示*/ FILE *fp; struct usedList *p = used - next; int

16、 count = 0,size,status; openFile(&fp,d:,a); fprintf(fp,nnNow show the used list.); printf(nnNow show the used list.); if(p) fprintf(fp,nnumbertjobIDtsizetstartAddress); printf(nnumbertjobIDtsizetstartAddress); for(;p;p = p - next) getJobInfo(jobs,p - jobID,&size,&status); fprintf(fp,n%dt%dt%dt%d,+co

17、unt,p-jobID,size,p- startAddress); printf(n%dt%dt%dt%d,count,p-jobID,size,p- startAddress); fclose(fp); return 1; else fprintf(fp,nNo job in the memory ! You should input some jobs to it.); printf(nNo job in the memory ! You should input some jobs to it.); fclose(fp); return 0; int showJobList(struc

18、t jobList *jobs) /*显示作业链表*/ struct jobList *p; p = jobs-next; if(p = NULL) printf(nNo job in the list ! Try again next time.); return 0; printf(nnThe job list is as fallow :njob_IDtsizetstatus); while(p) printf(n%dt%dt%d,p-id,p-size,p-status); p = p-next; return 1;void moveFragment(struct jobList *j

19、obs,struct freeList *empty,struct usedList *used)int size,status;struct usedList *p;int address = memoryStartAddress; /*全局变量,初始化时分配存储空间始址*/ if(*empty)-next = NULL) /* 空闲分区链表为空,提示并返回 */ printf(nThe memory was used out at all.nMay be you should finish some jobs first or press any key to try again !);

20、getch(); return; for(p = (*used) - next;p;p = p- next) /* 循环的修改占用分区的始址 */ p - startAddress = address; getJobInfo(jobs,p - jobID,&size,&status); /* 由作业ID获得作业大小 */ address += size; (*empty)-next-startAddress = address;/*修改空闲分区的首节点始址、大小*/ (*empty) - next - size = memorySize - (address - memoryStartAddr

21、ess); (*empty) - next - next = NULL; /* 删除首节点后的所有节点 */void order(struct freeList *empty,int bySize,int inc)struct freeList *p,*q,*temp; int startAddress,size; for(p = (*empty) - next;p;p = p - next) /* 按bySize和inc两个参数寻找合适的节点,用temp指向它 */ for(temp = q = p;q;q = q - next) switch(bySize) case 0 : switch

22、(inc) case 0:if(q-size size) temp = q;break; default:if(q-size temp-size) temp = q;break; break; default: switch(inc) case 0:if(q-startAddress startAddress) temp = q;break; default:if(q-startAddress temp-startAddress) temp = q;break; break; /* 交换节点的成员值 */ if(temp != p) startAddress = p-startAddress;

23、 size = p-size; p-startAddress = temp-startAddress; p-size = temp-size; temp-startAddress = startAddress; temp-size = size; int allocate(struct freeList *empty,int size) /*为作业分配存储空间、状态必须为0*/ struct freeList *p,*prep; int startAddress = -1; p = (*empty) - next; while(p & p-size next; if(p != NULL) if

24、(p - size size) startAddress = p - startAddress; p - startAddress += size; p - size -= size; else startAddress = p - startAddress; prep = *empty; while(prep - next != p) prep = prep - next; prep - next = p - next; free(p); else printf(nMay be you should move the fragment together .); /* Unsuccessful

25、 ! */ return startAddress;void insertUsedNode(struct usedList *used,int id,int startAddress) /*插入释放的空间到used链表中(作业号为id,startAddress由函数13返回)*/ struct usedList *q,*r,*prer; if(q = malloc(sizeof(struct usedList) = NULL) printf(nNot enough to allocate for the used node .); errorMessage(); q - startAddres

26、s = startAddress; q - jobID = id; prer = *used; r = (*used) - next; while(r & r-startAddress next; q - next = prer - next; prer - next = q;int finishJob(struct usedList *used,int id,int *startAddress) /*结束一个作业号为id的作业,释放存储空间(由*startAddress返回空间的起始地址)*/ struct usedList *p,*prep; prep = *used; p = prep - next; while(p & p - jobID != id) prep = p; p = p - next; if(p = NULL) printf(nThe job which id is : %d is not in the memory !,id); return 0; else *startAddress = p-startAddress; prep - next = p - next; free

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

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