




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. WORD. 格式整理 .动态分区存储管理方式的主存分配回收一、实验目的深入了解动态分区存储管理方式主存分配回收的实现。二、实验要求编写程序完成动态分区存储管理方式的主存分配回收的实现。实验具体包括:首先确定主存空间分配表; 然后采用最优适应算法完成主存空间的分配和回收;最后编写主函数对所做工作进行测试。三、实验步骤实现动态分区的分配和回收, 主要考虑的问题有三个: 第一,设计记录主存使用情况的数据表格, 用来记录空闲区和作业占用的区域; 第二,在设计的数据表格基础上设计主存分配算法:第三,在设计的数据表格基础上设计主存回收算法。首先,考虑第个问题: 设计记录主存使用情况的数据表格, 用来记
2、录空闲区和作业占用的区域。由于动态分区的大小是由作业需求量决定的, 故分区的长度是预先不固定的, 且分区的个数也随主存分配和回收变动。 总之,所有分区情况随时可能发生变化, 数据表格的设计必须和这个特点相适应。 由于分区长度不同, 因此设计的表格应该包括分区在主存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收主存分区时,可能会合并空闲分区, 这样如果整个主存采用一张表格记录已分分区和空闲区, 就会使表格操作繁琐。 主存分配时查找空闲区进行分配, 然后填写已分配区表,主要操作在空闲区;某个作业执行完后, 将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空
3、闲区。由此可见, 主存的分配和回收主要是对空闲区的操作。这样为了便于对主存空间的分配和回收,就建立两张分区表记录主存使用情况一张表格记录作业占用分区的“已分配区表”一张是记录空闲区的“空闲区表” 。这两张表的实现方法一般有两种,一种是链表形式,一种是顺序表形式。 在试验中,采用顺序表形式, 用数组模拟。由于顺序表的长度必须是提前固定,所以无论是“已分配区表”还是“空闲区表”都必须事先确定长度。他们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分配区表”还是“空闲区表”都有空闲栏目。已分配区表中除了分区起始地址、长度外,也至少还有一项“标志” ,如果是空闲
4、栏目,内容为“空”,如果为某个作业占用分区的登记项,内容为该作业的作业名;空闲区表中除了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,内容为“空” ,如果为某个空闲区的登记项,内容为“未分配” 。在实际系统中,这两表格的内容可能还要多, 实验中仅仅使用上述必须的数据。 为此,“已分配区表” 和“空.专业 .知识 .分享 . WORD. 格式整理 .闲区表”可变分区管理方式将内存除操作系统占用区域外的空间看做一个大的空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中的各个空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业需求量
5、划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。四、实验结果程序代码:#include <iostream.h>#include <iomanip.h>float minsize=5;int count1=0;int count2=0;#define m 10#define n 10structfloat address;float length;int flag;used_tablen;structfloat address;float length;.专业 .知识 .
6、分享 . WORD. 格式整理 .int flag;free_tablem;void initialize(void);int distribute(int, float);int recycle(int);void show();void initialize(void)int a;for(a=0; a<=n-1; a+)used_tablea.flag=0;free_table0.address=1000;free_table0.length=1024;free_table0.flag=1;int distribute(int process_name, float need_len
7、gth).专业 .知识 .分享 . WORD. 格式整理 .int i, k=-1;float ads, len;int count=0;i=0;while(i<=m-1)if(free_tablei.flag=1&&need_length<=free_tablei.length)count+;if(count=1|free_tablei.length<free_tablek.length)k=i;i=i+1;if(k!=-1).专业 .知识 .分享 . WORD. 格式整理 .if(free_tablek.length-need_length)<=mi
8、nsize)free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;elseads=free_tablek.address;len=need_length;free_tablek.address+=need_length;free_tablek.length-=need_length;i=0;while(used_tablei.flag!=0)i=i+1;if(i<=n-1).专业 .知识 .分享 . WORD. 格式整理 .used_tablei.address=ads;used_tablei.length=l
9、en;used_tablei.flag=process_name;count1+;elseif(free_tablek.flag = 0)free_tablek.flag=1;free_tablek.address=ads;free_tablek.length=len;elsefree_tablek.address=ads;free_tablek.length+=len;cout<<" 内存分配区已满,分配失败!n"return 0;.专业 .知识 .分享 . WORD. 格式整理 .elsecout <<" 无法为该作业找到合适分区!n&
10、quot;return 0;return process_name;int recycle(int process_name)int y=0;float recycle_address, recycle_length;int i, j, k;int x;while(y<=n-1&&used_tabley.flag!=process_name) y=y+1;if(y<=n-1).专业 .知识 .分享 . WORD. 格式整理 .recycle_address=used_tabley.address;recycle_length=used_tabley.length;u
11、sed_tabley.flag=0;count2+;elsecout<<" 该作业不存在! n"return 0;j=k=-1;i=0;while(!(i>=m|(k!=-1&&j!=-1)if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length)=recycle_address)k=i;.专业 .知识 .分享 . WORD. 格式整理 .if(recycle_address+recycle_length)=free_tablei.address)j=i;i=i+1;if
12、(k!=-1)if(j!=-1)free_tablek.length+=free_tablej.length+recycle_length;free_tablej.flag=0;elsefree_tablek.length+=recycle_length;else if(j!=-1)free_tablej.length+=recycle_length;free_tablej.address=recycle_address;.专业 .知识 .分享 . WORD. 格式整理 .elsex=0;while(free_tablex.flag!=0)x=x+1;if(x<=m-1)free_tab
13、lex.length=recycle_length;free_tablex.flag=1;elseused_tabley.flag=process_name;cout<<" 空闲区已满,回收失败!n"return 0;return process_name;.专业 .知识 .分享 . WORD. 格式整理 .void show()cout<<"空闲区n"for(int i=0;i<=count2;i+)cout<<"地 址: "<<free_tablei.address<&l
14、t;""<<" 作 业长 度 :"<<free_tablei.length<<""<<"状态: "<<free_tablei.flag<<endl;cout<<"已 分 配 区n"for(int j=0;j<count1;j+)cout<<"地 址: "<<used_tablej.address<<""<<"
15、作 业长 度 :"<<used_tablej.length<<""<<"作业名: "<<used_tablej.flag<<endl;void main()int choice;int job_name;float need_memory;bool exitFlag=false;cout<<"动态分区分配方式的模拟n"initialize();while(!exitFlag).专业 .知识 .分享 . WORD. 格式整理 .cout<<&q
16、uot;1:分配内存2:回收内存 n"cout<<"3:查看分配0:退出n"cin>>choice;switch(choice)case 0:exitFlag=true;break;case 1:cout<<"请输入作业名和所需内存:"cin>>job_name>>need_memory;distribute(job_name, need_memory);break;case 2:int ID;cout<<"请输入您要释放的分区号:"cin>>
17、;ID;recycle(ID);break;case 3:show();.专业 .知识 .分享 . WORD. 格式整理 .break;内存分配回收实现截图(1) 、假定系统内存分配表允许的最大作业项为10,当分配超过10 时,提示“内存分配区已满,分配失败” 。(2) 、回收作业所占内存时,当输入的作业名不存在,回收失败,提示“该作业不存在”。.专业 .知识 .分享 . WORD. 格式整理 .(3) 、当要释放某个作业时,将已分配表中此作业的标志置为0,并在空闲区做相应登记。.专业 .知识 .分享 . WORD. 格式整理 .五、总结核心算法:/ 最优分配算法实现的动态分区int dist
18、ribute(int process_name, float need_length)int i, k=-1;/k用于定位在空闲表中选择的未分配栏float ads, len;int count=0;i=0;/ 核心的查找条件,找到最优空闲区while(i<=m-1)/循环找到最佳的空闲分区if(free_tablei.flag=1&&need_length.专业 .知识 .分享 . WORD. 格式整理 .<=free_tablei.length)count+;if(count=1|free_tablei.length<free_tablek.length)
19、k=i;i=i+1;if(k!=-1)if(free_tablek.length-need_length)<=minsize) /整个分配free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;else/ 切割空闲区ads=free_tablek.address;.专业 .知识 .分享 . WORD. 格式整理 .len=need_length;free_tablek.address+=need_length;free_tablek.length-=need_length;i=0;/ 循环寻找内存分配表中标志为空栏目的项while(used_tablei.flag!=0)i=i+1;if(i<=n-1)/找到,在已分配区表中登记一个表项used_tablei.address=ads;used_tablei.length=len;used_table
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锻造生产工艺员考试试卷及答案
- 2025年南平事业单位真题
- 高原环境下低空空域的研究与挑战
- 2024年丽水云和县招聘事业编制教师真题
- 昌吉吉盛新型建材二期工业硅项目综合循环水泵站水泵技术协议
- 教育变革背景下的在线教育平台政策分析
- 教育行业的数据泄露预防与应对措施
- 数字时代的教育变革传统教学与数字教材的结合
- 企业园区安全防范的智能化升级方案
- 中职文案写作课件
- 2024年天津高考数学真题试题(原卷版+含解析)
- 《大数据分析技术》课程标准
- 最简单封阳台安全免责协议书
- 2024年危险化学品经营单位安全管理人员考试练习题(附答案)
- (正式版)JBT 3300-2024 平衡重式叉车 整机试验方法
- 《无人机航迹规划》课程标准(高职)
- 养老院健康档案模板
- 夏季高温期间建筑施工安全注意事项
- 2024年中小学教师职称审定答辩题目
- 钢丝绳吊装时最大允许吊装重物对应表
- 《金融反欺诈与大数据风控研究报告(2023)》
评论
0/150
提交评论