CS/시스템 프로그래밍

프로세스 생성(copy on write)

:_: 2022. 3. 2. 16:36

 

리눅스 프로세스  

- 프로세스 당 4GB 가상 메모리 할당

 

- 사용자영역(0GB ~ 3GB), 커널영역(3GB ~ 4GB)

 

커널 영역에는 운영체제, 커널이미지가 들어간다.

User Space 에는 실행 프로그램 이미지가 들어간다. ( heap, bss, data, text )

  프로세스마다 커널 이미지가 들어간다. 공간이 1GB. 커널은 동일한 이미지.

가상메모리 시스템과 연결해 가상메모리 시스템에 페이지 시스템을 생각해보면 시스템마다 페이지 테이블이 생긴다.

 

페이지 테이블은 가상메모리와 물리메모리 주소를 매핑을 시켜 놓은 테이블.

 

커널의 일부 이미지가 물리메모리 CPU 실행되고 있다면,

커널 일부 페이지를 가상 메모리와 매핑해 놓은 페이지 테이블에 들어 있다.

 

프로세스 B 실행하다가 페이지 테이블 안에서 물리 메모리 주소를

지금 들어가 있는 커널 이미지 (물리 메모리) 주소로 매핑만 시켜 놓으면 된다.

 

프로세스B에서 실행하는 커널 이미지가 프로세스A 동일하다고 한다면 해당 부분을 위에서 별도로 물리 메모리에

커널 이미지를 로드 시킬 필요 없이 테이블만 update 시켜서 가리키게 하면 추가적은 공간을 사용할 필요가 없다.

 

copy-on-write

1. fork()는 새로운 프로세스 공간 생성 후, 기존 프로세스 공간 복사

 → 4GB를 복사한다면, 프로세스 생성 시간이 오래 걸림

 

2. 자식프로세스 생성 시, 복사 하지 않고 부모 프로세스 페이지를 우선 사용

3. 부모 또는 자식프로세스가 해당페이지를 읽기가 아닌 쓰기를 할 때 페이지를 복사하고, 분리한다.

4. 장점

  • 프로세스 생성시간을 줄일 수 있음
  • 새로 생성된 프로세스에 새롭게 할당되어야 하는 페이지 수 최소화

 

copy-on-write(read 시)

자식 프로세스 생성시, 부모 프로세스 페이지를 우선 사용

 → 프로세스 A 실행한다. 크기는 4GB

일부의 공간이 실행이 되서 페이지 테이블에 페이지가 생성되고 해당 데이터가 물리 메모리에 올라가 있는다고 가정.

fork 실행된 경우, 공간 중에 일기만 해야 되는 공간이 있다면 별도의 페이지 생성하지 않고 기존의 물리메모리 주소를 그대로 사용.(복사 없이)

 

copy-on-write(write )

- 부모 또는 자식 프로세스가 해당 페이지를 읽기가 아닌 쓰기 처음 요청 시 페이지 복사 및 분리

 → 프로세스 B update해야된다는 요청(write) 생긴 경우 (코드를 실행 중에 요청 생김)

공간이 필요한 시점에 복사를 한다.

복사를 해서 새로운 물리 공간에 데이터를 넣어놓고 페이지 테이블도 주소를 바꿔서 새로 생성된 공간을 가리킨다.

 

 

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
728x90