版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、昆明理工大学信息工程与自动化学院学生实验报告(2013 2014 学年第一学期)注:报告内容按下列的要求进行。一、实验目的通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分 区管理方式、主存分配表等相应知识的理解。通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。二、实验题目1. 设计一个固定分区分配的存储管理方案。并模拟实现分区的分配和回收过程。2. 必须建立分区表,记录空闲区与占用区的状况。3. 流程图按选定的算法自己完成。三、算法设计的思想或流程图本系统将内存用户空间划分为五个大小不固定的分区,其分区大小由用户输入决定
2、。 在每个分区只装入一道作业,这样把用户空间划分为儿个分区,便允许儿道作业并发运行。 当有一个空闲分区时,便可以从外存的后备队列中选择一个适当大小的作业装入该分区, 当该作业结束时乂可以从后备作业队列中找出另一作业调入该分区。每个内存空间是一个Node型的对象。Node类有一个三个参数的构造函数。分别为:分 区号、起始地址、大小。然后就是一些属性的get、set方法和一个打印其属性的函数。四个 数据域分别为:属性m_N。用来表示该内存空间的序号。属性m_Addr用来表示内存分区的 起始地址。属性m.Size用来表示内存空间的大小。属性m.State表示内存空间的是否已分配 的状态标志。若该内存
3、空间已分配,m.TaskNo表示占有该内存空间的任务序号。否则没有 实际意义。在用户申请任务的内存空间时,提示用户输入任务号和其需要的内存空间大小。流程图主程序:开始wd释放内存空间算法四、算法设计的实现1、类设计本程序设计了两个比较简单的类:Node类和MManage类。Node类主要是存放每个 固定分区的一些信息。而MManage类则主要是对Node类的容器List进行一些操作 来实现要求的内存空间的的分配和释放。类设计的数据成员和接口如下:Node.h#ifndef NODE_Hdefine NODE_Hclass Node public:Node(int No, int Addr, i
4、nt Size); int getSize() constreturn m_Size;bool getState() constreturn m_State;int getTaskNof) constreturn m_TaskNo;void setStatefbool State);void setTaskNo(int TaskNo); void print();private:int m_No;int m_Addr;int m_Size;bool m_State;int m_TaskNo;#endif /NODE_HMMa nage.h#ifndef MMANAGE_Hdefine MMAN
5、AGE.H#inelude class Node;class MManagepublic:/MManage();MManage(int MLength);MManage(std:vector Nodes);void MAlloc();void MFree();void print();private: std:vector m_Nodes;#endif/MMANAGE_H类接口实现和main函数的实现:Node.cppinclude #inelude Node.hNode:Node(int No, int Addr, int Size):m_No(No),m_Addr(Addr) ,m_Siz
6、e(Size)m.State = true;m_TaskNo = 0;void Node:setTaskNo(int TaskNo)m_TaskNo = TaskNo;void Node:setState(bool State)m_State = State;void Node:print()std:coutM| ,,m_NoM| | Mm_Addr | |1 m_SizeM | |if(m_State)std:coutMldle | |Mstd:endl;elsestd:coutMOccupy | | tvm_TaskNovv” | rstd:endl;MMa nage.cppinclude
7、 #inelude MMManag.h”#inelude MNode.hMdefine AAAXSIZE 100 /class Node;/*MManage: :MManage()int sum;std:cout sum;std:cout std:e nd I;MMa nage(sum);MManage:MManage(int MNo)int size;int addr = 0; char yesOrNo = rf;while ( yesOrNo != y & yesOrNo != Y)m_Nodes.clear();std:cout Start to init the memory tabl
8、e std:endl; for (int i=0; iMNo; +i)dostd:cout Please in put the size of M = MAXSIZE);Node node(i+1, addr, size); m_Nodes.push_back( no de); addr+=size;pnnt();std:cout Is this correct?11 Nodes)m_Nodes.assign(Nodes.begin(), Nodes.end();void MManage:MAlloc()int taskNo, size;int No = -1;int temp! = MAXS
9、IZE;int temp2 = AAAXSIZE;bool flag;doflag=false;std:cout Please in put the task No. and size* size;for(unsigned i=0; im_Nodes.size(); +i)if(m_Nodesi.getTaskNo() = taskNo) std:cout AAAXSIZE)std:cout The size is too big,please change itMstd:endl; flag = true;Jwhile(flag);for(u“signed i=0; i=size)temp2
10、 = m_Nodesi.getSize() size; if(temp2temp1)tempi = temp2;No = i;if(No=-1)std:cout Allocation fail.” std:endl;elsewdstd:cout Allocation success/ std:endl; m_NodesNo.setState(false); m_NodesNo.setTaskNo(taskNo);void MManage:MFree()int taskNo,No=-1;std:cout taskNo;for(unsigned i=0; im_Nodes.size(); +i)i
11、f(m_Nodesi. getT askNo()=taskNo&! m_Nodesi. getState()No = i;if(No=-1)std:cout Tree failfCan not find the task).* std:endl;elsestd:cout Tree success.*1 std:endl; m_NodesNo.setState(true);m_NodesNo.setTaskNo(0);void MManage:print()std:cout The the memory table: std:endl;std:cout M| No |M M| Addr M| S
12、ize | State |M | TaskNo |n std:e ndl;for (unsigned i=0; im_Nodes.size(); +i) m_Nodesi.pri nt();Main .cppinclude #inelude MMManag.h”#inelude Node.h”.wd.define SIZE 5/分配区的个数void testNode()int size = 10;Node node1 (1,0,size);no del.pri nt();Node node2(2,size,size);no de2. setState (false);n ode2.setTas
13、kNo(1);no de2.pri nt();/AAManage m1();/m1.print();MManage m2(2);m2.print();int main()MManage m(SIZE);char yesOrNo = y;int swt = 0;whilefyesOrNo != n1 & yesOrNo != N) while(swt != 1 & swt != 2)systemcis J;std:coutM=,std:e ndl; std:coutM Please put your choice:std:endl; std:coutt1 apply memoryMstd:end
14、l;std:coutM 2-free memoryustd:endl;std:coutM=, swt;if(swt!=1 &swt!=2)std:coutMerror iput, please put (1 2) *std:endl;switch (swt)case 1: m.MAlloc();break;case 2: m.MFree();break;default:开始初始化内存空间表I内存序号1起始地址内存大小103234137|2|149|6|任务序号I5|15|2|这是您输入的结果吗?闲闲闲闲闲 空空空空空请输入第1个内存空间的大小(小于100):3 请输入第2个内存空间的大小(小于
15、100):4 请输入第3个内存空间的大小(小于100) :2 请输入第4个内存空间的大小(小于100) :6 请输入第5个内存空间的大小(小于100):2 内存空间表格:printf(Mexception ouccerrf); return 1;m.print();std:coutnDo you like to continue? std:endl;std:cin yesOrNo;swt = 0;四、运行结果与分析手工输入每个分区的大小来初始化分区表:分析:在手工输入每个内存空间的大小后,立即调用打印的函数将内存空间的情况打印岀来。让用户确左自己输入是否正确。分配成功:请输入您的选择1- -申
16、请内存空间2 释放内存空间内存序号1起始地址1内存大小1 11013|1 2|31141113|17112|14|9116|15|15|2|您需要继续申请内存空间吗?(Y/N)1请输入任务的序号:2 请轴入彳壬参的夫小:4 内存空间2分配成功 内存空间表格:号序务任闲有闲闲闲 空占空空空分析:申请内存空间。首先得输入作业号与作业大小。在程序中是通过汁算岀最合适的内 空间(内存空间与作业大小之差最小)分配给当前作业。如图,任作业,大小为4.在图中可以看出使用最佳适应算法,内存空间2与之最为合适.故将内存空 间2分配给作业2.在内存空间的分配图也可以看得岀来内存空间2被作业2占用。分配失败:请输入您的选择1- -申请内存空间2 释放内存空间青输入任务的序号:3 青输入任务的大小:8 刘存空间分配失败.勺存空间表格:分配状态任务序号空闲丨占有2空闲丨丨分析:由于申请的作业3其大小超过了每一个内存空间的大小。故分配失败。wd内存释放:请输入您的选择1 申请内存空间2 释放内存空间2请输入要释放内存空间对应的任务号:2释放内存空间2成功内存空间表格:内存序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育器材使用管理手册
- 酶制剂充填封装工岗前诚信品质考核试卷含答案
- 2025-2026学年陕西省西安七十一中等校八年级(下)期中生物试卷(含答案)
- 液晶显示器件模组制造工岗位适应能力水平考核试卷含答案
- 油品储运调合工成果转化强化考核试卷含答案
- 生漆加工工安全宣传能力考核试卷含答案
- 甲烷合成气净化工岗位流程优化考核试卷含答案
- 陶瓷成型施釉工岗前新技术考核试卷含答案
- 公墓管理员岗位知识能力考核试卷含答案
- 酒店业务协调经理服务质量优化绩效评定表
- 人教PEP四年级英语上册阅读理解专项30篇(含答案)
- 2026临汾市侯马市招聘乡(街道)消防协管员考试备考试题及答案详解
- 华为ICT大赛2026-2027中国区(实践赛)-网络赛道理论考试题库大全(附答案)
- 江西省人才发展集团有限公司2026年春季集中招聘专题【11人】建设笔试备考题库及答案解析
- 深度解析(2026)《DLT 2655-2023发电企业安全生产标准化实施指南》
- 2026年高考上海卷英语含解析及答案(新课标卷)
- 广东省2026年普通高中学业水平合格性考试数学试题(含答案)
- 八上数学竞赛试题及答案
- NCL新华保险宣传案课件
- 钢管脚手架用量计算表 形式2
- 资产评估公司人事管理制度
评论
0/150
提交评论