본문 바로가기
반도체 그 다음 학문/운영체제 (OS)

운영체제 COW ( Copy on Write, zero-fill-on-demand-page )

by 전컴반 2022. 6. 8.
반응형
COW ( Copy On Write )

 

부모 프로세스가 자식 프로세스를 생성할 때  ( fork() ) 생기는 메모리 이슈에 대한 해결책으로 나온 방법이다. 자식 프로세스를 생성하면 부모 프로세스가 가지고 있던 page table을 그대로 물려받는다. 

 

조금 다르게 말하면 부모 프로세스의 메모리를 다 복사한다. 그렇게 되면 너무 많은 메모리 overhead가 발생한다. 그렇다고 메모리를 공유하면 독립적인 동작을 하지 못한다.

 

즉, 메모리는 적게 잡아먹어야 하고 독립적으로 움직여야 한다. 그렇게 해서 나온 게 COW다.   

 


 

 

먼저 자식 프로세스를 생성하면, 부모 프로세스의 주소 공간을 공유하고, 운영체제는 자식 프로세스에게 독립적인 page table을 만들어 준다. 단, 이때 부모 page table의 read-write bit를 read only로 초기화해서 복사하고 만든다.

 

 

그리고 자식 프로세스가 공유된 page에 뭔가를 요청하면( write 작업 ) read only라 수정이 불가능하다그때서야 요청한 page를 복사해서 메모리에 새로 올린다.

 

이때, 자식 프로세스가 새로 복사하고 메모리에 올리는 page는 0으로 초기화된 상태로 복사하게 되는데 이유는 보안 이슈 때문이다. 자식 프로세스의 page를 보고 부모 프로세스가 어디에 접근했지 와 같은 정보를 읽을 수 있기 때문이다.

이렇게 0으로 초기화해주는 걸 zero-fill-on-demand-page라고 한다. 

 

 

이렇게 해서 복사할 때 생기는 overhead를 감소할 수 있다.

 


 

정리하자면, 자식 프로세스가 생성될 때 부모 프로세스의 주소 공간을 공유한다. 이때 부모 page table의 read/write bit를 read only로 바꿔서 준다.

근데 read only라 자식 프로세스는 table에서 wirte 작업이 불가능하다. 즉, read 작업만 할 수 있다. 그래서 새로운 독립적인 write 작업이 필요하다면 공유된 부모 page를 복사하는데 이때 page는 0으로 초기화하여 복사된다. 복사한 page를 메모리에 올린다.

 

반응형

댓글