책정리/열혈 TCP,IP 19

23장 IOCP(Input Output Completion Port)

Overlapped IO를 기반으로 IOCP 이해하기 논의가 한참인 epoll과 IOCP의 성능비교 select와 같은 전통적인 IO 모델의 한계극복을 목적으로 운영체제 레벨(커널 레벨)에서 성능을 향상시킨 IO 모델이 운영체제 별로 등장하였다. 그 중 대표적인 것이 리눅스의 epoll, BSD의 kqueue 그리고 윈도우의 IOCP이다. 이들의 공통적인 특성은 운영체제에 의해서 기능이 지원 및 완성된다는 것이다. 넌블로킹 모드의 소켓 구성하기 윈도우에서는 다음의 함수호출을 통해서 넌블로킹 모드로 소켓의 속성을 변경한다. SOCKET hListenSock; int mode = 11; .... hListenSock = WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_F..

22장 Overlapped IO 모델

Overlapped IO 모델의 이해 IO(입출력)의 중첩이란? 위 그림에서 보이듯이, 하나의 쓰레드 내에서 동시에 둘 이상의 데이털르 전송(또는 수신)함으로 인해 입출력이 중첩되는 상황을 가리켜 'IO의 중첩'이라 한다. 그리고 이러한 일이 가능하려면 호출된 입출력 함수가 바로 반환을 해야 한다. 그래야 두 번째, 세 번째 데이터 전송을 시도할 수 있기 때문이다. 결과적으로 위의 모델로 데이터를 송수신하는데 있어서 핵심이 되는 사항은 '비동기 IO'이다. 그리고 비동기 IO가 가능하려면 호출되는 입출력 함수는 넌블로킹 모드로 동작해야 한다. 이번 Chapter에서 말하는 Overlapped IO의 포커스는 IO에 있지 않습니다 윈도우에서 말하는 Overlapped IO의 포커스는 IO가 아닌 IO가 완..

21장 Asynchronous Notification IO모델

비동기(Asynchronous) Notification IO 모델의 이해 동기(Synchronous)와 비동기(Asynchronous)에 대한 이해 비동기란 '일치하지 않음'을 뜻하는데, 이러한 비동기의 상황은 데이터의 입출력 과정에서도 매우 유용하게 활용된다. 지금까지는 send, recv 함수를 통해 동기화된 입출력을 진행하였다. send 함수가 호출되면 데이터의 전송이 완료된 후에야 반환이 이뤄지고 recv 함수가 호출되면 원하는 만큼 데이터를 읽어 들인 후에야 반환이 이뤄지기 때문에 동기화된 입출력을 진행한 셈이다. "send 함수가 호출되는 순간부터 데이터의 전송이 시작되고, send 함수의 호출이 완료(반환)되는 순간 데이터의 전송이 완료된다" "recv 함수가 호출되는 순간부터 데이터의 수신..

20장 Windows에서의 쓰레드 동기화

동기화 기법의 분류와 CRITICAL_SECTION 동기화 유저모드(User mode)와 커널모드(Kernel mode) 윈도우 운영체제의 연산방식(프로그램 실행방식)을 가리켜 '이중모드 연산(Dual-mode Operation)'방식이라 한다. 이는 연산을 하는데 있어서 윈도우에 두 가지 모드가 존재함을 뜻한다. 유저모드응용프로그램이 실행되는 기본모드로, 물리적인 영역으로의 접근이 허용되지 않으며, 접근할 수 있는 메모리의 영역에도 제한이 따른다커널모드운영체제가 실행될 때의 모드로 메모리뿐만 아니라 하드웨어의 접근에도 제한이 따르지 않는다.커널은 운영체제의 핵심모듈을 의미하므로, 이를 다음과 같이 단순히 정의할 수도 있다. 유저모드응용프로그램의 실행모드커널모드운영체제의 실행모드응용프로그램의 실행과정에서..

19장 Windows에서의 쓰레드 사용

커널 오브젝트(Kernel Objects) 윈도우 기반에서 쓰레드를 이해하기 위해서는 '커널 오브젝트'를 먼저 이해해야 한다. 커널 오브젝트란 무엇인가? 프로세스, 쓰레드, 파일, 그리고 앞으로 이야기할 세마포어, 뮤텍스 등 운영체제가 만드는 리소스(Resource)의 종류는 다양하다. 그리고 이들 대부분은 프로그래머의 요청에 의해서 생성되며, 요청의 방식도 제 각각이다. 그런데 이러한 차이점에도 불구하고 이들은 다음의 공통점을 지닌다 "윈도우 운영체제가 생성해서 관리하는 리소스들이다." '관리'의 방식 역시 리소스의 종류에 따라서 차이가 있다. 예를 들어 파일이라면 파일과 관련된 데이터의 입출력 위치, 파일의 오픈 모드(read or write) 등이 등록 및 갱신 되어야 하며, 쓰레드라면 쓰레드의 I..

18장 멀티쓰레드 기반의 서버구현

쓰레드의 이론적 이해 쓰레드의 등장배경 멀티 프로세스 기반의 단점은 다음과 같다 프로세스 생성이라는 부담스러운 작업과정을 거친다 두 프로세스 사이에서의 데이터 교환을 위해서는 별도의 IPC 기법을 적용해야 한다. 컨텍스트 스위칭(Context Switching)에 따른 부담은 프로세스 생성방식의 가장 큰 부담이다 CPU가 하나인(CPU의 연산장치인 CORE) 시스템에서 둘 이상의 프로세스가 동시에 실행되려면 CPU의 할당시간을 매우 작은 크기로 쪼개서 서로 나누어 사용해야 한다. 그런데 CPU의 할당시간을 나누기 위해서는 '컨텍스트 스위칭'이라는 과정을 거쳐야 한다. 프로그램의 실행을 위해서는 해당 프로세스의 정보가 메인 메모리에 올라와야 한다. 때문에 현재 실행중인 A프로세스의 뒤를 이어서 B프로세스를..

12장 IO 멀티플렉싱(Multiplexing)

멀티플렉싱 기반의 서버 멀티프로세스 서버의 단점과 대안 이전 Chapter에서는 다중접속 서버의 구현을 위해 클라이언트의 연결요청이 있을 때마다 새로운 프로세스를 생성하였다. 이는 실제 사용되는 방법이지만 문제가 전혀 없는 방법은 아니다. 프로세스의 생성에는 상당히 많은 대가를 지불해야 하기 때문이다. 많은 양의 연산이 요구되며, 필요한 메모리 공간도 비교적 큰 편이다. 또한 프로세스마다 별도의 메모리 공간을 유지하기 때문에 상호간에 데이터를 주고받으려면 다소 복잡한 방법을 택할 수밖에 없다. 프로세스의 생성을 동반하지 않으면서 다수의 클라이언트에게 서비스를 제공할 수 있는 방법으로 IO멀티플렉싱 서버가 있다. 하지만 이 모델은 구현하고자 하는 서버의 특성에 따라서 구현방법이 달리 결정되어야 한다. 즉 ..

11장 프로세스간 통신(Inner Process Communication)

프로세스간 통신의 기본 개념 프로세스간 통신의 기본 이해 프로세스는 완전히 별개의 메모리 구조를 지닌다. 따라서 fork 함수 호출을 통해서 생성된 자식 프로세스 조차 부모 프로세스와 메모리 공간을 조금도 공유하지 않는다. 그래서 프로세스간 통신은 별도로 마련된 방법을 통해서만 이뤄질 수 있다. 파이프(PIPE) 기반의 프로세스간 통신 다음 그림은 프로세스간 통신의 방법으로 사용되는 파이프 기법의 구조적 모델을 보이고 있다. 위 그림에서 보이듯이 두 프로세스간 통신을 위해서는 파이프라는 것을 생성해야 한다. 이 파이프는 프로세스에 속하는 자원이 아니다. 이는 소켓과 마찬가지로 운영체제에 속하는 자원이다. 운영체제가 마련해 주는 메모리 공간을 통해서 두 프로세스는 통신을 하게 된다. #include int..

10장 멀티프로세스 기반의 서버 구현

프로세스의 이해와 활용 다중 접속 서버의 구현 방법들 네트워크 프로그램은 CPU의 연산을 필요치 않는 데이터의 송수신 시간이 큰 비중을 차지하므로, 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 것이 CPU를 보다 효율적으로 사용하는 방법이 된다. 때문에 우리는 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 다중접속 서버에 대해 논의하고자 한다. 다음은 대표적인 다중접속 서버의 구현 모델 및 구현 방법이다. 멀티 프로세스 기반 서버다수의 프로세스를 생성하는 방식으로 서비스 제공멀티플렉싱 기반 서버입출력 대상을 묶어서 관리하는 방식으로 서비스 제공멀티쓰레딩 기반 서버클라이언트의 수만큼 쓰레드를 생성하는 방식으로 서비스 제공프로세스(Process)의 이해 프로세스는 간단히 다음과 같이 정의할 수 있다..

9장 소켓의 다양한 옵션

소켓의 옵션과 입출력 버퍼의 크기 소켓의 다양한 옵션 Protocol LevelOption NameGetSetSOL_SOCKETSO_SNDBUF SO_RCVBUF SO_REUSEADDR SO_KEEPALIVE SO_BROADCAST SO_DONTROUTE SO_OOBILINE SO_ERROR SO_TYPEO O O O O O O O OO O O O O O O X XIPPROTO_IPIP_TOS IP_TTL IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_MULTICAST_IFO O O O OO O O O OIPPROTO_TCPTCP_KEEPALIVE TCP_NODELAY TCP_MAXSEGO O OO O O소켓의 옵션은 계층별로 분류된다. IPPROTO_IP 레벨의 옵션들은 IP프로토..