




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术2004班 黄仁化 031010151551017计算机操作系统实验报告课题名称:动态分区分配方式的模拟姓名:黄仁化学号:031010151551017班级:计算机科学与技术2004班日期 :二五年十二月十八日 一、动态分区分配方式的模拟1、实验目的:了解动态分区分配方式中的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解2、实验内容:(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。其中,空闲分区通过空闲分区链来管理;在进行内存分配时,系统优先使用空闲区低端的空间。(2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:作业1申请130KB作业2申请60KB作业3申请100KB作业2释放60KB作业4申请200KB作业3释放100KB作业1释放130KB作业5申请140KB作业6申请60KB作业7申请50KB作业8申请60KB实验内容简介: 设计一个可变式分区分配存储管理方案,对内存进行动态分配,并回收进程释放的空间。具体实现过程如下:定义空闲分区表的数据结构,它包括表号,起始地址,大小和指针4个属性;定义进程的数据结构,它包括进程名,起始地址,大小,需要的时间,剩余的时间及指针5个属性。首先,初始化一个空闲分区;然后,输入一个进程,根据进程的信息进行检测,看看是否有足够的空间来满足进程的要求,如果有,则为进程分配其所要求的空间,否则,显示出错。接着,检测是否有进程完成。如果有,则回收已完成的进程的空间,其它进程的运行时间加1;如果没有,则将所有队列中的所有进程运行时间加1。返回循环,接收进程输入,直到接收到终结符。3、流程图:开始初始化接受字符终结符 是输入一个进程结束空间足够 否显示无效分配空间有进程完成 是回收空间运行时间减14、子模块的功能简介1、 Init() 初始化空闲分区表,它的分区号为0,它的起始地址为1000,大小为200。2、 disp()显示空闲分区表和进程队列的信息。3、 input()输入进程的信息4、inqueue()当输入的进程能够申请到足够空间时,将该进程加入到进程队列。5、 settle()空间分配函数,其具体工作是修改空闲分区表。其流程图如下:找到合适分区只有一个分区查找分区表修改分区表将分区表紧凑结束开始6、 allocate()空闲分区表的修改函数,包括将分区表的起始地址赋值给进程的起始地址,将该空闲分区的地址及大小修改,以及空闲分区表总大小的修改。7、 gather()紧凑函数,将分散的分区紧凑为一个大区。其具体工作包括将所有进程移到分区的顶端,根据相关信息修改它们的地址,并重新设置空闲分区表。8、 receive()分区回收函数,其工作包括生成一个分区表项,并把它加入到分区表中,以及修改空闲分区的总大小。9、 move()将进程队列中的进程移到分区表的顶端,修改它们的地址。10deleted()将已运行完的进程从队列中删除,并释放结点的空间。5、源代码:/本动态分区存储管理模拟系统程序在VC+6.0下编译通过/姓名:黄仁化 学号:031010151551017#include #include #include #include const int MAXJOB=100;/定义表最大记录数 typedef struct node int start; int length; char tag20; job; job freesMAXJOB;/定义空闲区表 int free_q; /定义空闲量job occupysMAXJOB;/定义已分配区表 int occupy_q; /定义已分配量void initial() /初始化函数 int i; for(i=0;iMAXJOB;i+) freesi.start=-1; freesi.length=0; strcpy(freesi.tag,free); occupysi.start=-1; occupysi.length=0; strcpy(occupysi.tag,); free_q=0; occupy_q=0; int readData() /读数据函数 FILE *fp; char fname20; coutfname; if(fp=fopen(fname,r)=NULL) cout错误,文件打不开,请检查文件名endl; else while(!feof(fp) fscanf(fp,%d,%d,&freesfree_q.start,&freesfree_q.length); free_q+; return 1; return 0; void sort() /sort int i,j,p; for(i=0;ifree_q-1;i+) p=i; for(j=i+1;jfree_q;j+) if(freesj.startfreesp.start) p=j; if(p!=i) freesfree_q=freesi; freesi=freesp; freesp=freesfree_q; void view() /显示函数 int i; cout-endl; cout当前空闲表:endl; cout起始地址 长度 状态endl; for(i=0;ifree_q;i+) cout.setf(2); cout.width(12); coutfreesi.start; cout.width(10); coutfreesi.length; cout.width(8); coutfreesi.tagendl; cout-endl; cout当前已分配表:endl; cout起始地址 长度 占用作业名endl; for(i=0;ioccupy_q;i+) cout.setf(2); cout.width(12); coutoccupysi.start; cout.width(10); coutoccupysi.length; cout.width(8); coutoccupysi.tagendl; void earliest()/最先适应分配算法 char job_name20; int job_length; int i,j,flag,t; coutjob_name; cinjob_length; flag=0; for(i=0;i=job_length) flag=1; if(flag=0) coutSorry,当前剩余空闲内存不足,请稍候再试=job_length) t=1; i+; i-; occupysoccupy_q.start=freesi.start; strcpy(occupysoccupy_q.tag,job_name); occupysoccupy_q.length=job_length; occupy_q+; if(freesi.lengthjob_length) freesi.start+=job_length; freesi.length-=job_length; else for(j=i;jfree_q-1;j+) freesj=freesj+1; free_q-; cout内存空间成功:)endl; void excellent() /最优适应分配算法 char job_name20; int job_length; int i,j,flag,t; coutjob_name; cinjob_length; flag=0; for(i=0;i=job_length) flag=1; if(flag=0) coutSorry,当前剩余空闲内存不足,请稍候再试=job_length) t=1; i+; i-; for(j=0;j=job_length)&(freesj.lengthjob_length) freesi.start+=job_length; freesi.length-=job_length; else for(j=i;jfree_q-1;j+) freesj=freesj+1; free_q-; cout内存空间成功:)endl; void worst() /最坏适应算法 char job_name20; int job_length; int i,j,flag,t; coutjob_name; cinjob_length; flag=0; for(i=0;i=job_length) flag=1; if(flag=0) coutendlSorry,当前剩余空闲内存不足,请稍候再试=job_length) t=1; i+; i-; for(j=0;j=job_length)&(freesj.lengthfreesi.length) i=j; occupysoccupy_q.start=freesi.start; strcpy(occupysoccupy_q.tag,job_name); occupysoccupy_q.length=job_length; occupy_q+; if(freesi.lengthjob_length) freesi.start+=job_length; freesi.length-=job_length; else for(j=i;jfree_q-1;j+) freesj=freesj+1; free_q-; cout内存空间成功:)endl; void finished()/撤消作业 char job_name20; int i,j,flag,p=0; int start; int length; coutjob_name; flag=-1; for(i=0;ioccupy_q;i+) if(!strcmp(occupysi.tag,job_name) flag=i; start=occupysi.start; length=occupysi.length; if(flag=-1) cout没有这个作业名endl; else for(i=0;ifree_q;i+) /加入空闲表 if(freesi.start+freesi.length)=start) if(i+1)free_q)&(freesi+1.start=start+length) freesi.length=freesi.length+freesi+1.length+length; for(j=i+1;jfree_q;j+) freesj=freesj+1; free_q-; p=1; else freesi.length+=length; p=1; if(freesi.start=(start+length) freesi.start=start; freesi.length+=length; p=1; if(p=0) freesfree_q.start=start; freesfree_q.length=length; free_q+; for(i=flag;ioccupy_q;i+) /删除分配表中的该作业 occupysi=occupysi+1; occupy_q-; void version() /显示版权信息函数 coutendl; cout endl; cout 动态分区存储管理模拟系统 endl; cout endl; cout 计算机操作系统实验 endl; cout 姓名:黄仁化 学号:031010151551017 endl; cout E-Mail:97995163.com endl; cout endl; coutendl; void main() int flag=0; int t=1; int chioce=0; version(); initial(); flag=readData(); while(flag=1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烹饪营养与卫生(第3版)-课件 6.项目三任务二.科学配餐与食谱编制(一)
- 幽默的安全规程讲解培训课件
- 2025年宏观经济展望分析报告:“新秩序”的萌芽
- 岩石书课件教学
- 尾矿工安全培训课件
- 存量房买卖居间服务绿色环保合同
- 电商平台工商股权转让与物流配送协议
- 企业多元化培训方案定制合同
- 企业内部会议信息保密及责任追究协议
- 专利授权担保合同反担保条款及知识产权保护措施
- 比亚迪秦EV新能源汽车整车控制系统
- 部编版小学道德与法治六年级上册配套表格式教案(全册)
- 商务星球版八年级地理上册4.1《因地制宜发展农业》听课评课记录
- 厨房6S管理培训
- 锂电池pack生产线可行性报告
- 2025年政府机关《干部履历表》标准模板
- 临床常用他评量表
- (新版)海事集装箱装箱检查员考试题库及答案
- 车位租赁协议
- 中建《质量标准化管理手册》水利水电工程
- 客户经理招聘笔试题及解答(某大型国企)2024年
评论
0/150
提交评论