固定分区存储管理

上传人:s9****2 文档编号:542919684 上传时间:2023-10-08 格式:DOC 页数:15 大小:57KB
返回 下载 相关 举报
固定分区存储管理_第1页
第1页 / 共15页
固定分区存储管理_第2页
第2页 / 共15页
固定分区存储管理_第3页
第3页 / 共15页
固定分区存储管理_第4页
第4页 / 共15页
固定分区存储管理_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《固定分区存储管理》由会员分享,可在线阅读,更多相关《固定分区存储管理(15页珍藏版)》请在金锄头文库上搜索。

1、.XX理工大学信息工程与自动化学院学生实验报告 20212021学年第一学期课程名称:操作系统 开课实验室:信自楼444 2021年11月28 日年级、专业、班物联网2021级学号成绩实验工程名称固定分区存储管理指导教师教师评语该同学是否了解实验内容与要求:A.了解B.根本了解C.不了解设计思想或流程图是否正确: A.正确B.根本正确C.较差 该同学的实验能力: A.强 B.中等 C.差 该同学的实验是否到达要求: A.到达B.根本到达C.未到达实验报告是否规X: A.规XB.根本规XC.不规X是否有运行结果与分析: A.详细B.一般 C.没有 是否有总结与体会: A.详细B.一般 C.没有

2、教师签名: 年 月 日注:报告内容按以下的要求进展。一、 实验目的通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。二、 实验题目1. 设计一个固定分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 2. 必须建立分区表,记录空闲区与占用区的状况。3. 流程图按选定的算法自己完成。三、 算法设计的思想或流程图本系统将内存用户空间划分为五个大小不固定的分区,其分区大小由用户输入决定。在每个分区只装入一道作业,这样把用户空间划分为几个

3、分区,便允许几道作业并发运行。当有一个空闲分区时,便可以从外存的后备队列中选择一个适当大小的作业装入该分区,当该作业完毕时又可以从后备作业队列中找出另一作业调入该分区。每个内存空间是一个Node型的对象。Node类有一个三个参数的构造函数。分别为:分区号、起始地址、大小。然后就是一些属性的get、set方法和一个打印其属性的函数。四个数据域分别为:属性m_No用来表示该内存空间的序号。属性m_Addr用来表示内存分区的起始地址。属性m_Size用来表示内存空间的大小。属性m_State表示内存空间的是否已分配的状态标志。假设该内存空间已分配,m_TaskNo表示占有该内存空间的任务序号。否那么

4、没有实际意义。在用户申请任务的内存空间时,提示用户输入任务号和其需要的内存空间大小。流程图主程序:开场创立MManage对象,内存空间长度为5.让用户手工输入每个分区大小,来初始化内存空间提示用户输入他的选择:1、申请内存空间 2、释放内存空间。 将用户输入存放入swt变量swt!=1并且swt!=2进展任务的内存空间分配操作Swt=1 YSwt=2 N执行分配给任务的内存空间分释放操作 Ydefault:抛出异常 N提示用户是否继续操作(Y/N),将用户输入存放在变量yesorno中yesorno!=n& yesorno!=N Y N 完毕分配内存空间算法:开场提示用户输入作业名和作业占的内

5、存大小检查该任务号是否已经存在,或该任务大小是否超过100该任务号已经存在或该任务大小否超过100初值为0的变量i,是否小于节点队列大小第i个内存空闲并且其大小大于作业申请的大小 Ytemp2赋值为第i个内存空间大小与申请的内存空间大小只差 YTemp1temp2 YTemp1=temp2.保存内存空间号到Noi+No=-1. N Y将内存空间No置为占有,并将作业分配给它申请失败打印出内存空间信息完毕释放内存空间算法开场提示用户输入作业名初值为0的变量i,是否小于节点队列大小第i个内存占有并且其作业号等于输入的作业号保存内存空间号到NoNo=-1.将内存空间No置为空闲释放失败打印出内存空间

6、信息完毕四、算法设计的实现1、类设计本程序设计了两个比拟简单的类:Node类和MManage类。Node类主要是存放每个固定分区的一些信息。而MManage类那么主要是对Node类的容器List进展一些操作来实现要求的内存空间的的分配和释放。类设计的数据成员和接口如下:Node.h*ifndef NODE_H*define NODE_Hclass Nodepublic:Node(int No, int Addr, int Size);int getSize() constreturn m_Size;bool getState() constreturn m_State;int getTaskN

7、o() constreturn m_TaskNo;void setState(bool 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_HMManage.h*ifndef MMANAGE_H*define MMANAGE_H*include class Node;class MManagepublic:/MManage();MManage(int MLength);MManage(std:vec

8、tor Nodes);void MAlloc();void MFree();void print();private:std:vector m_Nodes;*endif/MMANAGE_H类接口实现和main函数的实现:Node.cpp*include *include Node.hNode:Node(int No, int Addr, int Size):m_No(No),m_Addr(Addr),m_Size(Size)m_State = true;m_TaskNo = 0;void Node:setTaskNo(int TaskNo)m_TaskNo = TaskNo;void Node

9、:setState(bool State)m_State = State;void Node:print()std:cout| m_No | m_Addr | m_Size | ;if(m_State)std:coutIdle |std:endl;elsestd:coutOccupy | m_TaskNo |std:endl;MManage.cpp*include *include MManag.h*include Node.h*define MAXSIZE 100/class Node;/*MManage:MManage()int sum;std:cout sum;std:cout std:

10、endl;MManage(sum);*/MManage:MManage(int MNo)int size;int addr = 0;char yesOrNo = n;while ( yesOrNo != y & yesOrNo != Y)m_Nodes.clear();std:cout Start to init the memory table std:endl;for (int i=0; iMNo; +i)dostd:cout Please input the size of i+1 size;while(size = MAXSIZE);Node node(i+1, addr, size)

11、;m_Nodes.push_back(node);addr+=size;print();std:cout Is this correct yesOrNo;MManage:MManage(std:vector Nodes)m_Nodes.assign(Nodes.begin(), Nodes.end();void MManage:MAlloc()int taskNo, size;int No = -1;int temp1 = MAXSIZE;int temp2 = MAXSIZE;bool flag;doflag=false;std:cout Please input the task No. and size taskNo size;for(unsigned i=0; im_Nodes.size(); +i)if(m_Nodesi.getTaskNo() = taskNo)std:coutThis task areally exist,please change itstd:endl;flag = true;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号