평신도의 용어로 shmages는 무엇입니까?

평신도의 용어로 shmages는 무엇입니까?

shmpages커널 및 메모리 용어의 전반적인 체계는 정확히 무엇입니까? shmpages한도에 도달하면 무엇을 의미하나요?

이것이 Linux가 아닌 다른 곳에서도 작동하는지 궁금합니다.

답변1

사용자 모드 프로세스는 IPC(프로세스 간 통신)를 사용하여 서로 통신할 수 있으며 이를 수행하는 가장 빠른 방법은 공유 메모리 페이지( shmpages)를 사용하는 것입니다. 예 를 들어 음악을 재생하고 비디오를 재생하는
경우 두 프로세스 모두 일부 사운드를 출력할 수 있는 권한이 있어야 합니다. bansheevlcpulseaudio

공유 메모리 구성 및 사용에 대해 자세히 알아보려면 다음 명령 중 일부를 시도해 보십시오.

공유 메모리 구성 표시:

sysctl kernel.shm{max,all,mni}

기본적으로(Linux 2.6) 다음과 같이 출력되어야 합니다.

kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096

shmmni허용되는 공유 메모리 세그먼트의 최대 수, shmmax공유 메모리 세그먼트에 허용되는 크기(32MB), shmall모든 세그먼트의 최대 총 크기(페이지로 표시, 8GB로 변환)

현재 사용 중인 공유 메모리:

grep Shmem /proc/meminfo

배포판에서 활성화된 경우:

ls -l /dev/shm

ipcsIPC 사용에 대해 자세히 알아볼 수 있는 훌륭한 도구:

ipcs -m 

공유 메모리의 사용량이 출력되며, 해당 크기에 할당된 세그먼트를 확인할 수 있습니다.

ipcs -m -i <shmid>

세그먼트를 생성한 프로세스의 PID(cpid)와 세그먼트를 사용한 마지막 프로세스(lpid)를 포함하여 지정된 세그먼트에 대한 추가 정보를 표시합니다.

ipcrm공유 메모리 세그먼트는 삭제할 수 있습니다(그러나 이러한 세그먼트는 다른 프로세스가 연결되지 않은 경우에만 삭제됩니다. nattach 열 참조 ipcs -m).

ipcrm -m <shmid>

공유 메모리를 소진시키는 것은 많은 양의 공유 메모리를 과도하게 사용하는 프로그램, 할당된 세그먼트를 제대로 분리하지 않는 프로그램, sysctl값 수정 등일 수 있습니다.

이는 Linux에만 국한된 것이 아니며 (대부분의) UNIX 시스템에도 적용됩니다(공유 메모리는씨부닉스).

관련 정보