ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Shared memory communication 알아보기
    System 2023. 10. 7. 10:13
    728x90
    반응형

     

    - 목차

     

     

    관련된 글

    https://westlife0615.tistory.com/347

     

    IPC Signal 알아보기

    - 목차 함께 보면 좋을 글 https://westlife0615.tistory.com/345 Shared memory communication 알아보기 - 목차 소개. IPC (Inter-Process Communication) 의 방식 중의 하나로 Shared memory Communication 방식이 존재합니다. Shared mem

    westlife0615.tistory.com

     

     

    소개.

    IPC (Inter-Process Communication) 의 방식 중의 하나로

    Shared memory Communication 방식이 존재합니다.
    Shared memory 는 메모리 상에 존재하는 공유 메모리인데요.
    모든 프로세스들이 Shared memory 에 접근할 수 있습니다.
     
    프로세스들은 자신만의 가상 메모리 체계를 가지고 있습니다.
    이를 Virtual Memory Address 라고 부르는데요.
    간단히 설명하자면, 프로세스는 실제 메모리의 주소를 알지 못합니다.
    대신 프로세스 별로 가상의 메모리 체계가 존재하여
    Virtual Memory Address <-> Physical Memory Address 의 변환을 거치게 됩니다.
    이렇게 함으로써 프로세스는 Physical Memory 상에서 흩어져 존재하는 여러 Page 들이 마치
    메모리 상에 연속되어 나열되어 있다고 생각하고 모든 메모리 용량을 전부 사용할 수 있다고 생각하게 됩니다.
    일종의 속임수입니다.
    이러한 환경에서 프로세스는 자신이 할당받은 메모리를 사용하게 되고, 다른 프로세스가 사용하는 메모리에 침범할 수 없습니다.
     
    Shared memory 는 프로세스 간의 메모리를 공유할 수 없는 제약 사항을 해결해주는 공유된 메모리 영역입니다.
    Shared memory 를 통해서 프로세스끼리 데이터 공유를 시도할 수 있게 됩니다.
     
     

    Shared memory 확인하는 법.

    아래 Shell 은 현재 컴퓨터에 설정된 Shared memory 의 크기를 확인하는 명령어입니다.
    (참고로 shm 은 Shared memory 의 약자입니다.)
    주목할 내용은 아래와 같습니다.
    - shmall
    - shmmax
    - shmmni
     
    shmmax 는 Shared memory 가 가질 수 있는 최대 메모리 사이즈입니다.
    shmall 은 현재 사용 중인 Shared memory 의 메모리 사이즈입니다.
    Shared memory 는 1개 이상의 Shared memory Region 으로 구성되는데요.
    사용되는 Shared memory Region 의 메모리 사이즈의 총합이 shmall 이 됩니다.
    이어서 shmmni 는 최대 Shared memory Region 갯수인데요.
    이렇게 shmmni 를 통해서 Shared memory Region 의 갯수 또한 제한됩니다.
     
    만약에 shmmax 이 1024 이고, shmall 이 1024 인 경우는 모든 Shared memory 를 다 사용 중임을 뜻합니다.
    참고로 결과값의 단위는 Byte 입니다.

    sysctl -a | grep shm.

     
    <실행 결과>

    kernel.shm_next_id = -1
    kernel.shm_rmid_forced = 0
    kernel.shmall = 18446744073692774399
    kernel.shmmax = 18446744073692774399
    kernel.shmmni = 4096
    vm.hugetlb_shm_group = 0

     
    여기서 Shared memory Region 은 Shared memory 를 구성하는 논리적인 단위입니다.
    ( Shared memory Region 는 아래 내용에서 추가적으로 설명을 이어가도록 하겠습니다. )

     

    Shared memory 란.

    이미 설명을 드렸듯이 Shared memory 는 모든 프로세스들이 공유하는 메모리 영역입니다.

    Shared memory 는 개별적인 Shared memory Region 들로 구성됩니다.

    Shared memory Region.

    Shared memory 는 여러 Shared memory Region 들로 구성됩니다.
    Shared memory Region 은 Shared memory Segment 라고도 표현되는데요.
    Region 또는 Segment 로 불립니다.

     

    Shared memory Region 은 기본적으로 만들어져 있진 않습니다.

    Shared memory Region 은 프로세스에 의해서 생성될 수 있고,

    프로세스 또한 Shared memory Region 을 명시적으로 생성해야합니다.

    즉, 컴퓨터가 실행되었다고 해서 OS 에 의해서 또는 기본적으로 만들어지진 않습니다.

    그리고 Shared memory Region 을 사용하는 모든 프로세스가 종료되어야만

    Shared memory Region 는 없어집니다.

     

    이러한 Shared memory Region 과 관련된 자원의 획득과 릴리즈 (Clean-UP) 는 프로세스에 의해서만 진행될 수 있습니다.

     

    Shared memory Identifier (shmid).

    Shared memory Region 은 식별값을 가집니다.
    서로 다른 프로세스들은 식별값을 통해 Shared memory Region 에 접근할 수 있는 구조입니다.

    그래서 Shared memory Region 을 공유해야하는 두 프로세스가 있다면,

    두 프로세스는 약속된 Shared memory Identifier 를 통해서 데이터를 공유합니다.
     

     

    반응형

    'System' 카테고리의 다른 글

    RPC (Remote Procedure Call) 알아보기  (0) 2023.10.14
    IPC Signal 알아보기  (0) 2023.10.07
    [memory management] page 알아보기  (0) 2023.09.22
    Call Stack 이해하기  (0) 2023.09.21
    리눅스 프로세스  (0) 2023.01.24
Designed by Tistory.