操作系统-模拟动态分区管理

本文介绍了模拟操作系统中动态分区管理的实验,包括实验目的、内存分配与回收策略的实现,以及通过创建、撤销进程来测试内存管理。实验加深了对地址映射、内存保护等概念的理解,并提供了代码cpp下载。
摘要由CSDN通过智能技术生成

1、实验目的

(1)加深理解内存的分配与回收,分配与回收的策略、地址映射、内存保护等概念。

2、实验内容

设计一个模拟内存管理中采用“动态分区”方式的存储器管理程序,实现以下操作:
(1)以链接存储结构建立内存分配表、内存空闲表并进行初始化;
(2)动态申请一段内存,对该段内存进行“动态分区”方式的管理,选择最先适配算法进行分配;
(3)创建3个进程并装入内存,撤销第2个进程(释放内存);
(4)输出当前“内存”的使用情况。

3、算法设计

#include <iostream>
using namespace std;
#define MAX 100
void allocationMB(int pcbID, int memLen);
typedef struct MemoryBlock
{
    
	int mpID; //编号,空闲分区存储分区编号,已用分区存储进程编号
	int startAddr;  //起始地址
	int length;  //长度 最大100 
	struct MemoryBlock *next;
}MB;
MB *inuse, *unused;
typedef struct PCBNode
{
   
	int pcbID; //PCB 编号  
	char name[10]; //PCB 名称
	int status; //PCB 状态,0-就绪,1-运行,-1-阻塞
	int rt; //PCB 运行时间
	int memLen;  //所需内存大小 0 <= memlen <= 100
	struct  PCBNode  *next;
}PCB;
void init() 
{
   
	MB *s;
	s = new(MB);
	s->length = 0;
	s->startAddr = 0;	
	s->next = NULL;
	inuse = s;
	s = new(MB);
	s->length = 100;
	s->startAddr = 0;
	s->next = NULL;
	unused = s;
	PCB *p;
	p = new(PCB);
	p->next = NULL;
	first = p;
	 
}
int count = 1;
int i = 0;
//新建进程
void newProcess(int menLen)
{
    
	PCB  *s;
	s = new(PCB);  //创建 PCB 并进入就绪队列
	s->pcbID = count;
	s->memLen = menLen;
	allocationMB(s->pcbID,s->memLen); //申请内存
	count++;
	return;

}
void allocationMB(int pcbID, int memLen) 
{
   
	MB *p = unused;
	while(p != NULL) {
   
		if(p->length >= memLen) {
   
			MB *q = inuse;
			
			while(
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
模拟实现动态可变分区存储管理系统,内存资源的分配情况用一个单链表来表示,每一个节点表示一个可变分区,记录有内存首地址、大小、使用情况等,模拟内存分配动态输入构造空闲区表,键盘接收内存申请尺寸大小,根据申请,实施内存分配,并返回分配所得内存首址。分配完后,调整空闲区表,并显示调整后的空闲区表和已占用的区表。如果分配失败,返回分配失败信息。模拟内存回收。根据空闲区表,从键盘接收回收区域的内存作业代号。回收区域,调整空闲区表,并显示调整后的空闲区表。对于内存区间的分配,移出,合并就是相应的对链表节点信息进行修改,删除和创建相应的节点。 在模拟实现动态可变分区存储管理系统用到的是“最佳适应算法”与“最坏适应算法”。所谓“最佳”是指每次为作业分配内存时,总是把满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。因此保证每次找到的总是空闲分区最小适应的,但这样会在储存器留下许多难以利用的小的空闲区。最坏适应分配算法是要扫描整个空闲分区表或链表,总是挑选最大的一个空闲分区割给作业使用。进入系统时我们需要内存首地址和大小这些初始化数据。成功后我们可以自由的使用首次适应算法与最佳适应算法对内存进行分配。内存经过一系列分配与回收后,系统的内存分配情况不再连续。首次适应算法与最佳适应算法的差异也就很容易的体现在分配时。动态可变分区存储管理模拟系统采用最佳适应算法、最坏适应算法内存调度策略,对于采用不同调度算法,作业被分配到不同的内存区间。
实验内容: 编写一个动态分区分配算法模拟程序,加深对动态分区存储管理方式及其实现过程的理解。 要求: 1.空闲分区通过空闲区链进行管理,在内存分配时,优先考虑低地址部分的空闲区。 2.分别采用首次适应算法、最佳适应算法和最坏适应算法模拟内存空间的动态分配与回收,每次分配和回收后显示出空闲区链的详细情况(说明:在申请不成功时,需要打印当前内存的占用情况信息)。 3.进程对内存空间的申请和释放可由用户自定义输入。 4.参考请求序列如下: (1) 初始状态下可用内存空间为640KB; (2) 进程1申请130KB; (3) 进程2申请60KB; (4) 进程3申请100KB; (5) 进程2释放60KB; (6) 进程4申请200KB; (7) 进程3释放100KB; (8) 进程1释放130KB; (9) 进程5申请140KB; (10) 进程6申请60KB; (11) 进程7申请50KB; (12) 进程6释放60KB。 测试用例格式如下: 输入: 动态分区分配算法选择 可用内存空间容量 序号/进程号/申请或释放操作/申请或释放的容量 其: (1) 动态分区分配算法:1----首次适应,2----最佳适应,3----最坏适应 (2) 申请或释放操作: 1----申请操作,2----释放操作 输出: 序号/内存空间状态1/内存空间状态2...... 内存空间状态表示分为两种情况: (1) 内存空间被占用: 内存空间起始地址-内存空间结束地址.1.占用的进程号 (2) 内存空间空闲 内存空间起始地址-内存空间结束地址.0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值