오늘은 간단히 리눅스에서의 시그널을 정리해보겠다.
시그널(Signal)은 커널이나 어떤 프로세스가 다른 프로세스에게
응급 처리를 요하는 비동기적(asynchronous)
신호를 보낼 때 사용하는 도구이다.
커널이나 프로세스로부터
어떤 프로세스에게 시그널이 보내지면 시그널을
수신하는 프로세스는 그 시점에서부터
user mode running이 일어나지 않고,
시그널에 대한 처리가 완료된 후에야
user mode running이 있을 수 있다.
위의 그림은 시그널 사용의 간단한 예이다.
임의의 프로세스 P1,P2와 이 두 프로세스들을 관리 하는 Manager 프로세스가 있다.
P1이 Manager에게 Signal을 날리면, Manager 프로세스에서 시그널을 수신하고, P2프로세스를 생성하는
간단한 시그널 사용의 예 이다.
시그널 처리에는 다음과 같은 원칙이 존재한다.
- 배달된 시그널은 수신 프로세스가 kernel mode에서 user mode로 돌아올 때 처리된다.
- 펜딩(pending)된 시그널 (처리되지 않은 signal)이 있을 때, user mode running은 없다.
시그널 사용 시 주의해야 할점.
pause 사용 시 pause 실행 이전에 시그널이 발생하면 시그널 처리기에 의해 정상적으로 대기에서 해제.
pause 실행 후 시그널이 발생하면 pause는 새로운 시그널을 기다림.
-> 해결 방법
시그널이 배달 되어도 이를 처리하지 않고 보류시키는 것이 필요.
sigprocmask를 통하여 signal을 블록 시킨다.(시그널을 블록시키면 pause 이전에 발생한 시그널이라 할지라도 처리가 보류)
그러나 pause를 실행할 때에는 당연히 signal blocking을 해제해야 한다.
이는 sigpause 함수를 통해 가능.
시그널(Signal)은 커널이나 어떤 프로세스가 다른 프로세스에게
응급 처리를 요하는 비동기적(asynchronous)
신호를 보낼 때 사용하는 도구이다.
커널이나 프로세스로부터
어떤 프로세스에게 시그널이 보내지면 시그널을
수신하는 프로세스는 그 시점에서부터
user mode running이 일어나지 않고,
시그널에 대한 처리가 완료된 후에야
user mode running이 있을 수 있다.
위의 그림은 시그널 사용의 간단한 예이다.
임의의 프로세스 P1,P2와 이 두 프로세스들을 관리 하는 Manager 프로세스가 있다.
P1이 Manager에게 Signal을 날리면, Manager 프로세스에서 시그널을 수신하고, P2프로세스를 생성하는
간단한 시그널 사용의 예 이다.
시그널 처리에는 다음과 같은 원칙이 존재한다.
- 배달된 시그널은 수신 프로세스가 kernel mode에서 user mode로 돌아올 때 처리된다.
- 펜딩(pending)된 시그널 (처리되지 않은 signal)이 있을 때, user mode running은 없다.
시그널 사용 시 주의해야 할점.
pause 사용 시 pause 실행 이전에 시그널이 발생하면 시그널 처리기에 의해 정상적으로 대기에서 해제.
pause 실행 후 시그널이 발생하면 pause는 새로운 시그널을 기다림.
-> 해결 방법
시그널이 배달 되어도 이를 처리하지 않고 보류시키는 것이 필요.
sigprocmask를 통하여 signal을 블록 시킨다.(시그널을 블록시키면 pause 이전에 발생한 시그널이라 할지라도 처리가 보류)
그러나 pause를 실행할 때에는 당연히 signal blocking을 해제해야 한다.
이는 sigpause 함수를 통해 가능.
'ComputerScience > OperatorSystem' 카테고리의 다른 글
Deadlock (교착상태)의 정의와 필요조건, 처리방법 (0) | 2010.12.08 |
---|