linux fork() 루틴이 궁금합니다


Linux 에서 fork() 시,

Parent와 Child가 메모리에서 어떤 부분은 공유하고, 어떤 부분은 각자 copy하여 갖고 있게 되는지 궁금합니다.

(COW 가 일어나기 전에 말이지요.)


조회수 396


2 답변


유저 메모리 영역의 부모의 Context를 그대로 copy하는 것으로 알고 있습니다.

alt text

부모와 자식간에 메모리 공유할 수 있는 방법은 shared memory(커널 메모리 영역)을 사용하는 방법이 있습니다.

  • 2016년 02월 03일에 작성됨
    그렙에서 웹 프론트 개발을 하고 있습니다.


COW가 뭔지 궁금해서 찾아보니 이런 글이 있네요.

http://unix.stackexchange.com/questions/58145/how-does-copy-on-write-in-fork-handle-multiple-fork

fork를 하면 원래는 parent의 메모리(정확히는 Page)를 그대로 복사해서 child process가 가져야 합니다. 하지만, 생성된 child process가 별거 안하고 그냥 종료되어버릴 경우에 프로세스의 페이지 전체를 복사하는건 비효율적일 수 있습니다.
그래서 Copy-on-write라는걸 한다고 하네요. copy-on-write는 변경이 발생할때에만 복사를 하는겁니다.
메모리에 무언가 변경이 발생하기 전까지는 그냥 기존 parent process의 메모리를 같이 쓰는거져. 그러다가 페이지에 뭔가 써야하는 순간이 생기면, 그때 해당 페이지를 복사합니다.

질문하신 Copy-on-write(COW)가 일어나기 전 상황에서라면 프로세스의 메모리 전체를 공유해서 씁니다.

COW를 개념은 알았는데 이름은 처음 들었네요. COW는 어떤 프로그래밍 언어(예를들어 스위프트)에서는 자료구조 복사시에 사용합니다. array를 복사하면 처음에는 실제로 복사가 일어나지 않지만, 한 쪽 array의 값을 변경하는 순간 실제로 메모리 복사가 발생하는거져.

  • 2016년 06월 01일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 02월 03일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close