Gerenciamento de Memória Lei de Parkinson — Programa sempre se expande para preencher a memória disponível para ele gerencia da hierarquia de memória SWAP alocação e liberação de espaço localização de dados Classes de gerenciamento de memória Mono tarefa toda memória é alocada para o próximo programa inclui área para o OS erros de execução podem prejudicar o OS que está na memória Multiprogramação Divide a memória em varias partições de tamanhos diferentes Ao adicionar um job ele entra na fila para pegar um espaço da memória Diminui o tempo ocioso da CPU, já que você pode fazer várias coisas ao mesmo tempo Para resolver problemas de limites das partições, o processador vem equipado com uma MMU MMU (memory management unit) Hardware presente no processador transforma endereço virtual em físico user nunca acessa endereços físicos aponta um espaço virtual para um físico software não pode ser compilado com endereços absolutos, por isso usa-se offsets de endereços. Com isso, endereços de limite são colocados para auxiliar commandos JMP o endereço base e limite superior são usados para não fazer com o que programa saia dos limites, além do endereço base ser usado para o calculo do offset Tipos de partição Estática tamanho e número de partições fixa suscetível a fragmentação mais fácil de gerenciar espaços podem não ser usados totalmente (fragmentação interna) pode usar filas múltiplas para adicionar processos nas partições (cada fila é designada para um tamanho especifico, mas pode acarretar em filas não balanceadas) pode usar fila única para adicionar processos nas partições, assim cada processo pega a melhor partição livre, mas seria mais lento pode haver fragmentação externa (se juntar duas partições livres elas dariam o tamanho para caber um processo maior que precisa ser executado). Esse problema é menor no caso da estática Variável menor fragmentação interna alocado dinamicamente problema de fragmentação externa, uma vez que conforme o espaço vai sendo liberado, buracos ficarão no meio. Para resolver esse problema pode ser usado a compactação da memória (OS mantêm uma lista dos espaços vazios, mas é custoso para a CPU) Técnicas de alocação Bitmap divide a memória em pequenos pedaços (em Kb por exemplo) cada pedaço recebe o valor 1, se estiver ocupado, e 0 se estiver livre unidades não podem ser nem muito grandes nem pequenas demais Linked lists Lista encadeada marca se é um espaço vazio ou não, a onde começa e o tamanho da partição pode ser usada mais de uma lista, para dizer por exemplo o que está vazio e o que esta sendo usado Algoritmos de alocação First Fit o primeiro segmento livre é usado (dessa forma os espaços vazios vão para o final) + rápido pode levar a fragmentação Next Fit usa o primeiro segmento livre, guarda essa informação e para o próximo ele continua da onde parou desempenho inferior ao First Fit Best Fit procura na lista toda o melhor espaço para o processo mais lento menor fragmentação após um bom tempo ele pode deixar vários espaços pequenos inúteis (fragmentação) Worst Fit aloca o maior espaço disponível para evitar os espaços pequenos inúteis tende a espalhar porções não utilizadas para áreas não contíguas, sendo difícil de alocar jobs grandes depois Quick Fit mantém listas para tamanhos mais usados e pega o que se encaixa para o processo tenta encontrar os espaços vazios vizinhos ao dealocar para fazer a união entre eles Dispositivos de memória massive tape storage — fitas para backup