Sistemas operativos modernos
demás subprocesos del proceso. Por otra parte, si no se comparte el espacio de direcciones, el nuevo subproceso recibirá una copia exacta de dicho espacio, pero las siguientes escrituras efec tuadas por ei nuevo subproceso no serán visibles para los subprocesos anteriores. Esta semánti ca es la misma de fork. En ambos casos, el nuevo subproceso comienza a ejecutar/m/zcíó«, que se invoca con arg como único parámetro. También en ambos casos, el nuevo subproceso obtiene su propio sub proceso privado, y se asigna al apuntador de pila el valor inicial apunt_pila. El parámetro indicadores_compart es un mapa de bits que permite un compartimiento mu cho más granular que en los sistemas UNIX tradicionales. Se definen cinco bits, como se mues tra en la figura 10-10. Cada bit controla un aspecto del compartimiento, y cada uno se puede encender o apagar con independencia de los demás. El bit CLONE__VM determina si la memoria virtual (es decir, el espacio de direcciones) se compartirá con los subprocesos anteriores o se co piará. Si el bit está encendido, el nuevo subproceso tan sólo se une a los anteriores, y la llamada clone crea, en efecto, un nuevo subproceso en un proceso existente. Si el bit está apagado, el nue vo subproceso obtendrá su propio espacio de direcciones. Tener un espacio de direcciones propio implica que los efectos de sus instrucciones STORE no serán visibles para los subprocesos exis tentes. Este comportamiento es similar al de fork, con las salvedades que se señalan más adelan te. La creación de un nuevo espacio de direcciones equivale a definir un nuevo proceso. Indicador Significado cuando está encendido Significado cuando está apagado CLONE_VM Crear nuevo subproceso Crear nuevo proceso CLONE_FS Compartir umask, raíz y dir trabajo No compartirlos CLONE_FILES Compartir los descriptores de archivo Copiar los descriptores de archivo CLONE_SIGHAND Compartir tabla manej. señales Copiar la tabla CLONE_PID Subproceso nuevo recibe PID antiguo Subproceso nuevo con PID propio Figura 10-10. Bits del mapa de bits indicadores_compart. El bit CLONEJFS controla el compartimiento de los directorios raíz y de trabajo, y del indi cador umask. Incluso si el nuevo subproceso fiene su propio espacio de direcciones, si este bit está encendido, el subproceso anfiguo y el nuevo compartirán el mismo directorio de trabajo. Esto implica que una llamada a chdir efectuada por un subproceso siempre cambia el directo rio de trabajo de los demás subprocesos de su proceso, pero nunca el de los subprocesos de otro proceso. Así, este bit permite una forma de compartir que no es posible en UNIX. El bit CLONE_FILES es análogo al bit CLONE_FS. Si está encendido, el nuevo subpro ceso comparte sus descriptores de archivo con los viejos, de modo que las llamadas a Iseek efectuadas por un subproceso serán visibles para los demás, como es el caso, comúnmente, con los subprocesos de un mismo proceso pero no con los de procesos distintos. Asimismo, CLO- NE_SIGHAND habilita o inhabilita el compartimiento de la tabla de manejadores de señales entre los subprocesos anteriores y el nuevo. Si la tabla se comparte, incluso entre subprocesos que están en espacios de direcciones disfintos, cambiar el manejador en un subproceso afecta rá los manejadores en los otros. Por último, CLONE_PID controla que el nuevo subproceso ob-
RkJQdWJsaXNoZXIy MjI4NDcx