본문 바로가기

학교/시스템 프로그래밍

Signal

시스템에서 상호작용(interaction) 종류

1. 어셈 : 명령어 사이의 상호작용

2. 프로시저 호출 : 함수 사이의 상호작용

3. Linking : obj 파일간의 상호작용

4. Exception : OS와의 상호작용 (application -> OS)

5. signal : kernel과의 상호작용 (kernel -> application)

 

SIGNAL이란?

시스템에서 특정 유형의 이벤트가 발생했을 때, process에게 알려주는 신호(signal)

- Exception 및 interrupt와 유사

- kernel로 부터 받는 메시지

- 프로세스끼리 보낼 수 있음

- 시그널 유형은 integer 값으로 분류 (1~31)

- 시그널에서 유일한 정보는 시그널 유형과, 도착했다는 신호이다.

Send SIGNAL

커널은 목적지(destination) 프로세스에 SIGNAL을 보냄.

이 때, 해당 프로세스의 문맥(context)를 업데이트함.

 

Pending

SIGNAL은 send 됐으나, receive가 안 된 상태.

만약 k란 유형의 pending된 상태에서 다시 k 유형의 SIGNAL이 오면,

나중에 온 SIGNAL은 버린다. (저장할 부분이 없어서)

 

k유형의 SIGNAL이 보낼 때(delivered), k부분 비트를 set하고,

반대로 받을 땐(receive), k 부분 비트를 clear 한다.

 

Block

프로세스는 특정 signal 블락 가능.

Block된 signal을 receive 할 경우, 해제될 때 까지 receive하지 않음.

 

커널은 sigprocmask 기능을 이용해, bit를 set, clear 한다.

 

 

Receving SIGNAL

커널은 Exception Handler가 수행된 반환 값을 가지고, 프로세스 P에 보낸다 하자.

 

커널은 다음 연산을 실행한다.

pnb = pending & (∼blocked)

 

만약 pnb 가 0이라면, 프로세스 p는 다음 명령어를 수행하게 함.

만약 pnb 가 0이 아니라면, pnb가 0이 될 때 까지, signal을 수행한다.

 

 

 

 

 

 

 

'학교 > 시스템 프로그래밍' 카테고리의 다른 글

Control Flow  (0) 2020.12.11
PC, LR, SP  (0) 2020.11.17
LDR / STR Indexing  (0) 2020.11.17
section  (0) 2020.11.13
shift 연산자  (0) 2020.11.11