매뉴얼 페이지를 올바르게 이해하면 분기 및 execve하는 프로세스의 fd 테이블이 하위 프로세스에 복사되고 execve에서도 유지됩니다. 반면, 다른 메모리 매핑은 execve 후에 삭제됩니다.
따라서 프로세스가 이 작업을 수행할 때(포크 및 실행) 삭제할 파일 구조를 확장합니다.
그럼에도 불구하고 나는 대학 교과서에서 다음과 같은 질문을 발견했습니다. "10개의 프로세스가 파일을 열고 그 중 절반이 포크되고 나머지 절반이 실행된다면 커널에는 몇 개의 파일 구조가 있을까요?"
정답은 10번입니다. "아이들이 파일구조를 공유하기 때문이죠."
하지만 실행된 프로세스가 파일 구조를 파괴하기 때문에 5가 될 것이라고 생각했습니다.
그렇다면 이는 실행 후에도 파일 구조가 커널에 남아 있다는 의미입니까?
답변1
열린 파일 설명자가 execve
에 있다고 가정하면 execve
, execve
그렇지 않으면 커널은 아직 열려 있는 파일 설명자가 무엇에 해당하는지 알아낼 수 없습니다.
답변2
교과서 질문은 프로세스에서 유지 관리하는 내부 데이터 구조가 아니라 커널에서 유지 관리하는 열린 파일 설명자에 관한 것입니다. 따라서 교과서의 대답은 정확합니다(파일 설명자는 포크나 execve에 의해 파괴되지 않으므로). 커널의 파일 구조는 파괴되지 않습니다.
이는 열린 설명자를 통해 사용 가능한 파일과 이를 통해 읽거나 쓴 데이터에 대한 정보를 보유하는 프로세스에 의해 생성된 내부 데이터 구조와 다릅니다. 이 데이터는 분기 또는 execve 호출에 따라 프로세스 내에서 유지되거나 유지되지 않을 수 있습니다.