7판

저자 : Silberschatz, Galvin, Gagne

저서 : 

옮김 : 조유근, 고 건, 김영찬, 박민규

펴낸 곳: 홍릉과학출판사, WILEY

초판 : 

쇄 : 

 

Part 2. 프로세스 관리(Process Management)

Chapter 4. 쓰레드(Thread)

4.4 쓰레드와 관련된 문제들(Threading Issues)

4.4.3 신호처리(Signal Handling)

 

- 신호의 전달 형태

 1) 신호는 특정 사건이 일어나야 생성된다.

 2) 신호가 생성되면 프로세스에게 전달된다.

 3) 신호가 전달되면 반드시 처리되어야 한다.

 

- 동기식 신호의 예 : 불법적인 메모리 접근, 0으로 나누기 등

 

- 동기식 신호는 신호를 발생시킨 연산을 수행한 동일한 프로세스에 전달된다.

 

- 신호가 실행 중인 프로세스 외부로부터 발생되면 그 프로세스는 신호를 비동기식으로 전달받는다.

 ex) crtl+c, 타이머 만료

 

- 비동기식 신호는 통상 다른 프로세스에게 전달된다.

 

- 모든 신호는 둘 중 하나의 처리기에 의해 처리

 1) 디폴트 신호 처리기

 2) 사용자 정의 신호 처리기

 

- 모든 신호마다 커널에 의해 실행되는 디폴트 신호 처리기가 있다.

 

- 디폴트 신호 처리기는 사용자 정의 신호 처리기에 의해 대체될 수 있다.

 

- 신호는 다른 방식으로 처리될 수 있다.

 

- 단일 쓰레드 프로그램의 신호는 항상 프로세스에 전달된다.

 

- 다중 쓰레드 프로그램의 신호의 전달

 1) 신호가 적용될 쓰레드에게 전달

 2) 모든 쓰레드에게 전달

 3) 몇몇 쓰레들에게만 선택적으로 전달

 4) 특정 쓰레드가 모든 신호를 전달받도록 지정

 

- 신호를 전달하는 방법은 신호 유형에 따라 다르다.

 1) 동기식 신호 : 신호를 야기한 쓰레드에게 전달

 2) 비동기식 신호 : 명확하지 않다

   ex) ctrl+c 는 모든 쓰레드에 전달해야 함

 

- 대부분의 다중 쓰레드 UNIX는 쓰레드가 신호를 전달받거나 봉쇄할 수 있는 선택권을 준다

 

- 경우에 따라 비동기식 신호를 받겠다고 지정한 쓰레드들에게만 신호를 전달한다.

 

- 신호는 오직 한 번만 처리되어야 함

 

- 신호를 받겠다고 선언한 쓰레드들 중 첫 번째 쓰레드에게만 신호가 전달

 

4.4.4 쓰레드 풀(Thread Pool)

 

- 다중 쓰레드 서버의 문제

 1) 서비스할 때마다 쓰레드를 생성하는 데 소요되는 시간

 2) 모든 요청마다 새 쓰레드를 만들어서 서비스해 준다면 시스템이 동시에 실행할 수 있는 최대 쓰레드 수가 몇 개까지 가능할 수 있는 것인지 한계를 정해야 한다.

    : CPU 시간, 메모리 공간 같은 시스템 자원 고갈

 

- 해결 방법 중 쓰레드 풀이 있다.

 1) 프로세스를 시작할 때 아예 일정한 수의 쓰레드들을 미리 풀로 만들어둔다

 2) 평소에는 일감 대기

 3) 한 개의 요청 -> 풀에서 한 개의 쓰레드 할당 -> 요청완료 -> 쓰레드 풀로 복귀

 4) 요청 시 풀의 쓰레드 모두 소진일 경우  생길 때 까지 대기

 

- 장점

 1) 속도

 2) 많은 수의 쓰레드를 병렬 처리할 수 없는 시스템에 도움

 

 

 

+ Recent posts