资源简介
包括实验题目,代码及运行结果
实验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
- 上一篇:操作系统实验四 设备管理
- 下一篇:操作系统实验八 文件管理
相关资源
- 操作系统实验八 文件管理
- 操作系统实验四 设备管理
- 操作系统实验一: 进程调度
- CODESYS之创建一个库.docx
- CODESYS运动控制之SMC_Interpolator.docx
- 一个shellcode作用是添加Windows用户
- Codecs33-Sunblime Text
- 字符编码转换,utf16 utf8 ascii unicode
- SAP FICO 常用事务代码TCODE
- Helix AAC Decoder源码及官方文档
- 基于OpenCV的多种条形码识别算法
- FPGA JPEG Verilog Source code 源代码
- codewarrior V6.2全功能license
- codejock Demo
- arduino_code.rar
- Qt条码生成器
- RS485芯片ESD ±20kV 速率高达10MBPS 性价
- PB版 code128 条形码 图片生成
- microchip PIC24F Code Examples
- 非局部均值滤波器
- GB∕T 38662-2020 物联网标识体系 Ecode标
- Qt Thread code
- xilinx vivado xadc IP core code
- Code Alignment
- CodeSnitch破解版,支持WINCE6.0
- 汇编做模拟计算器ASM文件
- codelock指纹门禁系统.rar
- code.zip
- QRCODE 单片机实现二维码显示60539
- stm32f103zet6液晶显示实验
评论
共有 条评论