- 프로세스 당 4GB 가상 메모리 할당
커널 영역 : 3~4GB
사용자 영역 : 0~3GB
실제로 커널에 할당한 가상 메모리는 프로세스간에 공유하는 구조
- copy-on-write
what?
: 자식프로세스 생성시, 부모 프로세스 페이지를 우선 사용한다.
(읽기만 하는 경우에는 부모 프로세스 페이지를 계속 사용한다. 그러다가 수정(쓰기)을 필요할 때, 이 때 페이지 일부분만 복사하고 분리한다.)
so, 프로세스 생성 시간을 줄일 수 있고 새로 생성된 프로세스에 새롭게 할당되어야 하는 페이지 수 최소화
why?
: fork()는 새로운 프로세스 공간 생성 후 , 기존 프로세스 공간을 복사하는데,
4GB(프로세스 가상메모리 주소 용량)라는 공간을 복사해야한다는 말인데, 4GB를 프로세스를 복사하는데 오래 걸리는 문제를 해결하기 위한 동작 copy-on-write
copy-on-write 동작 (프로세스 구조, 가상메모리 시스템, 페이징 시스템)
: write 시에만 복사를 함으로써 프로세스를 생성하는데 들이는 시간을 줄일 수 있다.
(read 시에는 부모 프로세스에서 가리키는 물리 공간을 공유하여 가리킨다.)
case1) 읽기(read)만 요청할 경우
1. 부모프로세스에서 일부 공간이 실행되서 페이지 테이블에 새롭게 페이지 생성되고 해당 데이터가 물리 메모리에 올라왔다
2. fork() 실행, (원래는 4GB 프로세스 복사되어야 하지만 복사하지않고) 이 때, 각각의 공간 중에 읽기만 하는 공간은 기존의 부모 프로세스에서 사용하고 있는 물리메모리(페이지 주소)를 그대로 사용한다. DATA 공간은 그대로 있고 가리키는 공간을 기존 공간으로 새로운 변수에 가리키도록만 한다. (커널 공간을 공유)
case2) 자식 프로세스에서 wirte(변경 수정) 해야할 경우
1. 코드를 실행하다가 write 요청 시
2. 페이지 테이블에서 해당 공간을 관련 데이터를 복사하여 새로운 물리공간에 데이터를 넣어두고
3. 그 다음 페이지 테이블은 기존에 공유 공간을 가리키던 것을 새로 복사하여 만든 물리공간 주소를 가리키도록 변경한다.
'Computer Science > 시스템프로그래밍2' 카테고리의 다른 글
프로세스 스케쥴링 (운영체제의) (0) | 2021.10.03 |
---|---|
프로세스 종료 exit() 시스템콜 (0) | 2021.10.03 |
프로세스 생성 실습3 fork() exec() wait() (0) | 2021.09.29 |
프로세스 생성 wait() (0) | 2021.09.29 |
프로세스 생성 실습1 fork() (0) | 2021.09.29 |