É 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).
| 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`.
