Bootstrap

python实现操作系统之动态分区存储管理

一、 实验目的:
目的:熟悉并掌握动态分区分配的各种算法,熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。

任务:用高级语言模拟实现动态分区存储管理。
二、实验内容:

1、实验内容

分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至少一种。熟悉并掌握各种算法的空闲区组织方式。

分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空闲分区,起始地址为0,大小是用户输入的大小)

分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。
分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出来。(注意:不存在的作业号要给出错误提示!)

分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区时空闲的,或者占用的,能够显示出来)。

2、实验要求
(1)内存空间不足的情况,要有相应的显示;
(2)作业不能同名,但是删除后可以再用这个名字;
(3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。
(4)要求实现FF,BF,WF算法中至少两种算法

实现代码:

import copy
class Memory(object):
    def __init__(self, start, end, length, state=1, ID=0):#__init__()方法是一种特殊的方法,被称为类的初始化方法,当创建这个类的实例时就会调用该方法
                                                          # self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数
        self.start = start
        self.end = end
        self.length = length
        self.state = state  # state为1:内存未分配
        self.Id = ID  ##ID为0是未分配,其余为任务编号
def show_memory(list):
    print("分配状态    分区号    起始地址   终止地址  分区大小")
    for i in range(0, len(list)):
        p = list[i]
        if p.state == 1:
            print("%s%s%s%11.d%11.d%10.d"%('空闲',"          ", p.Id,  p.start, p.end, p.length))
        else:
            print("%s%s%s%11.d%11.d%10.d"%('已分配',"        ", p.Id,  p.start, p.end, p.length))
# 首次适应算法
def FF(work_id, work_length, list):

    for i in list:
        if i.Id == work_id:
            print('作业已存在')
            return
    for i in range(0, len(list)):
        p = 
;