资源简介
包括实验题目,代码及运行结果
实验5 内存管理(2学时)
一、实验目的
通过实验加强对内存管理方法的理解和掌握。
二、实验内容
编写程序实现采用可变分区方法管理内存。
三、实验要求
1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。
2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表或链表。
3、在设计好的数据结构上设计一个主存分配算法(循环首次适应算法)。
4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和(或)下邻空闲分区,要求合并为一个空闲分区登记在空闲分区表的一个表项里。
5、(附加)若需要可以实现程序的浮动,对内存空间进行紧凑。

代码片段和文件信息
#include
#include
#include
using namespace std;
/*** 空闲链 ***/
struct Block{
Block* fro; // 前向指针
Block* nex; // 后向指针
int sta_add; // 起始地址
int sz; // 空闲块大小
bool state; // 分配状态 1表示已经分配 0表示空闲
char name[10]; // 占用分区作业名称
}*block*first*p; // block: 分区块遍历变量 first: 分区首地址 p: 下一个开始遍历的分区块地址
int n; // 空闲块数
/*** 作业 ***/
struct Work{
char name[10]; // 作业名称
int sz; // 作业大小
Block* add; // 分区块的地址
int block_sz; // 分区块的大小
bool finish; // 作业完成状态 1表示已完成,0表示未完成
}work[100];
int id = 0; // 作业数量
void input(){
cout << “请输入空闲块数: “;
cin >> n;
Block* fro;
int now = 0; // 起始地址
for(int i=0; i cout << “请输入第“ << i+1 << “块分区大小: “;
int sz; cin >> sz;
block = new Block();
block->state = 0;
block->sz = sz;
block->sta_add = now;
now = now+sz;
strcpy(block->name“NULL“);
if(i == 0) first = block;
else block->fro = frofro->nex = block;
fro = block;
}
block->nex = first;
p = first;
}
bool allocation(int id){
cout << “请输入作业名称 作业大小: “;
char name[10]; int sz;
cin >> name >> sz;
block = p;
for(int t=0; t if(block->state == 1) { block = block->nex; continue;}
if(block->sz >= sz){
cout << “分配成功!“ << endl;
block->state = 1;
strcpy(block->namename);
work[id].block_sz = block->sz;
strcpy(work[id].namename);
work[id].add = block;
work[id].sz = sz;
p = block->nex;
return 1;
}
block = block->nex;
}
cout << “分配失败!“ << endl;
return 0;
}
void pback(){
cout << “请输入完成作业名称: “;
char name[10]; cin >> name;
bool flag = 0;
for(int i=0; i if(strcmp(work[i].namename)==0 && work[i].finish==0){
block = work[i].add;
strcpy(block->name“NULL“);
block->state = 0;
work[i].finish = 1;
flag = 1;
break;
}
}
if(flag == 0) { cout<<“没有该作业!\n“; return ;}
Block* fro* nex;
nex = block->nex;
if(block == first){
if(n == 1) {
cout << “回收成功! \n“;
return ;
}
if(nex->state == 0){
block->nex = nex->nex;
nex->nex->fro = block;
block->sz = block->sz+nex->sz;
if(p == nex) p = nex->nex;
delete nex;
}
}else if(block->nex == first){
fro = block->fro;
if(fro->state == 0){
fro->nex = block->nex;
fro->sz = fro->sz+block->sz;
if(p == block) p = block->nex;
delete block;
}
}else{
fro = block->fro;
nex = block->nex;
if(fro->state==0 && nex->state==0){
fro->nex = nex->nex;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5060 2018-05-23 21:14 main.cpp
文件 30208 2018-05-23 15:16 实验题目5.doc
文件 97390 2018-05-23 21:13 新建 Microsoft Word 文档.docx
- 上一篇:操作系统实验四 设备管理
- 下一篇:操作系统实验八 文件管理
相关资源
- 条码字体barcode128
- STM32蓝牙和串口程序
- UNICODE GBK双向码表二进制文件
- 常用编码(UnicodeUTF-8GBK)转换工具
- vc URL编解码类
- 中文转化unicoder码的方法
- codesys编程手册中文版
- XSS Encode
- LHC生命周期前沿的非弹性暗物质:A
- arm cortex m0 rtl code
- Xcode 12.3(16F156)安装包.zip
- windows 64位系统下安装Code Warrior6.3方法
- Zxing-Code_128一维码
- CODE128A 字体
- Code 128 字体
- INBarcodeOCR条码识别组件,识别率及速
- code39条形码字体
- 飞思卡尔68HC08Metrowerks_CodeWarrior开发软
- codewarrior使用指南中文版
- Code Warrior License 破解,各个版本可用
- Codewarrior HCS12 V5.1 license
- codewarrior6.3 win10环境可以安装的破解
- Codesys变成入门手册
- patchedcode.bin
- 奥科网关M1000B配置手册.docx
- icm20948_Sensor_Code.zip
- OzCode3.X Patch 注册机
- Qt实现Code39条形码
- shellcoder编程揭秘
- 黄金矿工源码
评论
共有 条评论