fork 가 프로세스를 복제하는건 이미 OS 에 구현되어 있는(물론 윈도우도 구현 되어 있습니다... OS에 있는 함수를 내 맘대로 후킹해서 수정하더라도 수정 한 프로세스에만 영향을 받는 이유기도 하구요) COW 를 기반으로 하기 때문에 오버헤드가 크다고 보긴 좀 어려울 듯 합니다. 그냥 링크만 연결 해 놨다가 블럭이 바뀌면 그때 재할당만 해주면 되니 ㅎㅎ
디스크에 존재하는 실행 EXE/DLL 이미지야 메모리 맵드 파일 방식으로 로딩되고 레퍼런스 카운트 + 링크 + 수정 시에만 재할당 방식인 게 잘 알려져 있습니다만, 실행 후에 운용되는 스택과 힙 등 메모리 전반이 다 그런 방식인지에 대해서는 지금까지 딱히 생각을 안 하고 있었네요.
하긴, 제일 밑에 있는 가상 메모리 페이지들이 근본적으로 애초부터 그런 식으로 관리돼 온 거라면 수긍이 가겠어요. fork도 POSIX 규격의 일부일 테고.. 무슨 말씀인지 잘 알겠습니다. ^^