<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8f1af3e9-a34c-4610-a687-83264d306bc2/concept.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8f1af3e9-a34c-4610-a687-83264d306bc2/concept.png" width="40px" /> IPC의 개념
</aside>
<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/562fde10-fc40-4d3a-bc42-f3b055019ec7/diversify.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/562fde10-fc40-4d3a-bc42-f3b055019ec7/diversify.png" width="40px" /> IPC의 종류
</aside>
시그널(Signal)
→ 시그널은 유닉스 시스템에서 프로세스간 통신을 하는 가장 오래된 방법 중의 하나이다.
→ 하나 이상의 프로세스들에게 비동기적인 이벤트를 알리기 위해 사용된다.
→ 시그널은 키보드 인터럽트로부터 발생되기도 하고, 프로세스가 존재하지 않는 가상 메모리 영역을 사용 하려 하는 경우 같은 에러 상황에서도 발생한다.
→ 시그널은 쉘이 자식 프로세스에게 작업 관리 명령을 보낼 때에도 사용된다.
파이프(Pipe)
→ ex) "$ ls -l | sort" 와 같은 경우 "ls -l"의 수행결과가 sort의 입력으로 인가될 때 파이프를 사용하는데, 이렇게 두 개의 프로세스 간의 서로 데이터를 주고 받을 수 있게 해준다.
→ 파이프는 2개의 프로세스들 간에 서로 정보를 주고 받을 수 있는 길을 만들어주는 것이다.
→ 다음과 같은 원리로 동작할 수 있다.
공유 메모리(Shared Memory)
→ 공유메모리는 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리로 과다한 복사를 피하거나 해당 프로그램 간 통신을 위해 고안되었다.
→ 프로세스에서 메모리는 해당 프로세스만이 사용하는게 일반적인데, 다른 프로세스에서 해당 메모리영역에 접근하여 데이터를 사용하도록 하는 것이 공유메모리라는 IPC기법이다.
-커널에 생성된 공유 메모리를 통해서 프로세스간 데이터를 공유하며 공유된 메모리 영역을 통해서 통신한다.(단순히 공유 메모리를 point함으로써 프로세스에서 사용되는 메모리가 증가되지는 않는다.)
<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e2c73be-b18a-4665-99b6-35d4c2c804ef/planning.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6e2c73be-b18a-4665-99b6-35d4c2c804ef/planning.png" width="40px" /> (번외) 프로세스와 쓰레드
</aside>
프로세스
Data: independent model
(프로세스 모델은 서로 독립적인 모델이라는 특징이 있음)
Pros: isolation, easy to debug
(한 프로세스가 죽더라도 다른 프로세스에 영향이 없으며 서로 독립적이기 때문에 디버깅하기도 쉽다.)
Cons: slow, need explicit IPC
(느리고 메모리도 많이 사용한다. 정보를 주고 받기 위해서는 IPC매커니즘이 필요하다.)
쓰레드
Data: shared model
(쓰레드 모델은 "data"영역을 공유한다. (text, data, heap, stack 영역 중 data영역을 공유))
Pros: fast and use less memory, sharing
(쓰레드 모델은 빠르고 메모리도 프로세스에 비해 적게 사용한다.)
(기본적으로 data영역을 sharing하기 때문에 한 쓰레드에서 data내용을 바꾸면 다른 쓰레드가 그 내용을 바로 볼 수 있다. 따라서 명시적인 IPC 매커니즘이 불필요하다.)
Cons: all threads are killed if a thread has a problem, hard to debug
(한쓰레드가 죽으면 연관된 모든 쓰레드들이 죽는다. 디버깅하기가 쉽지 않다.)
<aside> 📕 참고문헌
</aside>