




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统动态分区存储管理实验报告动态分区存储管理试验报告【试验目的】目的:1.熟识主存的安排与回收。2. 理解在不同的存储管理方式下,如何实现主存空间的 安排与回收。3.把握动态分区安排方式中的数据结构和安排 算法及动态分区存储管理方式及其实现过程。【试验原理】建立两张表,空闲表和已安排表,分别将未安排的作业 和已安排好的作业放入其中。当要装入一个作业时,从空闲 区表中查找标志为“未安排"的空闲区,从中找出一个能容 纳该作业的空闲区。假如找到的空闲区正好等于该作业的长 度,则把该分区全部安排给作业。这时应当把该空闲区登记 栏中的标志改为“空",同时在已安排区表中找到一个标志
2、 为“空"的栏目登记新装入作业所占用分区的起始地址、长 度和作业名。假如找到的空闲区大于作业长度,则把空闲区 分成两部分,一部分用来装入作业,另外一部分仍为空闲区。试验采用的是“最优适应”算法。最优适应算法是按作 业要求选择一个能满意作业要求的最小空闲区,这样保证可 以不去分割一个大的区域,使装入大作业时比较简单得到满 意。此试验为解决假如找到的一个分区可能只比作业所要求 的长度略大一点的状况,这时,空闲区分割后剩下的空闲区 就很小,这种很小的空闲区往往无法使用,影响了主存的使 用。为了一定程度上解决这个问题,假如空闲区的大小比作 业要求的长度略大一点,不再将空闲区分成已分分区和空闲
3、 区两部分,而是将整个空闲区安排给作业。【试验器材和资料】电脑、MicrosoftVisualC+6. 0软件、操作系统资料书【试验内容和要求】1. 主存的安排和回收的实现是与主存储器的管理方式 有关的。所谓安排,就是解决多进程如何共享主存空间的问 题。所谓回收,就是当进程运行完成时将进程所占的主存空 间归还给系统。2. 试验要求使用可变分区存储管理方式,分区安排中所 用的数据结构采用空闲分区说明表和空闲分区链表来进行, 分区安排中所用的算法采用首次适应算法、循环首次适应算 法、最佳适应算法三种算法来实现主存的安排与回收。3. 同时,要求设计一个实用友好的可视化用户界面,并 显示安排与回收的过
4、程。【试验方法与步骤】1. 试验题目:假设初始状态下,可用的内存空间为640KB, 并有下列的恳求序动态分区存储管理试验报告列:(1)进程1申请130KB (2)进程2申请60K (3)进程 3申请100KB (4)进程2释放60KB (5)进程4申请200KB(6)进程3释放100KB (7)进程1释放130KB (8)进程5 申请140KBC9)进程6申请60KB(10)进程7申请50KB(ll) 进程8申请60KB2.试验方法:(1) 设计一个空闲分区表,空闲分区表通过空闲分区链 表来管理,在进行内存安排时,系统优先使用空闲区低端的 空间。(2) 设计一个内存分区表,可用链表管理,用以表
5、示当 前内存使用状况。(3)设计一个进程申请队列以及进程完成 后的释放顺序,实现主存的安排和回收。(4)要求每次安排和回收后把空闲分区的变化状况以及 各进程的申请、释放状况以图形方式显示、打印出来。3.试 验过程(1)内存安排:动态输入构造空闲区表,并显打印示构造好的空闲分 区表。键盘接收内存申请。依据申请,实施内存安排,并返回安排所得内存首址。 安排完后,调整空闲分区表(即扣除安排部分),并显示 调整后的空闲分区表。若安排失败,返回安排失败信息。(2)内存回收:显示当前的空闲分区表和内存分区表。从键盘接收 回收分区的首址与大小,按内存回收的四种状况进行内存回 收。显示回收后已调整好的的空闲分
6、区表。【程序流程图】动态分区存储管理试验报告【相关数据结构及说明】typedefstructNone/已安排内存分区链表charname;/进程名 intbegin;/开头地址 intend;/结 束地址intlength;/长度大小None*next;/指向下一个内存分区表;typedefstruetNeiCun/空闲分区链表 intbeginl;/空闲分区首地址intendl;/空闲分区尾 地址intlengthl;/空闲分区大小NeiCun*nextl;/指向下一个空闲分区表;None*head; /内存分区表头NeiCun*headl ; /空闲分区 表头intMAXNUMBER;/存
7、储内存空间的最大范围 intflag, flog;/标志位【程序代码】由于我用的是MFC可视化编程编写,所以在这里不能完 全复制源代码,只复制几个比较重要的模块的代码。1.初始化链表NeiCun*q;MAXNUMBER=m_Max_Edit;headl=(NeiCun*) malloc(sizeof(NeiCun);headl->nextl=NULL;q=(NeiCun*) malloc(sizeof(NeiCun);q->beginl=l; q->endl=m_Max_Edi t;q->lengthl=m_Max_Ed i t;q->nextl=N ULL;he
8、adl->nextl=q;2. 安排内存None*pl,*p;pl二head;while (pl->next!=NULL) 动态分区存储管理试验报告p=(None*)malloc(sizeof(None);p->next=NULL;NeiCun*q l,*q2;ql=headl;while(ql->nextl!=NULL) (if(m_Num_Editnextl->lengthl) (flag。;ql->nextl>beginl+=m_Num_Edit;ql->next1>lengthl-=m _Num_Edit;p->begin=q
9、l->nextl->beginl-m_Num_Edit;p->end=p->beg in+m_Num EditT;p->1ength=m_Num Edit;strcpy(p->name,m_Namel_Edi t);pl->next=p;m ComBo. AddString(p->name);break; elseif (m_Num_Edit=ql->nextl->lengthl) flag=l;p->begin=ql->nextl->beginl;p->end=ql->nextl>endl;p-&
10、gt;1ength=m_Num_Edit; strcpy(p->name,m _Namel_Edit);pl->next=p;q2=ql->next 1;q2->nextl=q2->nextl;m_ComBo. AddString(p->name);break;else ql=ql->nextl;if (flag=O)AfxMessageBox (,r内存不足! n 不好意思NULL,MB_0K);3.回收内存 intk=0;None*p2,*p3;p2=head;while(p2-next!二NULL) 动态分区存储管理试验报告(p3=p2->
11、next;p2->next=p3>next;m_ComBo. DeleteString(k);break;k+;p2=p2-next;NeiCun*ql;ql=headl;while(ql>nextl!=NULL) if(ql->nextl->beginl-l=p3->end) ql->nextl->beginl-=p3->length;ql->nextl>lengthl+=p 3->length;break;if (ql->nextl->beginlT>p3-end) (NeiCun*NewProc;N
12、ewProc= (NeiCun*)malloc(sizeof(NeiCun);NewProc->be ginl=p3>begin;NewProc->endl=p3->end;NewProc-length1=p3->length;NewProc->nextl=ql->next1;ql->nextl=NewProc;break;if (ql-nextl-endl+l=p3-begin) if(ql->nextl->nextl=NULL) (ql->nextl->endl+=p3->length;ql->nextl-
13、>lengthl+=p3->length;break;else(if(ql->nextl->nextl->beginl-l=p3->end) ( ql->nextl->lengthl+=p3>length;动态分区存储管理试验报告ql->nextl->lengthl+=ql->nextl->nextl->lengthl;ql->n extl->endl+=p3->length;ql->nextl->endl+=ql->nextl->nextl->lengthl;N
14、eiCun*p ia;pia=ql->nextl->nextl; ql->nextl->nextl=pia->nextl;break;else(ql->nextl->endl+=p3->length;ql->nextl->lengthl+=p3- >length;break;)ql=ql->nextl;AfxMessageBox(f,该进程已经删除!”);4.描绘内存分区表 HDChdc ; HPENhp ; HBRUSHhbr ;hdc=::GetDC(m_hWnd);hp=CreatePen(PS_SOLID,2,RG
15、B(0,0,0);SelectObject(hdc,hp);hbr=CreateSolidBrush(RGB(255,255,255);SelectObject (hdc,hbr);Rectangle(hdc,30,375,480,480);None*pn;pn=head; doublexl,yl=375,x2,y2=480;hbr=CreateSolidBrush(RGB (0,0,255);SelectObject(hdc,hbr);while(pn->next!=NULL) (xl=(pn->next->begin)/(MAXNUMBER*1. 0)*450+30;x2=(pn->next->end)/(MAXNUMBER*!. 0)*450+30;Rectangle(hdc,xl,yl,x2,y2);pn=pn->next;DeleteObject (hbr);动态分区存储管理试验报告【执行结果图示】1 .输入640KB内存总大小,并添加进程PM1,申请内存 为130KB2.添加进程PM2,申请内存60KB动态分区存储管理试验报告4.回收进程PM2动态分区存储管理试验报告以上为程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论