시그널(signal)
1. 유닉스에서 30년 이상 사용된 전통적인 기법
2. 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지를 알려주는 기법
→ ctrl + c : 프로세스 종료시키기(시그널 사용 예)
→ ctrl + z : 해당 프로세스가 백그라운드 프로세스로
미리 정의되어있는 시그널이 OS에서 해당 프로세스에 전달
주요 시그널
- 시그널 종류와 각 시그널에 따른 기본 동작이 미리 정해져있음
- 내부적으로는 시그널 번호가 다 있다.
1. SIGKILL: 프로세스를 죽여라
2. SIGALARM: 알람을 발생한다.
3. SIGSTP: 프로세스를 멈춰라(Ctrl + z)
4. SIGCONT: 멈춰진 프로세스를 실행해라
5. SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽여라(Ctrl + c)
6. SIGSEGV: 프로세스가 다른 메모리 영역을 침범했다.
→ 시그널 종류 : kill -l
시그널(signal) 동작
1. 프로그램에서 특정 시그널의 기본 동작 대신 다른 동작을 하도록 구현 가능
2. 각 프로세스에서 시그널 처리에 대해 다음과 같은 동작 설정 가능
1) 시그널 무시
2) 시그널 블록(블록을 푸는 순간, 해당 프로세스에서 시그널 처리)
3) 프로그램 안에 등록된 시그널 핸들러로 재정의한 특정 동작 수행
4) 등록된 시그널 핸들러가 없다면, 커널에서 기본 동작 수행
시그널 보내기
→ 해당 프로세스에 특정 시그널을 보낼때 이러한 시스템콜을 사용할 수 있다.
받은 시그널에 대한 동작 정의
SIGINT라는 시그널을 받으면 SIG_IGN 무시해라
SIGINT라는 시그널을 받으면 프로그램 안에서 정의한 signal_handler라는 함수를 호출해라
시그널과 프로세스
1. PCB에 해당 프로세스가 블록 또는 처리해야하는 시그널 관련 정보 처리
2. 커널 모드에서 사용자모드 전환 시 시그널 정보를 확인해서 해당 처리
프로세스의 상태를 나타내는 PCB에는 여러가지 시그널과 관련된 자료구조가 들어가 있다.
1. pending : 해당 프로세스에 전달이 되면 수신 시그널의 순서를 이 자료구조에서 가지고 있게 된다.
가장 먼저 받은 시그널을 찾아서 해당 시그널에 적절한 동작을 실행한다.
2. sigpending : blocked된 시그널이 뭔지 관리하는 자료구조이다.
3. blocked : 64비트에 간단한 데이터 구조를 가지고 있다. 비트가 1로 바뀐다는것은 블록되어있다.
(블록되어 있다는 것은 일정 기간동안 이 시그널 처리를 막아두고 있다는 의미)
4. sig : 각각의 받은 시그널에 대해서 어떤 동작을 처리해야 되는지 디폴트 동작인지 프로그램 안에서 재정의된 동작이 있는지 이런것들을 관리하는 자료구조이다.
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
'CS > 시스템 프로그래밍' 카테고리의 다른 글
스레드 (0) | 2022.03.03 |
---|---|
쉘 스크립트 (0) | 2022.03.03 |
IPC기법 (0) | 2022.03.03 |
프로세스 종료(exit) (0) | 2022.03.02 |
프로세스 생성(copy on write) (0) | 2022.03.02 |