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

1

Aprendendo sobre como os processos Unix funcionam, e notou que processos filho herdam a maioria dos atributos (incluindo descritores de arquivo) de o processo pai. Eu também aprendi sobre exec e como ele substitui os atributos do processo filho por outros completamente novos (novo espaço de memória, etc.), mas mantém o ID do processo original.

Então eu sei sobre ambientes de sandbox no Node.js , nos quais ele fornece uma lousa essencialmente vazia, e você adicione variáveis e "recursos" ao contexto do processo filho.

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

Também se perguntando se existem alternativas "configurações de atributos de processo filho" para esses dois 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. Talvez você diga que pode acessar alguns drivers de dispositivos e outros não, etc.

Estaria interessado em saber se existe uma maneira de passar em tais "recursos de configuração" ao criar um processo filho, seja no Unix ou em qualquer outro sistema operacional. Por exemplo, "crie 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 use meu próprio espaço de endereço local. Além disso, forneça acesso para os drivers de dispositivo a, b e c e, de outro modo, não permitir acesso à rede. " Algo arbitrário, onde basicamente é configurado o "conjunto de recursos" do processo filho para um nível de detalhes.

Imaginando se algo assim ocorre no Unix ou em outros sistemas operacionais, e se não, por que não? Eu não entendo porque foi tomada a decisão de apenas ter estes dois casos de processos de permissão / regulação.

Parece que isso de alguma forma se sobrepõe ao conceito de anel de proteção . Você evita que processos do usuário (processos filho) acessem determinados recursos. Imaginando por que não é mais configurável do que isso, em um nível alto.

    
por Lance Pollard 22.08.2018 / 05:43

1 resposta

-1

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

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

  • "Anéis", ou mais geralmente "níveis de privilégio de CPU", são recursos físicos do chip do microprocessador, usados para determinar quais instruções da CPU um programa pode emitir e quais recursos ele pode acessar.

  • A arquitetura Unix / Linux software , que é bastante específica para esses sistemas operacionais, está intimamente ligada à noção de "forking", 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 essa ideia clara funcione, a maior parte do contexto do pai deve ser copiada para o filho.

A chamada do sistema exec() 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.

    
por 22.08.2018 / 19:40