모든 내용은 [윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!
01. 멀티플렉싱 기술에 대한 일반적인 의미를 말하고, IO를 멀티플렉싱 한다는 것이 무엇을 의미하는지 설명해보자.
# 멀티플렉싱
- "하나의 통신채널을 통해서 둘 이상의 데이터(시그널)를 전송하는데 사용되는 기술"
- "물리적 장치의 효율성을 높이기 위해서 최소한의 물리적인 요소만 사용해서 최대한의 데이터를 전달하기 위해 사용되는 기술"
# IO 멀티플렉싱
IO를 필요로 하는 소켓을 하나로 묶어, 최소한의 리소스 및 프로세스를 이용해서 데이터를 송수신하는 기술
02. 멀티프로세스 기반의 동시접속 서버의 단점은 무엇이며, 이를 멀티플렉싱 서버에서 어떻게 보완하는지 설명해 보자.
# 멀티프로세스 기반의 동시접속 서버
- 클라이언트의 연결요청이 있을 떄마다 새로운 프로세스를 생성하였음
- 프로세스 생성에는 상당히 많은 대가를 지불함(많은 양의 연산이 요구되며, 필요한 메모리 공간도 비교적 큼)
- 프로세스마다 별도의 메모리 공간을 유지하기 때문에 상호간에 데이터를 주고받으려면 다소 복잡한 방법이 필요(IPC)
# 멀티플렉싱 기반의 동시접속 서버
- 소켓의 파일 디스크립터를 하나로 묶어 관리하여, 하나의 프로세스가 모두 처리하기 때문에 프로세스의 생성으로 인한 부담이 없음
03. 멀티플렉싱 기반의 서버 구현에서는 select 함수를 사용한다. 다음 중 select 함수의 사용방법에 대해서 설명한 것을 모두 고르면?
a. select 함수의 호출에 앞서 입출력의 관찰 대상이 되는 파일 디스크립터를 모으는 과정이 필요하다.
d. select 기반의 멀티플렉싱 서버는 멀티프로세스 기반의 서버와 달리 하나의 프로세스만 필요로 한다. 때문에 프로세스의 생성으로 인한 서버의 부담이 없다.
# 틀린 설명
b. select 함수의 호출을 통해서 한번 관찰의 대상으로 등록이 되면, 추가로 select 함수를 호출하면서 재 등록의 과정을 거칠 필요가 없다
=> select 함수호출이 끝나면 변화가 생긴 파일 디스크립터의 위치를 제외한 나머지 위치의 비트들은 0으로 초기화가 된다.(그래서 원본 fd_set의 복사본으로 select 함수를 호출하는 것임) 따라서 재등록이 필요하다.
c. 멀티플렉싱 서버는 한 순간에 하나의 클라이언트에게만 서비스가 가능하다. 때문에 서비스를 필요로 하는 클라이언트는 서버에 접속한 후 자신의 순서가 오기를 기다려야 한다.
=> 속도가 빠르기 때문에 대기시간이 필요없다.
04. select 함수의 관찰대상에 서버 소켓(리스닝 소켓)도 포함을 시켜야 한다. 그렇다면 어떤 부류에 포함을 시켜야 하며, 그 부류에 포함시키는 이유도 설명해보자.
- 서버 소켓(리스닝 소켓)은 '수신된 데이터의 존재여부'에 관심이 있는 파일 디스크립터의 부류로 포함시켜야 한다. 클라이언트의 서버로의 연결요청도 일종의 데이터 전송이고, 이를 서버가 연결요청을 수락하는 것도 일종의 데이터 수신이기 때문이다.
05. select 함수의 호출에 사용되는 자료형 fd_set의 정의형태는 윈도우와 리눅스에서 차이를 보인다. 그렇다면 어떻게 차이가 나는지 설명하고, 차이가 날수 밖에 없는 이유에 대해서도 설명해보자
- 리눅스의 fd_set는 비트 배열로 구성
- 윈도우의 fd_set는 저장된 소켓의 핸들 수를 담는 변수와 소켓의 핸들을 저장할 수 있는 배열을 가지고 있음
=> 리눅스의 파일 디스크립터는 0부터 시작해서 값이 하나씩 증가하는 구조를 지니지만, 윈도우 기반의 소켓 핸들은 어떠한 규칙성도 없기 때문이다.
[출처] : 윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어
'Programming > 열혈 TCP, IP 소켓 프로그래밍(저자 윤성우)' 카테고리의 다른 글
Ch 13. 내용 확인문제 (0) | 2020.08.09 |
---|---|
Ch 13. 다양한 입출력 함수들 (0) | 2020.08.09 |
Ch 12. IO 멀티플렉싱 (0) | 2020.08.09 |
Ch 11. 내용 확인문제 (0) | 2020.08.09 |
Ch 11. 프로세스간 통신(Inter Process Communication) (0) | 2020.08.09 |