프로세스간 통신

younk·2023년 9월 20일
0

IPC (Interprocess Communication)

독립적인 프로세스는 프로세스끼리 자원을 공유할 필요가 없기 때문에, CPU스케줄링을 잘해주면 프로세스간에 영향을 미치지 않는다.
하지만 프로세스간 협력이 필요한 경우엔 자원을 공유해야한다.

IPC란 프로세스들 사이에 서로 데이터를 주고받는 행위나 방법 또는 그 경로를 말한다. 각 프로세스는 자신의 독립적인 메모리 공간을 가지고, 그것을 보호하고 있기 때문에 통신을 위한 별도의 매커니즘이 필요하다.

프로세스간 협력이 필요한 이유

1) 정보 공유 : 여러 사용자가 동일한 정보를 필요로 함
2) 계산 가속화 : 특정 작업을 빠르게 실행하기 위해 해당작업을 서브 task로 나누어 병렬로 실행할 수 있음
3) 모듈성 : 특정한 시스템 기능을 별도의 프로세스로 구분하여 모듈식 형태로 시스템을 구성할 수 있음
4) 편의성 : 여러 사용자들이 동시에 많은 작업을 수행할 수 있음

운영체제가 지원하는 IPC 모델

1) Shared Memory(공유 메모리)

: 공유 메모리를 이용해 자원을 주고받는다. 커널 의존성이 낮기 때문에 속도가 빠르고, 유저레벨에서 사용 가능하기 때문에 통신이 자유롭다. 하지만 동일한 자원을 여러 프로세스가 바라보다보니, 동기화 이슈가 존재한다. 유효한 데이터를 잘 전달하기 위해선 동기화 기술이 필요하다.
프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리공간을 할당한다.

  • 공유 메모리 세그먼트 : 공유 메모리를 생성하는 프로세스 메모리 공간에 위치한다. 다른 프로세스는 자신의 주소에 연결

2) Kernel Massage Queue (커널 메세지큐)

: 메세지를 주고받는 방법이다. 커널을 통해 메세지를 전달하는 방식으로 자원을 주고받는다. 공유메모리처럼 무언갈 구축할 필요 없이 커널을 사용하기 때문에 구현이 쉽다. 하지만 커널을 사용하다보니 시스템콜이 필요하며, 이로인한 오버헤드가 발생할 수 있다. 큐는 버퍼의 역할을 하며 커널 레벨에 위치하기 때문에, 프로세스가 종료되어도 특정 함수를 사용하여 삭제하지 않는 한, 남아있다.

메세지 전달 방식은 프로세스가 직접 자원을 공유하지 않고 운영체제가 그 메커니즘을 제공한다.
커널은 send와 receive를 통해 channel 크기만큼의 메모리를 주고받는다.

3) file

하나의 프로세스가 파일을 쓰고 다른 프로세스에서 이를 읽는다.

4) pipe

통신을 위한 버퍼 메모리공간(버퍼)를 생성하여 프로세스가 데이터를 주고받을 수 있게한다. 이때 버퍼는 파일시스템에 생성되는 임시 공간이다
파이프의 특징으로는 입구와 출구가 없다는 점이 있다.
방향성이 없기 때문에, 두개의 프로세스가 통신할때는 읽기전용 파이프와 쓰기전용 파이프 총 두개를 쓰게 된다.


주로 파이프는 부모 프로세스와 자식 프로세스가 데이터를 교환할때 사용된다.
부모프로세스는 fork()를 통해 자식프로세스를 생성하며 파이프를 통해 데이터교환을 할 수 있다.

3) Semaphore (세마포어)

메세지 전달 모델과 공유메모리 모델은 한번에 하나의 프로세스만 해당 자원에 접근하다는 단점이 있다. 세마포어는 이를 극복하기 위한 통신방법이다.
세마포어는 상호배제 원리를 보장하는 알고리즘이다. 동기화 대상이 여러개일 경우에 주로 사용된다.

0개의 댓글