固定分区存储管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

昆明理工大学信息工程与自动化学院学生实验报告

( 2013 —2014 学年第一学期)

课程名称:操作系统开课实验室:信自楼444 2013年 11月28 日

注:报告内容按下列的要求进行。

一、实验目的

通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。

通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。

二、实验题目

1.设计一个固定分区分配的存储管理方案。并模拟实现分区的分配和回收过程。

2.必须建立分区表,记录空闲区与占用区的状况。

三、算法设计的思想或流程图

本系统将内存用户空间划分为五个大小不固定的分区,其分区大小由用户输入决定。在每个分区只装入一道作业,这样把用户空间划分为几个分区,便允许几道作业并发运行。当有一个空闲分区时,便可以从外存的后备队列中选择一个适当大小的作业装入该分区,当该作业结束时又可以从后备作业队列中找出另一作业调入该分区。

每个内存空间是一个Node型的对象。Node类有一个三个参数的构造函数。分别为:分区号、起始地址、大小。然后就是一些属性的get、set方法和一个打印其属性的函数。四个数据域分别为:属性m_No用来表示该内存空间的序号。属性m_Addr用来表示内存分区的起始地址。属性m_Size用来表示内存空间的大小。属性m_State表示内存空间的是否已分配的状态标志。若该内存空间已分配,m_TaskNo表示占有该内存空间的任务序号。否则没有实际意义。

在用户申请任务的内存空间时,提示用户输入任务号和其需要的内存空间大小。

流程图

主程序:

分配内存空间算法:

释放内存空间算法

四、算法设计的实现

1、类设计

本程序设计了两个比较简单的类:Node类和MManage类。Node类主要是存放每个固定分区的一些信息。而MManage类则主要是对Node类的容器List进行一些操作来实现要求的内存空间的的分配和释放。

类设计的数据成员和接口如下:

Node.h

#ifndef NODE_H

#define NODE_H

class Node

{

public:

int getSize() const

{

return m_Size;

}

bool getState() const

{

return m_State;

}

int getTaskNo() const

{

return 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;

};

MManage.h

#ifndef MMANAGE_H

#define MMANAGE_H

#include

class Node;

class MManage

{

public:

//MManage();

MManage(int MLength);

MManage(std::vector Nodes);

void MAlloc();

void MFree();

void print();

private:

std::vector m_Nodes;

#endif//MMANAGE_H

类接口实现和main函数的实现:

Node.cpp

#include

#include "Node.h"

Node::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::setState(bool State)

{

m_State = State;

}

void Node::print()

{

std::cout<<"| "<

if(m_State)

std::cout<<"Idle ||"<

else

std::cout<<"Occupy || "<

}

MManage.cpp

#include

#include "MManag.h"

#include "Node.h"

#define MAXSIZE 100

//class Node;

/*MManage::MManage()

{

int sum;

std::cout << "Please input the number of memory:";

std::cin >> sum;

std::cout << std::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; i

{

do{

相关文档
最新文档