Faculdade de Tecnologia São Mateus

Propaganda
Faculdade de Tecnologia São Mateus
Acadêmico: Bruno Souza de Jesus
2° período de Sistemas para Internet
Gerenciamento de alocação de espaço
em disco
20 de novembro de 2010
Índice

Gerenciamento de alocação de espaço em disco

Alocação
a) Alocação Estática
b) Alocação Dinâmica
c) Alocação Local

Fragmentação

Paginação
Gerenciamento de alocação de espaço em disco
O tratamento necessário da memória utilizada não é uma tarefa fácil de
ser implementada. Existem vários requisitos que devem ser observados para o
correto funcionamento, tais como, Segurança, Isolamento, Performance, entre
outros. Para isto a função de gerenciar a memória passa a ser do sistema
operacional e não mais do aplicativo.
Para que uma memória funcione de maneira correta, é necessário que
se tome cuidado com vários elementos como segurança e isolamento, e para
isso é utilizado o gerenciamento de memória. Este desenvolve sua função a
partir de duas tarefas, a Alocação de Memória e a Fragmentação. A Alocação
pode ser tanto estática, feita quando o programa é compilado, e a dinâmica,
adiada até a execução. A Fragmentação, desperdício de memória, por sua vez
pode ser interna, sobra na memória reservada ao programa, e externa que
acontece quando após o termino dos programas são deixadas pequenas
lacunas entre as páginas. Para que a utilização da memória seja mais
vantajosa, é utilizada a Paginação, processos virtuais da memória, aplicados
na divisão da memória física em partições menores, chamadas de frames.
O conjunto de registradores especiais rápidos chama-se Translation
Lookaside Buffer, estes são subdivididos em chave valor que lhe é dado em
todos os registradores ao mesmo tempo, e valor. Existe uma técnica de
gerencia de memória chamada memória virtual, que é onde memórias
principais e secundárias juntas criam a ilusão de que há muito mais memória,
com isso os programas e suas estruturas de dados não se limitam ao tamanho
da memória física, e assumem endereços na memória secundária.
O gerenciamento de memória virtual pode ocasionar vazamento de
memória, ou seja, quando determinada quantia de memória é alocada e não
liberada mesmo que não sendo utilizada, assim dados perdem a referencia
sem ao menos terem usado memória. O gerenciamento automático chama-se
Garbage collector. Ele retira os blocos de memória automaticamente. Seus
algoritmos são divididos em duas famílias: a Identificação direta, por contagem
de referência, e a Identificação indireta, por varrimento.
Alocação
A alocação de memória está dividida em duas partes:

Alocação Estática: Decisão tomada quando o programa é compilado.
Quando o programa é executado o Sistema operacional lê o mesmo e
cria um processo, sendo o programa uma noção estática e o processo o
programa em execução, ele é criado em armazenamento primário e após isso
recebe um espaço na memória. O espaço de memória é dividido em varias
partes, uma das partes se chama segmentos de memória, que armazena
dados estáticos, e outro se chama segmento de código que guarda instruções
do programa. Quando o programa é executado o registrador PC apontará para
determinado endereço do segmento de código do processo, que se chama
TEXT. Para que se realize a alocação estática o compilador deve saber o total
de memória que está livre, mandar esta informação para o SO para que este
crie um segmento de dados.

Alocação Dinâmica: Decisão é adiada até a execução.
(Permite Swapping)
Os objetos alocados dinamicamente podem ser criados e liberados a
qualquer momento, em qualquer ordem, o que difere dos objetos locais das
funções, que são criados e destruídos em uma ordem específica. Dado isto, é
preciso organizar a memória para objetos dinâmicos de uma forma que
possibilite o gerenciamento do tempo de vida dos objetos por parte do
programador. A memória reservada para objetos dinâmica costuma ser
chamada de heap, existem várias formas de organizar um heap.
Em linguagens sem gerenciamento automático(linguagem C), da
memória dinâmica, uma organização usual do heap é uma lista encadeada de
blocos livres, porém este tipo de organização pode ter problemas devido à
fragmentação dos blocos. Já em linguagens com gerenciamento automático de
memória dinâmica (Java), a organização do heap depende da parte do sistema
de tempo de execução encarregada deste gerenciamento. Este componente é
normalmente chamado de coletor de lixo.

Alocação Local:
Este processo de alocação é usado para variáveis que são locais a
funções e sub-rotinas. Isso significa que o processo em execução deve manter
acessível as variáveis locais da função ou procedimento que está executando
no momento. Além disso, pelas propriedades do escopo em blocos, também
devem estar acessíveis as variáveis de blocos mais externos.
Em linguagens que permitem a definição de funções aninhadas,
acessando as variáveis de quaisquer funções definidas externamente à função
atualmente em execução. Como uma função pode chamar outras funções, um
número arbitrário de funções pode estar no meio de sua execução em um
determinado momento, mesmo que apenas uma esteja realmente sendo
executada, isso indica que o contexto de várias funções deve ser mantido
enquanto as mesmas não concluíram sua execução.
Fragmentação
Desperdício de páginas de memória alocadas.
Pode ser de dois tipos: interna e externa.
Interna: Ocorre quando o processo não ocupa inteiramente os blocos de
memória (páginas) reservados para ele. Geralmente acontece pois o tamanho
do processo não é um múltiplo do tamanho da página de memória, o que
acarreta sobra de espaço na última página alocada.
Externa: Ocorre à medida que os programas vão terminando e deixando
lacunas cada vez menores de espaços entre as páginas. Dependendo do
tamanho que precisa ser escrito em memória, estes espaços podem ser
pequenos demais para serem úteis, e assim ficam inutilizados.
Estratégias para "atacar" o problema com o algoritmos First-fit, Best-fit,
Worst-fit e Next-fit
O problema da fragmentação pode ser contornado através de rotinas
que reorganizem todos os arquivos no disco de maneira que só exista um único
segmento de blocos livres. Este procedimento, denominado desfragmentação,
geralmente utiliza uma área de trabalho no próprio disco ou em fita magnética.
Existe um grande consumo de tempo neste tipo de operação. É importante
também ressaltar que a desfragmentação é um procedimento com efeito
temporário e deve, portanto, ser realizada periodicamente.
Paginação
No contexto dos sistemas operacionais, a paginação da memória do
computador é um processo de virtualização da memória que consiste na
subdivisão da memória física em pequenas partições (frames), para permitir
uma utilização mais eficiente da mesma.
A alocação de memória é requisitada por páginas, a menor unidade
deste método. Cada página é mapeada numa frame de memória através de um
processo que chama paginação. O sistema operacional pode estar em base do
espaço de endereçamento, em RAM, ou estar no topo do espaço de
endereçamento, em ROM, e o restante do sistema mais embaixo, em RAM. O
primeiro modelo foi inicialmente empregado em computadores de grande porte
e minicomputadores (mas não é muito usado).
O segundo modelo é utilizado em alguns computadores de mão e em
sistemas embarcados. O terceiro modelo fez parte dos primeiros computadores
pessoais, nos quais a parte do sistema contida em ROm é denominada BIOS.
Quando o sistema é organizado dessa maneira, somente um processo pode
ser executado a cada instante. Tão logo um usuário tecle um comando, o
sistema operacional carrega o programa solicitado do disco na memória e o
executa. Quando o processo finaliza, o SO coloca na tela um caractere de
prompt e espera por um novo comando. Ao receber um novo comando,
carregará o novo programa na memória, no espaço de endereçamento
ocupado pelo programa anterior.
Download