Gerenciamento De Memoria
*Funções básicas:
- manter o maior número de processos na memoria
- swapping quando a memória acabar
- execuções de programas maiores do que a memória disponível
- proteção contra acessos indevidos
- compartilhamento entre processos e threads
*Alocação contigua simples
- implementada nos primeiros SO desenvolvidos
- a memória principal é dividida em duas partes: uma para o SO e outra para o programa do usuário
- o programador deve desenvolver suas aplicações preocupando-se apenas em não ultrapassar o espaço da memória disponível
- o usuário tem controle sobre toda a memória principal, podendo acessar a qualquer posição de memória, inclusive para alterar o SO
- dessa forma, sempre que um programa de usuário faz referência a um endereço na memória, o sistema verifica se o endereço está no seu limite
- apesar de sua fácil implementação e código reduzido, a alocação contigua simples não permite a utilização eficiente do processador
- proteção: a um registrador para não deixar o programa acessar uma área do SO
- apenas um usuário pode dispor desse recurso
- caso o programa não preencha totalmente, existira um espaço de memória sem utilização
- a princípio, os programas do usuário estavam limitados ao tamanho da memória principal disponível
- problema: subutilização da memória, pois apenas um usuário tem acesso ao sistema por vez
*Alocação particionada
- os sistemas monoprogramaveis permitem que o processador permaneça ocioso e que a memória seja subutilizada até o termino de uma operação de E/S por exemplo
- a multiprogramação vem para resolver esse problema, pois enquanto aguarda algum evento, outros processos podem ser executados pela CPU nesse intervalo
- para a multiprogramação ser eficiente, é necessário que vários programas estejam na memória ao mesmo tempo, daí a necessidade de uma nova forma de organização da memória principal
- já é uma maneira sofisticada de gerenciar a memoria
- pode ser:
- estática ou fixa: o tamanho das