Pular para o conteúdo principal

Você pode realizar muitas tarefas de programação em VOS e OpenVOS sem conhecer os detalhes de como o sistema operacional gerencia o espaço de endereços do usuário. Mas é divertido conhecer os detalhes, e às vezes para realizar uma tarefa você precisa ajustar a configuração padrão. Este post é uma introdução ao espaço de endereçamento do usuário do VOS.

O espaço de endereço do usuário do VOS é dividido em 5 áreas, cada uma delas utilizada para um propósito específico. Em ordem, do endereço mais baixo (@0x) ao endereço mais alto (@7FFFFFFFx) eles são a área do módulo do programa, a área de memória virtual compartilhada dinamicamente alocada, a pilha de usuários, a pilha de usuários e uma pequena área reservada para uso pelo próprio sistema operacional. O diagrama a seguir mostra a ordem dessas áreas. Não é para escalar. Este diagrama é específico para a implementação da Série V (VOS Release 15.0 e superior).

Espaço de endereços de usuário do OpenVOS
Módulo do Programa
Memória Virtual Compartilhada
Escombreira de usuários
(zona morta)
Pilha do usuário
Dados do sistema

O tamanho da área do módulo do programa é fixado em 128 MB. O tamanho da área de dados do sistema é fixado em pouco menos de 2 MB. Os tamanhos das outras 3 áreas podem ser ajustados para satisfazer as 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ços. O tamanho padrão da pilha de usuários varia um pouco conforme a versão do VOS ou OpenVOS. Na versão 17.0, o tamanho padrão é de 64MB. O tamanho padrão da pilha de usuários é de 8MB. O espaço não utilizado entre a pilha e a pilha é chamado de zona morta. Como a pilha cresce para cima (endereços baixos para endereços altos) e a pilha cresce para baixo (alto para baixo), a zona morta pode ser reclamada pela pilha ou pela pilha para expansão. A quantidade total de memória virtual disponível para a pilha, a pilha e os dados do sistema é mais 1 gigabyte. No total, um processo do usuário tem acesso a 2 gigabytes de memória virtual.

A quantidade total de espaço de pilha que pode ser utilizada está sujeita a um limite administrativo. O mesmo vale para o espaço de pilha, e para a quantidade total de espaço (que é a soma do espaço do módulo de programa, espaço de memória virtual compartilhada, espaço de pilha, e espaço de pilha). Os limites de 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 estes valores em todo o módulo. Após o processo estar em funcionamento, seus limites podem ser visualizados usando o comando list_process_cmd_limits e modificados usando o comando update_process_cmd_limits.

Os valores-limite do processo são então usados para inicializar os limites usados cada vez que um programa é executado. Uma vez que um programa esteja em funcionamento, ele pode chamar as subrotinas s$get_current_cmd_limits e s$set_current_cmd_limits para recuperar ou modificar os limites para a duração de sua execução. Desta 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 de pilha que é permitido utilizar. Por outro lado, se estiver preocupado em usar muito espaço, talvez devido a um erro de codificação, também pode diminuir a quantidade de espaço que pode usar.

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

 

© 2024 Stratus Technologies.