固定分区存储管理文档格式.docx

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

固定分区存储管理文档格式.docx

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

固定分区存储管理文档格式.docx

是否有总结与体会:

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

教师签名:

年月日

注:

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

一、实验目的

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

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

二、实验题目

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

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

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

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

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

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

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

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

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

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

分别为:

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

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

四个数据域分别为:

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

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

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

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

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

否则没有实际意义。

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

流程图

主程序:

 

Y

N

N

分配内存空间算法:

NY

释放内存空间算法

四、算法设计的实现

1、类设计

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

Node类和MManage类。

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

而MManage类则主要是对Node类的容器List<

Node>

进行一些操作来实现要求的内存空间的的分配和释放。

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

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<

vector>

classNode;

classMManage

//MManage();

MManage(intMLength);

MManage(std:

:

vector<

Nodes);

voidMAlloc();

voidMFree();

std:

m_Nodes;

#endif//MMANAGE_H

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

Node.cpp

iostream>

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

setState(boolState)

m_State=State;

print()

cout<

<

"

|"

m_No<

||"

m_Addr<

m_Size<

;

if(m_State)

std:

Idle||"

std:

endl;

else

Occupy||"

m_TaskNo<

||"

MManage.cpp

MManag.h"

#defineMAXSIZE100

//classNode;

/*MManage:

MManage()

intsum;

cout<

"

Pleaseinputthenumberofmemory:

cin>

>

sum;

MManage(sum);

*/

MManage:

MManage(intMNo)

intsize;

intaddr=0;

charyesOrNo='

n'

while(yesOrNo!

='

y'

&

&

yesOrNo!

Y'

m_Nodes.clear();

Starttoinitthememorytable"

<

for(inti=0;

i<

MNo;

++i)

{

do{

std:

Pleaseinputthesizeof"

i+1<

thmemory:

size;

}while(size>

=MAXSIZE);

Nodenode(i+1,addr,size);

m_Nodes.push_back(node);

addr+=size;

}

print();

Isthiscorrect?

yesOrNo;

MManage(std:

Nodes)

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

voidMManage:

MAlloc()

inttaskNo,size;

intNo=-1;

inttemp1=MAXSIZE;

inttemp2=MAXSIZE;

boolflag;

do{

flag=false;

PleaseinputthetaskNo.andsize"

taskNo>

for(unsignedi=0;

m_Nodes.size();

{

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

{

Thistaskareallyexist,pleasechangeit"

flag=true;

}

if(size>

MAXSIZE)

Thesizeistoobig,pleasechangeit"

}

}while(flag);

for(unsignedi=0;

if(m_Nodes[i].getState()&

m_Nodes[i].getSize()>

=size)

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

if(temp2<

temp1)

temp1=temp2;

No=i;

}

if(No==-1)

Allocationfail."

Allocationsuccess."

m_Nodes[No].setState(false);

m_Nodes[No].setTaskNo(taskNo);

MFree()

inttaskNo,No=-1;

PleaseinputthetaskNo."

taskNo;

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

!

m_Nodes[i].getState())

No=i;

Freefail(Cannotfindthetask)."

Freesuccess."

m_Nodes[No].setState(true);

m_Nodes[No].setTaskNo(0);

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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