공유메모리 예제

shmctl () : 공유 메모리에서 분리하면 파괴되지 않습니다. 그래서, shmctl()을 파괴하는 것이 사용된다. shmctl (int shmid, IPC_RMID, NULL); 모든 프로세서가 단일 데이터 보기를 공유하고 프로세서 간의 통신이 동일한 위치에 액세스하는 것만큼 빠를 수 있기 때문에 공유 메모리 시스템은 프로그래밍하기가 비교적 쉽습니다. 공유 메모리 시스템의 문제는 많은 CPU가 메모리에 빠르게 액세스해야 하고 두 가지 합병증이 있는 캐시 메모리가 있다는 것입니다: 명령 인수에 따라 새로운 프로세스가 fork()로 시작되고 해당 프로세스가 현재_를 읽고 수정해야 한다는 것입니다. file_name 변수만 읽는 동안 공유 메모리에 저장된 경로 변수입니다. 일단 생성하거나 열리면 프로세스의 주소 공간에서 공유 메모리 개체를 매핑하기만 하면 됩니다. 사용자는 전체 공유 메모리 또는 일부만 매핑할 수 있습니다. 매핑 프로세스는 mapped_region 클래스를 사용하여 수행됩니다. 클래스는 공유 메모리 또는 매핑 기능(예: 파일)이 있는 다른 장치에서 매핑된 메모리 영역을 나타냅니다. mapped_region는 모든 memory_mappable 개체에서 만들 수 있으며, 당신이 상상할 수 있듯이 shared_memory_object는 memory_mappable 개체입니다: 위의 시스템 호출은 시스템 V 공유 메모리 세그먼트에 대한 공유 메모리 작업을 수행합니다. 호출 프로세스의 주소 공간으로 분할합니다. 전달해야 하는 인수는 다음과 같습니다 – 다음 함수는 프로세스가 자식과 공유할 수 있는 메모리 내 버퍼를 만듭니다: 공유 메모리를 통한 프로세스 간 통신은 둘 이상의 프로세스가 공통 메모리에 액세스할 수 있는 개념입니다. 또한 한 프로세스의 변경 내용을 다른 프로세스에서 볼 수 있는 이 공유 메모리를 통해 통신이 수행됩니다.

공유 메모리에서 쓰기 프로세스는 크기 1K(및 플래그)의 공유 메모리를 만들고 공유 메모리를 첨부하여 휴대용 공유 메모리 개체에 대해 제시된 동일한 예제를 반복합니다: 서버 프로세스는 공유 메모리 개체를 생성하고 매핑하고 은 모든 바이트를 값으로 초기화합니다. 그런 다음 클라이언트 프로세스는 공유 메모리를 열고 매핑한 다음 데이터가 올바르게 초기화되어 있는지 확인합니다. 클라이언트가 공유 메모리에 연결하기 전에 서버가 종료되면 공유 메모리 세그먼트가 메모리에 연결되지 않을 때 공유 메모리 세그먼트가 소멸되므로 클라이언트 연결이 실패합니다. 세 번째 인수인 buf는 구조체 shmid_ds라는 공유 메모리 구조에 대한 포인터입니다. 이 구조의 값은 cmd에 따라 설정하거나 얻을 때 사용됩니다. 인수shmaddr은 분리할 공유 메모리 세그먼트의 주소입니다. 분리할 세그먼트는 shmat() 시스템 호출에서 반환되는 주소여야 합니다.

Condividi
Questo articolo è stato pubblicato in Senza categoria . Bookmark permalink .
error

Ti piace quello che facciamo? Ti prego, spargi la voce!