예제 #1
0
    def __init__(self, barramento, tamanho, log=LogNone()):
        super(Memoria, self).__init__(name="Memoria")
        self.log = log
        self.tamanho_informado = tamanho
        if tamanho > 35:
            MemoryError("limite de memoria excedido (32GB ou 32*2**30)")

        if tamanho < Consts.MEMORIA_X_MIN:
            tamanho = Consts.MEMORIA_X_MIN
            log.write_line(
                'tamanho de memoria muito pequeno, o tamanho minimo foi escolhido'
            )
        elif tamanho > Consts.MEMORIA_X_MAX:
            tamanho = Consts.MEMORIA_X_MAX
            # log.write_line('tamanho de memoria muito grande, o tamanho maximo foi escolhido')

        self.tamanho = 32 * (2**tamanho)
        codeslice = Consts.get_memoria_code_sliced(self.tamanho)
        self.code_slice = codeslice - (codeslice % Consts.CODE_SIZE)
        self.tamanho_total_valores = (
            32 * (2**self.tamanho_informado)) - self.code_slice
        self.memoria = [0 for i in range(self.tamanho)]
        self.sinais = Queue()
        self.dado = None
        self.barramento = barramento
        self.esperando_entrada = False
예제 #2
0
    def __init__(self, tamanho_memoria, atualizar, log=LogNone()):
        self.log = log
        self.tamanho_memoria = tamanho_memoria
        self.atualizar = atualizar

        if Consts.CACHE_TAX > Consts.CACHE_TAX_MAX:
            Consts.CACHE_TAX = Consts.MEMORIA_X_MAX
            log.write_line(
                'taxa maxima do cache excedida, tamanho maximo escolhido')
        elif Consts.CACHE_TAX < Consts.CACHE_TAX_MIN:
            Consts.CACHE_TAX = Consts.CACHE_TAX_MIN
            log.write_line(
                'taxa minima do cache excedida, tamanho minimo escolhido')

        self.tamanho = int(Consts.CACHE_TAX * tamanho_memoria)
        self.cache_dict = {}
        self.in_dict = 0
        self.hit = 0
        self.miss = 0
        self.cooldown = Consts.CACHE_COOLDOWN

        self.dict_lock = threading.Lock()
        self.cooldown_thread = threading.Thread(target=self.checar_cooldown,
                                                name="Cooldown")
        self.cooldown_thread.start()
예제 #3
0
    def __init__(self, barramento, path=Consts.defaultPath, log=LogNone()):
        super(Entrada, self).__init__(name="Entrada")
        self.log = log

        self.barramento = barramento
        self.bufferReader = BufferReader(path)
        self.sinais = Queue()
        self.endereco = None
예제 #4
0
    def __init__(self, log=LogNone(), logi=LogNone()):
        super(Barramento, self).__init__(name="Barramento")
        self.log = log
        self.logi = logi

        self.sinalLock = threading.Lock()
        self.fila_sinal = []
        self.sinal_bytes = 0

        self.enderecoLock = threading.Lock()
        self.fila_endereco = []
        self.enderecos_bytes = 0

        self.dadosLock = threading.Lock()
        self.fila_dados = []
        self.dados_bytes = 0

        self.tempo_de_inicio = 0
예제 #5
0
    def __init__(self, barramento, tamanho_ram, log=LogNone()):
        super(Cpu, self).__init__(name="Cpu")
        self.log = log

        self.registradores = {"A": 0, "B": 0, "C": 0, "D": 0, "CI": 0}
        self.barramento = barramento
        self.passo = Cpu.PASSO_SINAL
        self.tipoSinal = Consts.T_L_INSTRUCAO
        self.endereco = None
        self.dado = None
        self.loops = []

        if Consts.CACHE_SELECTOR == 1:
            self.cache = CacheLRU(tamanho_ram, self.atualizar)
        elif Consts.CACHE_SELECTOR == 2:
            self.cache = CacheLFU(tamanho_ram, self.atualizar)
        elif Consts.CACHE_SELECTOR == 3:
            self.cache = CacheCoolDown(tamanho_ram, self.atualizar)
예제 #6
0
    def __init__(self, tamanho_memoria, atualizar, log=LogNone()):
        self.log = log
        self.tamanho_memoria = tamanho_memoria
        self.atualizar = atualizar

        if Consts.CACHE_TAX > Consts.CACHE_TAX_MAX:
            Consts.CACHE_TAX = Consts.MEMORIA_X_MAX
            log.write_line(
                'taxa maxima do cache excedida, tamanho maximo escolhido')
        elif Consts.CACHE_TAX < Consts.CACHE_TAX_MIN:
            Consts.CACHE_TAX = Consts.CACHE_TAX_MIN
            log.write_line(
                'taxa minima do cache excedida, tamanho minimo escolhido')

        self.tamanho = int(Consts.CACHE_TAX * tamanho_memoria)
        self.cache_dict = {}
        self.in_dict = 0
        self.hit = 0
        self.miss = 0