포크 기능은 두 프로세스의 모든 페이지를 읽기 전용으로 표시합니까? [폐쇄]

포크 기능은 두 프로세스의 모든 페이지를 읽기 전용으로 표시합니까? [폐쇄]

fork()가상 메모리 사용 방법을 설명하는 교과서를 읽고 있습니다 .

현재 프로세스가 분기 기능을 호출하면 커널은 새 프로세스에 대한 다양한 데이터 구조를 생성하고 고유한 PID를 할당합니다. 새 프로세스에 대한 가상 메모리를 생성하기 위해 현재 프로세스의 mm_struct, 영역 구조 및 페이지 테이블의 정확한 복사본을 생성합니다. 각 페이지를 표시합니다두 프로세스 모두 읽기 전용입니다., 두 프로세스의 각 영역 구조를 개인 쓰기 중 복사로 표시합니다.

두 프로세스의 모든 페이지를 읽기 전용으로 표시해야 하는 이유를 이해할 수 없습니다. 상위 프로세스의 모든 페이지가 읽기 전용인 경우 상위 프로세스는 초기화되지 않은 일부 전역 변수(부분)를 수정할 수 없습니다. .bss그렇다면 프로그램은 어떻게 실행됩니까?

답변1

상위 프로세스의 페이지 매핑이 쓰기 가능한 상태로 유지되면 상위 프로세스의 모든 변경 사항이 직접 적용되며 물리적 페이지가 공유되므로 하위 프로세스도 이를 볼 수 있습니다. 두 매핑을 모두 읽기 전용으로 설정하면 모든 프로세스에서 변경한 내용이 비공개로 유지됩니다.

관련 정보