固定分区存储管理.docx

上传人:b****1 文档编号:1157470 上传时间:2022-10-18 格式:DOCX 页数:16 大小:125.42KB
下载 相关 举报
固定分区存储管理.docx_第1页
第1页 / 共16页
固定分区存储管理.docx_第2页
第2页 / 共16页
固定分区存储管理.docx_第3页
第3页 / 共16页
固定分区存储管理.docx_第4页
第4页 / 共16页
固定分区存储管理.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

固定分区存储管理.docx

《固定分区存储管理.docx》由会员分享,可在线阅读,更多相关《固定分区存储管理.docx(16页珍藏版)》请在冰豆网上搜索。

固定分区存储管理.docx

固定分区存储管理

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

(2013—2014学年第一学期)

课程名称:

操作系统开课实验室:

信自楼4442013年11月28日

年级、专业、班

物联网2011级

学号

姓名

成绩

实验项目名称

固定分区存储管理

指导教师

教师评语

该同学是否了解实验内容与要求:

A.了解□B.基本了解□C.不了解□

设计思想或流程图是否正确:

A.正确□B.基本正确□C.较差□

该同学的实验能力:

A.强□B.中等□C.差□

该同学的实验是否达到要求:

A.达到□B.基本达到□C.未达到□

实验报告是否规范:

A.规范□B.基本规范□C.不规范□

是否有运行结果与分析:

A.详细□B.一般□C.没有□

是否有总结与体会:

A.详细□B.一般□C.没有□

教师签名:

年月日

注:

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

一、实验目的

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

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

二、实验题目

1.设计一个固定分区分配的存储管理方案。

并模拟实现分区的分配和回收过程。

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

3.流程图按选定的算法自己完成。

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

本系统将内存用户空间划分为五个大小不固定的分区,其分区大小由用户输入决定。

在每个分区只装入一道作业,这样把用户空间划分为几个分区,便允许几道作业并发运行。

当有一个空闲分区时,便可以从外存的后备队列中选择一个适当大小的作业装入该分区,当该作业结束时又可以从后备作业队列中找出另一作业调入该分区。

每个内存空间是一个Node型的对象。

Node类有一个三个参数的构造函数。

分别为:

分区号、起始地址、大小。

然后就是一些属性的get、set方法和一个打印其属性的函数。

四个数据域分别为:

属性m_No用来表示该内存空间的序号。

属性m_Addr用来表示内存分区的起始地址。

属性m_Size用来表示内存空间的大小。

属性m_State表示内存空间的是否已分配的状态标志。

若该内存空间已分配,m_TaskNo表示占有该内存空间的任务序号。

否则没有实际意义。

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

流程图

主程序:

 

让用户手工输入每个分区大小,来初始化内存空间

提示用户输入他的选择:

1、申请内存空间2、释放内存空间。

将用户输入存放入swt变量

default:

抛出异常

进行任务的内存空间分配操作

创建MManage对象,内存空间长度为5.

swt!

=1

并且swt!

=2?

执行分配给任务的内存空间分释放操作

提示用户是否继续操作(Y/N),将用户输入存放在变量yesorno中

开始

Swt==1?

Swt==2?

yesorno!

=’n’&&yesorno!

=’N’

 

Y

N

Y

N

 

Y

N

检查该任务号是否已经存在,或该任务大小是否超过100

Temp1=temp2.保存内存空间号到No

提示用户输入作业名和作业占的内存大小

该任务号已经存在或该任务大小否超过100

temp2赋值为第i个内存空间大小与申请的内存空间大小只差

开始

初值为0的变量i,是否小于节点队列大小

第i个内存空闲并且其大小大于作业申请的大小

Temp1

分配内存空间算法:

 

Y

 

Y

 

Y

 

NY

 

释放内存空间算法

提示用户输入作业名

保存内存空间号到No

开始

初值为0的变量i,是否小于节点队列大小

第i个内存占有并且其作业号等于输入的作业号

 

 

四、算法设计的实现

1、类设计

本程序设计了两个比较简单的类:

Node类和MManage类。

Node类主要是存放每个固定分区的一些信息。

而MManage类则主要是对Node类的容器List进行一些操作来实现要求的内存空间的的分配和释放。

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

Node.h

#ifndefNODE_H

#defineNODE_H

classNode

{

public:

Node(intNo,intAddr,intSize);

intgetSize()const

{

returnm_Size;

}

boolgetState()const

{

returnm_State;

}

intgetTaskNo()const

{

returnm_TaskNo;

}

voidsetState(boolState);

voidsetTaskNo(intTaskNo);

voidprint();

private:

intm_No;

intm_Addr;

intm_Size;

boolm_State;

intm_TaskNo;

};

#endif//NODE_H

 

MManage.h

#ifndefMMANAGE_H

#defineMMANAGE_H

#include

classNode;

classMManage

{

public:

//MManage();

MManage(intMLength);

MManage(std:

:

vectorNodes);

voidMAlloc();

voidMFree();

voidprint();

private:

std:

:

vectorm_Nodes;

};

#endif//MMANAGE_H

 

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

Node.cpp

#include

#include"Node.h"

Node:

:

Node(intNo,intAddr,intSize)

:

m_No(No),m_Addr(Addr),m_Size(Size)

{

m_State=true;

m_TaskNo=0;

}

voidNode:

:

setTaskNo(intTaskNo)

{

m_TaskNo=TaskNo;

}

voidNode:

:

setState(boolState)

{

m_State=State;

}

voidNode:

:

print()

{

std:

:

cout<<"|"<

if(m_State)

std:

:

cout<<"Idle||"<

:

endl;

else

std:

:

cout<<"Occupy||"<

:

endl;

}

 

MManage.cpp

#include

#include"MManag.h"

#include"Node.h"

#defineMAXSIZE100

//classNode;

/*MManage:

:

MManage()

{

intsum;

std:

:

cout<<"Pleaseinputthenumberofmemory:

";

std:

:

cin>>sum;

std:

:

cout<

:

endl;

MManage(sum);

}

*/

MManage:

:

MManage(intMNo)

{

intsize;

intaddr=0;

charyesOrNo='n';

while(yesOrNo!

='y'&&yesOrNo!

='Y')

{

m_Nodes.clear();

std:

:

cout<<"Starttoinitthememorytable"<

:

endl;

for(inti=0;i

{

do{

std:

:

cout<<"Pleaseinputthesizeof"<

";

std:

:

cin>>size;

}while(size>=MAXSIZE);

Nodenode(i+1,addr,size);

m_Nodes.push_back(node);

addr+=size;

}

print();

std:

:

cout<<"Isthiscorrect?

"<

:

endl;

std:

:

cin>>yesOrNo;

}

}

MManage:

:

MManage(std:

:

vectorNodes)

{

m_Nodes.assign(Nodes.begin(),Nodes.end());

}

voidMManage:

:

MAlloc()

{

inttaskNo,size;

intNo=-1;

inttemp1=MAXSIZE;

inttemp2=MAXSIZE;

boolflag;

do{

flag=false;

std:

:

cout<<"PleaseinputthetaskNo.andsize"<

:

endl;

std:

:

cin>>taskNo>>size;

for(unsignedi=0;i

{

if(m_Nodes[i].getTaskNo()==taskNo)

{

std:

:

cout<<"Thistaskareallyexist,pleasechangeit"<

:

endl;

flag=true;

}

if(size>MAXSIZE)

{

std:

:

cout<<"Thesizeistoobig,pleasechangeit"<

:

endl;

flag=true;

}

}

}while(flag);

for(unsignedi=0;i

{

if(m_Nodes[i].getState()&&m_Nodes[i].getSize()>=size)

{

temp2=m_Nodes[i].getSize()-size;

if(temp2

{

temp1=temp2;

No=i;

}

}

}

if(No==-1)

{

std:

:

cout<<"Allocationfail."<

:

endl;

}

else

{

std:

:

cout<<"Allocationsuccess."<

:

endl;

m_Nodes[No].setState(false);

m_Nodes[No].set

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1