Sistemas operativos modernos

Asignar entrada del hijo en la tabla de procesos Llenar entrada del hijo con la del padre Asignar pila y área de usuario del hijo Llenar área de usuario del hijo con la del padre Asignar PID al hijo Preparar hijo para compartir texto del padre Copiar tablas de páginas para datos y pila Prepararse para compartir archivos abiertos Copiar registros del padre en el hijo Encontrar el programa ejecutable Verificar ei permiso de ejecución Leer y verificar el encabezado Copiar argumentos y entorno en kemel Liberar el espacio de direcciones anterior Asignar nuevo espacio de direcciones Copiar argumentos y entorno en pila Restablecer señales Asignar valores iniciales a registros Figura 10-9. Pasos para ejecutar el comando Is tecleado en el shell. protección. El kernel se da cuenta y asigna una nueva copia de la página al hijo, marcándola como de lectura/escritura. Así, sólo se copian las páginas en las que se va a escribir. Este meca­ nismo se denomina copiar al escribir, y tiene la ventaja adicional de que no requiere dos co­ pias del programa en la memoria, con lo que se ahorra RAM. Luego que el proceso hijo inicia su ejecución, el código que se ejecuta ahí (una copia del shell) emite una llamada al sistema exec y da el nombre del comando como parámetro. Ahora el kernel encuentra y verifica el archivo ejecutable, copia las cadenas de argumentos y de entor­ no en el kemel y libera el espacio de direcciones anterior junto con sus tablas de páginas. Ahora debe crearse y llenarse el nuevo espacio de direcciones. Si el sistema maneja archivos con correspondencia en memoria, como hacen System V, BSD y la mayoría de los otros sistemas UNDC, las nuevas tablas de páginas se configuran para indicar que ninguna página está en la me­ moria, salvo tal vez una página de pila, pero que el espacio de direcciones está respaldado por el archivo ejecutable en disco. Cuando el nuevo programa comienza a ejecutarse, de inmediato cau­ sará un fallo de página, lo que hará que se pagine a la memoria la primera página de código del ar­ chivo ejecutable. Así, no se requiere cargar nada por adelantado, y los programas pueden iniciar rápido y causar fallos sólo por las páginas que necesiten, no más. Por último, las cadenas de argu­ mentos y de entorno se copian en la nueva pila, las señales se restablecen y los registros se llenan con ceros como valores iniciales. Ahora ya puede comenzar a ejecutarse el nuevo comando. Subprocesos en UNIX La implementación de los subprocesos depende de si se manejan en el kernel o no. Si no es así, como en 4BSD, la implementación es en una biblioteca de espacio de usuario en su totalidad.

RkJQdWJsaXNoZXIy MjI4NDcx