Ir al contenido principal

En VOS y OpenVOS se pueden realizar muchas tareas de programación sin conocer los detalles de cómo gestiona el sistema operativo el espacio de direcciones del usuario. Sin embargo, resulta interesante conocer esos detalles y, en ocasiones, para llevar a cabo una tarea es necesario ajustar la configuración predeterminada. Esta entrada es una introducción al espacio de direcciones del usuario en VOS.

El espacio de direcciones de usuario de VOS se divide en cinco áreas, cada una de las cuales se utiliza para un fin específico. En orden, desde la dirección más baja (@0x) hasta la más alta (@7FFFFFFFx), son: el área de módulos de programa, el área de memoria virtual compartida asignada dinámicamente, el montón de usuario, la pila de usuario y una pequeña área reservada para uso del propio sistema operativo. El siguiente diagrama muestra el orden de estas áreas. No está a escala. Este diagrama es específico de la implementación de la serie V (VOS versión 15.0 y superiores).

Espacio de direcciones de usuario de OpenVOS
Módulo del programa
Memoria virtual compartida
Memoria dinámica del usuario
(zona muerta)
Pila de usuario
Datos del sistema

El tamaño del área de módulos de programa es fijo y asciende a 128 MB. El tamaño del área de datos del sistema es fijo y es ligeramente inferior a 2 MB. Los tamaños de las otras tres áreas pueden ajustarse para satisfacer las necesidades del programa en ejecución. El tamaño predeterminado del área de memoria virtual compartida es de 896 MB. Por lo tanto, las dos primeras áreas ocupan 1 gigabyte, es decir, la mitad del espacio de direcciones.  El tamaño predeterminado del montón de usuario varía ligeramente según la versión de VOS u OpenVOS. En la versión 17.0, el tamaño predeterminado es de 64 MB. El tamaño predeterminado de la pila de usuario es de 8 MB. El espacio no utilizado entre el montón y la pila se denomina zona muerta.  Dado que el montón crece hacia arriba (de direcciones bajas a altas) y la pila crece hacia abajo (de altas a bajas), la zona muerta puede ser reclamada por el montón o por la pila para su expansión. La cantidad total de memoria virtual disponible para el montón, la pila y los datos del sistema es de otro gigabyte. En total, un proceso de usuario tiene acceso a 2 gigabytes de memoria virtual.

La cantidad total de espacio de pila que se puede utilizar está sujeta a un límite administrativo. Lo mismo ocurre con el espacio de pila y con la cantidad total de espacio (que es la suma del espacio del módulo del programa, el espacio de memoria virtual compartida, el espacio de pila y el espacio de pila).  Los límites a nivel de módulo se pueden consultar mediante el comando list_default_cmd_limits y modificar mediante el comando update_default_cmd_limits. Los nuevos procesos heredan estos valores a nivel de módulo. Una vez que el proceso está en marcha, sus límites se pueden consultar mediante el comando list_process_cmd_limits y modificar mediante el comando update_process_cmd_limits.

Los valores límite para todo el proceso se utilizan entonces para inicializar los límites que se aplican cada vez que se ejecuta un programa. Una vez que el programa está en marcha, puede llamar a las subrutinas s$get_current_cmd_limits y s$set_current_cmd_limits para recuperar o modificar los límites durante el tiempo que dure su ejecución.  De esta forma, un programa puede reservar más espacio para su pila que el valor predeterminado inicial del sistema, o puede aumentar la cantidad de espacio de montón que se le permite utilizar. Por el contrario, si le preocupa utilizar demasiado espacio, tal vez debido a un error de codificación, también puede reducir la cantidad de espacio que puede utilizar.

Para obtener más información, consulta la descripción de los comandos `update_default_cmd_limits` y `bind`.