¿Cuál es la diferencia entre procesos y subprocesos en Windows y los de Linux?
Para Windows, los conceptos de proceso y subproceso están claramente definidos. El concepto de proceso corresponde a la instancia en ejecución de un programa, y el subproceso es la unidad más pequeña de ejecución de código de programa. CreateThread() se utiliza para crear un nuevo hilo, pasar la dirección de entrada y los parámetros de llamada de la función del hilo al hilo recién creado y luego el nuevo hilo comienza a ejecutarse.
En Windows, un hilo típico tiene su propia pila y registros (incluido el contador de programas de la PC, utilizado para señalar la ubicación en la memoria de la siguiente instrucción que debe ejecutarse) y el segmento de código, datos. segmento, los recursos abiertos a nivel de proceso, como los archivos, son compartidos por varios subprocesos en el mismo proceso. Por lo tanto, diferentes subprocesos del mismo proceso pueden comunicarse fácilmente a través de variables globales (segmentos de datos), y todos pueden leer y escribir los segmentos de datos. Esto es muy conveniente y también ha sido criticado en términos de seguridad, porque requiere que los programadores lo sean. consciente en todo momento. Estos datos no son independientes del hilo.
Para Linux, no existe un concepto claro de proceso e hilo. En primer lugar, Linux sólo tiene procesos y no tiene subprocesos, pero sus procesos pueden comportarse como subprocesos en Windows. Linux utiliza las familias de funciones fork() y exec para operar múltiples procesos. La función fork() se puede llamar en cualquier etapa de la ejecución del proceso. Una vez llamada, el proceso actual se bifurca en dos procesos: el proceso padre y el proceso hijo. Ambos tienen el mismo segmento de código y el mismo segmento de datos (aunque temporalmente). Lo mismo, pero hay dos segmentos de datos lógicos desde el momento en que se bifurcan. La razón por la que es lógico es porque se trata de un mecanismo de "copia en escritura", es decir, a menos que no haya absolutamente ninguna necesidad de realizar un proceso. operaciones en los segmentos de datos, de lo contrario el sistema no copiará el segmento de datos, logrando así la carga mínima). La diferencia entre los dos es que la función fork () devuelve el valor para el proceso hijo. , y para el proceso padre, devuelve la identificación del proceso hijo, por lo que puede usar if(fork()==0)...else... para permitir que los procesos padre e hijo ejecuten diferentes segmentos de código para lograr la "bifurcación". ".
Los procesos en Linux no pueden comunicarse tan fácilmente como los subprocesos en Windows porque no tienen segmentos de datos compartidos, espacios de direcciones, etc. La comunicación entre ellos se realiza a través de la denominada IPC (InterProcess Communication). Específicamente, hay canalizaciones (las canalizaciones sin nombre se utilizan para la comunicación entre procesos padre e hijo, las canalizaciones con nombre se pueden utilizar para la comunicación entre dos procesos cualesquiera), memoria compartida (un proceso se aplica al sistema para una parte de la memoria que se puede compartir, y otros procesos Obtenga esta memoria a través del identificador y conéctela a su propio espacio de direcciones. El efecto es similar al segmento de datos compartido entre subprocesos múltiples en Windows), semáforos y sockets.