>  기사  >  시스템 튜토리얼  >  Linux 프로세스 간에 메모리를 공유하는 방법

Linux 프로세스 간에 메모리를 공유하는 방법

WBOY
WBOY원래의
2024-06-02 09:18:08533검색
공유 메모리 IPC 원리

공유 메모리 프로세스 간 통신 메커니즘은 주로 프로세스 간에 대량의 데이터를 전송하는 데 사용됩니다. 다음 그림은 공유 메모리를 사용하여 프로세스 간에 대량의 데이터를 전송하는 개략도를 보여줍니다.

Linux 프로세스 간에 메모리를 공유하는 방법

공유 메모리는 메모리 내에서 별도로 오픈되는 메모리 공간입니다. 이 메모리 공간은 접근 권한, 크기, 최근 접근 시간 등 고유한 데이터 구조를 가지고 있습니다. 데이터 구조는 다음과 같이 정의됩니다:

으아악

두 프로세스가 이 공유 메모리 공간을 사용하기 전에 프로세스 주소 공간과 공유 메모리 공간 사이에 연결을 설정해야 합니다. 즉, 공유 메모리 공간을 프로세스에 마운트해야 합니다.

시스템은 공유 메모리에 다음과 같은 제한 사항을 적용합니다.

으아악

Linux 공유 메모리 관리
1. 공유 메모리 만들기 으아악
/*

* 첫 번째 매개변수는 일반적으로 ftok() 함수에 의해 생성되는 키 값입니다
* 두 번째 매개변수는 생성할 공유 메모리 세그먼트의 크기(바이트 단위)
* 세 번째 매개변수는 공유 메모리 세그먼트의 생성 식별자를 식별하는 데 사용됩니다
*/
으아악

2. 공유 메모리 제어 으아악
/*

* 첫 번째 파라미터는 연산할 공유 메모리 식별자입니다
* 두 번째 매개변수는 수행할 연산입니다
* 세 번째 파라미터는 shmid_ds 구조체의 임시 공유 메모리 변수 정보입니다
*/
으아악

3. 공유 메모리 개체 매핑
시스템 호출 shmat() 함수는 공유 메모리 세그먼트를 호출 프로세스의 데이터 세그먼트에 매핑하고 메모리 공간의 첫 번째 주소를 반환합니다.

으아악

/*

* 첫 번째 파라미터는 연산할 공유 메모리 식별자입니다
* 두 번째 매개변수는 공유 메모리의 매핑된 주소를 지정하는 데 사용됩니다. 0이 아닌 경우 이 매개변수는 시스템에 의해 할당됩니다
* 세 번째 매개변수는 공유 메모리 세그먼트의 액세스 권한 및 매핑 조건을 지정하는 데 사용됩니다
*/
으아악

4. 공유 메모리 개체 분리
공유 메모리 공간을 사용한 후에는 shmdt() 함수 호출을 사용하여 현재 프로세스와 분리해야 합니다. 함수 선언은 다음과 같습니다:

으아악

/*

* 매개변수는 할당된 공유 메모리의 첫 번째 주소입니다
*/
으아악

부모 프로세스와 자식 프로세스 간의 공유 메모리가 따르는 규칙
1. 자식 프로세스를 생성하기 위해 fork() 함수를 사용한 후, 프로세스는 부모 프로세스에 의해 마운트된 공유 메모리를 상속받습니다.

2. 새 프로그램을 실행하기 위해 exec()가 호출되면 마운트된 모든 공유 메모리가 자동으로 마운트 해제됩니다.

3. 프로세스에서 exit() 함수가 호출되면 마운트된 모든 공유 메모리가 현재 프로세스에서 연결 해제됩니다.

프로그램 예시
공유 메모리를 적용하면 상위 프로세스는 첫 번째 주소에 정수를 저장하고 하위 프로세스는 이를 읽습니다.

으아악

/* 공유 메모리 신청 */

으아악

/* 프로세스 주소 공간에 공유 메모리 매핑 */

으아악

/* 매핑 해제 */

으아악

/* 공유 메모리 삭제 */

으아악

출력 결과:

Linux 프로세스 간에 메모리를 공유하는 방법

위 내용은 Linux 프로세스 간에 메모리를 공유하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.