[운영체제] IPC
in CS on Operating System, Cs, Ipc
프로세스 간 통신이란? (IPC)
프로세스는 완전히 독립된 실행 객체 입니다. 서로 독립되어 있다는 것은 다른 프로세스의 영향을 받지 않는다 는 장점이 있습니다.
하지만 서로 다른 프로세스간의 통신은 쉽지않고 별도의 방법이 필요합니다.
커널영역에서 IPC라는 내부 프로세스간 통신(Inter Process Communication)을 제공하게 되고, 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스간 통신을 할 수 있게 됩니다.
프로세스간의 통신이 필요한이유
상호간 협력적인 프로세스들이 존재하는 이유
- 정보 공유
- 계산 가속화
- 특정 태스크를 빨리 실행하고자 한다면 병렬로 실행해야된다!! 그러면 서로 데이터의 공유가 필요.
- 모듈성
- 시스템 기능을 별도의 프로세스들 또는 스레드로 나누어, 모듈식 형태로 시스템을 구성
- 편의성
- 병렬로 처리 가능
IPC 기법 2가지
- 공유메모리 (Shared memory)
- 메시지 전달(message passing)
공유메모리 시스템(shared memory)
특징
- 두개이상의 프로세스들이 주소공간의 일부를 공유하며, 공유한 메모리 영역에 읽기/쓰기를 통해 통신을 수행한다.
- 공유 메모리가 설정되면, 그 이후 통신은 커널의 관여 없이 진행 가능하다.
장점
커널의 관여 없이 메모리를 직접 사용하여 IPC 속도가 빠르다.
프로그램 레벨에서 통신 기능을 제공하여, 자유로운 통신이 가능하다.
단점
구현하기 어렵다.
컨텍스트 스위칭 관점
공유 메모리 모델에서의 IPC는 해당 프로세스가 CPU를 사용하는 행위이다.
IPC를 많이한다고 해서 컨텍스트 스위칭이 많이 일어나는건 아니다.
동기화 관점
메모리 영역에 대한 동시적인 접근을 제어하기 위한 방법이 필요하다.
커널이 동기화를 제공해 주는 것은 아니라서 부가적인 방법이 필요하긴 하다.
접근 제어방식은 locking 이나 세마포어 등이 있다.
프로세스 동기화
협력하는 프로세스 사이에서 실행 순서 규칙을 정하여 공유 자원의 일관성을 보장하는것.
버퍼
생산자 소비자 문제에 대한 하나의 해결책. 공유메모리 사용
생산자와 소비자 프로세스들이 병행으로 실행되도록 하려면, 생산자가 정보를 채워넣고 소비자가 소모할 수 있는 항목들의 버퍼가 반드시 사용가능 해야한다. 이 버퍼는 생산자와 소비자가 공유한는 메모리 영역에 존재하게 된다.
버퍼의 3가지 유형
1) Zero capacity - no buffering - 저장할 수 있는 메시지의 개수는 0개이다. - 송신자는 수신자가 메시지를 받을 때까지 대기(block)해야 한다.
2) 유한 버퍼(Bounded capacity) - automatic buffering - 저장할 수 있는 메시지의 개수는 n개이다. - 버퍼가 가득 차 있지 않을 때에는, 송신자는 메시지를 보내고 대기할 필요가 없다. - 버퍼가 가득 차 있는 경우라면, 송신자는 버퍼에 빈 공간이 생길 때까지 대기해야 한다.
3) 무한 버퍼(Unbounded capacity) - automatic buffering - 저장할 수 있는 메시지의 개수가 무한 개이다. - 버퍼가 가득 찰 일이 없기 때문에, 모든 경우에 송신자는 대기할 필요가 없다.
메시지 전달(message passing)
특징
- 커널을 경유하여 고정길이 메시지, 가변길이 메시지를 송/수신자끼리 주고받으며, 커널에서는 데이터를 버퍼링한다.
- 프로세스간 메모리 공유없이 동작이 가능하다.
장점
- 커널의 관여 없이 메모리를 직접 사용하여 IPC 속도가 빠르다. 프로그램 레벨에서 통신 기능을 제공하여, 자유로운 통신이 가능하다.
단점
- 커널을 경유하므로 속도가 느리다.
컨텍스트 스위칭 관점
메시지 전달 모델에서의 IPC는 해당 프로세스 입장에서 일종의 입출력(I/O)로 볼 수 있다.
IPC를 하면 할수록 컨텍스트 스위칭이 많이 일어난다.
동기화 관점
send와 receive와 같은 연산에 대해서는 커널이 동기화를 제공한다.
메시지 전달 모델 활용의 예
서버-클라이언트 방식의 통신
메시지 전달 모델의 구현 IPC
PIPE, Message Queue, Socket , Signal 등
Reference
https://jwprogramming.tistory.com/54
- https://talkingaboutme.tistory.com/entry/Process-Inter-Process-Communication-IPC
- http://blog.naver.com/PostView.nhn?blogId=bycho211&logNo=220985701140