2012-10-18 3 views
1

리눅스 네임 스페이스는 pid, 마운트 포인트, 네트워크 등을 분리 할 수 ​​있습니다. 나는 Linux 네임 스페이스를 사용하여 OS 레벨의 가상 머신 (가상 서버 및 LXC)을 구현하지만, 종종 메모리가 부족합니다. 서로 다른 네임 스페이스에 두 개의 프로세스가 있고 동일한 공유 라이브러리를 사용하는 경우 라이브러리가 실제 메모리에 한 두 번로드 될 것인가라는 질문이 있습니다. 게다가, 프로세스 간의 라이브러리 공유의 밑에있는 메커니즘은 무엇입니까? IPC와 같은가요?다른 리눅스 네임 스페이스의 공유 라이브러리 사용

답변

1

모두가 동일한 파일에 액세스하는 경우 메모리를 공유해야합니다. 메커니즘은 매우 간단합니다. 각 프로세스는 공유 객체를 열고 mmap(2)입니다. mmap()은 프로세스의 주소 공간에서 사용 가능한 파일에 대한 VFS 페이지 캐시를 만들기 때문에 동일한 파일을 여러 파일에 동일한 페이지로 가져 오는 경우.

당신은 파일 시스템이 여러 번 장착이 그래서 단 하나 개의 복사본이 있어야 — 여러 마운트는 VFS 층 —에서 처리하는 하나 개의 파일 시스템 인스턴스있다 (이것은 여러 네임 스페이스의 마운트 및 마운트 할을 결합하는 것입니다) 캐시의 각 파일

공유 라이브러리는 메모리 부족을 일으킬 가능성이 거의 없습니다. 그것들은 디스크에있는 파일의 읽기 전용 캐시이기 때문에 커널은 메모리가 부족해지면 프로그램을 호출 (예 : 함수를 호출하거나 라이브러리의 메모리에 액세스) 할 때마다 디스크를 읽게합니다.

관련 문제