memorys______mbt___500

# import numpy as np
import copy
import sys
x=[]
class Memory():
    def __init__(self,seq,base,size,state=-1):
        self.seq=seq
        self.base=base
        self.size=size
        self.state=state
    def res(self):
        return self.seq,self.base,self.size,self.state
class main():
    def __init__(self):
        self.length_of_MBT_table=0
        self.memorys=None
        self.printf_all()
        self.main_memory=None
    def init(self):

        for i in range(self.length_of_MBT_table):
            self.memorys.append(Memory(i, 0, 0, -1))
        self.memorys[0] = Memory(0, self.main_memory, self.main_memory, 0)
        return self.memorys

    def printf(self,memorys):
        print(" \t***MBT-table***\t")
        print("\tseq base size state\t")
        for memory in self.memorys:
            print(f'\t{memory.seq}\t{memory.base}\t{memory.size}\t{memory.state}\t')

    def allocate(self,allocate_size):
        # global self.main_memory
        memorys_ = copy.deepcopy(self.memorys)
        for i in range(0, len(self.memorys) - 1):
            if memorys_[i].state == 0 and memorys_[i].size >= allocate_size:
                if memorys_[i + 1].state == -1:
                    del self.memorys[i]
                    p = Memory(i, memorys_[i].base, allocate_size, 1)
                    self.memorys.insert(i, p)
                    self.memorys[i + 1].state = 0
                    self.memorys[i + 1].base = memorys_[i].base + allocate_size
                    self.memorys[i + 1].size = self.main_memory - self.memorys[i].size
                    self.main_memory -= allocate_size
                    break

                elif memorys_[i + 1].state == 1:
                    # memorys[i+1]=memorys_[i+1]
                    self.memorys.pop(i)
                    self.memorys.insert(i, Memory(i, memorys_[i].base, allocate_size, 1))
                    # del memorys[i + 1]
                    self.memorys.insert(i + 1,
                                   Memory(i + 1, self.memorys[i].base + self.memorys[i].size, memorys_[i].size - allocate_size,
                                          0))
                    self.main_memory -= allocate_size
                    self.memorys.pop()
                    break

        for i in range(len(self.memorys)):
            self.memorys[i].seq = i

        return self.memorys[:self.length_of_MBT_table]

    def release(self,r):
        # global main_memory
        tmp = 0
        memorys_ = copy.deepcopy(self.memorys)
        for i in range(r, len(self.memorys) - 1):
            if self.memorys[i + 1].state == 1:
                self.memorys[i].state = 0
                self.main_memory += memorys_[i].size
                break
            else:
                self.main_memory += self.memorys[i].size
                tmp += self.memorys[i].size
                del self.memorys[i]
                self.memorys.insert(i, Memory(i, 0, 0, -1))
        self.memorys[r - 1].size += tmp

        return self.memorys

    def menu(self):
        print("\tMENU\t")
        print("\t0 finish\t")
        print("\t1 allocate space\t")
        print("\t2 release space\t")
        print('\tPlease input your choice:\t')

    def printf_all(self):
        global xx
        print("Please input your main_memory's space:")
        self.main_memory = int(input())
        print("Now input length of your MBT-table:")
        self.length_of_MBT_table = int(input())
        self.memorys = []
        self.init()
        self.printf(self.memorys)
        while (1):

            self.menu()
            opt = int(input())
            if opt == 0:
                # printf(xx)
                print("Hello World!Good Bye !")
                # print(x)
                break
            elif opt == 1:
                print("Input size of the space you want to allocate:")
                allocate_size = int(input())
                self.allocate(allocate_size)
                self.printf(self.memorys)
            elif opt == 2:
                print("Input size is that you want to release:")
                r = int(input())
                self.release(r)
                self.printf(self.memorys)
if __name__ == '__main__':
    pass










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值