def liberarMemoria3ProcessosIndice1TamanhoTotalProcessoTest(): print("\nliberarMemoria3ProcessosIndice1TamanhoTotalProcessoTest") # Configuração memoriaPrimaria = MemoriaPrimaria() mapaBits = MapeamentoEncadeadoBits() caminhoDisco = "discorepositorio.csv" processo = MemoriaSecundaria.buscarProcessoDisco(caminhoDisco) processo.bitR = 0 processo.bitM = 0 posicaoInicial = mapaBits.indiceMemoriaLivre memoriaPrimaria.adicionarProcessoMemoria(processo, posicaoInicial) segmento = Segmento() segmento.processo = processo segmento.posicaoInicial = posicaoInicial segmento.quantidadePosicoes = processo.tamanhoProcesso segmento.definirClasseSubstituicaoPagina() mapaBits.adicionarSegmento(segmento) processo1 = MemoriaSecundaria.buscarProcessoDisco(caminhoDisco) processo1.bitR = 1 processo1.bitM = 1 posicaoInicial = mapaBits.indiceMemoriaLivre memoriaPrimaria.adicionarProcessoMemoria(processo1, posicaoInicial) segmento1 = Segmento() segmento1.processo = processo1 segmento1.posicaoInicial = posicaoInicial segmento1.quantidadePosicoes = processo1.tamanhoProcesso segmento1.definirClasseSubstituicaoPagina() mapaBits.adicionarSegmento(segmento1) processo2 = MemoriaSecundaria.buscarProcessoDisco(caminhoDisco) processo2.bitR = 0 processo2.bitM = 0 posicaoInicial = mapaBits.indiceMemoriaLivre memoriaPrimaria.adicionarProcessoMemoria(processo2, posicaoInicial) segmento2 = Segmento() segmento2.processo = processo2 segmento2.posicaoInicial = posicaoInicial segmento2.quantidadePosicoes = processo2.tamanhoProcesso segmento2.definirClasseSubstituicaoPagina() mapaBits.adicionarSegmento(segmento2) # Execução memoriaPrimaria.exibirMemoriaPrimariaTamanhoTotalProcesso() # OBSERVAR RETORNO DO -1 PARA BUSCA DA CLASSE indiceProcessoASerRemovido = mapaBits.buscarPosicaoInicialProcessoPelaClasseSubstituicao( 0) memoriaPrimaria.liberarMemoria(indiceProcessoASerRemovido) # Validação memoriaPrimaria.exibirMemoriaPrimariaTamanhoTotalProcesso()
def adicionarSegmentoTamanhoPaginaTest(): print("adicionarSegmentoTamanhoPaginaTest") # Configuração tamanhoPagina = 200 processo = Processo() processo.tamanhoProcesso = 150 processo1 = Processo() processo1.tamanhoProcesso = 120 processo2 = Processo() processo2.tamanhoProcesso = 300 mapeamentoEncadeadoBits = MapeamentoEncadeadoBits() # Execução segmento = Segmento() segmento.processo = processo segmento.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento.quantidadePosicoes = tamanhoPagina mapeamentoEncadeadoBits.adicionarSegmento(segmento) segmento1 = Segmento() segmento1.processo = processo1 segmento1.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento1.quantidadePosicoes = tamanhoPagina mapeamentoEncadeadoBits.adicionarSegmento(segmento1) segmento2 = Segmento() segmento2.processo = processo2 segmento2.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento2.quantidadePosicoes = tamanhoPagina mapeamentoEncadeadoBits.adicionarSegmento(segmento2) # Validação mapeamentoEncadeadoBits.exibirMapaBits()
def adicionarSegmentoVericarIndiceMemoriaLivreAtualizadoTest(): print("\nadicionarSegmentoVericarIndiceMemoriaLivreAtualizadoTest") # Configuração processo = Processo() processo.tamanhoProcesso = 255 processo1 = Processo() processo1.tamanhoProcesso = 350 processo2 = Processo() processo2.tamanhoProcesso = 500 mapeamentoEncadeadoBits = MapeamentoEncadeadoBits() # Execução segmento = Segmento() segmento.processo = processo segmento.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento.quantidadePosicoes = processo.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento) segmento1 = Segmento() segmento1.processo = processo1 segmento1.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento1.quantidadePosicoes = processo1.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento1) segmento2 = Segmento() segmento2.processo = processo2 segmento2.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento2.quantidadePosicoes = processo2.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento2) # Validação mapeamentoEncadeadoBits.exibirMapaBits()
def adicionarSegmentoTest(): print("\nadicionarSegmentoTest") # Configuração processo = Processo() processo.tamanhoProcesso = 255 mapeamentoEncadeadoBits = MapeamentoEncadeadoBits() # Execução segmento = Segmento() segmento.processo = processo segmento.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento.quantidadePosicoes = processo.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento) # Validação mapeamentoEncadeadoBits.exibirMapaBits()
def removerSegmentoIndice3Test(): print("\nremoverSegmentoIndice3Test") # Configuração processo = Processo() processo.tamanhoProcesso = 150 processo1 = Processo() processo1.tamanhoProcesso = 120 processo2 = Processo() processo2.tamanhoProcesso = 300 processo3 = Processo() processo3.tamanhoProcesso = 650 mapeamentoEncadeadoBits = MapeamentoEncadeadoBits() segmento = Segmento() segmento.processo = processo segmento.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento.quantidadePosicoes = processo.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento) segmento1 = Segmento() segmento1.processo = processo1 segmento1.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento1.quantidadePosicoes = processo1.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento1) segmento2 = Segmento() segmento2.processo = processo2 segmento2.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento2.quantidadePosicoes = processo2.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento2) segmento3 = Segmento() segmento3.processo = processo3 segmento3.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento3.quantidadePosicoes = processo3.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento3) # Execução mapeamentoEncadeadoBits.exibirMapaBits() mapeamentoEncadeadoBits.removerSegmento(3) # Validação mapeamentoEncadeadoBits.exibirMapaBits()
def popularMapaBits(cls, listaTamanhoProcesso): processo = Processo() processo.bitR = 0 processo.bitM = 0 processo.tamanhoProcesso = listaTamanhoProcesso[0] processo1 = Processo() processo1.bitR = 0 processo1.bitM = 0 processo1.tamanhoProcesso = listaTamanhoProcesso[1] processo2 = Processo() processo2.bitR = 0 processo2.bitM = 1 processo2.tamanhoProcesso = listaTamanhoProcesso[2] processo3 = Processo() processo3.bitR = 1 processo3.bitM = 1 processo3.tamanhoProcesso = listaTamanhoProcesso[3] processo4 = Processo() processo4.bitR = 1 processo4.bitM = 0 processo4.tamanhoProcesso = listaTamanhoProcesso[4] mapeamentoEncadeadoBits = MapeamentoEncadeadoBits() segmento = Segmento() segmento.processo = processo segmento.definirClasseSubstituicaoPagina() segmento.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento.quantidadePosicoes = processo.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento) segmento1 = Segmento() segmento1.processo = processo1 segmento1.definirClasseSubstituicaoPagina() segmento1.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento1.quantidadePosicoes = processo1.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento1) segmento2 = Segmento() segmento2.processo = processo2 segmento2.definirClasseSubstituicaoPagina() segmento2.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento2.quantidadePosicoes = processo2.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento2) segmento3 = Segmento() segmento3.processo = processo3 segmento3.definirClasseSubstituicaoPagina() segmento3.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento3.quantidadePosicoes = processo3.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento3) segmento4 = Segmento() segmento4.processo = processo4 segmento4.definirClasseSubstituicaoPagina() segmento4.posicaoInicial = mapeamentoEncadeadoBits.indiceMemoriaLivre segmento4.quantidadePosicoes = processo4.tamanhoProcesso mapeamentoEncadeadoBits.adicionarSegmento(segmento4) return mapeamentoEncadeadoBits
def __init__(self, tamanhoPagina=None): self._mapaBits = MapeamentoEncadeadoBits() self._tamanhoPagina = tamanhoPagina
class GerenciadorMemoria: """ Description """ __slots__ = ["_mapaBits", "_tamanhoPagina"] def __init__(self, tamanhoPagina=None): self._mapaBits = MapeamentoEncadeadoBits() self._tamanhoPagina = tamanhoPagina def adicionarProcessoMemoriaPrimaria(self, memoriaPrimaria, processo): if (self._tamanhoPagina == None): espacoOcupadoProcesso = processo.tamanhoProcesso else: espacoOcupadoProcesso = self._tamanhoPagina posicaoInicial = self._mapaBits.indiceMemoriaLivre memoriaPrimaria.adicionarProcessoMemoria(processo, posicaoInicial, espacoOcupadoProcesso) segmento = Segmento() segmento.processo = processo segmento.posicaoInicial = posicaoInicial segmento.quantidadePosicoes = espacoOcupadoProcesso self._mapaBits.adicionarSegmento(segmento) def liberarEspacoMemoriaPrimaria(self, memoriaPrimaria, espacoASerLiberado, processo=None): if (processo != None): if (self._tamanhoPagina == None): tamanhoPaginaProcessoASerRemovido = processo.tamanhoProcesso else: tamanhoPaginaProcessoASerRemovido = self._tamanhoPagina indiceProcessoASerRemovido = memoriaPrimaria.buscarIndicePorProcesso( processo) memoriaPrimaria.liberarMemoria(indiceProcessoASerRemovido, tamanhoPaginaProcessoASerRemovido) indiceSegmentoASerRemovido = self._mapaBits.buscarIndiceSegmentoPorIdProcesso( processo.idProcesso) self._mapaBits.removerSegmento(indiceSegmentoASerRemovido) else: listaProcessosRemovidos = [] quantidadePosicoesOcupadasMemoria = len( memoriaPrimaria.posicoesMemoria) tamanhoMaxMemoria = memoriaPrimaria.tamanhoMemoria # REMOVER USANDO ALGORÍTIMO DE SUBSTITUIÇÃO DE PÁGINA LRU while (quantidadePosicoesOcupadasMemoria + espacoASerLiberado > tamanhoMaxMemoria): indicePosicaoInicialProcessoASerRemovidoMemoria = self._buscarPaginaASerRemovidaPorClasse( ) if (indicePosicaoInicialProcessoASerRemovidoMemoria != -1): idProcessoASerRemovido = memoriaPrimaria.posicoesMemoria[ indicePosicaoInicialProcessoASerRemovidoMemoria].idProcesso if (self._tamanhoPagina == None): tamanhoPaginaProcessoASerRemovido = memoriaPrimaria.posicoesMemoria[ indicePosicaoInicialProcessoASerRemovidoMemoria].tamanhoProcesso else: tamanhoPaginaProcessoASerRemovido = self._tamanhoPagina processoRemovido = memoriaPrimaria.liberarMemoria( indicePosicaoInicialProcessoASerRemovidoMemoria, tamanhoPaginaProcessoASerRemovido) listaProcessosRemovidos.append(processoRemovido) indiceSegmentoASerRemovido = self._mapaBits.buscarIndiceSegmentoPorIdProcesso( idProcessoASerRemovido) self._mapaBits.removerSegmento(indiceSegmentoASerRemovido) quantidadePosicoesOcupadasMemoria = len( memoriaPrimaria.posicoesMemoria) else: print( "Não foram encontradas paginas com classes de substituição definidas." ) return listaProcessosRemovidos # Fim de remover segmento def atualizarTempoVidaProcesso(self, memoriaPrimaria, processoAtual): indiceProcessoBuscado = memoriaPrimaria.buscarIndicePorProcesso( processoAtual) if (indiceProcessoBuscado != -1): memoriaPrimaria.posicoesMemoria[ indiceProcessoBuscado].tempoVida = processoAtual.tempoVida def atualizaBitsReferenciaModificacaoMemoriaPrimaria( self, memoriaPrimaria, processoAtual): indiceProcessoBuscado = memoriaPrimaria.buscarIndicePorProcesso( processoAtual) if (indiceProcessoBuscado != -1): memoriaPrimaria.posicoesMemoria[indiceProcessoBuscado].bitR = 1 memoriaPrimaria.posicoesMemoria[indiceProcessoBuscado].bitM = 1 def atualizaBitsReferenciaNaoModificacaoMemoriaPrimaria( self, memoriaPrimaria, processoAtual): indiceProcessoBuscado = memoriaPrimaria.buscarIndicePorProcesso( processoAtual) if (indiceProcessoBuscado != -1): memoriaPrimaria.posicoesMemoria[indiceProcessoBuscado].bitR = 1 memoriaPrimaria.posicoesMemoria[indiceProcessoBuscado].bitM = 0 def atualizarBitRProcessosNaoReferenciados(self): self._mapaBits.atualizarbitRParaProcessosNaoReferenciados() def exibirMapaBits(self): self._mapaBits.exibirMapaBits() def _buscarPaginaASerRemovidaPorClasse(self): self._mapaBits.atualizarClassesSubstituicaoPagina() posicaoInicialProcessoBuscado = -1 for i in range(0, 3): posicaoInicialProcessoBuscado = self._mapaBits.buscarPosicaoInicialProcessoPelaClasseSubstituicao( i) if (posicaoInicialProcessoBuscado != -1): return posicaoInicialProcessoBuscado return posicaoInicialProcessoBuscado @property def tamanhoPagina(self): return self._tamanhoPagina @tamanhoPagina.setter def tamanhoPagina(self, tamanhoPagina): self._tamanhoPagina = tamanhoPagina