시스템 프로그래밍

7-2. Signaled & Non-Signaled

CalebHong 2022. 5. 17. 11:20

커널 오브젝트의 상태

 - 상태: 리소스의 현재 상황을 알리기 위함

 - 만약 자식 프로세스를 생성했다면 자식 프로세스의 커널 오브젝트의 상태 정보는 Non-Signaled로 초기화되며 실행중을 의미함

 - 실행이 종료되면 프로세스 커널 오브젝트는 Signaled 상태가 됨

 - 커널 오브젝트 상태를 통해서 핸들을 가진 프로세스가 그 상태를 알 수 있음

 

상태관찰 시나리오

 - 자식 프로세스의 커널오브젝 핸들의 값이 7이라면

 - 부모 프로세스는 자식 프로세스의 상태를 알기 위한 함수(WaitForSingleObject())에 매개변수로 핸들 값 7을 대입하면 자식 프로세스의 상태를  알 수 있음

 - 자식 프로세스가 Signaled 상태(종료된 상태)에는 WaitForSingleObject의 함수가 바로 반환되지만, Non-Signaled 상태(실행 중인 상태)에는 바로 반환되지 않고 Signaled 상태가 되면 반환하기에 부모 프로세스가 Blocking 상태가 됨

 - 즉 WaitForsingleObject 함수는 해당 프로세스가 Signaled 상태가 되기를 기다리는 함수

 

예제 모델

 - 부모 프로세스가 1~10의 합 계산을 자식 프로세스 A, B에게 나누어 계산을 요청

 - X 표시는 종료코드

 - 여기서 문제는 부모 프로세스가 자식 프로세스의 연산을 기다려야 한다는 것

 - 따라서 부모 프로세스는 자식 프로세스의 종료 상태를 기다릴 수 있어야 함

 ㄴ WaitForSingleObject 함수를 사용함으로 문제 해결이 가능

 - 멀티 프로세스를 이용하여 연산을 나누어 성능 향상이 가능