目录
一、实验目的:
编写程序,实现动态分区存储管理算法,模拟动态分区存储分配、回收和合并的过程,加深对动态分区存储管理的理解。
二、实验内容:
模拟实现至少两种动态分区存储管理算法(首次适应算法、最佳适应算法或最坏适应算法等)。每种算法包括动态分区存储分配、回收和合并的过程,熟悉并掌握各种算法的空闲区组织方式。实验内容如下:
1、分区的初始化——可以由用户输入初始分区的大小(初始化后只有一个空闲分区,起始地址为0,大小是用户输入的大小)。
2、分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。
3、分区的回收:用户输入作业号,实现分区回收,同时,分区的合并也要体现出来(注意:不存在的作业号要给出错误提示!)。
4、分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区是空闲或者占用的,能够显示出来)。
实验要求如下:
(1)内存空间不足的情况,要有相应的显示;
(2)作业不能同名,但是删除后可以再用这个名字;
(3)作业空间回收时输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。
三、实验代码(BF算法)
本次实验采用BF算法(最佳适应算法)具体步骤如下:
分区的初始化:
elif select == '1':
print("请输入内存大小:")
size = int(input())
a = Memory(0, size - 1, size, state=1, ID=0)
b = []
b.append(a)
分区的动态分配过程:
BF分配算法:
def BF(work_id, work_length, li):
for i in li:
if i.Id == work_id:
print('作业已存在!')
return
q = copy.copy(li)
q = bubble_sort(q)
s = -1
ss12 = -1
for i in range(0, len(q)):
p = q[i]
if p.state == 1 and p.length > work_length:
s = p.start
elif p.state == 1 and p.length == work_length:
ss12 = p.start
if s == -1 and ss12 == -1:
print("内存空间不足!")
return
for i in range(0, len(li)):
p = li[i]
if p.start == s:
node2 = Memory(p.start + work_length, p.end, p.length - work_length, 1, 0)
a = Memory(p.start, p.start + work_length - 1, work_length, state=0, ID=work_id)
del li[i]
li.insert(i, node2)
li.insert(i, a)
show_memory(li)
return
elif p.start == ss12:
p.state = 0
show_memory(li