Dados gerais

Interface: MemManager
Arquivos: memmanager.h
Última atualização: 01/06/2003
Autor: Luiz Henrique Shigunov
Informações

Descrição
Estruturas
Funções para o sistema

0x00 - Alloc - Aloca memória para os módulos do sistema
0x01 - AllocObj - Aloca objetos para os módulos do sistema
0x06 - AllocUserPages - Aloca páginas na área de memória do usuário
0x07 - AttachShMemory - Anexa uma memória compartilhada
0x02 - CreateObjCache - Cria um cache de determinados objetos
0x08 - CreateShMemory - Cria uma memória compartilhada
0x03 - DestroyObjCache - Destrói um cache de determinados objetos
0x09 - DestroyShMemory - Destrói uma memória compartilhada

0x0a - DetachShMemory - Desanexa uma memória compartilhada
0x04 - Free - Libera memória alocada para os módulos do sistema
0x05 - FreeObj - Libera objetos alocada para os módulos do sistema
0x0b - FreeUserPages - Libera páginas na área de memória do usuário
0x0c - MapPageAtUserPage - Mapeia uma página física na área de memória do usuário
0x0d - ProtectShMemory - Muda as permissões de acesso de uma memória compartilhada
0x0e - SetUserPagesProt - Muda as permissões de acesso de páginas na área de memória do usuário
Funções para o usuário

0x0f - UAllocUserPages - Aloca páginas na área de memória do usuário
0x10 - UFreeUserPages - Libera páginas na área de memória do usuário

0x11 - USetUserPagesProt - Muda as permissões de acesso de páginas na área de memória do usuário

Descrição

Esta página descreve a interface MemManager, que disponibiliza serviços comuns à todas as arquiteturas.

O módulo que implementar esta interface deve gerar os eventos definidos na interface MemMEvent.

Estruturas

typedef struct {
    int (*readpage)(void *arg, void *page, unsigned int offset);
} MemManager_ShMemFunctions;

A função readpage, se for diferente de NULL, é chamada quando uma página de memória tiver que ser lida. page é o endereço da página que deve ser lida e offset o deslocamento dessa página dentro da memória compartilhada. Ela deve retorna 0 em caso de sucesso e outro valor para erro. Em caso de erro a exceção de memória será gerada.

Funções para o sistema

Estas funções são de uso exclusivo dos módulos do sistema.

0x00 - Alloc

Sintaxe

void *MemManager_Alloc(unsigned int size, int prop);

Propriedades

Descrição

Esta função aloca size bytes de memória com as propriedades prop.

size tem que ser diferente de 0.

prop deve ser 0 ou a soma de:

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x01 - AllocObj

Sintaxe

void *MemManager_AllocObj(MemManager_Cache *cache);

Propriedades

Descrição

Esta função aloca um objeto do cache cache.

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x06 - AllocUserPages

Sintaxe

void *MemManager_AllocUserPages(void *start, unsigned int size, unsigned int align, int prop, TaskManager_Task *task);

Propriedades

Descrição

Esta função aloca size bytes, que deve ser diferente de zero, de memória na área de memória do usuário para a tarefa task. O endereço start é apenas uma dica de onde alocar e, normalmente, é NULL. Se start for fornecido como dica, a busca por um lugar começa em start e vai para endereços mais baixos.

As páginas de memória alocadas são liberadas quando a tarefa é destruida.

start, size e align devem ser múltiplos de uma página de memória (4096 bytes).

Se task for NULL, será alocado na tarefa chamadora.

Se prop não tiver MemManager_FIXED_ADDR, as páginas serão alocadas num endereço alinhado em align. Se align for 0, será alinhado em uma página de memória.

Se prop não tiver MemManager_FAIL_MAPPED, qualquer mapeamento que existir na área a ser alocada será desmapeado.

prop deve ser a soma de:

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x07 - AttachShMemory

Sintaxe

void *MemManager_AttachShMemory(MemManager_ShMem *shmem, void *start, unsigned int offset, unsigned int size, int prop, TaskManager_Task *task);

Propriedades

Descrição

Esta função anexa a memória compartilhada shmem no endereço start da tarefa task. O endereço start é apenas uma dica de onde anexar e, normalmente, é NULL. Se start for fornecido como dica, a busca por um lugar começa em start e vai para endereços mais baixos.

Se task for NULL, será anexado na tarefa chamadora.

size bytes, que deve ser diferente de zero, começando do deslocamento offset bytes dentro da memória compartilhada serão anexados.

start, size e offset devem ser múltiplos de uma página de memória (4096 bytes).

Se prop não tiver MemManager_FAIL_MAPPED, qualquer mapeamento que existir na área onde a anexação vai ocorrer será desmapeado.

prop deve ser a soma de:

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x02 - CreateObjCache

Sintaxe

MemManager_Cache *MemManager_CreateObjCache(unsigned int size, unsigned int align, int prop, void (*ctor)(void *obj, unsigned int size), void (*dtor)(void *obj, unsigned int size));

Propriedades

Descrição

Esta função cria um cache de objetos. Um objeto é uma porção de memória que mantém o seu estado inicial entre chamadas às funções FreeObj e AllocObj. Ou seja, AllocObj obtém um objeto no estado inicial e FreeObj retorna para o cache um objeto também no estado inicial.

Com esse mecanismo, não precisamos iniciar um objeto sempre que a função AllocObj for chamada.

size, que deve ser diferente de 0, é o tamanho de cada objeto no cache, align o alinhamento, na forma de potência de 2 (1=2 bytes, 2=4 bytes, 3=8 bytes, ...), necessário para cada objeto (0 para ser o melhor para a máquina).

ctor e dtor, que podem ser NULL, são as funções que criam e destroem os objetos do cache respectivamente. Elas recebem o objeto obj a ser iniciado ou destruido e também o tamanho do objeto em size. Estas funções não podem alocar objetos do mesmo tipo que estão iniciando ou destruindo para evitar um laço infinito.

prop deve ser 0 ou a soma de:

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x08 - CreateShMemory

Sintaxe

MemManager_ShMem *MemManager_CreateShMemory(unsigned int size, int prop, const MemManager_ShMemFunctions *functions, void *arg);

Propriedades

Descrição

Esta função cria uma memória compartilhada na área de memória do usuário com size bytes. size deve ser diferente de zero e múltiplo do tamanho da página do sistema (4096 bytes).

Numa memória compartilhada, as páginas de memória alocadas somente são liberadas quando a memória compartilhada é destruida, ou seja, a memória compartilhada pode continuar existindo mesmo que nenhuma tarefa esteja anexada.

functions é um vetor de funções que são chamadas em determinadas ocasiões e arg é um parâmetro que é passado para essas funções. functions não pode ser NULL e tem que existir enquanto a memória compartilhada não for destruida.

prop deve ser 0 ou a soma de:

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x03 - DestroyObjCache

Sintaxe

int MemManager_DestroyObjCache(MemManager_Cache *cache);

Propriedades

Descrição

Esta função destrói o cache de objetos cache, que deve ser diferente de NULL.

Todos os objetos do cache devem ter sido liberados pela função FreeObj.

Valor de retorno

0x09 - DestroyShMemory

Sintaxe

int MemManager_DestroyShMemory(MemManager_ShMem *shmem);

Propriedades

Descrição

Esta função destrói a memória compartilhada shmem, que deve ser diferente de NULL.

Todas as páginas de memória alocadas serão liberadas.

Nenhuma tarefa pode estar com shmem anexada.

Valor de retorno

0x0a - DetachShMemory

Sintaxe

int MemManager_DetachShMemory(MemManager_ShMem *shmem, void *start, unsigned int size, int prop, TaskManager_Task *task);

Propriedades

Descrição

Esta função desanexa a memória compartilhada shmem começando do endereço start e tamanho size bytes, que deve ser diferente de zero, da tarefa task.

start e size devem ser múltiplos de uma página de memória (4096 bytes).

Se task for NULL será desanexada da tarefa chamadora.

prop deve ser 0 ou a soma de:

Valor de retorno

0x04 - Free

Sintaxe

int MemManager_Free(void *ptr);

Propriedades

Descrição

Esta função libera a memória ptr.

Valor de retorno

0x05 - FreeObj

Sintaxe

int MemManager_FreeObj(MemManager_Cache *cache, void *obj);

Propriedades

Descrição

Esta função libera o objeto obj, que deve ser diferente de NULL, do cache cache.

O objeto deve estar no seu estado inicial, ou seja, no estado logo após ser construido.

Valor de retorno

0x0b - FreeUserPages

Sintaxe

int MemManager_FreeUserPages(void *start, unsigned int size, int prop, TaskManager_Task *task);

Propriedades

Descrição

Esta função libera size bytes, que deve ser diferente de zero, de páginas de memória começando em start da tarefa task.

start e size devem ser múltiplos de uma página de memória (4096 bytes).

Se task for NULL, será usado a tarefa que chamou a função.

prop deve ser 0 ou a soma de:

Valor de retorno

0x0c - MapPageAtUserPage

Sintaxe

int MemManager_MapPageAtUserPage(void *logPage, unsigned int physPage, TaskManager_Task *task);

Propriedades

Descrição

Esta função mapeia a página física physPage no endereço logPage da tarefa task.

physPage deve ser o endereço da página física (0x0, 0x1000, 0x2000, 0x24000, etc).

logPage deve estar dentro de uma área alocada com AllocUserPages e não pode estar mapeada numa página física.

Se task for NULL será usada a tarefa chamadora.

Valor de retorno

0x0d - ProtectShMemory

Sintaxe

int MemManager_ProtectShMemory(MemManager_ShMem *shmem, const void *start, unsigned int size, int prop, TaskManager_Task *task);

Propriedades

Descrição

Esta função muda as permissões de acesso das páginas de memória anexadas da memória compartilhada shmem começando do endereço start com tamanho size bytes, que deve ser diferente de zero, da tarefa task.

Se task for NULL será usada a tarefa chamadora.

prop deve ser a soma de:

Valor de retorno

0x0e - SetUserPagesProt

Sintaxe

int MemManager_SetUserPagesProt(const void *start, unsigned int size, int prop, TaskManager_Task *task);

Propriedades

Descrição

Esta função muda as permissões de acesso das páginas de memória começando do endereço start com tamanho size bytes, que deve ser diferente de zero, da tarefa task.

start e size devem ser múltiplos de uma página de memória (4096 bytes).

Se task for NULL será usada a tarefa chamadora.

prop deve ser a soma de:

Valor de retorno

Funções para o usuário

Estas funções foram projetadas para os módulos do usuário.

0x0f - UAllocUserPages

Sintaxe

void *MemManager_UAllocUserPages(void *start, unsigned int size, unsigned int align, int prop);

Propriedades

Do usuário

Descrição

Esta função aloca size bytes, que deve ser diferente de zero, começando em start para a tarefa.

Se prop não tiver MemManager_FIXED_ADDR, um endereço alinhado em align será escolhido.

start, size e align devem ser múltiplos do tamanho da página do sistema (4096 bytes).

Se align for 0, será alinhado em uma página.

prop deve ser a soma de:

Valor de retorno

Utilize as macros IS_PTR_ERROR e PTR_TO_ERROR para saber se ocorreu erro e para obter o erro respectivamente.

0x10 - UFreeUserPages

Sintaxe

int MemManager_UFreeUserPages(void *start, unsigned int size);

Propriedades

Do usuário

Descrição

Esta função libera size bytes, que deve ser diferente de zero, de start em diante.

Essa área deve ter sido alocada com UAllocUserPages.

start e size devem ser múltiplos do tamanho da página do sistema (4096 bytes).

Valor de retorno

0x11 - USetUserPagesProt

Sintaxe

int MemManager_USetUserPagesProt(const void *start, unsigned int size, int prop);

Propriedades

Do usuário

Descrição

Esta função muda as permissões de acesso das páginas de memória de start até start+size bytes - 1, inclusive.

start e size devem ser múltiplos de uma página de memória (4096 bytes).

size deve ser diferente de zero.

prop deve ser a soma de:

Valor de retorno