




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
X X 工 业 大 学 C语言程序设计 课程设计(论文)题目: 存储管理分区分配算法 院(系): 软件学院 专业班级: 计算机网络技术 学 号: 000000000 学生姓名: X X 指导教师: X X X 教师职称: 助 教 起止时间: XXXX至XXX 课程设计(报告)任务及评语院(系):软件学院 教研室:软件教研窒学 号000000学生姓名XX专业班级计算机网络技术程序设计(报告)题目存储管理分区分配算法程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: XX 年X月X 日目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1课程设计题目22.2课程设计整体设计说明22.2.1课程设计内容22.2.2系统功能模块结构图22.2.3数据结构设计及用法说明22.2.4程序结构(画流程图)22.2.5各模块的功能22.3程序源代码及注释2第3章 课程设计总结3参考资料4第1章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1.3 课程设计的预备知识熟悉C语言及C语言开发工具。1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 课程设计内容2.1程序功能介绍2.2程序整体设计说明 本程序主要是对存储空间的分配和回收,当用户申请空间后进行合理的分配,空间不用后及时有效地进行回收或清除,以免发生空间的游离照成计算机堆积废物过多,空间得不到正常有利的使用,因而本程序是计算机空间得到了合理有效的最大利的帮助人们完成空间存储的分配和回收。2.2.1设计思路通过用所学的C语言知识设计出一个存储管理分区分配算法采用首次适应算法和最佳适应算法实现。步骤:编写出系统功能模块结构图,目的为写流程图做好思路。 1.定义check过程,用于检查指定的释放块(由用户键入)的合法性 2.定义assignment1过程,实现First Fit Algorithm 3.定义assignment2过程,实现Best Fit Algorithm 4.定义acceptment1过程,实现First Fit Algorithm的回收算法 5.定义acceptment2过程,实现Best Fit Algorithm的回收算法 6.定义print过程,打印空闲区队列 程序首先申请一整块空闲区,其首址为0,大小为32767; 然后,提示用户使用哪种分配算法,再提示是分配还是回收; 分配时要求输入申请区的大小,回收时要求输入释放区的首址和大小。2.2.2数据结构设计及用法说明 1.定义分区描述器node,包括 3个元素: (1)addr分区首地址 (2)size分区大小 (3)next指向下一个分区的指针 2.定义 3个指向node结构的指针变量: (1)head1空闲区队列首指针 (2)back1指向释放区node结构的指针 (3)assign指向申请的内存分区node结构的指针 3.定义 1个整形变量: free用户申请存储区的大小(由用户键入)2.2.3程序结构(流程图)主流程图:分流程图:2.2.4各模块的功能及程序说明RECT *assignment(RECT *head,int application) /*分配函数*/void acceptment1(RECT *head,RECT *back1)/*首先适应*/void acceptment2(RECT *head,RECT *back1) /*最佳适应,back1为回收结点的地址*/void print(RECT *head) /*输出链表*/int backcheck(RECT *head,RECT *back1) /*检查回收块的合法性,back1为要回收的结点地址*/2.2.5程序结果*index*address*end*size*- 1 0 32766 32767-Enter the way(best or first(b/f)bEnter the assign or accept(as/ac)asInput application:5631Success!ADDRESS=27136*index*address*end*size*- 1 0 27135 27136-Enter the assign or accept(as/ac)asInput application:5632Too large application!,assign fails!*index*address*end*size*- 1 0 3813 3814-Enter the assign or accept(as/ac)ac2.3程序源代码及注释/*9.3.2 源程序*/*pcb.c*/#include stdio.h#include stdlib.h#include string.h#define MAX 32767typedef struct node /*设置分区描述器*/ int address,size; struct node *next;RECT;/*函数原型*/RECT *assignment(RECT *head,int application);void acceptment1(RECT *head,RECT *back1);void acceptment2(RECT *head,RECT *back1) ;int backcheck(RECT *head,RECT *back1);void print(RECT *head);/*变量声明*/RECT *head,*back,*assign1,*p;int application1,maxblocknum;char way;/*主函数*/main()char choose10;int check;head=malloc(sizeof(RECT); /*建立可利用区表的初始状态*/p=malloc(sizeof(RECT);head-size=MAX;head-address=0;head-next=p;maxblocknum=1;p-size=MAX;p-address=0;p-next=NULL;print(head); /*输出可利用表初始状态*/printf(Enter the way(best or first(b/f)n);/*选择适应策略*/scanf(%c,&way);doprintf(Enter the assign or accept(as/ac)n);scanf(%s,choose); /*选择分配或回收*/if(strcmp(choose,as)=0) /*as为分配*/printf(Input application:n);scanf(%d,&application1);/*输入申请空间大小*/assign1=assignment(head,application1);/*调用分配函数*/if(assign1-address=-1)/*分配不成功*/printf(Too large application!,assign fails!nn);elseprintf(Success!ADDRESS=%5dn,assign1-address); /*分配成功*/print(head); /*输出*/elseif(strcmp(choose,ac)=0) /*回收*/back=malloc(sizeof(RECT);printf(Input Adress and Size!n);scanf(%d%d,&back-address,&back-size);/*输入回收地址和大小*/check=backcheck(head,back); /*检查*/if(check=1)if(tolower(way)=f)/*首先适应算法*/acceptment1(head,back); /*首先适应*/elseacceptment2(head,back);/*最佳适应*/print(head); while(!strcmp(choose,as)|!strcmp(choose,ac);/*分配函数*/RECT *assignment(RECT *head,int application)RECT *after,*before,*assign;assign=malloc(sizeof(RECT); /*分配申请空间*/assign-size=application;assign-next=NULL;if(applicationhead-size|applicationaddress=-1; /*申请无效*/elsebefore=head;after=head-next;while(after-sizenext;after=after-next;if(after-size=application) /*结点大小等于申请大小则完全分配*/if(after-size=head-size)maxblocknum-;before-next=after-next;assign-address=after-address;free(after);elseif(after-size=head-size) maxblocknum-;after-size=after-size-application; /*大于申请空间则截取相应大小分配*/assign-address=after-address+after-size;if(tolower(way)=b)/*如果是最佳适应,将截取后剩余结点重新回收到合适位置*/before-next=after-next;back=after;acceptment2(head,back);if(maxblocknum=0) /*修改最大数和头结点值*/before=head;head-size=0;maxblocknum=1;while(before!=NULL)if(before-sizehead-size)head-size=before-size;maxblocknum=1;elseif(before-size=head-size)maxblocknum+;before=before-next;assign1=assign;return assign1; /*返回分配给用户的地址*/void acceptment1(RECT *head,RECT *back1)/*首先适应*/RECT *before,*after;int insert;before=head;after=head-next;insert=0;while(!insert) /*将回收区插入空闲区表*/if(after=NULL)|(back1-addressaddress)&(back1-address=before-address)before-next=back1;back1-next=after;insert=1;elsebefore=before-next;after=after-next;if(back1-address=before-address+before-size)/*与上一块合并*/before-size=before-size+back1-size;before-next=back1-next;free(back1);back1=before;if(after!=NULL&(after-address=back1-address+back1-size) /*与下一块合并*/back1-size=back1-size+after-size;back1-next=after-next;free(after);if(head-sizesize) /*修改最大块值和最大块个数*/head-size=back1-size;maxblocknum=1;elseif(head-size=back1-size)maxblocknum+;/*最佳适应,back1为回收结点的地址*/void acceptment2(RECT *head,RECT *back1)RECT *before,*after;int insert ;insert=0;before=head;after=head-next;if(head-next=NULL) /*如果可利用区表为空*/head-size=back1-size;head-next=back1;maxblocknum+;back1-next=NULL;elsewhile(after!=NULL) /*与上一块合并*/if(back1-address=after-size+after-address)before-next=after-next;back-size=after-size+back1-size;free(after);after=NULL;elseafter=after-next;before=before-next;before=head;after=head-next;while(after!=NULL)if(after-address=back1-size+back1-address) /*与下一块合并*/back1-size=back1-size+after-size;before-next=after-next;free(after);after=NULL;elsebefore=before-next;after=after-next;before=head;/*将回收结点插入到合适的位置*/after=head-next;doif(after=NULL|(after-sizeback1-size)before-next=back1;back1-next=after;insert=1;elsebefore=before-next;after=after-next;while(!insert);if(head-sizesize) /*修改最大块值和最大块数*/head-size=back1-size;maxblocknum+;elseif(head-size=back1-size)maxblocknum+;void print(RECT *head) /*输出链表*/RECT *before,*after;int index,k;before=head-next;index=1;if(head-next=NULL)printf(NO part for assignment!n);elseprintf(*index*address*end*size*n);while(before!=NULL)printf(-n);printf( %-13d%-13d%-13d%-13dn,index,before-address,before-address+before-size-1,before-size);printf(-n);index+;before=before-next;/*检查回收块的合法性,back1为要回收的结点地址*/int backcheck(RECT *head,RECT *back1)RECT *before,*after;int check=1;if(back1-addresssizenext;while(before!=NULL)&check)/*地址不能和空闲区表中结点出现重叠*/if(back1-addressaddress)&(back1-address+back1-sizebefore-address)|(back1-address=before-address)(back1-addressaddress+before-size) check=0;elsebefore=before-next;if(check=0)printf(Error input!n);return check; /*返回检查结果*/第3章 课程设计总结做存储管理分区分配算法课程设计有感不知不觉期末的脚步已悄悄逼近,我们结束了一科又一科的紧张复习,迎接着一次又一次别开生面的考试,这段时间给我最大的体会就是好累,好枯燥!课程设计对于我们大一新生来说可谓是难上加难,首先它是一门新的学科,以前从来没有接触过,对其认识比较肤浅,没有一个明确的框架,想要将这个任务很好的完成,就必须要有一个持之以恒的决心,一个不甘劳苦的决心。本次C语言课程设计是由老师提供电子框架,由学生独立完成,通过对课程设计的制作,发现了自身许许多多的不足,同时也学到许许多多的东西。是我们每一个同学都受益匪浅!通过对本次课程设计的深入了解,我发现了程序中的一些问题,和一些优缺点,现在就举出几个简单的例子吧:优点(1)实现了多个作业或进程对内存的共享,有助于多道程序设计,从而提高了系统利用率。(2)该方法要求的硬件支持少,管理算法简单,因而实现容易。缺点:(1)内存利用率仍然不高。和单一连续分配算法一样,存储器中可能含有从未用过的信息。而且,还存在着严重的碎小空闲区(碎片)不能利用的问题,这更进一步影响了内存用率。(2)作业或进程的大小受分区大小控制,除非配合采用覆盖和交换技术。(3)难以实现各分区间的信息共享。 类似于上面的优缺点还有很多,暂不推出,下面我想谈谈这次课程设计的体会。首先我很高兴能有一个这么好的机会去提高自己的综合素质,很高兴能通过这次
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第五单元 17 屈原(节选)2023-2024学年九年级下册语文同步说课稿(统编版)
- 海关安全防护培训课件
- 海关估价培训课件
- 入纪检部申请书500字
- 2.1 大洲和大洋 第二课时 说课稿 2025-2026学年人教版地理七年级上册
- 贫困全职妈妈申请书
- 安全监理岗位培训课件
- 车辆解除查封申请书
- 2023四年级数学下册 五 小数(小数的性质(二))说课稿 西师大版
- 毕业生回原籍申请书
- 中国密闭空间检测无人机行业市场前景预测及投资价值评估分析报告
- 2025面向机器学习的数据标注规范
- YY/T 0339-2024呼吸道用吸引导管
- 围手术期高血压专家管理共识
- 外科患者疼痛护理与管理
- 租金延迟缴纳申请书
- 学校体育学(唐炎-刘昕版)重点、知识点
- DL-T 2563-2022 分布式能源自动发电控制与自动电压控制系统测试技术规范
- 食堂工作人员培训内容
- 泛影葡胺在消化道造影中的应用
- 2022年11月四川省凉山州中级人民法院逐级遴选4名法官笔试题库含答案解析
评论
0/150
提交评论