shared memory 예제

Windows 운영 체제는 공유 메모리도 제공하지만 이 공유 메모리의 수명은 커널 또는 파일 시스템 수명과 매우 다릅니다. 공유 메모리는 페이지 파일에 의해 백업되고 공유 메모리에 연결된 마지막 프로세스가 소멸되면 자동으로 소멸됩니다. 두 프로세스가 메모리에 동일한 파일을 매핑하면 한 프로세스가 쓰는 메모리가 다른 프로세스에서 볼 수 있으므로 메모리 매핑된 파일을 프로세스 간 통신 메커니즘으로 사용할 수 있습니다. 메모리 매핑된 파일은 파일 시스템 지속성을 추가하여 공유 메모리와 동일한 프로세스 간 통신 서비스를 제공한다고 말할 수 있습니다. 그러나 운영 체제가 파일 내용을 메모리 내용과 동기화해야 하므로 메모리 매핑된 파일은 공유 메모리만큼 빠르지 않습니다. 공유 메모리를 관리하려면 다음 헤더를 포함하기만 하면 됩니다. shmaddr이 NULL인 경우 시스템은 기본적으로 세그먼트를 연결할 적절한 주소를 선택합니다. shmaddr이 NULL이 아니고 SHM_RND가 shmflg에 지정되어 있으면 첨부는 SHMLBA(하위 경계 주소)의 가장 가까운 배수의 주소와 같습니다. 그렇지 않으면 shmaddr공유 메모리 첨부 파일이 발생/시작되는 페이지 정렬 주소여야 합니다. 공유 메모리 세그먼트를 만들고 매핑하는 것은 여러 프로세스가 관련된 경우 약간 지루할 수 있습니다. UNIX 시스템에서 fork() 운영 체제 호출을 통해 프로세스가 관련되는 경우 익명 공유 메모리를 사용하여 더 간단한 방법을 사용할 수 있습니다. shmget(): int shmget (key_t, size_tsize, intshmflg); 성공적으로 완료되면 shmget()은 공유 메모리 세그먼트에 대한 식별자를 반환합니다.

총 4개의 데이터 복사본이 필요합니다(읽기 2개 및 쓰기 2개). 따라서 공유 메모리는 둘 이상의 프로세스가 메모리 세그먼트를 공유하도록 하는 방법을 제공합니다. 공유 메모리를 사용하면 입력 파일에서 공유 메모리로, 공유 메모리에서 출력 파일까지 두 번만 데이터가 복사됩니다. shmdt(): 공유 메모리 세그먼트를 완료하면 shmdt()를 사용하여 프로그램에서 자체적으로 분리해야 합니다. int shmdt (보이드 *shmaddr); 컴퓨터 과학에서 공유 메모리는 여러 프로그램에서 동시에 액세스할 수 있는 메모리로, 이러한 메모리 간의 통신을 제공하거나 중복 복사본을 방지할 수 있습니다. 공유 메모리는 프로그램 간에 데이터를 전달하는 효율적인 수단입니다. 컨텍스트에 따라 프로그램은 단일 프로세서 또는 여러 개의 개별 프로세서에서 실행될 수 있습니다. 쓰기 프로세스는 공유 메모리에 각각 1023바이트씩 `A`에서 `E`로 알파벳의 5배를 씁니다. 마지막 바이트는 버퍼의 끝을 의미 공유 메모리, 쓰기 프로세스, 크기 1K (및 플래그)의 공유 메모리를 만들고 공유 메모리를 연결 shm_open에 의해 생성 된 공유 메모리는 영구.