Unix 하위 프로세스가 [대부분의] 상위 프로세스 속성을 상속하는 이유

Unix 하위 프로세스가 [대부분의] 상위 프로세스 속성을 상속하는 이유

Unix 프로세스의 작동 방식에 대해 배우고 다음 사항에 주목했습니다.하위 프로세스상위 프로세스에서 대부분의 속성(파일 설명자 포함)을 상속합니다. 나도 방금 배웠어간부하위 프로세스 속성을 완전히 새로운 속성(새 메모리 공간 등)으로 대체하지만 원래 프로세스 ID는 유지하는 방법을 설명합니다.

그럼 내가 아는 건Node.js의 샌드박스 환경, 기본적으로 빈 슬레이트를 제공하고 하위 프로세스의 컨텍스트에 변수와 "기능"을 추가합니다.

내가 궁금한 것은 하위 프로세스가 수신하는 속성에 대해 다양한 종류의 구성이 무엇인지, Unix의 하위 프로세스가 모든 상위 속성을 상속하도록 "기본값"으로 설정되는 이유입니다. 왜 자체 메모리 공간 등을 갖지 않는지 궁금합니다.

또한 이 두 가지 경우(모든 상위 속성을 상속하거나 아무것도 상속하지 않음)에 대한 대체 "하위 프로세스 속성 구성"이 있는지 궁금합니다. 어쩌면 부모 주소 공간의 절반을 상속받거나, 형제 프로세스의 일부 주소 공간을 사용하거나, 부모의 파일 설명자 몇 개와 자신의 파일 설명자 일부를 사용하는 등의 작업을 원할 수도 있습니다. 어쩌면 몇 가지에 액세스할 수 있다고 말할 수도 있습니다. 장치 드라이버 및 기타 드라이버 등

Unix나 다른 운영 체제에서 하위 프로세스를 생성할 때 이러한 "구성 기능"을 전달할 수 있는 방법이 있는지 알고 싶습니다. 예를 들어, "부모 주소 공간의 절반, 형제 2 주소 공간의 1/4, 형제 1 주소 공간의 1/8, 나머지 1/8은 내 로컬 주소 공간을 사용하여 하위 프로세스를 만듭니다. 또한 액세스를 제공합니다. a, b, c 장치 드라이버에 연결하고 그 외에는 네트워크 액세스를 허용하지 않습니다." 기본적으로 하위 프로세스의 "기능 세트"를 세부적인 수준으로 구성하는 임의적인 것입니다.

Unix나 다른 운영 체제에서도 이와 같은 일이 발생하는지 궁금합니다. 그렇지 않다면 왜 안 됩니까? 왜 이 두 가지 허가/규제 프로세스만 갖기로 결정했는지 이해가 되지 않습니다.

이거랑 뭔가 겹치는거 같은데보호 링개념. 사용자 영역 프로세스(하위 프로세스)가 특정 기능에 액세스하는 것을 방지합니다. 높은 수준에서 왜 이보다 더 구성할 수 없는지 궁금합니다.

답변1

여기에는 사과와 오렌지, 자몽을 섞고 있습니다.

  • 예를 들어 "node.js"는 JavaScript입니다.고급 언어,이는 운영 체제 프로세스와 아무 관련이 없습니다. (모든 JavaScript는 호스트가 제공하는 프로세스 또는 스레드 내에서 실행됩니다.)

  • "링" 또는 보다 일반적으로 "CPU 권한 수준"은마이크로프로세서 칩의 물리적 특징,프로그램이 발행할 수 있는 CPU 명령과 액세스할 수 있는 리소스를 결정하는 데 사용됩니다.

  • 유닉스/리눅스소프트웨어이러한 운영 체제에 매우 특정한 아키텍처는 다음과 같은 개념과 밀접하게 연결되어 있습니다."분기,"이는 다음과 같습니다:

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

이 깔끔한 아이디어가 작동하려면 부모의 컨텍스트 대부분이 자식에게 복사되어야 합니다.

시스템 exec()호출은 (자식에 의해) 전체 컨텍스트를 일부 새로운 프로세스의 컨텍스트로 대체하는 데 사용될 수 있으며 이로 인해 부모로부터의 모든 "상속"이 중단됩니다.

관련 정보