OS 상에서 실행 중인 프로세스 간에 정보를 주고 받는 것을 프로세스 간 통신이라고 합니다.
프로세스는 할당된 메모리 내의 정보만 접근할 수 있고, 다른 곳에 접근 할 경우
Segmentation Fault 등의 오류가 발생하게 됩니다.
따라서 한 프로그램에서 병렬적으로 공유되는 데이터를 사용하기 위해
메모리 공간을 공유하는 스레드를 이용하는 경우가 많습니다.
하지만 다른 프로그램의 데이터를 공유하려면 다른 프로세스의 메모리에 접근해야합니다.
이때 IPC를 사용하게됩니다.
Message Queue
프로세스 간 정보를 주고 받는 통신(IPC)을 위해 사용하는 기술입니다.
메시지 큐는 Windows 시스템의 모든 스레드에 존재합니다.
이름 그대로 큐를 사용합니다. FIFO 방식으로 먼저 들어온 메시지를 먼저 수신합니다.
이때 메모리 공간을 이용하여 메시지를 전달합니다. 메시지, 패킷 단위로 동작하는 프로세스 간 통신 방법입니다.
예를 들면 사용자가 마우스를 움직이면 그 행동을 의미하는 메시지 'WM_MOUSEMOVE' 가 메시지 큐에 저장되며 프로그램은 메시지 루프를 통해 이에 대응하는 처리를 합니다.
즉, 메시지 큐가 사용자가 취한 행동을 이벤트로 해석하여 대응하는 처리를 수행 할 수 있게 합니다.
공유 메모리
메모리의 일정 부분을 공유 할 수 있게 바꿔주는 방법,
하나의 파일을 열고 메모리에 매핑하여 이 영역을 공유 가능하게 만들어주는 방법이 있습니다.
그렇게 여러 프로세스가 하나의 메모리 영역을 사용할 수 있게 됩니다.
장점으로 IPC 기법 중 처리 속도가 가장 빠릅니다. 다른 IPC 기법과 달리 메모리 자체를 공유하여
데이터 복사와 같은 overhead가 발생하지 않기 때문입니다.
단점은 같은 로컬 장치에서만 사용가능하며, 네트워크 사용이 불가능합니다.
또한 여러 프로세스가 같은 메모리를 사용하기 때문에 데이터가 불일치 할 경우 문제가 발생합니다.
세마포어(Semaphore)
프로세스간 메시지 전송을 하거나, 메모리 공유를 통해서 특정 데이터를 공유하게 될 때 공유된 자원에
여러 프로세스가 동시에 접근하면 안되기 때문에 상호배제를 구현할 때 사용하는 통신 기법입니다.
상호 배제 알고리즘에 기반해 작동합니다.
일반적으로 값이 0이라면 자원에 접근 할 수 없도록 하며
0보다 클 경우 접근 할 수 있습니다. 접근 할 때 1을 감소 시킵니다. 프로세스가 종료되고 퇴장할 때
세마포어의 값을 다시 1 증가시킵니다.
공부하며 필요한 부분을 기록하는 블로그입니다.
틀린 부분, 보완이 필요한 부분이 있다면 알려주시면 감사하겠습니다!
'CS' 카테고리의 다른 글
[Network/IP] IPv4, IPv6, 클래스. (2) | 2024.09.04 |
---|---|
[SW 설계] UI/UX, UI 설계 원칙, UI 품질 요구사항 (0) | 2024.08.26 |
[BCP 비즈니스 연속성 계획] RPO & RTO, 재해 복구 단계 (0) | 2024.08.19 |
암호화 알고리즘 : 대칭키 암호화 알고리즘 (0) | 2024.08.06 |
Network 기술 : 클라우드 컴퓨팅(Cloud Computing), 클라우드 스토리지(Cloud Storage) (0) | 2024.08.01 |