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 김용환 '김용환'

댓글을 달아 주세요