- IPC 기법이란, 컴퓨터 구조적으로 불가능한 커뮤니케이션 간의 소통을 가능하게 하는 일종의 우회방법이다.
- 다양한 IPC 기법이 존재하지만, 가장 많이 사용하고 있는 signal과 socket이 있다.
- 사실 signal과 socket은 IPC를 위해서 만들어진 기능은 아니지만, IPC가 가능하기에 많이 사용되고 있다.
- signal과 socket의 개념을 간단하게 알아보자.
1. Signal 기법이란?
- 유닉스에서 30년 이상 사용된 전통적인 기법
- 어떤 커널 또는 프로세스에서 다른 프로세스에게 어떤 이벤트가 발생되었는지를 알려주는 기법
- 프로세스 코드에 시그널 핸들러를 등록하여, 해당 시그널을 처리하는 방식으로 동작한다.
a) Signal 이란?
- 시그널은 운영체제에 기본적으로 정의되어 있는 이벤트다.
- 리눅스의 경우, 64개의 시그널이 존재한다.
b) 주요 Signal
- SIGKILL: 프로세스를 죽이는 명령어로 슈퍼관리자가 사용하는 시그널이다. 어떤 경우든 프로세스가 죽도록 되어있다.
- SIGALARM: 알람을 발생한다.
- SIGSTP: 프로세스를 멈춘다. (ctrl + z)
- SIGCONTL: 멈춘 프로세스를 재실행한다.
- SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽인다.(ctrl + c)
- SIGSEGV: 프로세스가 다른 메모리영역을 침범함을 알린다.
c) 어떻게 통신하는가?
- 프로세스 A에서 특정 이벤트(= 시그널)이 발생하면 프로세스 B에게 알리는 형태
- 그에따라 특정 명령어를 실행하도록 할 수 있다.
2. Signal 예제 코드
a) 시그널 핸들러 등록 및 구현
static void signal_handler (int signo) { // 시그널 핸들러 함수 정의
printf("Catch SIGINT! \n");
exit (EXIT_SUCCESS);
}
int main (void) {
if (signal (SIGINT, signal_handler) == SIG_ERR) { // SIGINT가 발생히면 핸들러를 실행해라
printf("Can't catch SIGINT! \n");
exit (EXIT_FAILURE);
}
for (;;)
pause();
return 0;
}
b) 시그널 핸들러 무시
int main (void) {
if (signal (SIGINT, SIG_IGN) == SIG_ERR) { // SIG_IGN = signal ignore
printf("Can't catch SIGINT! \n");
exit (EXIT_FAILURE);
}
for (;;)
pause();
return 0;
}
- 이 외에도 시그널 블록(정지, 멈춤) 등의 기능을 수행할 수 있으며, 위의 예시와 같이 시그널 핸들러를 정의하여 특정 시그널에 대한 특정 동작을 수행하도록 할 수 있다. 만약 등록된 시그널 핸들러가 없다면, 커널에서 정의된 기본 동작을 수행한다.
3. 시그널이 처리되는 과정
- 컴퓨터 구조에 대한 깊은 이해를 요구하는 부분이므로, 간단하게 알아보자.
- 시그널은 PCB에 의해 처리된다.
- PCB에서 해당 프로세스가 처리해야하는 시그널 관련 정보를 관리한다.
- PCB는 시그널을 처리하는 자료구조를 갖고 있다.
- 커널 영역이나 다른 프로세스에서 시그널이 넘어오면 위의 그림처럼, 시그널에 해당하는 자료구조를 이용하여 시그널을 처리한다.
a) 그래서 시그널은 어떻게 처리되는가?
- 프로세스를 실행하면 시스템콜, 스케줄링, 인터럽트 등에 의해 사용자 영역과 커널영역을 빈번하게 전환한다.
- 사용자 영역에서 커널영역으로 넘어가서 작업을 처리한 뒤, 다시 사용자 영역으로 넘어가기 직전에 해당 프로세스의 PCB를 확인하여 Signal이 있다면 해당 Signal을 처리한 후 사용자 영역으로 돌아가는 방식으로 동작한다.
- Signal 핸들러에 의해 특정 동작이 정의되어 있다면, 사용자 모드로 돌아가서 해당 동작을 실행하도록 한다.
4. Socket 이란?
- 소켓은 네트워크 통신을 위한 기술이다.
- 기본적으로 클라이언트와 서버로 나뉘어 컴퓨터간의 네트워크 통신을 가능하게 하는 기술이다.
- 소켓을 이용한 IPC를 간략하게 설명하자면, 네트워크 기기를 이용한 시스템 콜이라고 할 수 있다.
a) 어떻게 Socket을 IPC 기법으로 사용할 수 있는가?
- 소켓은 다른 컴퓨터와의 통신을 위한 기술이다.
- 그렇다면, 본인 스스로와 통신을 할 수 있지 않을까? 하나의 컴퓨터 내에서 서로 다른 프로세스간의 통신 말이다.
- 이와 같은 이유로 Socket을 IPC 기법으로 사용할 수 있다.
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
24. 스레드란? (thread 개념) (0) | 2021.04.29 |
---|---|
23. 코드를 통한 프로세스 실행과정의 이해 (0) | 2021.04.28 |
21. 프로세스 - IPC기법(공유메모리) (0) | 2021.04.26 |
20. 프로세스 - IPC 기법(메세지 큐) (0) | 2021.04.23 |
19. 프로세스 - IPC 기법(파일, 파이프) (0) | 2021.04.22 |
댓글