Por que os processos filhos do Unix herdam [a maioria] dos atributos do processo pai

Por que os processos filhos do Unix herdam [a maioria] dos atributos do processo pai

Aprendendo sobre como funcionam os processos Unix, e percebi queprocessos filhosherda a maioria dos atributos (incluindo descritores de arquivo) do processo pai. Eu também acabei de aprender sobreexecutivoe como ele substitui os atributos do processo filho por outros totalmente novos (novo espaço de memória, etc.), mas mantém o ID do processo original.

Então eu sei sobreambientes sandbox em Node.js, no qual ele fornece uma tela essencialmente vazia e você adiciona variáveis ​​e "recursos" ao contexto do processo filho.

O que estou me perguntando é quais são os diferentes tipos de configurações existentes para os atributos que um processo filho recebe e por que o processo filho no Unix "padroniza" para herdar todos os atributos pai. Querendo saber por que não teria seu próprio espaço de memória e outros enfeites.

Também estou me perguntando se existem "configurações de atributos de processo filho" alternativas para esses 2 casos (herdar todos os atributos pai ou herdar nenhum). Talvez ele queira herdar metade do espaço de endereço pai, ou usar algum espaço de endereço de um processo irmão, ou usar alguns descritores de arquivo do pai, bem como alguns dos seus próprios, etc. drivers de dispositivo e outros não, etc.

Estaria interessado em saber se existe uma maneira de passar esses "recursos de configuração" ao criar um processo filho, seja no Unix ou em qualquer outro sistema operacional. Por exemplo, "criar processo filho, usando metade do espaço de endereço pai, 1/4 do espaço de endereço do irmão 2, 1/8 do espaço de endereço do irmão 1 e o 1/8 restante usar meu próprio espaço de endereço local. Além disso, forneça acesso para drivers de dispositivos a, b e c e, de outra forma, não permitir acesso à rede." Algo arbitrário, onde se trata basicamente de configurar o "conjunto de recursos" do processo filho com um nível de detalhe preciso.

Querendo saber se algo assim ocorre no Unix ou em outros sistemas operacionais e, se não, por que não. Não entendo por que foi tomada a decisão de ter apenas esses 2 casos de processos de permissão/regulação.

Parece que isso de alguma forma se sobrepõe aoanel de proteçãoconceito. Você evita que processos de usuário (processos filhos) acessem determinados recursos. Me perguntando por que não é mais configurável que isso, em alto nível.

Responder1

Você está misturando maçãs, laranjas e toranjas aqui.

  • "node.js", por exemplo, é o JavaScriptlinguagem de alto nível,que não tem nada a ver com processos do sistema operacional. (Todo o JavaScript é executado dentro de um processo ou thread fornecido pelo seu host.)

  • "Anéis", ou mais genericamente "níveis de privilégio de CPU", sãocaracterísticas físicas do chip microprocessador,usado para determinar quais instruções de CPU um programa pode emitir e quais recursos ele pode acessar.

  • O Unix/LinuxProgramasarquitetura, que é bastante específica para esses sistemas operacionais, está intimamente ligada à noção de"bifurcação",que se parece com isso:

    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 ideia interessante funcione, a maior parte do contexto do pai deve ser copiada para o filho.

A exec()chamada do sistema pode ser usada (por um filho) para substituir todo o seu contexto pelo de algum novo processo, fazendo com que toda a "herança" do pai seja cortada.

informação relacionada