实验四 固定分区存储管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四固定分区存储管理
一、实验目的
通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。二、实验内容
(1)作业J3请求资源,申请5K大小的内存空间;
(2)作业J4申请33K大小的内存空间;
(3)作业J1执行完毕,释放空间
4、编写程序实现相应存储空间的分配和去配,若请求成功,修改主存分配表,并输出该表,若请求不能满足,输出“分配失败”。(其中不考虑空闲分区的移动)。
实验代码:
#include
#include
#include
#include
#include
using namespace std;
//定义进程资源类
class Resource
{
public :
string name; //用来表示占用进程
int num; //用来标识分区号
int begin; //用来存放其实地址
int length; //用来标识内存长度
int take; //用来表示当前的该资源是否被占用
Resource(int n,int b,int l,int t)
{
num = n;
begin = b;
length = l;
take = t;
}
};
//定义输出类
class Output
{
public :
string o_name;
int o_num;
int o_begin;
int o_length;
int o_take;
};
//申请资源请求
bool Request(string name,int len,vector
vector
//!!!!!!!!在这边定义一个指针,用来指向res,这里的好处是待会进行排序的时候,不会修改原来的res原来元素的顺序!!!!
for(int m=0;m { r.push_back(&res[m]); } //按书上所说的,首先对分区进行从小到大进行排序。(这个地方可以封装成函数) int k; for(int i=0; i { k = i; for(int j=i+1;j { if(r[k]->length > r[j]->length) { k = j; } } if(k != i) { Resource *temp = r[i]; r[i] = r[k]; r[k] = temp; } } //已经排好序,只要第一次满足就直接将分区分配给该进程 for( i=0;i { //len 表示某个进程所请求的资源 if(len <= r[i]->length && r[i]->take == 0) { r[i]->take = 1; //被占用 r[i]->name = name; //同时把名字改成占用该资源的进程名字擦,用来输出表示 return true; } } return false; } //去配进程的资源 bool Cancel(string name,vector { for(int m = 0;m { if(pare(res[m].name) == 0) { res[m].name = "0"; return true; } } return false; } //将分区处理后的结果送到类型为OutPut的容器中 vector { vector for(int i = 0;i { Output show; show.o_name = r[i].name; show.o_begin = r[i].begin; show.o_length = r[i].length; show.o_num = r[i].num; show.o_take = r[i].take; result.push_back(show); } return result; } //打印出来 void Print(vector { printf("-----------------------***-----------------------\n"); printf("分区号起始地址长度占用标志\n");