process – ¿Por qué necesitamos bifurcar para crear nuevos procesos?

Pregunta:

En Unix siempre que queremos crear un nuevo proceso, bifurcamos el proceso actual, creando un nuevo proceso hijo que es exactamente igual que el proceso padre; luego hacemos una llamada al sistema ejecutivo para reemplazar todos los datos del proceso padre con los del nuevo proceso.

¿Por qué creamos una copia del proceso principal en primer lugar y no creamos un nuevo proceso directamente?

Respuesta:

La respuesta corta es que la fork está en Unix porque era fácil de encajar en el sistema existente en ese momento y porque un sistema predecesor en Berkeley había utilizado el concepto de bifurcaciones.

De La evolución del sistema de tiempo compartido Unix (se ha resaltado el texto relevante):

El control de procesos en su forma moderna se diseñó e implementó en un par de días. Es asombroso la facilidad con que encajó en el sistema existente; al mismo tiempo, es fácil ver cómo algunas de las características ligeramente inusuales del diseño están presentes precisamente porque representaban cambios pequeños y fáciles de codificar en lo que existía . Un buen ejemplo es la separación de las funciones fork y exec. El modelo más común para la creación de nuevos procesos implica especificar un programa para que el proceso lo ejecute; en Unix, un proceso bifurcado continúa ejecutando el mismo programa que su padre hasta que realiza un exec explícito. La separación de las funciones ciertamente no es exclusiva de Unix y, de hecho, estaba presente en el sistema de tiempo compartido de Berkeley, que era bien conocido por Thompson . Aún así, parece razonable suponer que existe en Unix principalmente debido a la facilidad con la que se podría implementar la bifurcación sin cambiar mucho más . El sistema ya maneja múltiples (es decir, dos) procesos; había una tabla de procesos y los procesos se intercambiaban entre la memoria principal y el disco. La implementación inicial de la bifurcación solo requiere

1) Ampliación de la mesa de procesos

2) Adición de una llamada de bifurcación que copió el proceso actual en el área de intercambio de disco, utilizando las primitivas de E / S de intercambio ya existentes, e hizo algunos ajustes en la tabla de procesos.

De hecho, la llamada de bifurcación del PDP-7 requería exactamente 27 líneas de código de ensamblaje. Por supuesto, se requirieron otros cambios en el sistema operativo y los programas de usuario, y algunos de ellos fueron bastante interesantes e inesperados. Pero un fork-exec combinado habría sido considerablemente más complicado , aunque sólo fuera porque el exec como tal no existía; su función ya fue realizada, usando E / S explícita, por el shell.

Desde ese artículo, Unix ha evolucionado. fork seguido de exec ya no es la única forma de ejecutar un programa.

  • vfork se creó para ser una bifurcación más eficiente para el caso en el que el nuevo proceso intenta realizar un ejecutivo justo después de la bifurcación. Después de hacer un vfork, los procesos padre e hijo comparten el mismo espacio de datos, y el proceso padre se suspende hasta que el proceso hijo ejecuta un programa o sale.

  • posix_spawn crea un nuevo proceso y ejecuta un archivo en una sola llamada al sistema. Se necesitan varios parámetros que le permiten compartir selectivamente los archivos abiertos de la persona que llama y copiar su disposición de señal y otros atributos al nuevo proceso.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım