




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号P 专业计算机科学与技术 姓名实验日期 2017/11/23 教师签字 成绩 实验报告【实验名称】 基于顺序搜索的动态分区分配算法(二)【实验目的】理解在连续分区动态的存储管理方式下,如何实现贮存空间的分配与回收。采用可变式分区管理,使用最佳适应算法实现主存空间的分配与回收。采用可变式分区管理,使用最坏适应算法实现主存空间的分配与回收。【实验原理】C+语言程序设计数据结构最佳适应算法最坏适应算法数据结构和符号说明1、bool ROMN; /定义主存信息,如果内存被占用,则标记为1,否则标记为0,设置内存单元为10242、pcb num20;/定义作业数组,最大支持20个作业3、typedef struct Pcb /定义作业结构体,包括名称,开始时间,大小,是否执行状态 char name10; int start; int size; int state=0; pcb;主要函数:void find_free_rom();/寻找空闲区void sort1();/对空闲区进行排序从小到大void sort1();/对空闲区进行排序从大到小void show();/显示函数void insert_pcb1(pcb &a);/最佳适应算法void insert_pcb2(pcb &a);/最坏适应算法void init();/初始化函数算法流程图:最佳适应算法:最坏适应算法:#include#include#define N 1024bool ROMN;int p=0;int count=0;int free_rom_counter=0;/空闲区数目typedef struct Pcb /进程结构体 char name10; int start; int size;/大小 int state=0; /状态 pcb;pcb num20;/进程数组typedef struct Free_rom/空闲区结构体 int num; int start; int end; int space;/空闲区大小 Free_room;Free_rom free_rom100;/空闲区数组void show()/显示空闲区信息 printf(*nn); printf(空闲区名t开始地址tt大小tt结束地址ttn); for (int i=1; i= free_rom_counter; i+) printf(%dtt%dttt%dtt%dttn,free_rom i.num,free_rom i.start, free_rom i.space,free_rom i.end); printf(n); printf(*nn);void find_free_rom()/寻找空闲区,更新空闲区数组 free_rom_counter=0; int i,j,p; for(i=0; iN; i+) if(ROMi=0) p=i; for(j=i; jN; j+) if(ROMj=0) i=j; continue; if(ROMj=1)/找到就更新信息 free_rom_counter+; free_rom free_rom_counter.num= free_rom_counter; free_rom free_rom_counter.start=p; free_rom free_rom_counter.end=j-1; free_rom free_rom_counter.space=j-p; i=j+1; break; if(j=N&ROMj-1=0)/对最后一个内存进行特殊处理 free_rom_counter+; free_rom free_rom_counter.num= free_rom_counter; free_rom free_rom_counter.start=p; free_rom free_rom_counter.end=j-1; free_rom free_rom_counter.space=j-p; void sort1()/最佳适应算法对空闲区从小到大排序 find_free_rom(); Free_rom a; for(int i=1; ifree_rom_counter; i+) for(int j=1; j free_romj+1.space) a=free_romj; free_romj=free_romj+1; free_romj+1=a; void sort2()/最坏适应算法对空闲区从大到小排序 find_free_rom(); Free_rom a; for(int i=1; ifree_rom_counter; i+) for(int j=1; jfree_rom_counter; j+) if( free_romj.space free_romj+1.space) a=free_romj; free_romj=free_romj+1; free_romj+1=a; void init()/初始化 for(int i=0; iN; i+) ROMi=0;void input(pcb &a)/输入 char name10; printf(输入进程名n); scanf(%s,&); printf(输入进程大小n); scanf(%d,&a.size);void insert_pcb1(pcb &a)/最佳适应算法插入进程 find_free_rom(); sort1(); int i,j,k; for(i=1; i=free_rom_counter; i+)/判断插入 if(a.size= free_romi.space) for(j= free_romi.start; jfree_romi.start+a.size; j+) ROMj=1; a.state=1; a.start=free_romi.start; numcount+=a; break; if(i=free_rom_counter+1)/插入失败 printf(可用空间不足!n);void insert_pcb2(pcb &a)/最坏适应算法插入find_free_rom();sort2();int i,j,k;for(i=1; i=free_rom_counter; i+) if(a.size= free_romi.space) for(j= free_romi.start; jfree_romi.start+a.size; j+)/寻找 ROMj=1; a.state=1; a.start=free_romi.start; numcount+=a; break; if(i=free_rom_counter+1)/插入失败 printf(可用空间不足!n);void Delete(pcb &a)/内存中释放进程 int i; for(i=a.start; ia.start+a.size; i+) ROMi=0;/更新内存信息,更新进程状态数组 a.state=0; printf(删除成功n); find_free_rom();int main()/主函数 init(); find_free_rom(); int choose1; int choose; char name10; printf(1、最佳适应算法n);/主界面 printf(2、最坏首次适应算法n); scanf(%d,&choose1); pcb a; do printf(nn1、插入进程n); printf(2、删除进程n); printf(3、显示进程信息n); printf(4、显示空余内存信息n); scanf(%d,&choose); if(choose=1)/选择 input(a); if(choose1=1) insert_pcb1(a); else insert_pcb2(a); else if(choose=2) printf(输入删除进程的名字n); scanf(%s,&name); for(int i=0; icount; i+) if( !strcmp(,name) Delete(numi); else if(choose=3) printf(*nn); printf(进程名tt开始地址tt大小tt结束地址ttn);/输出内存信息 for(int i=0; icount; i+) if(numi.state!=0) printf(%stt%dttt%dtt%dttn,,numi.start,numi.size,numi.size+numi.start-1); printf(n*nn); else if(choose=4) find_free_rom(); show(); else break; while(1); return 0;截图:构造如下空闲区: 此时插入一个进程 G,大小为80H,应插入到第二块空闲区再插入一个大小为30的进程H,应插入到第三块中再插入一个小进程,大小为5,插入到第二块空闲区,查看进程信息和空闲区信息:最佳适应算法成立。最坏适应算法:构造如下空闲区:插入一个大小为80的进程G,插入到第一块空闲区。在插入一个大小为20的进程H,插入到第三块空闲区。再插入一个大小为20的进程,插入到第三块空闲区。最坏适应算法成立。【小结或讨论】1、 本次实验涉及到两个表,空闲区登记表和进程分配表,分配空间需要进程所需空间的大小,给出过分配后进程的起始地址;回收空间除了需要进程所需空间的大小以外,还需要知道进程的起始地址,再进行一系列判断然后回收。2、 本次实验的两个算法是在首次适应算法的基础上进行的改进,最佳适应算法是将所有区按照区的大小进行升序排列,再从第一个区即最小的区开始检索分配内存;最坏适应算法是将所有区按照
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年文化遗产保护管理硕士研究生入学考试试卷及答案
- 2025年卫生管理师专业技能考核试卷及答案
- 2025年无机基础化学原料项目建议书
- 2025年网页设计师专业技能考核试卷及答案解析
- 2025年上门服务项目合作计划书
- 明德理实班初三数学试卷
- 罗田县初一上册数学试卷
- 内蒙古单招理科数学试卷
- 医疗设备租赁国际市场开发
- 平和招生数学试卷
- 注塑企业新员工入职培训
- 肺动脉高压讲课件
- 妊娠期高血压防治课件
- 2025-2030中国PC水冷管行业销售动态与投资盈利预测报告
- 2025至2030中国建筑劳务行业发展分析及产业运行态势及投资规划深度研究报告
- 新解读《DL-T 5100 - 1999水工混凝土外加剂技术规程》新解读
- 统编版高中语文必修上册《劝学》《师说》文言文挖空训练(合集)
- 政采云合同协议书
- DB32T 5124.1-2025 临床护理技术规范 第1部分:成人危重症患者目标温度管理
- 给水排水系统水质监测数据智能分析模型开发
- 电商承揽合同协议书
评论
0/150
提交评论