본문 바로가기

컴퓨터/Server21

패킷 여행 in TCP/IP 네트워크 스택 패킷 여행지금까지 네트워크 서버를 만드는 법을 열심히 설명했지만, 실제 컴퓨터 내부적으로 데이터가 어떻게 전송되고 수신되는지는 이야기하지 않았다. 우리가 WSASend나 WSARecv라고 별 생각없이 코딩을 치고 빌드해서 프로그램을 실행하면, 컴퓨터는 그 작업을 수행하기위해서 수많은 작업을 수행한다. 송/수신시 데이터는 추상적으로 구분된 여러 네트워크 레이어를 거쳐 정해진 형식을 갖춰가면서 네트워크 process를 지나간다. 이 레이어들은 크게 어플리케이션에서 관리하는 유저 영역, 그리고 운영체제가 다루는 File, Socket, TCP/IP, 이더넷의 커널 영역, 마지막으로 네트워크 디바이스인 NIC(Network Interface Card, LAN카드)로 구분할 수 있다. 이 과정을 상세히 알아보면서.. 2015. 4. 12.
PAGE_LOCKING PAGE_LOCKING완벽한 이벤트 통지모델처럼 보이는 IOCP에도 문제는 있다. 그중 하나가 바로 이번에 다룰 PAGE_LOCKING 문제이다.PAGE_LOCKING의 원인 WSARecv/Send를 사용할때 우리가 직접 비동기 프로세서인 커널이 사용할 버퍼(WSABuf)를 할당하여 인자로 넘겨준다. 사용자인 우리는 가상메모리 수준에서만 메모리를 활용하면 되지만, 커널인 운영체제의 입장에서는 하드웨어 수준 작업을(커널 버퍼를 거치지 않고 직접 버퍼에 매핑시키는 경우에만 발생한다는 이야기도 있다) 수행하고 있기 때문에 분명한 물리 메모리 영역을 지속적으로 다룰 수 있어야한다. 일반적인 가상메모리 영역은 물리 메모리 상황에 따라서 Page 전환이 발생하여 실제 물리메모리 역역에서 배제되거나 이동될 수 있다... 2015. 4. 12.
Reactor / Proactor 패턴 Event Handling PatternI/O 이벤트 통지방식의 기본을 배웠다. 좀더 깊은 이해를 위해 원론적인 부분을 생각할 시간이 필요하다. 이벤트 핸들링 패턴을 보면서 그 내용을 따라가 보자. 우선 이벤트 핸들링에는 몇 가지 주요 동작이 있다.이벤트 핸들링을 위한 객체들을 초기화(Intiate)하고,여러 통로에서 들어오는 이벤트들을 수신(recieve)하고,이벤트들을 대응할 객체별로 분할하고(demultiplex),개체에게 이벤트를 발송(dispatch)해서,그 개체가 이벤트에 걸맞는 작업을 수행(process events)한다.이 일련의 동작으로 동시다발적으로 들어오는 각각의 입력에 대해서 적절한 대응을 수행할 수 있다. 다양한 방법으로 이 추상적인 패턴을 구현하는 것이 가능하다.Reactor 패.. 2015. 4. 12.
windows IOCP 기초 IOCP 개념 싱글 쓰레드로는 부족해 이전 게시물까지 이야기 했던 통지모델들은 싱글쓰레드 멀티플렉싱을 위한 확장처럼 보였다. 하지만 싱글쓰레드 스마트폰도 보기 힘든 2015년 현재, 굳이 하이엔드 스펙을 갖춘 서버에서 싱글쓰레드를 써야할까? 이전 멀티쓰레드형 서버의 문제는 컨텍스트 스위칭 비용이었다. 하지만 CPU개수만큼만 쓰레드를 사용한다면, 컨텍스트 스위칭 문제는 크게 문제가 되지 않는다. 그러니까 우리는 딱 CPU개수만큼만 쓰레드를 쓰는 서버를 만들고 싶다. 이 막연한 희망사항에 긍정적으로 대답해주는 것이 바로 윈도우의 IOCP이다. 어떻게 구현할 것인가? 수많은 I/O 요청속에서 딱 CPU 개수만큼만 쓰레드를 사용하여 처리한다는게 말이 쉽지 땅파면 나오나? 어떻게 만들 것인가? 일단 생각나는 대로.. 2015. 4. 6.