Pular para o conteúdo principal

É possível realizar muitas tarefas de programação no VOS e no OpenVOS sem conhecer os detalhes de como o sistema operacional gerencia o espaço de endereços do usuário. Mas é interessante conhecer esses detalhes e, às vezes, para realizar uma tarefa, é necessário ajustar a configuração padrão. Esta publicação é uma introdução ao espaço de endereços do usuário no VOS.

O espaço de endereços do usuário do VOS é dividido em 5 áreas, cada uma delas destinada a uma finalidade específica. Na ordem, do endereço mais baixo (@0x) ao endereço mais alto (@7FFFFFFFx), elas são: a área do módulo de programa, a área de memória virtual compartilhada alocada dinamicamente, a pilha do usuário, a pilha do usuário e uma pequena área reservada para uso pelo próprio sistema operacional. O diagrama a seguir mostra a ordem dessas áreas. Não está em escala. Este diagrama é específico para a implementação da Série V (VOS versão 15.0 e superior).

Espaço de endereços do usuário do OpenVOS
Módulo do programa
Memória virtual compartilhada
Heap do usuário
(zona morta)
Pilha do usuário
Dados do sistema

O tamanho da área do módulo do programa é fixo em 128 MB. O tamanho da área de dados do sistema é fixo em pouco menos de 2 MB. Os tamanhos das outras três áreas podem ser ajustados para atender às necessidades do programa em execução. O tamanho padrão da área de memória virtual compartilhada é de 896 MB. Assim, as duas primeiras áreas ocupam 1 gigabyte, ou metade do espaço de endereçamento.  O tamanho padrão da pilha do usuário varia um pouco de acordo com a versão do VOS ou do OpenVOS. Na versão 17.0, o tamanho padrão é de 64 MB. O tamanho padrão da pilha do usuário é de 8 MB. O espaço não utilizado entre a pilha e a pilha do usuário é chamado de zona morta.  Como a pilha cresce para cima (de endereços baixos para altos) e a pilha cresce para baixo (de altos para baixos), a zona morta pode ser reivindicada tanto pela pilha quanto pela pilha para expansão. A quantidade total de memória virtual disponível para a pilha, a pilha e os dados do sistema é de mais 1 gigabyte. No total, um processo de usuário tem acesso a 2 gigabytes de memória virtual.

A quantidade total de espaço da pilha que pode ser utilizada está sujeita a um limite administrativo. O mesmo se aplica ao espaço da pilha e à quantidade total de espaço (que é a soma do espaço do módulo do programa, do espaço da memória virtual compartilhada, do espaço da pilha e do espaço da pilha).  Os limites para todo o módulo são visualizados usando o comando list_default_cmd_limits e modificados usando o comando update_default_cmd_limits. Novos processos herdam esses valores para todo o módulo. Depois que o processo estiver em execução, seus limites podem ser visualizados usando o comando list_process_cmd_limits e modificados usando o comando update_process_cmd_limits.

Os valores-limite válidos para todo o processo são então utilizados para inicializar os limites aplicados sempre que um programa é executado. Uma vez que o programa esteja em execução, ele pode chamar as sub-rotinas s$get_current_cmd_limits e s$set_current_cmd_limits para recuperar ou modificar os limites durante o período de sua execução.  Dessa forma, um programa pode reservar mais espaço para sua pilha do que o valor padrão inicial do sistema, ou pode aumentar a quantidade de espaço na pilha que tem permissão para usar. Por outro lado, se houver preocupação com o uso excessivo de espaço, talvez devido a um erro de codificação, ele também pode diminuir a quantidade de espaço que pode usar.

Para obter mais informações, leia a descrição dos comandos `update_default_cmd_limits` e `bind`.

 

© 2024 Stratus Technologies.