본문 바로가기
Develop/Network

[윤성우의 열혈 TCP/IP 소켓 프로그래밍] Chapter19 - 내용 확인 문제 풀이

by Tarra 2023. 7. 2.

 

 

 

 

 [윤성우의 열혈 TCP / IP 소켓 프로그래밍] 책을 기반으로 개인적으로  문제 풀이 및 개념을 정리한 내용입니다.

모든 소스 코드와 강의, 확인 문제의 정확한 답안은 (23년 7월 1일부터 전면 무료화 예정)

http://www.orentec.co.kr/

 

====== 오렌지 미디어 ======

 

www.orentec.co.kr

에서 확인할 수 있습니다.

 

 


 

 

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

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

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

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

커널 오브젝트는 운영체제가 생성하며, 소유자는 일반적으로 운영체제 자체이다.

운영체제는 프로세스에 대한 권한을 부여하여 커널 오브젝트를 조작할 수 있도록 한다.

 

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

커널 오브젝트의 생성 및 관리는 주로 사용자 프로세스에 의해 이루어지지 않는다.

사용자 프로세스는 커널 오브젝트에 접근하고 조작할 수 있는 인터페이스(API)를 사용하여 커널 오브젝트와 상호작용할 수 있다.

하지만 실제로 커널 오브젝트의 생성 및 관리는 운영체제의 역할이고, 운영체제 내부에서 이루어진다.

 

d. 운영체제가 생성 및 관리하는 리소스의 종류에 상관없이 커널 오브젝트의 데이터 블록 구조는 완전히 동일하다.

운영체제가 생성 및 관리하는 리소스의 종류에 따라 커널 오브젝트의 데이터 블록 구조가 다를 수 있다.

커널 오브젝트는 각각의 리소스 타입에 따라 필요한 정보를 저장하고 구조화된 형태로 관리된다.

예를 들어 파일에 대한 커널 오브젝트와 프로세스에 대한 커널 오브젝트는 서로 다른 구조를 가질 수 있다.

 

정답 b, c, d

 

 

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

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

 

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

프로세스는 단일 쓰레드로 실행될 수 있고, 다중 쓰레드로 실행될 수도 있다.

따라서 쓰레드가 없는 프로세스도 존재할 수 있다.

 

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

멀티쓰레드 모델은 단일 프로세스 내에서 여러 개의 동시 실행 흐름인 쓰레드를 가지는 모델을 말한다.

이는 한 번에 여러 작업을 처리하거나 병렬로 실행해야 하는 경우 유용하다.

 

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

 

정답 b, c

 

 

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

 

더보기

모범 답안

윈도우의 쓰레드는 쓰레드가 처음 호출하는 쓰레드의 main 함수를 반환하게 되면, 메모리 공간에서 자동으로 소멸된다.

하지만 리눅스의 쓰레드는 pthread_join 함수 또는 pthread_detach 함수의 호출 과정을 별도로 거쳐야 메모리 공간에서 

완전히 소멸된다.

 

 

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

1. 쓰레드 생성

- 어떤 프로세스 내에서 쓰레드를 생성하려고 할 때, 해당 프로세스는 운영체제에게 새로운 쓰레드를 생성하도록 요청한다.

- 운영체제는 새로운 쓰레드를 생성하기 위해 커널 오브젝트를 생성한다. 이 커널 오브젝트는 쓰레드의 정보를 저장하고 관리하는 데이터 블록이다.

- 운영체제는 쓰레드에 대한 고유한 식별자인 핸들을 할당한다. 핸들은 쓰레드를 식별하고 제어하기 위해 사용된다.

 

2. 쓰레드 실행

- 쓰레드가 생성되고 나면, 해당 쓰레드는 자신의 실행 흐름을 따라 독립적으로 작업을 수행한다.

- 쓰레드는 커널 오브젝트의 정보를 참조하여 실행 상태를 유지하고 필요한 자원에 접근한다.

- 다른 쓰레드와는 독립적으로 실행되기 때문에, 동시에 여러 쓰레드가 실행될 수 있다.

 

3. 쓰레드 종료

- 쓰레드의 작업이 완료되거나, 명시적으로 쓰레드를 종료하는 요청이 있을 때, 쓰레드는 종료된다.

- 종료된 쓰레드는 커널 오브젝트에 대한 자원을 해제하고, 해당 쓰레드의 메모리 공간은 운영체제에 의해 자동으로 해제된다.

 - 쓰레드 종료 시 커널 오브젝트와 핸들은 더 이상 해당 쓰레드를 식별하고 제어하는 데 사용되지 않는다.

 

더보기

모범 답안

운영체제는 쓰레드를 생성하면, 생성된 쓰레드의 정보를 담기 위해서 커널 오브젝트를 생성한다.

그리고 이 커널 오브젝트의 구분자에 해당하는 핸들을 반환해준다.

정리하면, 커널 오브젝트에는 쓰레드와 관련된 정보가 저장되고,

이러한 커널 오브젝트는 정수로 표현되는 핸들 값을 통해서 구분이 된다.

 

 

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

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

 

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

커널 오브젝트의 상태를 변경하는 작업은 프로그래머가 직접 수행하는 것이 아니라, 운영체제의 커널이나 라이브러리 함수를 통해 이루어진다.

 

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

일반적으로 커널 오브젝트의 상태와 쓰레드의 실행 여부 사이에 직접적인 연관성은 없다.

 

 

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

'auto-reset 모드'와 'manual-reset 모드'는 커널 오브젝트의 동작 방식을 나타내는 용어이다.

주로 이벤트나 뮤텍스 등과 같은 동기화 기법에 적용된다.

 

- Auto-Reset 모드

Auto-Reset 모드에서는 커널 오브젝트가 signaled 상태가 되었을 때, 해당 커널 오브젝트를 기다리고 있는 하나의 쓰레드만이 신호를 받고 실행된다.

신호를 받은 쓰레드는 커널 오브젝트의 상태를 non-signaled로 자동으로 변경한다.

다른 쓰레드들은 해당 커널 오브젝트의 신호를 다시 받기 위해서는 커널 오브젝트가 다시 signaled 상태가 되어야 한다.

Auto-Reset 모드는 신호를 받은 하나의 쓰레드만이 작업을 처리하는데 적합하다.

 

- Manual-Reset 모드

Manual-Reset모드에서는 커널 오브젝트가 signaled 상태가 되었을 때, 해당 커널 오브젝트를 기다리고 있는 모든 쓰레드가 신호를 받고 실행된다.

신호를 받은 쓰레드들은 커널 오브젝트의 상태를 수동으로(non-signaled) 변경해주어야 한다.

이후에도 다른 쓰레드들은 커널 오브젝트의 신호를 받아 실행될 수 있다.

Manual-Reset 모드는 여러 쓰레드가 동시에 작업을 처리해야하는 경우 적합하다.

 

더보기

모범 답안

WaitForSingleObject 함수는 인자로 전달된 핸들의 커널 오브젝트가 signaled 상태가 되면 반환을 한다.

그런데 반환이 되면서 자동으로 non-signaled 상태가 되는 커널 오브젝트를 가리켜 'auto-reset 모드' 커널 오브젝트라 하고,

자동으로 non-signaled 상태가 되지 않는 커널 오브젝트를 가리켜 'manual-reset 모드' 커널 오브젝트라 한다.

 

 


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

https://cafe.naver.com/cstudyjava

 

윤성우의 프로그래밍 스터디그룹 [C/... : 네이버 카페

윤성우의 스터디 공간입니다. C와 JAVA를 공부하시는 분들은 모두 들어오세요. ^^

cafe.naver.com