본문 바로가기
Programming/열혈 TCP, IP 소켓 프로그래밍(저자 윤성우)

Ch 19. 내용 확인문제

by minjunkim.dev 2020. 8. 14.

    모든 내용은 [윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!


01. 다음 중 커널 오브젝트에 대한 설명으로 옳지 않은 것을 모두 고르면?

 

b. 커널 오브젝트의 소유자는 해당 커널 오브젝트를 생성한 프로세스이다.

=> 커널 오브젝트를 생성한 것은 운영체제이며, 소유자도 운영체제이다.

 

c. 커널 오브젝트의 생성 및 관리는 사용자 프로세스에 의해서 이뤄진다.

=> 운영체제에 의해서 이뤄진다.

 

d. 운영체제가 생성 및 관리하는 리소스의 종류에 상관없이 커널 오브젝트의 데이터 블록 구조는 완전히 동일하다. => 리소스의 종류에 따라 저장할 정보가 다르기 때문에 구조는 다를 수 있다.

 

# 옳은 설명

 

a. 커널 오브젝트는 운영체제가 생성하는 리소스들의 정보를 저장해 놓은 데이터 블록이다.


02. 오늘날에는 대부분의 운영체제가 운영체제 레벨에서 쓰레드를 지원한다. 이러한 상황을 근거로 하여 다음 설명 중에서 옳지 않은 것을 모두 골라보자.

 

b. 프로세스가 쓰레드를 생성하지 않으면, 프로세스 내에는 쓰레드가 하나도 존재하지 않게 된다.

=> 별도로 쓰레드를 생성하지 않아도, "메인 쓰레드"는 존재한다. 

 

d. 단일쓰레드 모델이란? 프로세스 내에서 추가로 딱 하나의 쓰레드만 추가로 생성하는 프로그램의 유형을 의미한다. => 단일쓰레드 모델은 "쓰레드를 별도로 생성하지 않는 프로그램"을 의미한다.

 

# 옳은 설명

 

a. main 함수를 호출하는 것도 쓰레드이다.

 

c. 멀티쓰레드 모델이란? 프로세스 내에서 추가로 쓰레드를 생성하는 프로그램의 유형을 의미한다.


03. 윈도우의 쓰레드를 메모리 공간에서 완전히 소멸시키는 방법과 리눅스의 쓰레드를 메모리 공간에서 완전히 소멸시키는 방법의 차이점을 비교 설명해보자.

 

# 윈도우 쓰레드의 소멸시점

- 윈도우 쓰레드의 소멸시점은 쓰레드에 의해서 처음 호출된, 쓰레드의 main 함수가 반환하는 시점이다.

- 반면, 리눅스의 쓰레드는 쓰레드의 main 함수를 반환했다고 해서 자동으로 소멸하지 않는다.
쓰레드의 소멸을 직접적으로 명시해야만 하며,

그렇지 않으면 쓰레드에 의해 할당된 메모리 공간이 계속해서 남아있게 된다.

- 리눅스 쓰레드는 pthread_join() 또는 pthread_detach() 함수 호출을 통해,

쓰레드 소멸을 유도해야 한다.


04. 커널 오브젝트, 쓰레드, 그리고 핸들의 관계를 쓰레드가 생성되는 상황을 이용해서 설명해보자.

- 운영체제가 쓰레드를 생성하면서, 이에 대한 정보를 저장 및 관리하기 위해 커널 오브젝트를 생성한다. 동시에, 커널 오브젝트를 구분하기 위해 정수로 표현되는 핸들을 반환한다.


05. 커널 오브젝트와 관련된 다음 문장들 중에서 말하는 바가 옳으면 O, 틀리면 X를 표시하자.

 

- 커널 오브젝트는 signaled 상태와 non-signaled 상태 중 하나의 상태가 된다. O

 

- 커널 오브젝트가 signaled 상태가 되어야 하는 시점에 프로그래머는 직접 커널 오브젝트의 상태를 signaled 상태로 변경해야 한다. X

=> 운영체제는 프로세스나 쓰레드가 종료되면, 해당 커널 오브젝트를 signaled 상태로 변경해놓음.

 

- 쓰레드의 커널 오브젝트는 쓰레드가 실행 중일 때 signaled 상태에 있다가, 쓰레드가 종료되면 non-signaled 상태가 된다. X => 반대이다.


06. 'auto-reset 모드' 커널 오브젝트와 'manual-reset 모드' 커널 오브젝트에 대해서 설명하여라. 커널 오브젝트는 어떠한 특징적 차이로 둘 중 하나로 나뉘게 되는가?

 

- WaitForSingleObject 함수 호출 후 이벤트 발생에 의해서(signaled 상태가 되어서) 반환되었을 때, 해당 커널 오브젝트를 다시 non-signaled 상태로 자동으로 되돌리면 "auto-reset 모드", 그렇지 않으면 "manual-reset 모드"

 


 

[출처] : 윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어