动态分区分配方式的模拟实验报告模板.docx
- 文档编号:11246290
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:37
- 大小:25.10KB
动态分区分配方式的模拟实验报告模板.docx
《动态分区分配方式的模拟实验报告模板.docx》由会员分享,可在线阅读,更多相关《动态分区分配方式的模拟实验报告模板.docx(37页珍藏版)》请在冰豆网上搜索。
动态分区分配方式的模拟实验报告模板
页眉
华北电力大学
实验报告
实验名称动态分区分配方式的模拟
课程名称计算机操作系统
专业班级:
学生姓名:
号:
学成绩:
指导教师:
实验日期:
页脚
页眉
一﹑实验目的:
并进一步加深对动态分区存储了解动态分区分配方式中使用的数据结构和分配算法,管理方式及其实现过程的理解。
二﹑实验内容:
alloc()C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程
(1)用。
其中,空闲分区通过分区链来管理;在进行内存分配时,系统优先使和回收过程free()用空闲区低端的空间。
640K,并有下列请求序列:
(2)假设初始状态下,可用内存空间为。
130KB◎作业1申请。
2申请60KB◎作业。
3申请100KB◎作业。
释放60KB2◎作业。
申请200KB◎作业4。
释放100KB◎作业3130KB。
◎作业1释放140KB。
◎作业5申请。
60KB◎作业6申请。
7申请50KB◎作业。
释放60KB◎作业6要求每次分配和回收后请分别用首次适应算法和最佳适应算法进行内存块的分配和回收,显示出空闲内存分区链的情况。
四﹑设计思路和方法:
:
当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的可First-fit)首次适应算法(用块。
只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。
当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得剩):
最佳适应算法(Best-fit余块是最小的。
然后把它分配出去,若大小恰好合适,则直按分配;若有剩余块,则仍保留该余下的空闲分区,并修改分区大小的起始地址。
将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。
并判断该空内存回收:
闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。
五﹑主要数据结构和算法:
主要数据结构:
页脚
页眉
定义一个空闲区说明表结构structfreearea{
//分区号intID;
//分区大小longsize;
longaddress;//分区地址
//状态intstate;
}ElemType;
线性表的双向链表存储结构structDuLNode//doublelinkedlist
{
ElemTypedata;
前趋指针structDuLNode*prior;//后继指针structDuLNode*next;//
}DuLNode,*DuLinkList;
算法:
直到找到一个大小能够满足从链首开始顺序查找,首次适应算法:
是在分配内存时,要求的分区,即进行分配。
从链首开始顺序查找,查找到链尾,并记录一个大最佳适应算法:
是在分配内存时,小不小于要求的分区的最小分区,在查找完毕后进行分配。
六﹑程序代码和输出程序代码如下1
//***************************************************************
*********动态分区分配方式的模拟//********
//***************************************************************
#include
#include
#defineFree0//空闲状态#defineBusy1//已用状态完成//#defineOK1
#defineERROR0//出错640KB最大内存空间为#defineMAX_length640//typedefintStatus;
定义一个空闲区说明表结构typedefstructfreearea//{
页脚
页眉
//分区号intID;
//分区大小longsize;
longaddress;//分区地址
//状态intstate;
}ElemType;
------------//----------线性表的双向链表存储结构
typedefstructDuLNode//doublelinkedlist
{
ElemTypedata;
前趋指针structDuLNode*prior;//后继指针structDuLNode*next;//
}DuLNode,*DuLinkList;
头结点DuLinkListblock_first;//尾结点//DuLinkListblock_last;
Statusalloc(int);//内存分配Statusfree(int);//内存回收StatusFirst_fit(int,int);//首次适应算法StatusBest_fit(int,int);//最佳适应算法voidshow();//查看分配开创空间表StatusInitblock();//
开创带头结点的内存空间链表StatusInitblock()//{
block_first=(DuLinkList)malloc(sizeof(DuLNode));
block_last=(DuLinkList)malloc(sizeof(DuLNode));
block_first->prior=NULL;
block_first->next=block_last;
block_last->prior=block_first;
block_last->next=NULL;
block_last->data.address=0;
block_last->data.size=MAX_length;
block_last->data.ID=0;
block_last->data.state=Free;
returnOK;
}
-------------------------存//-----------------------分配主Statusalloc(intch)
{
页脚
页眉
intID,request;
;):
潣瑵?
请输入作业(分区号
cin>>ID;
:
;请输入需要分配的主存大小(单位:
KB)潣瑵?
cin>>request;
if(request<0||request==0)
{
< 分配大小不合适,请重试! returnERROR; } if(ch==2)//选择最佳适应算法 { < 晩? 獥彴楦? ? 爬煥敵瑳? 伽? 挠畯? 尼< 汥敳挠畯? 尼returnOK; } 默认首次适应算法else//{ < 晩? 物瑳晟瑩? ? 敲畱獥? ? ? ? 潣瑵? < 汥敳挠畯? 尼 returnOK; } } ----------------------- 首次适应算法//------------------ StatusFirst_fit(intID,intrequest)//传入作业名及申请量{ 为申请作业开辟新空间且初始化//DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode)); temp->data.ID=ID; temp->data.size=request; temp->data.state=Busy; DuLNode*p=block_first->next; while(p) { if(p->data.state==Free&&p->data.size==request) 有大小恰好合适的空闲块{//p->data.state=Busy; p->data.ID=ID; returnOK; break; 页脚 页眉 } if(p->data.state==Free&&p->data.size>request) 有空闲块能满足需求且有剩余{// temp->prior=p->prior; temp->next=p; temp->data.address=p->data.address; p->prior->next=temp; p->prior=temp; p->data.address=temp->data.address+temp->data.size; p->data.size-=request; returnOK; break; } p=p->next; } returnERROR; } ------------------------最佳适应算法//-------------------- StatusBest_fit(intID,intrequest) { 记录最小剩余空间intch;//DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode)); temp->data.ID=ID; temp->data.size=request; temp->data.state=Busy; DuLNode*p=block_first->next; DuLNode*q=NULL;//记录最佳插入位置 while(p)//初始化最小空间和最佳位置 { if(p->data.state==Free&& (p->data.size>request||p->data.size==request)) { q=p; ch=p->data.size-request; break; } p=p->next; } while(p) { if(p->data.state==Free&&p->data.size==request) 空闲块大小恰好合适{// 页脚 页眉 p->data.ID=ID; p->data.state=Busy; returnOK; break; } if(p->data.state==Free&&p->data.size>request) 空闲块大于分配需求{// if(p->data.size-request { ch=p->data.size-request;//更新剩余最小值 q=p;//更新最佳位置指向 } } p=p->next; } 没有找到空闲块if(q==NULL)returnERROR;//else 找到了最佳位置并实现分配{//temp->prior=q->prior; temp->next=q; temp->data.address=q->data.address; q->prior->next=temp; q->prior=temp; q->data.address+=request; q->data.size=ch; returnOK; } } --------------------收存主回//----------------------- Statusfree(intID) { DuLNode*p=block_first; while(p) { if(p->data.ID==ID) { p->data.state=Free; p->data.ID=Free; if(p->prior->data.state==Free)//与前面的空闲块相连 { p->prior->data.size+=p->data.size; 页脚 页眉 p->prior->next=p->next; p->next->prior=p->prior; } 与后面的空闲块相连if(p->next->data.state==Free)// { p->data.size+=p->next->data.size; p->next->next->prior=p; p->next=p->next->next; } break; } p=p->next; } returnOK; } ------------------显示主存分配情况//--------------- voidshow() { cout<<+++++++++++++++++++++++++++++++++++++++\n; +++\n; 况情存cout<<+++主分配 cout<<+++++++++++++++++++++++++++++++++++++++\n; DuLNode*p=block_first->next; while(p) { ; 号: 区潣瑵? 分 if(p->data.ID==Free)cout< elsecout< < 起始地址: < 分区大小: ; 态: 潣瑵? 状< 慤慴献慴整? 牆敥? 潣瑵? < 已分配汥敳挠畯? 尼 < —————————————— p=p->next; } } ---------------------------数函主//----------------------- voidmain() { 算法选择标记intch;// 页脚 页眉 \n;cout<<动态分区分配方式的模拟cout<<************************************\n; **\n;2)最佳适应算法cout<<**1)首次适应算法 cout<<************************************\n; ;请选择分配算法: 潣瑵? cin>>ch; 开创空间表Initblock();////操作选择标记intchoice; while (1) { cout<<********************************************\n; **\n;2: 回收内存cout<<**1: 分配内存 **\n;出0: 3: 查看分配退cout<<** cout<<********************************************\n; ;: 潣瑵? 请输入您的操作 cin>>choice; if(choice==1)alloc(ch);//分配内存内存回收//elseif(choice==2) { intID; ;请输入您要释放的分区号: 潣瑵? cin>>ID; free(ID); } elseif(choice==3)show();//显示主存 elseif(choice==0)break;//退出 else//输入操作有误 { < 潣瑵? continue; } } } 输入和输出结果2)首次适应算法(1动态分区分配方式的模拟 ************************************ **最佳适应算法**1)首次适应算法2)************************************ 1 请选择分配算法: ******************************************** **2: 回收内存**1: 分配内存 **退查看分配**3: 0: 出 ******************************************** 页脚 页眉 1: 请输入您的操作1 ): 请输入作业(分区号130: KB): 请输入需要分配的主存大小(单位分配成功! ******************************************** **回收内存2: **1: 分配内存 **出查看分配0: 退**3: ******************************************** 3 : 请输入您的操作 +++++++++++++++++++++++++++++++++++++++ +++ 况主存分配情+++ +++++++++++++++++++++++++++++++++++++++ 1号: 区分 0 起始地址: 130KB分区大小: 态: 已分配状 ——————————————Free号: 区分 130起始地址: 510KB分区大小: 闲态: 空状 ——————————————******************************************** **回收内存2: **1: 分配内存 **0: 退出**3: 查看分配 ******************************************** 1: 请输入您的操作2 ): 请输入作业(分区号60: KB): 请输入需要分配的主存大小(单位分配成功! ******************************************** **2: 回收内存**1: 分配内存 **出0: 退**3: 查看分配 ******************************************** 3 : 请输入您的操作 +++++++++++++++++++++++++++++++++++++++ +++ 分配情况+++主存 +++++++++++++++++++++++++++++++++++++++ 1号: 分区0 起始地址: 130KB分区大小: 态: 已分配状——————————————2号: 区分130起始地址: 60KB分区大小: 态: 已分配状 ——————————————Free号: 区分 190起始地址: 450KB分区大小: 闲态: 空状 ——————————————******************************************** **2: 回收内存分配内存**1: **出0: 3: **查看分配退 页脚 页眉 ******************************************** 1: 请输入您的操作 3 : (分区号)请输入作业100: (单位: KB)请输入需要分配的主存大小分配成功! ******************************************** **2: 回收内存1: 分配内存** **出0: 退**3: 查看分配 ******************************************** 3 : 请输入您的操作 +++++++++++++++++++++++++++++++++++++++ +++ 分配情况+++主存+++++++++++++++++++++++++++++++++++++++ 1号: 区分 0 起始地址: 130KB分区大小: 态: 已分配状 ——————————————2号: 分区130起始地址: 60KB分区大小: 态: 已分配状 ——————————————3号: 分区190起始地址: 100KB分区大小: 态: 已分配状——————————————Free号: 分区290起始地址: 350KB分区大小: 闲态: 空状 ——————————————******************************************** **2: 回收内存**1: 分配内存 **出0: 退**3: 查看分配 ******************************************** 2 : 请输入您的操作 2 请输入您要释放的分区号: ******************************************** **回收内存2: **1: 分配内存 **出3: 查看分配0: 退** ******************************************** 3 : 请输入您的操作 +++++++++++++++++++++++++++++++++++++++ +++ 情况配存+++主分 +++++++++++++++++++++++++++++++++++++++ 1号: 区分0 起始地址: 130KB分区大小: 态: 已分配状 ——————————————Free号: 区分130起始地址: 60KB分区大小: 闲状态: 空 页脚 页眉 ——————————————3号: 区分190起始地址: 100KB分区大小: 态: 已分配状 ——————————————Free号: 区分290起始地址: 350KB分区大小: 闲态: 空状 ——————————————******************************************** **2: 回收内存1: 分配内存** **出0: 退**3: 查看分配 ******************************************** 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 分区 分配 方式 模拟 实验 报告 模板