IPC 기법
파이프 (pipe)
- 기본 파이프는 단방향 통신
- fork() 로 자식 프로세스 만들었을 때, 부모와 자식간의 통신 가능
→ 부모 프로세스에서 fd[0]으로 read 할 수 없고 자식 프로세스에서 fd[1]으로 write 할 수 없다.
→ 자식에서 부모로 갈 수 없다.
→ 데이터는 커널 공간에 있다.

→ 파이프는 pipe(fd)
fd 인자를 정수 배열로 줬음 (fd[2] => fd[0], fd[1] 이 있는 상태)
fd 에 파이프가 정상적으로 생성되면 특정한 주소값을 2개 준다.
fork() 실행 : 프로세스 2개 생김. fd 주소값 변하지 않는다.
부모프로세스에서 데이터를 쓴다.(write), fd[1] 써야하고,
자식프로세스에서는read함수를 쓰고 ,fd[0] 쓰고 공란 buf 변수를 사용
→ 부모 프로세스의 msg 값이 buf 변수로 넘어옴 : 서로 통신이 됨. 부모 프로세스와 자식프로세스가 서로 다르므로
메시지 큐 ( message queue )
- 큐닌까 기본적으로 FIFO 정책으로 데이터 전송
- 양방향가능
파이프와 메시지 큐
- 메시지 큐는 부모/자식이 아니라 어느 프로세스간에라도 데이터 송수신이 가능
- 먼저 넣은 데이터가 먼저 읽힌다.(FIFO)
- 파이프는 부모/자식 프로세스간이어야 하지만 메시지 큐는 그렇지 않다.
- 파이프는 단방향 가능, 메시지 큐는 양방향 가능하다.
- 파이프와 메시지 큐는 커널 공간의 메모리는 사용한다.
공유 메모리 (shared memory)
- 노골적으로 커널 공간에 메모리 공간을 만들고 해당 공간을 변수처럼 쓰는 방식
- message queue 처럼 FIFO 방식이 아니라 해당 메모리 주소를 마치 변수처럼 접근하는 방식
- 공유 메모리 key를 가지고 여러 프로세스가 접근 가능
IPC 기법 이외에도 많이 사용되는 두가지 기술이 있는데 signal 과 socket 이다.
1. 시그널(signal)
- 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지 알려주는 기법
- 미리 정의가 되어있는 이벤트
주요 시그널 - 기본 동작
1. SIGKILL :프로세스를 죽여라(슈퍼 관리자가 사용하는 시그널로, 프로세스는 어떤 경우든 죽도록 되어있음)
2. SIGALARM: 알람을 발생한다
3. SIGSTP: 프로세스를 멈춰라(Ctrl + z)
4. SIGCONT: 멈춰진 프로세스를 실행해라
5. SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽여라(Ctrl + c)
6. SIGSEGV: 프로세스가 다른 메모리영역을 침범했다
- 프로세스 관련 코드에 관련 시그널 핸들러를 등록해서 해당 시그널 처리 실행
2. 소켓(socket)
- 네트워크 통신을 위한 기술
- 클라이언트와 서버등 두 개의 다른 컴퓨터간의 네트워크 기반 통신을 위한 기술
- 소켓을 하나의 컴퓨터 안에서 두 개의 프로세스간에 통신 기법으로 사용 가능
정리
1. 주요 IPC 기법
- pipe : 단방향 통신, 부모와 자식으로 이루어진 (fork로 생성된 관계) 관계에서만 통신된다.
- message queue : key 값을 가지고 메세지큐 여러개 만들 수 있음 양방향 으로 프로세스간 통신된다.
- shared memory : 커널공간에 메모리 공간을 만들고 해당 메모리 주소를 마치 변수처럼 접근 가능하다.
2. 모두 커널 공간을 활용해서 프로세스간 데이터를 공유한다
3. 다양한 IPC 기법을 활용해서 프로세스간 통신이 가능하다.
4. IPC 기법 이외에도 시그널(signal)이나 소켓(socket) 을 사용할 수 있다.
- pipe나 message queue, shared memory 기법들은 IPC를 위해 나온것이다.
- signal, socket은 IPC기법을 위해서 나온것은 아니지만 그 기능을 이용해서 IPC처럼 쓸 수 있다.
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 시청 후 정리한 내용입니다.