1. 멀티플렉싱 기술에 대한 일반적인 의미를 말하고, IO를 멀티플렉싱 한다는 것이 무엇을 의미하는지 설명해보자.
>멀티플렉싱이란 최소한의 물리적인 요소만 사용해서 최대한의 데이터를 전송하는 기술이다. 마찬가지로 IO 멀티플렉싱이란 IO를 필요로 하는 소켓을 하나로 묶어서 최소한의 리소스 및 프로세스를 이용해서 데이터를 송수신하는 기술을 의미한다.
2. 멀티프로세스 기반의 동시접속 서버의 단점은 무엇이며, 이를 멀티플렉싱 서버에서 어떻게 보완하는지 설명해 보자.
>멀티프로세스 기반의 동시접속 서버는 클라이언트가 연결 요청을 할 때마다 추가로 프로세스를 생성해서 서비스를 하는 방식이다. 그런데 프로세스의 생성은 부담이 되는 작업이기 때문에 많은 수의 클라이언트에게 서비스를 제공하기에는 한계가 있다. 반면 멀티플렉싱 서버는 소켓은 파일 디스크립터를 하나로 묶어서 관리하는 방식으로, 하나의 프로세스가 이를 모두 처리하기 때문에 프로세스의 생성에 대한 부담은 없습니다.
3. 멀티플렉싱 기반의 서버 구현에서는 select 함수를 사용한다. 다음 중 select 함수의 사용방법에 대해서 설명한 것을 모두 고르면?
>a. select 함수의 호출에 앞서 입출력의 관찰 대상이 되는 파일 디스크립터를 모으는 과정이 필요하다.
d. select 기반의 멀티플렉싱 서버는 멀티프로세스 기반의 서버와 달리 하나의 프로세스만 필요로 한다. 때문에 프로세스의 생성으로 인한 서버의 부담이 없다.
*틀린 설명
b. select 함수의 호출을 통해서 한번 관찰의 대상으로 등록이 되면, 추가로 select 함수를 호출하면서 재 등록의 과정을 거칠 필요가 없다
-> select 함수호출이 끝나면 변화가 생긴 파일 디스크립터의 위치를 제외한 나머지 위치의 비트들은 0으로 초기화가 된다. 따라서 재등록이 필요하다.
c. 멀티플렉싱 서버는 한 순간에 하나의 클라이언트에게만 서비스가 가능하다. 때문에 서비스를 필요로 하는 클라이언트는 서버에 접속한 후 자신의 순서가 오기를 기다려야 한다.
->속도가 빨라 대기시간이 필요가 없다.
4. select 함수의 관찰대상에 서버 소켓(리스닝 소켓)도 포함을 시켜야 한다. 그렇다면 어떤 부류에 포함을 시켜야 하며, 그 부류에 포함시키는 이유도 설명해보자.
>서버 소켓(리스닝 소켓)은 '수신한 데이터가 존재하는가'에 관심이 있는 파일 디스크립터의 부류로 묶여야 한다. 왜냐하면 클라이언트의 연결요청도 일종의 데이터 전송이기 때문이다.
5. select 함수의 호출에 사용되는 자료형 fd_set의 정의형태는 윈도우와 리눅스에서 차이를 보인다. 그렇다면 어떻게 차이가 나는지 설명하고, 차이가 날수 밖에 없는 이유에 대해서도 설명해보자
>리눅스의 fd_set는 비트 배열로 구성되어 있는 반면, 윈도우의 fd_set는 소켓의 핸들을 저장할 수 있는 배열의 형태로 구성되어 있다. 리눅스의 파일 디스크립터는 0에서부터 시작해서 값이 하나씩 증가하는 구조를 가지고 있기 때문에, 생성된 파일 디스크립터의 수와 마지막으로 생성된 파일디스크립터의 수 사이에 어떠한 관계성을 찾아낼 수 있다. 그러나 윈도우 기반의 소켓 핸들은 0으로부터 시작하지 않을 뿐 아니라 핸들의 정수 값 사이에서도 규칙성을 찾아낼 수 없기 때문에 소켓의 핸들을 그대로 저장할 수 있는 배열이 필요하다.
[참고] TCP/IP 소켓 프로그래밍 윤성우 저
'C > TCPIP 소켓 프로그래밍(윤성우 저)' 카테고리의 다른 글
TCP/IP 소켓 프로그래밍 14장 내용 확인문제 (0) | 2017.07.01 |
---|---|
TCP/IP 소켓 프로그래밍 13장 내용 확인문제 (0) | 2017.06.24 |
TCP/IP 소켓 프로그래밍 11장 내용 확인문제 (0) | 2017.06.16 |
TCP/IP 소켓 프로그래밍 10장 내용 확인문제 (0) | 2017.06.15 |
TCP/IP 소켓 프로그래밍 1~5장 함수 복습 (0) | 2017.06.10 |