시그널 동작 매커니즘 01 사용법 이해

2021. 3. 10. 18:27Computer(인강)/시스템 프로그래밍

728x90
반응형

안녕하세요 bannavi입니다^ㅅ^

오늘은 시그널 동작 매커니즘의 첫번째, 사용법을 이해해보는 시간을 갖겠습니다

바로 시작하겠습니다

 

 

 

시그널(signal)

시그널은 운영체제에서 IPC기법 중의 하나로도 쓰일수도 있다고 말씀드렸었습니다.

하지만 IPC기법만으로 설명드리기엔 조금 아쉬운 부분도 있습니다.

 

1. 유닉스에서 30년 이상 사용된 전통적인 기법

2. 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지를 알려주는 기법

* ctrl + c를 눌러서프로세스 종료시키기(시그널 사용 예)

이기 때문입니다.

 

 

 

주요 시그널

- 시그널 종류와 각 시그널에 따른 기본 동작이 미리 정해져있음

- 내부적으로는 시그널 번호가 다 있을것

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라는 함수를 호출해라

 

 

 

그럼 시그널 시스템콜 예시 코드를 살펴보겠습니다

 

 

background 프로세스를 실행시키는 방법은 마지막에 & 표시 붙이기

 

 

 

 

시그널과 프로세스

1. PCB에 해당 프로세스가 블록 또는 처리해야하는 시그널 관련 정보 처리

2. 커널 모드에서 사용자모드 전환 시 시그널 정보를 확인해서 해당 처리

 

프로세스의 상태를 나타내는 PCB에는 

여러가지 시그널과 관련된 자료구조가 들어가있습니다.

1) pending : 해당 프로세스에 시그널이 전달이 되면, 수신 시그널의 순서를 이 자료구조에서 가지고 있게됩니다.

가장 먼저 받은 시그널을 찾아서 해당 시그널에 적절한 동작을 실행을 하겠죠?

2) sigpending : blocked된 시그널이 뭔지 관리하는 자료구조이다.

3) blocked : blocked라는 자료구조는 4비트의 간단한 데이터 구조를 가지고 있습니다. 비트가 1로 바뀐다는것은 블록되어있다(블록되어있다는 말은 일정 기간동안 이 시그널 처리를 막아두고 있다는 의미입니다.)

4) sig : 각각의 받은 시그널에 대해서 어떤 동작을 처리해야 되냐, 디폴트 동작이냐, 아님 프로그램 안에서 재정의된 동작이 있냐 이런것들을 관리하는 자료구조이다.

하나의 프로세스는 시스템콜을 처리하거나 인터럽트를 받거나 시스템자원 처리를 한다거나 스케쥴링 하거나

수시로 커널모드로 바뀜.

 

타이머 인터럽트의 경우 짧은 기간마다

타이머 인터럽트가 커널에 들어올것이고

그때마다 이 인터럽트를 처리하기 위해서 커널모드로 또 바뀔것.

 

사용자모드로 전환할때 마지막으로 하는 일 중 하나가 바로, PCB에 있는 시그널 관련된 자료구조의 상태를 확인하는 것입니다. 그래서 해당 시그널을 지금 실행해야겠다 라는 판단이 내려지면 

커널에 대한 이 시그널의 기본 동작들이 다 구현되어 있습니다.

해당 기본 동작을 실행을 하고 사용자 모드로 전환이 되는것이고요

만약에 시그널에 대한 코드가 재정의가 되어있다고 하면, 해당 재정의를 위한 함수를 실행하도록

프로그램 카운트를 그쪽으로, 함수로 이동시켜놓은 상태에서 사용자모드로 전환이 되게 되어있습니다.

그렇게 해서 막바로 재정의된 코드가 실행이 되는 것입니다.

 

이와 같은 방식으로 시그널이 프로세스와 커널모드와 관련을 지어서 실행이 됩니다.

 

728x90
반응형

'Computer(인강) > 시스템 프로그래밍' 카테고리의 다른 글

쉘스크립트 02 - 조건문  (0) 2021.03.11
쉘 스크립트 - 01 이해와 변수  (0) 2021.03.10
IPC기법 - 02 실습2  (0) 2021.03.10
IPC기법 실습 - 1  (0) 2021.03.09
프로세스 스케쥴링 관련(참고)  (0) 2021.03.09