# 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
memorys______mbt___500
最新推荐文章于 2021-06-17 01:45:40 发布