Por qué los procesos secundarios de Unix heredan [la mayoría] de los atributos del proceso principal

Por qué los procesos secundarios de Unix heredan [la mayoría] de los atributos del proceso principal

Aprendí cómo funcionan los procesos de Unix y noté queprocesos secundarioshereda la mayoría de los atributos (incluidos los descriptores de archivos) del proceso principal. También acabo de enterarme deejecutivoy cómo reemplaza los atributos del proceso hijo por otros completamente nuevos (nuevo espacio de memoria, etc.), pero mantiene la ID del proceso original.

Entonces sé sobreentornos sandbox en Node.js, en el que le proporciona una pizarra esencialmente vacía y agrega variables y "características" al contexto del proceso hijo.

Lo que me pregunto es cuáles son los diferentes tipos de configuraciones que existen para los atributos que recibe un proceso secundario y por qué el proceso secundario en Unix "por defecto" hereda todos los atributos principales. Preguntándose por qué no tendría su propio espacio de memoria y todo eso.

También me pregunto si existen "configuraciones de atributos de procesos secundarios" alternativas para estos 2 casos (heredar todos los atributos principales o no heredar ninguno). Tal vez quiera heredar la mitad del espacio de direcciones principal, o usar algo de espacio de direcciones de un proceso hermano, o usar algunos descriptores de archivos del padre, así como algunos propios, etc. Tal vez usted diga que puede acceder a algunos controladores de dispositivos y otros no, etc.

Me interesaría saber si hay alguna manera de pasar tales "funciones de configuración" al crear un proceso secundario, ya sea en Unix o en cualquier otro sistema operativo. Por ejemplo, "cree un proceso hijo, utilizando la mitad del espacio de direcciones principal, 1/4 del espacio de direcciones del hermano 2, 1/8 del espacio de direcciones del hermano 1 y el 1/8 restante use mi propio espacio de direcciones local. Además, proporcione acceso a los controladores de dispositivos a, b y c, y de otro modo no permitirán el acceso a la red". Algo arbitrario, donde básicamente se trata de configurar el "conjunto de características" del proceso hijo con un nivel de detalle fino.

Me pregunto si ocurre algo parecido en Unix u otros sistemas operativos, y si no, por qué no. No entiendo por qué se tomó la decisión de tener solo estos 2 casos de procesos de autorización/regulación.

Parece que esto de alguna manera se superpone con elanillo de protecciónconcepto. Impide que los procesos del área de usuario (procesos secundarios) accedan a determinadas funciones. Me pregunto por qué no es más configurable que esto, en un alto nivel.

Respuesta1

Estás mezclando manzanas, naranjas y pomelos aquí.

  • "node.js", por ejemplo, es el JavaScriptlenguaje de alto nivel,que no tiene nada que ver con los procesos del sistema operativo. (Todo JavaScript se ejecuta dentro de un proceso o subproceso proporcionado por su host).

  • Los "anillos", o más generalmente los "niveles de privilegio de la CPU", soncaracterísticas físicas del chip del microprocesador,Se utiliza para determinar qué instrucciones de CPU puede emitir un programa y a qué recursos puede acceder.

  • El Unix/LinuxsoftwareLa arquitectura, que es bastante específica de estos sistemas operativos, está estrechamente ligada a la noción de"bifurcación"que se parece a esto:

    if (pid = fork()) {
        ... you are the parent, and 'pid' is the child's process-id ...
    } else {
        ... 'pid' is zero, so you are the child ...
    }
    

Para que esta buena idea funcione, la mayor parte del contexto del padre debe copiarse al hijo.

La exec()llamada al sistema puede ser utilizada (por un niño) para reemplazar todo su contexto con el de algún proceso nuevo, provocando que se corte toda la "herencia" del padre.

información relacionada