资源简介

计算机操作系统的动态分区分配与回收实验的Python实现代码。

资源截图

代码片段和文件信息

from random import randint

class storage(object):
    def __init__(selfsize):
        self.memory_size = size

#首次适应算法
class OS_1(object):
    storageUnit = storage(12)
    temp = storageUnit.memory_size
    memory_list = [0 for i in range(temp)]  #物理存储单元,初始化为0
    memory_addr = [0 for i in range(temp)] #记录每个单元是否使用初始化为0
    memory_block = []

    #分配内存部分
    def allocate_unit(selfneed_size):
        size_count = 0
        record = 0
        flag = True
        memory_list = []
        for addr in range(self.storageUnit.memory_size):
            if self.memory_addr[addr] == 0:
                if flag:
                    record = addr #记录开始地址来便储存某物
                    flag = False
                size_count += 1
                if size_count == need_size:#当前存储块满足所需大小时,进行存储
                    for i in range(size_count):
                        self.memory_list[size_count+i] = chr(1111)
                        self.memory_addr[record+i] = 1 #标记
                        memory_list.append(record+i) #块内空间
                    self.memory_block.append(memory_list)#记录块
                    break
            else:#不满足时,重新寻找新的内存块,last_count重置为0
                size_count = 0
                flag = True
        if size_count < need_size:
            print(‘!!分配内存失败!!没有足够内存分配给该作业!‘)

    #回收部分
    def reclaim_unit(selfidentifier):
        if identifier > len(self.memory_block):
            print(‘error input‘)
            exit(1)
        for addr in self.memory_block[identifier]:
            self.memory_addr[addr] = 0
        self.memory_block.remove(self.memory_block[identifier])

    #存储显示部分
    def memoryView(self):
        print(‘当前的内存存储情况为:‘)
        for count in range(len(self.memory_block)):
            start = self.memory_block[count][0]
            end = self.memory_block[count][len(self.memory_block[count])-1]
            lenth = len(self.memory_block[count])
            print(‘分区:‘count‘\t‘‘大小:‘lenth‘\t‘‘地址:‘start‘~‘end)

#循环首次适应算法
class OS_2(object):
    storageUnit = storage(12)
    temp = storageUnit.memory_size
    memory_list = [0 for i in range(temp)]  #物理存储单元,初始化为0
    memory_addr = [0 for i in range(temp)] #记录每个单元是否使用初始化为0
    memory_block = []
    memory = 0#标记上次分配地址块的位置

    def allocate_unit(selfneed_size):
        size_count = 0
        record = 0
        flag = True
        memory_list = []
        for addr in range(self.storageUnit.memory_size):
            location = (self.memory + addr) % self.storageUnit.memory_size
            if self.memory_addr[location] == 0:
                if flag:
                    record = location #记录开始地址来便储存某物
             

评论

共有 条评论