본문 바로가기

2021 정보처리기사/참고자료: 정보처리기사

IPC(Inter-Process Communication)란?

728x90
반응형

프로세스(Process)의 개요

👀
프로세스(Process)
는 프로그램이 구동될 때 주 메모리에 적재되며, 메모리 상에서 실행되는 작업의 단위를 말한다. 즉, 컴퓨터가 연속적으로 실행하고 있는 컴퓨터 프로그램을을 뜻하며 작업(Task)와 같은 의미로 쓰인다.

 

 

 

Windows 작업관리자의 모습

 

 

 

 

 

 


윈도우즈에서 Ctrl + Alt + Delete를 누르면 실행되는 작업관리자의 모습에서 현재 실행중인 프로세스들을 확인할 수 있다.

컴퓨터 시스템에서 프로그램은 혼자 독자적으로 수행될 수도 있고, 각자 독립적 메모리 공간을 지니고 다른 프로세스들에 의해 침범당하지 않도록 보호되고 있다.

따라서 프로세스는 원래 독립적이지만, 상황에 따라 프로세스끼리 협력해야 되는 경우가 발생한다. 이럴 때 프로세스간 자원과 데이터를 공유할 수 있어야 하는데, 서로간의 통신을 위해 별도의 매커니즘이 필요하고, IPC라는 설비를 이용해 프로세스간 통신을 할 수 있게 된다.

 

 

 

 

 

 

 

IPC 가 필요한 이유 (프로세스 간 통신이 필요한 이유)

✔ 정보 공유(Information Sharing):
여러 사용자가 동일한 정보에 엑세스 할 필요가 있을 수 있다.

가속화(Computation Speed-up):
특정 작업(task)을 여러 개의 서브 작업(sub-task)로 쪼개어
프로세스의 병렬성을 키움으로써 처리 속도를 높일 수 있다.
이 때 메인 작업과 서브 작업은 서로 통신의 필요성이 생긴다.

모듈화(Modularity):
특정한 시스템 기능을 별도의 프로세스(스레드)로 구분하여 모듈화된 시스템을 구성할 수 있다.
이 때 모듈간의 통신이 필요하다

편의성(Convenience):
다수의 사용자가 동시에 여러가지 작업을 수행할 수 있다.

 

 

 

IPC (Inter-Process Communication) 의 종류

IPC의 종류는 크게 메시지 전달(Message Passing), 공유 메모리(Shared Memory)로 나뉜다.

메시지 전달(Message Passing) 공유 메모리(Shared Memory)
커널을 통해 메시지를 전달하는 방식으로
자원이나 데이터를 주고 받음
공유 메모리 영역을 구축하고
공유영역을 통해 자원이나 데이터를 주고 받음
커널을 이용하기 때문에
구현이 비교적 쉬움
커널 의존도가 낮기 때문에
속도가 빠르고 통신이 자유로움
시스템 콜이 필요하며 이로 인해 오버헤드 발생 자원과 데이터를 공유하기 때문에 동기화 이슈 발생
Pipe, Signal, Message Queueing, Socket Semaphores

 

파이프(Pipe & Named Pipe)
- 'Pipe' 라고 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신을 수행한다.

- 하나의 프로세스가 파이프를 통해 다른 프로세스를 직접 전달하며 데이터는 한 쪽 방향으로만 이동한다.
- 하나의 프로세스가 'Pipe'를 이용중이라면 다른 프로세스는 접근할 수 없다.

 



시그널(Signal)
- 프로세스 ID를 통해 특정 프로세스에 메시지를 전달하는 방식

 



메시지 큐잉(Message Queueing)
- 메시지가 발생하면 고정 크기의 메시지를 연결리스트를 통해 프로세스 간 통신 수행
- 메시지 단위의 통신이며 메시지 큐 ID를 통해 통신

 



✔ 소켓(Socket)

- 네트워크 상에서 프로세스 간에 통신하는 방식
- 로컬 뿐 아니라 원격 통신도 가능

 

 

✔ 세마포어(Semaphore) - 관련글 링크
-
깃발이라는 뜻으로 옛날 기찻길에서 깃발 표식으로 파란색이 걸려 있으면 지나가도 되고,

빨간색이 걸려있으면 섰다가 다른 기차가 지나가고나면 지나가게끔 하는 용도로 사용되던 깃발을 의미한다.
세마포어는 공유되고 있는 자원의 개수를 의미하며 자원에 따라 0또는 1, 또는 n이 될 수 있다.

- 세마포어의 예시

세마포어는 공유자원의 개수를 나타내는 변수라고 할 수 있다.
서버에 프린터가 5대 물려있는 경우, 사용자가 프린터를 사용하기 위해 서버에 요청한다.

그럴 때 공유자원, 즉 프린터가 5개 있으므로 세마포어=5로 설정된다.
사용자가 프린터를 하나씩 사용할 때마다
공유자원의 개수가 하나씩 감소하고,
그러다 사용할 프린터가 더이상 남아있지 않으면 세마포어는 0이 되고
누군가 프린터를 다 쓰고 반환하면 다시 1이 증가한다.

사전적으로 "공유"가 아닌
공유자원에 대한 "접근 제어"를 통해 프로세스간 통신을 지원하는 방식이다.


 

 

 

 

 

 

728x90