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

조회수 3402회

Linux 에서 fork() 시,

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

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

2 답변

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

    alt text

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

  • 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의 값을 변경하는 순간 실제로 메모리 복사가 발생하는거져.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)