시스템에서 상호작용(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 |