segunda-feira, 13 de julho de 2009

Tratamento de Áreas de Memória Fixas

Existem páginas na memória que não podem ser desalocadas no processo de swap, sendo portanto áreas de memória fixas.
Isso é uma característica importante em programas de tempo-real, uma vez que ocasionais faltas de página podem denegrir a performance devido ao processo de recuperação de página que inclui a busca dos dados da página, a busca por um página vagável na memória física e a ocupação da página.
A interface para utilizar este mecanismo é o mlock() e munlock() que serão brevemente descritos abaixo (também existem os mlockall()/munlockall() e memcntl()).
É bom saber que a região da memória a ser fixada é quantizada em páginas, e por isso a os endereços de memória que serão fixados devem se referir a extremos de páginas. Além disso, há dois fatores que devem ser levados em consideração antes de se projetar a utilização de áreas de memória fixas: o processo deve ter os privilégios necessários para utilizar este artifício e a quantidade da área de memória fixada não pode extrapolar certos limites, pois o SO reserva uma área de memória que não pode ser fixada.
As funções mlock e munlock estão na biblioteca sys/mman.h e recebem os mesmos parâmetros:
1) Endereço: Endereço de início da área memória que deve ser fixada.
2) Comprimento: Tamanho da área de memória que será fixada.

É interessante citar que as funções que terminam com all fazem o tratamento de todo o espaço de endereço do processo.

Referências
http://blogs.sun.com/thejel/entry/locking_memory
http://linux.die.net/man/2/mlock

Nenhum comentário:

Postar um comentário