Gestão de memória é um complexo campo da ciência da computação e são constantemente desenvolvidas várias técnicas para torná-la mais eficiente. A sua forma mais simples, está relacionado em duas tarefas essenciais:
- Alocação: Quando o programa requisita um bloco de memória, o gestor disponibiliza o bloco para a alocação;
- Reciclagem: Quando um bloco de memória foi alocado, mas os dados não foram requisitados por um determinado número de ciclos ou não há nenhum tipo de referência a este bloco pelo programa, esse bloco é liberado e pode ser reutilizado para outra requisição.
A alocação de memória está dividida em três partes:
- Alocação Estática: Decisão tomada quando o programa é compilado. Quando o programa é executado o Sistema Operativo lê e cria um processo, sendo o programa uma noção estática e o processo programa-o em execução, que é criado em armazenamento primário e após isso recebe um espaço na memória. O espaço de memória é dividido em várias partes, uma das partes chama-se segmentos de memória, que armazena dados estáticos, e outro chama-se segmento de código que guarda instruções do programa. Quando o programa é executado o registador PC apontará para um 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 objectos alocados dinamicamente podem ser criados e liberados a qualquer momento, em qualquer ordem, o que defere dos objectos locais das funções, que são criados e destruídos em uma ordem específica. Dado isto, é preciso organizar a memória para objectos dinâmicos de uma forma que possibilite a gestão do tempo de vida dos objectos por parte do programador. A memória reservada para objectos dinâmica costuma ser chamada de heap, existem várias formas de organizar um heap. Em linguagens sem gestão automática (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 gestão automática de memória dinâmica (Java), a organização do heap depende da parte do sistema de tempo de execução encarregada desta gestão. Este componente é normalmente chamado de colector 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íveis 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, acedendo as variáveis de quaisquer funções definidas externamente à função actualmente 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.
DMA
- DMA é abreviação de "Direct Memory Access". O DMA permite que os periféricos acedam directamente a memória RAM, sem ocupar o processador. Os canais de DMA são utilizados apenas para transferir dados directamente para a memória RAM, reduzindo dessa forma a utilização do processador.
Bus Mastering
- O BUS Mastering é um recurso suportado por algumas arquitecturas de barramento, que permite que o controlador de discos instalada comunique-se directamente com os dispositivos, sem ocupar o processador. Um HD com os Drivers de BUS Mastering seria capaz de aceder directamente a memória, sem ter que recorrer ao processador, o que além de melhorar o desempenho, não consumiria a CPU, que ficaria livre para fazer outras tarefas. HDs UDMA utilizam o Ultra DMA, enquanto HDs Pio Mode 4 utilizam o Multiword DMA 2. Em ambos os casos, deverá ser necessario instalar os drivers de BUS Mastering que acompanham a Motherboard, a fim de activar este recurso. Os Windows 98/ME/2000 já possuem drivers de BUS Mastering para a grande maioria das placas mãe, dispensando a instalação dos drivers do fabricante na maioria dos casos.
Sem comentários:
Enviar um comentário