리눅스에서 프로그램을 실행 시키는 방법은
fork() / exec() 로 하는 방법과 system() 으로 하는 방법이 있다고 한다.
(내가 직접해본게 아니니 발뺌하기 모드 -.-v)
아무튼 fork()의 경우 parent 의 메모리를 복사해서(COW - Copy On Write) 사용하므로 메모리의 낭비가 생기는데,
이런 이유로 메모리가 넉넉해 보임에도
"fork 시에 ENOMEM 을 뱉어 내고 실행을 못한다"면 fork 대신에 vfork를 사용하면 된다.
fork() / exec() 로 하는 방법과 system() 으로 하는 방법이 있다고 한다.
(내가 직접해본게 아니니 발뺌하기 모드 -.-v)
아무튼 fork()의 경우 parent 의 메모리를 복사해서(COW - Copy On Write) 사용하므로 메모리의 낭비가 생기는데,
이런 이유로 메모리가 넉넉해 보임에도
"fork 시에 ENOMEM 을 뱉어 내고 실행을 못한다"면 fork 대신에 vfork를 사용하면 된다.
어플리케이션 서브프로세스를 생성할때 메모리 사용량 최대로 줄이기
Greg Nakhimovsky, 2006년 5월 Fork의 퍼포먼스 ... fork() 가 exec() 에 뒤따라 바로 살행되는 fork /exec 모델의 단점을 다루기 위해 버클리 버젼의 유닉스(BDS)는 1980년대 초반에 vfork() 시스템 콜을 내놓았습니다. vfork(2) 는 부모 프로세스를 자식 프로세스에 카피하지 않습니다. 두 프로세스가 모두 부모의 가상 주소 공간을 공유 합니다; 부모 프로세스는 자식 프로세스가 종료 되거나 exec() 를 호출할때 까지 정지 상태로 들어 갑니다. ... 오랜 시간이 지난후에 멀티쓰레딩(MT)이 가능해 지고 많이 사용되면서 vfork() 가 어플리케이션이 여러개의 쓰레드를 가지고 있을때 새로운 문제를 일으킬 수 있음이 밝혀 졌습니다: 데드락.
메모리 overcommit: 솔라리스 vs 다른 운영체제들
몇몇 운영체제 (리눅스, IBM AIX, HP-UX 같은) 들은
memory overcommit 이라는 기능을 가지고 있습니다.( lazy swap allocation 이라고도 불림) memory
overcommit 모드에서 리눅스 커널 버젼 2.6과 그후에 버젼에서는 이론적으로 커널의 동작을 수정할 수 있는 방법이 존재 합니다. 그러므로 overcommit memory 가 발생하지 않을 것입니다. 이것은 strict overcommit mode 을 sysctl -w vm.overcommit_memory=2 혹은 동일한 의미를 가지고 있는 [출처 : http://kr.sun.com/developers/solaris/techdocs/subprocess.html] |
Memory overcommit is a Linux kernel feature that lets
applications allocate more memory than is actually
available. The idea behind this feature is that some
applications allocate large amounts of memory "just in
case", but never actually use it. Thus, memory overcommit
allows you to run more applications than actually fit in
your memory, provided the applications don't actually use
the memory they've allocated. If they do, then the kernel
terminates the application. [출처 : http://www.gnu.org/software/gnusound/Documentation/ar01s05.html] |
'Linux' 카테고리의 다른 글
파일 존재 유무 확인하기(how to check existence of file on C,linux) (2) | 2008.12.16 |
---|---|
execl() - excute a file (0) | 2008.12.08 |
mkfs - ext2 & ext3 (4) | 2008.11.21 |
SRM - Secure RM (0) | 2008.11.10 |
리눅스에서 디렉토리 이름 변경시 주의사항 (2) | 2008.11.04 |