https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html의 9.3 copy on write 만

발번역했다.



9.3 Copy-On-Write


  • copy-on-write fork의 아이디어는 자식 프로세스 또는 다른 프로세스가 페이지를 변경할 때까지 부모 프로세스의 페이지를 자식 프로세스로 실제로 복사되지 않아야 한다. 잠시 동안 두 개의 프로세스는 메모리를 공유할 수 있고, 수정해야 할 것들은 따로 페이지를 복사되어야 한다. fork후 자식 프로세스가 종종 exec() 시스템 호출을 즉시 호출되기 때문에 타당한 접근 방식이다.

Figure 9.7 - Before process 1 modifies page C.


Figure 9.8 - After process 1 modifies page C.



  • 수정될 페이지만 copy-on-write 라벨으로 붙여야 한다. 코드 세그먼트는 공유될 수 있다.
  • copy-on-write 복제본을 만족하기 위해 쓰이는 페이지는 기존 데이터를 zero로 처리하는 zero-fill-on-demand를 일반적으로 사용하여 할당한다. 
  • 일부 시스템은 for() 시스템 콜을 virtual memory fork라 불리는 vfork()의 대안으로 제공한다. 부모프로세스가 정지되는 경우, 자식 프로세스는 부모 프로세스의 메모리 페이지를 사용한다. 이 방법을 사용하면 프로세스 생성이 굉장히 빠르지만, exec() 시스템 콜을 호출하기 전, 자식 프로세스는 어떠한 공유된 메모리 페이지를 수정하지 않도록 한다. 본질적으로이 과정은 fork의 호출후 , 부모 프로세스 또는 자식 프로세스 중 어느 프로세스가 먼저 실행되는지에 대한 의문을 다룬다. vfork를 이용하면, 부모 프로세스는 중지되고, 자식 프로세스가 exec() 호출시까지 잠깐 동안 부모 프로세스의 페이지와 공유하면서, 자식 프로세스가 먼저 실행되도록 한다.




Posted by '김용환'
,