728x90
- 12 IO 멀티플렉싱(Multiplexing)
- 12-1 IO멀티 플렉싱 기반의 서버
- 멀티프로세스 서버의 단점과 대안
- 이전 Chapter에서는 다중접속 서버의 구현을 위해서 클라이언트의 연결 요청이 있을 때마다 새로운 프로세스를 생성하였다. 이는 실제 사용되는 방법이지만 문제가 전혀 없는 방법은 아니다 프로세스의 생성에는 상당히 많은 대가를 지불해야 하기 때문이다. 많은 양의 연산이 요구되며 필요한 메모리 공간도 비교적 큰 편이다. 또한 프로세스마다 별도의 메모리 공간을 유지하기 때문에 상호간에 데이터를 주고받으려면 다소 복잡한 방법을 택할 수 밖에 없다(IPC는 다소 복잡한 통신방법이다) ᅟIPC가 필요한 상황에서는 프로그래밍하기가 상대적으로 까다로워진다는 것을 여러분도느끼지 않았는가?
- " 그렇다면 대안이 뭐 있나요? 프로세스의 생성을 동반하지 않으면서 다수의 클라이언트에게 서비스를 제공할 수 잇는 방법이요"
- 물론 있다. 이번에 설명하는 IO 멀티플렉싱 서버가 바로 그것이다. 어떤가 그런 방법이 있다고 하니 온몸에 전율이 느껴지지 않는가? 하지만이 모델만 너무 사랑하지는 말자 구현하고자 하는 서버의 특성에 따라서 구현방법은 달리 결정되어야하니 말이다. 즉 이 방법이모든 경우에 있어서 최선은 아니다. 자 그럼 우리의 이야기를 "멀티플렉싱(Multiplexing)"이라는 단어의 이해에서부터 시작해보자
- 멀티플렉싱이라 단어의 이해
- 멀티플렉싱의 뜻
- 하나의 통신 채널을 통해서 둘 이상의 데이터(시그널)를 전송하는데 사용되는 기술
- "물리적 장치의 효율성을 높이기 위해서 최소한의 물리적인 요소만 사용해서 최대한의 데이터를 전달하기위해 사용되는 기술"
[그림 12 -1 3자 대화를 위한 컵전화기 시스템]
- 위 그림은 멀리 떨어져 있는 3인이 동시에 통화할 수 있는 3자 통화를 위한 컵전화기 시스템이다 3인이 동시에 통화하기위해서 위그림과 같은 시스템이 갖춰져야 하는 이유는 모두 ᅟ알고있으리라 믿는다. 참고로(그래도 혹시 모르니) 이 시스템을이용해서 3인이 동시에 대화하기 위해서는 말할때도 두개의 컵을 입에 가까이 대야하고 들을때도 두개의 컵을 동시에 가져다 대야한다. 그러나 이 시스템에 다음과 같이 멀티플렉싱 기술을도입하면 통화하기가 매우 편리해진다.
- 우리는 초등학교때 위의 형태로도 컵전화기를 구성해본 경험이 있다(실을 중간에 엮어서 팽팽하게 만든다) 그리고 이렇게 시스템을구성하 불편하게 동시에 두 개의 컵을 가져다 댈 필요가 없다. 이렇듯 멀티 플렉싱은 초등학교때 배운 개념이다. 자 그럼멀티플렉싱의 도입결과로 얻게되는 장점을 정리해보자
- 멀티플렉싱의 장점 :
- 필요한 실의 길이가 줄었다.
- 필요한 컵의 개수가 줄었다.
- 의문 :
- 동시에 말하면 안될것 같은데요 ?
- 사실 대화를 하는 것이기때문에 동시에 말을 하는상황이 자주 등장하지는 않는다 즉 위의 시스템에는 "시(time)분할 멀티플렉싱 기술"이 적용되었다고 말할 수 잇따. 그리고 대화하는 대상의목소리 톤이(주파수가) 다르기 때문에 동시에 말을 하는 상황에서도 어느정도 목소리를 구분할 수 있다. 물론 노이즈는 조금 잡히겠지만 말이다. 때문에 위의 시스템에는"주파수(frequency)분할 멀티플렉싱 기술"도 적용되었다고 말할 수 있다. 이제 앞서 내린 멀티플렉싱의 정의가 이해될 것이다.
- 멀티 플렉싱의 개념을 서버에 적용하기
- 컵전화기 시스템에 멀티 플렉싱 기술을 도입해서 필요한 컵의 수와 실의 길이를 줄였듯 서버에 멀티플렉싱 기술을도입해서필요한 프로세스의 수를 줄일수 있다. 그럼 비교를 위해서 Chapter10에서 소개한 멀티프로세스기반의 서버모델을 먼저 확인하자.
- 위 모델에 멀티플렉싱 기술을 적용하면 다음과 같이 프로세스의 수가 줄어든다 여기서 중요한것은
접속해 있는 클라이언트의 수에 상관없이 서비스를 제공하는 프로세스의 수는 딱 하나라는 사실이다.
- 이제 멀티플렉싱 서버 모델에 대해서도 이해했으니 하나의 프로세스를 이용해서 둘 이상의 클라이언트에게 서비스를 제공하는 방법에 대해 고민할 차례ᅌᅵ다.
- 12- 2 select 함수의 이해와 서버의 구현
- select함수의 기능과 호출 순서
- select함수를 사용하면 한곳에 여러개의파일 디스크립터를 모아놓고 동시에 이들을 관찰할 수 있다.
- 이때 관찰할수 잇는 항목은 다음과 같다.
- 수신 데이터를 지니고 있는 소켓이 존재하는가?
- 블로킹되지 않고 데이터의 전송이 가능한 소켓은 무엇인까?
- 예외상황이 발생한 소켓은 무엇인가?
- 그런데 select함수는 사용방법에 있어서 일반적인 함수들과 많은차를 보인다. 보다 정확 표현하면 사용하기가 만만치 않다.
- 관찰항목 각을 가리켜 "이벤트(event)"라고 한다.
- 위에서 정리한 관찰항목 각각을 가리켜 이벤트라고 하고 관찰항목에 속하는상황이 발생했을 때 "이벤트(event)가 발생했다"라고 표현한다. 이는 매우 일반적인 표현이기 때문에 여러분도이표현에 익숙해질 필요가 있다. 참고로 이 Chapter에서는 이벤트라는 표현을 사용하지않지만 이 Chapter와 연관이 깊은 Chapter17에서는 이벤트라는 표현을 사용하니 이벤트가 무엇을 의미하는지 그리고이벤트의 발생이 무엇을 의미하는지 이해하고 있기 바란다.
- 위 그림은 select함수를 호출해서 결과를 얻기까지의 과정을 간략히 정리한것이다. 그림에서는select함수의 호출에 앞서 뭔가 준비가 필요하고 또 호출 이후에도 결과의 확인을 위한 별도의 과정이 존재함을 보이고 있다. 그럼 이제 하나씩 그림에서 보이는 순서대로 살펴보자
- 파일 디스크립터의 설정
- select함수를 사용하면 여러개의 파일 디스크립터를 동시에 관찰할 수 있다고 하였다. 물론 파일 디스크립터의 관찰은 소켓의 관찰로 해석할 수 있다. 그렇다면 먼저 관찰하고자 하는 파일 디스크립터를 모아야한다. 모을 때도 관찰항목(수신, 전송, 예외)에 따라서 구분해서모아야 한다. 즉 바로 위에서 언급한 세가지 관찰 항목별로 구분해서 세 묶음으로 모아야 한다.
- 파일 디스크립터를 세묶음으로 모을 때 사용되는 것이 fd_set형 변수이다. 이는 다음 그림에서 보이듯이 0과 1로 표현되는 비트단위로 이뤄진 배열이라고 생각하면된다.
- 위 그림의 배열에서 가장 왼쪽 비트는 파일 디스크립터 0을 나타낸다.(나타내는 위치이다) 이 비트가 1로 설정되면 해당 파일디스크립터가 관찰의 대상임을 의미한다. 그렇다면 위그림에서는 어떤 파일 디스크립터 관찰대상으로 지정되어 있는가? 파일 디스크립터 1과 3이 관찰대상으로 지정되어 있다.
- "그럼 파일 ᅟᅵ스크립터의 숫자를 확인해서 fd_Set형 변수에직접 값을 등록해야 하나요??"
- 물론 아니다! fd_set형 변수의 조작은 비트단위로 이뤄지기 때문에 직접 값을등록하는 일은 여간 번거로운 일이 아닌데 이를 여러분에게 요구하겠는가? fd_set형 변수에 값을 등록하거나 변경하는등의 작업은 다음 매크로 함수들의 도움을 통해서 이뤄진다.
- FD_ZERO(fd_Set * fdset) : 인자로 전달된 주소의fd_set형변수의 모든 비트를 0으로 초기화한다.
- FD_SET(int fd, fd_set *fdset) : 매개변수 fdset으로 전달된 주소의 변수에매개변수fd로 전달된파일 디스크립터 정보를 등록한다.
- FD_CLR(int fd, fd_set *fdset) : 매개변수 fdset으로 전달된 주소의 수에서 매개변수 fd로 전달된 파일 디스크립터정보를 삭제한다.
- FD_ISSET(int fd fd_Set *fdset) : 매개변수 fdset으로 전달된주소의 변수에 매개변수fd로 전달된 파일 디스크립터 정보가있으면 양수를 반환한다.
- 위의 함수들 중에서 FD_ISSET은 select함수의 호출결과를 확인하는 용도로사용된다. 그럼 간단히 위 함수들의 기능을 다음 그림을 통해서정리한다
728x90
'책 > 윤성우 TCPIP' 카테고리의 다른 글
12-02 select 함수의이해와 서버의 구현 (0) | 2020.12.29 |
---|---|
12-01 : IO 멀티플렉싱 기반의 서버(2) (0) | 2020.12.28 |
11-01 프로세스간 통신의 기본 개념 (3) ~ 11-02 프로세스간 통신의 적용 (0) | 2020.12.26 |
11-01 프로세스간 통신의 기본 개념 (2) (0) | 2020.12.25 |
11-01 프로세스간 통신의 기본 개념 (1) (0) | 2020.12.24 |