版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主存储器的分配与回收实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。实验内容与分析设计:本实验模拟在两种存储管理方式下的主存分配和回收。第一题:在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收。[提示]:可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入。随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的。第二题:在分页式管理方式下采用位示图来表示主存分配情况,实现主存空间的分配和回收。实验步骤与调试过程:1.打开vc6.0,新建Win32ApplicationConsole工程,并建基于控制台的文件。2.定义相应的函数的作用如下:#defineTOTLE_LEFT108//除系统占用内存外的剩余内存 #definefirst_free14//第一块空闲区的起始地址 #definefirst_size12//第一块空闲区的大小 #definesec_free32//第二块空闲区的起始地址 #definesec_size96//第二块空闲区的大小 #definefirst_job_size3#definesec_job_size23#definethird_job_size3//空闲分区表结点 structFree{intstart;intlength;Free(ints,intl);};do_request(name,size)//申请作业do_revoke(name)//回收作业的存储空间 print_task()//查看作业3.根据要求编辑在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收的程序,并对其进行调试。4.观察当有一个新作业要求装入主存是的情况。5.采用最先适应算法分配主存空间。6.根据要求编辑在分页式管理方式下采用位示图来表示主存分配情况,实现主存空间的分配和回收,并对其进行调试。实验结果:分页管理中:运行程序后在控制台中出现1.调入作业2.撤销作业3.打印的界面。根据提示进行不同的操作。1、开始有512K的空间,未分配。用名称P来表示。进程A申请200K的空间,(申请用1表示,释放用0表示),其结果显示如下。2.进程B申请150K的空间3.进程A释放200K的空间4、进程C申请100K的空间,进程D申请50K的空间。5、进程E申请30K的空间,进程F申请70K的空间疑难小结:通过本次试验,我对主存储器的分配与回收有了进一步的了解,通过动手实现其主存储器的分配与回收,更加深刻的理解了主存储器的分配与回收的特点。同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识。本实验用到的一些数据结构有:typedefstructNODE{charname;//名称floatstart;//起始位置floatend;//大小intflag;//是否分配的标志}NODE;NODEOS[COUNT];//数组在清楚主存储器分配和回收的情况下,做些实验还是比较简单的。关键是注意当找到一个大的块时,如何将这个大块分成两小块,一块用于分配,另一块依旧是未分配。在主存储器空间的分配和回收应该注意其中的分配的时候的错误控制和回收时候的错误控制,此外,还应该针对作业分配失败的异常作出相应的处理代码。主要算法和程序清单:分页管理:#include<iostream>#include<vector>#include<string>#include<memory.h>usingnamespacestd;boolblock[8][8];vector<int>page;vector<vector<int>>work;intsel;voidinit(){ intt; memset(block,0,sizeof(bool)); vector<int>v;for(t=0;t<6;t++)block[0][t]=1;block[1][1]=1;block[1][3]=1;block[1][5]=1;block[3][0]=1;block[3][7]=1;for(t=0;t<64;t++){ if(block[t/8][t%8]) v.push_back(t);}work.push_back(v);}voidscreen(){ cout<<endl <<"1.调入作业"<<endl <<"2.撤销作业"<<endl <<"3.打印"<<endl; cin>>sel;}voidadd_work(){ cout<<"请输入作业的大小"<<endl; intlength,sum,t; cin>>length; vector<int>now; for(t=0,sum=0;t<64;t++) if(!block[t/8][t%8]) sum++; if(sum<length){ cout<<"内存溢出"<<endl; exit(0); } for(t=0;t<64&&length;t++) if(!block[t/8][t%8]){ block[t/8][t%8]=1; length--; now.push_back(t);} work.push_back(now); cout<<"完成!"<<endl; } voiddes_work(){ if(work.size()==0){ cout<<"无作业可供删除"<<endl; exit(0); } cout<<"请输入要删除的作业"<<endl <<"最大是"<<work.size()-1<<endl; intsel,num; cin>>sel; for(inti=0;i<work[sel].size();i++){ num=work[sel][i]; block[num/8][num%8]=0; } work.erase(work.begin()+sel); cout<<"完成!"<<endl;}voidprint(){ inti,j,sum(0); cout<<"内存使用情况"<<endl; for(i=0;i<8;i++) { for(j=0;j<8;j++){ cout<<""<<block[i][j]; if(!block[i][j])sum++; } cout<<endl; } cout<<"当前空余块总数为:"<<sum<<endl; for(i=0;i<work.size();i++){ cout<<"作业"<<i<<":"<<endl <<"页表块表"<<endl; for(j=0;j<work[i].size();j++) cout<<j<<""<<work[i][j]<<endl; } cout<<endl;}intmain(){ init(); while(1){ screen(); if(sel==1){ add_work(); } elseif(sel==2) des_work(); elseprint(); } return0;}最先算法:#include<stdio.h>intTABLE[4][2]={{0,512}};intWORK[8][3]={{300,1,0},{100,2,0},{300,1,1},{150,3,0},{30,4,0},{40,5,0},{60,6,0},{30,4,1}};inti,j,k,flag=1,now,temp[2],once=0;voidfirst_01(){ once=0; for(i=0;i<flag;i++) { if(once==0&&TABLE[i][1]>=WORK[now][0]) { TABLE[i][0]=TABLE[i][0]+WORK[now][0]; TABLE[i][1]=TABLE[i][1]-WORK[now][0]; for(j=now;j<8;j++) { if(WORK[j][2]==1&&WORK[now][2]==0&&WORK[j][1]==WORK[now][1]) { WORK[j][1]=TABLE[i][0]; WORK[now][1]=TABLE[i][0]-WORK[now][0]; } } once=1; } }}voidfirst_02(){ j=0; for(i=0;i<flag;i++) { if(WORK[now][1]==TABLE[i][0]) { TABLE[i][0]=TABLE[i][0]-WORK[now][0]; TABLE[i][1]=TABLE[i][1]+WORK[now][0]; } else { j++; } } if(j==flag) { flag++; TABLE[flag-1][0]=WORK[now][1]-WORK[now][0]; TABLE[flag-1][1]=WORK[now][0]; }}voidfirst_03(){ for(i=0;i<flag;i++) { if(TABLE[i][0]==0) { for(j=i+1;j<flag;j++) { TABLE[j][0]=TABLE[j-1][0]; TABLE[j][0]=0; TABLE[j][1]=TABLE[j-1][1]; TABLE[j][1]=0; } }}for(i=0;i<flag;i++){ for(j=i;j<flag;j++) { if(TABLE[i][0]>TABLE[j][0]) {for(k=0;k<2;k++){ temp[k]=TABLE[i][k]; TABLE[i][k]=TABLE[j][k]; TABLE[j][k]=temp[k];} } }}printf("\t本次TABLE空闲区说明表\n");printf("\t起止\t长度\t状态\
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSES 217-2025水质 12种抗生素抗性基因和1种可移动遗传元件的测定 实时荧光定量PCR法
- T/UNP 89-2024建筑工程施工现场安全生产管理规范
- T/GZCBD 009-2024“贵系列”品牌 银饰类评分规范
- T/CI 959-2025储氢用钒合金
- T/CAIEC 088-2025全装修住宅施工管理与质量验收规范
- T/CSAE 380-2024汽车双倍数据速率同步动态随机存储器工作寿命试验方法
- 2025~2026学年江苏省宿迁市宿豫区多校苏教版六年级上册月考数学试卷【附答案】
- AI在阿非利卡语中的应用
- 2025-2026学年湖北省荆州市初中数学八年级期末下册点睛提升潜能激发题详细参考解析
- 2027届贵州省六盘水市第二十中学数学七年级第一学期期末考试试题含解析
- 2026军队文职招聘-军队文职技能岗-军队文职招聘(炊事员-食堂管理员)历年参考题库含答案详解
- 山东齐鲁名校教育测评2026年10月高三年级学业质量检测地理+答案
- 2.4 光的反射现象 课件(内嵌视频)2026-2027学年科学六年级上册教科版
- 2026年6月浙江高考选考技术试卷真题(含答案详解)
- 部编版五年级上册语文第七单元《习作:我最喜爱的季节》教学课件(新教材)
- 2026中国建设银行招聘考试(英语)历年参考题库含答案详解
- (2026年)清廉学校建设年度工作总结
- 2026年机电工程中级职称考试《专业基础知识》考试题库及答案
- 2026年江苏省中学生生物学奥林匹克初赛理论试题解析
- 《化工园区消防站建设指南(试行)》
- 人教版九年级全册英语专题复习教案全集
评论
0/150
提交评论