Red de conocimiento de recetas - Recetas de frutas - ¿Qué es una bifurcación, qué hace y para qué sirve?

¿Qué es una bifurcación, qué hace y para qué sirve?

La llamada al sistema que crea un nuevo proceso en Linux es la función fork. El nombre de esta función significa "fork" en inglés. ¿Por qué este nombre? Porque cuando se ejecuta un proceso, si se usa una bifurcación, se generará otro proceso y el proceso se "bifurcará", por lo que el nombre es muy vívido. Echemos un vistazo a cómo usar fork específicamente. Este programa demuestra el marco básico del uso de fork: void main(){ int I; if (fork() == 0) { /* programa de subproceso */ for ( I = 1). ; I <1000; I ++ ) printf("Este es el proceso hijo\n"); else { /* programa de proceso padre*/ for (I = 1; I <1000; I ++ ) printf("Esto es proceso proceso\n"); } } Después de ejecutar el programa, puede ver mil mensajes impresos por el proceso hijo y el proceso padre que aparecen alternativamente en la pantalla. Si el programa aún se está ejecutando, puede usar el comando ps para ver que hay dos ejecutándose en el sistema. Entonces, ¿qué sucede cuando se llama a esta función fork? Tan pronto como un programa llama a la función fork, el sistema prepara los tres segmentos anteriores para un nuevo proceso. Primero, el sistema permite que el nuevo proceso use el mismo segmento de código que el proceso anterior, porque sus programas siguen siendo los mismos. el segmento de datos y el sistema copia el segmento de la pila al nuevo proceso. De esta manera, todos los datos del proceso padre se pueden dejar al proceso hijo, aunque hereda todos los datos de. En el proceso principal, los datos en realidad no se han separado y ya no se afectan entre sí, es decir, ya no comparten ningún dato. Y si dos procesos quieren compartir algún dato, deben usar otro conjunto de funciones (shmget, shmat, shmdt, etc.) para operar. Ahora, hay dos procesos. Para el proceso principal, la función de bifurcación devuelve el número de proceso del subprograma, y ​​para el subprograma, la función de bifurcación devuelve cero, siempre que juzgue el valor de retorno. de la función fork, usted mismo sabrá si está en el proceso padre o en el proceso hijo. Los lectores pueden preguntar: si se está ejecutando un programa grande, su segmento de datos y su pila son muy grandes y cada bifurcación debe copiarse, entonces, ¿no es muy alta la sobrecarga del sistema de la bifurcación? De hecho, UNIX tiene su propia solución. Como todos sabemos, generalmente las CPU asignan espacio en unidades de "páginas". Al igual que las CPU INTEL, una página suele tener un tamaño de 4K bytes, ya sea un segmento de datos o un segmento de pila. La función de bifurcación está compuesta por muchas "páginas" y copia estos dos segmentos solo "lógicamente", no "físicamente". Es decir, cuando la bifurcación realmente se ejecuta, el espacio físico de los dos procesos es Tanto el segmento de datos como la pila. Los segmentos todavía se comparten. Cuando un proceso escribe ciertos datos, los datos entre los dos procesos serán diferentes y el sistema eliminará las diferentes "páginas" del físico. La parte superior también está separada. Se puede minimizar el espacio adicional del sistema.