2012-11-23 3 views
0

커널이 코드 섹션이 동일한 프로세스 두 개를 생성하면 실제로 커널이 두 프로세스의 가상 주소 공간에 코드를 복사합니까? 즉, 동일한 프로그램에 대해 두 개의 프로세스를 만들면 메모리에 두 개의 복사본이 있거나 한 개의 복사본 만 있습니까?Unix/Linux에서 두 프로세스 실행

분명히 구현에 따라 다를 수 있지만 전통적인 Unix OS에서 묻습니다.

답변

2

최신 운영 체제는 Copy-on-Write을 사용하여 페이지가 실제로 업데이트 될 때까지 페이지가 복제되지 않도록합니다. Linux를 포함한 많은 시스템에서 OS가 중복되지 않은 페이지를 수정하기로 결정할 때 필요한 모든 복사 작업을 처리 할 수있는 충분한 RAM이 운영 체제에 실제로 있지 않은 오버 커밋이 발생할 수 있습니다.

+1

나는 COW라고 말하려고 생각합니다. – ninjalj

+0

@ninjalj : 예, 했어요. 고맙습니다 :). –

3

커널이 실제로 두 프로세스의 가상 주소 공간에 코드를 복사합니까?

텍스트 세그먼트가 각 프로세스의 가상 주소 공간에 (복사보다는) 매핑되지만, 동일한 물리적 공간을 참조 할 것 (그래서 커널은 메모리에있는 텍스트의 사본이있을 것이다) .

데이터 및 bss 세그먼트도 각 프로세스의 가상 주소 공간에 매핑되지만 프로세스마다 생성됩니다. 프로세스 시작시 실행 파일의 데이터 및 bss 세그먼트의 데이터가 프로세스의 가상 메모리에 매핑/복사됩니다. ab initio로 복사되지 않으면 프로세스가 데이터 쓰기를 시작하자마자 프로세스에 고유 한 개인 사본이 제공됩니다.

분명히 공유 메모리와 mmap 된 메모리는 프로세스가 시작된 후에 처리됩니다. 공유 메모리는 항상 프로세스간에 공유됩니다. 그것은 그 존재 이유입니다. mmap의 경우 사용되는 플래그에 따라 다르지만 공유되는 경우가 많습니다.

+0

그러나 커널은 텍스트 섹션이 이미 메모리에 있다는 것을 어떻게 알 수 있습니까? 커널 데이터 구조가 사용되는 것을 의미합니까? –

+1

그것은 어떤 커널에 의존 하는가 ... 프로세스 테이블 당 실행 파일에 대한 inode 번호와 메모리 매핑 테이블에있는 항목을 사용하지만 아마도 세부적으로 보지 않았습니다. 커널에 대한 걱정은 내 것이 아닙니다. –