본문 바로가기
728x90

IT/데이터베이스_네트워크30

윤성우의 열혈 tcp/ip 소켓 프로그래밍 24장 연습문제 솔루션 문 제 1. a, b, e 문 제 2. a 문 제 3. IOCP와 epoll 모두 둘 이상의 소켓을 관리할 수 있는 서버 모델이다. 즉, 관찰의 대상이 되는 소켓들 중에서 IO와 관련된 이벤트가 발생한 소켓을 감지해서 관련된 IO를 처리하는 서버 모델이다. 그런데 웹 서버의 경우에는 둘 이상의 소켓을 계속해서 관리할 필요가 없다. 왜냐하면 한 단번의 요청 및 응답의 과정을 거치고 나면, 연결을 종료하기 때문이다. 따라서 IOCP와 epoll을 통한 추가적인 성능의 향상을 기대하는데 한계가 있다. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 23장 연습문제 솔루션 문 제 1. Completion Port 오브젝트에 할당될 쓰레드는 프로그래머에 의해서 생성되어야 한다. 그리고 이렇게 생성된 쓰레드는 Completion Port 오브젝트의 핸들을 전달받아서 GetQueuedCompletionStatus 함수를 호출함으로 인해서 Completion Port 오브젝트에 할당이 된다. 즉, Completion Port 오브젝트의 할당은 소스코드 레벨에서 보면 GetQueuedCompletionStatus 함수의 호출을 의미한다. 단, Completion Port 오브젝트를 생성할 때 지정한, CP 오브젝트에 할당할 최대 쓰레드의 수를 넘어서는 쓰레드가 이 함수를 호출하더라도 응답을 받는 쓰레드는 수는 Completion Port 오브젝트를 생성할 때 지정한 최대 쓰레드의 .. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 22장 연습문제 솔루션 답 안 1. Asynchronous(비동기) Notification IO 모델의 경우에는 IO 관련 이벤트의 발생을 알리는 과정이 비동기로 처리가 된다. 그러나 Overlapped IO 모델의 경우는 IO가 완료된 상황을 확인하는 과정이 비동기로 처리된다. 답 안 2. 비동기 IO는 IO가 완료된 상황을 확인하는 과정이 비동기로 처리됨을 의미한다. 그리고 이러한 유형으로 IO를 진행하기 위해서는 IO가 넌-블로킹 모드로 동작해야 하며, IO가 넌-블로킹 모드로 동작해서 비동기로 IO를 진행하게 되면, 이를 바탕으로 IO를 중첩시킨 형태인, Overlapped IO가 가능해진다. 답 안 3. WSARecv 함수호출 시에는 인자로 OVERLAPPED 구조체 변수의 주소 값을 전달하게 되어 있는데, 이 때 한.. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 21장 연습문제 솔루션 답 안 1. 동기 입출력이란 데이터의 송수신이 완료되는 시점이 호출된 함수가 반환을 하는 시점과 일치하는 입출력 방식을 말한다. 즉, send 함수가 반환을 하는 시점이 데이터의 전송이 완료되는 시점이고, recv 함수가 반환을 하는 시점이 데이터의 수신이 완료되는 시점이다. 그러나 비동기 입출력은 데이터의 송수신이 완료되는 시점과 상관없이 호출된 함수가 반환되는 입출력 방식이다. 동기 입출력의 단점은 입출력이 완료될 때까지 블로킹 상태에 놓인다는 점이다. 이 시간에는 사실 CPU의 연산이 거의 수반되지 않음에도 불구하고 블로킹 상태에 놓여서 다른 작업을 진행할 수 없게 된다. 이런 측면에서 볼 때 비동기 입출력은 CPU를 보다 효율적으로 사용하는 입출력 방식이라 할 수 있다. 답 안 2. 비동기 입출력.. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 20장 연습문제 솔루션 문 제 1. a, b, c, d 문 제 2. 유저모드 동기화는 커널모드로의 전환을 수반하지 않는다. 즉, 운영체제 레벨에서 제공되는 기능의 동기화가 아니다. ( o ) 커널모드 동기화는 운영체제를 통해서 제공되는 기능이므로, 유저모드 동기화에 비해서 많은 기능을 제공한다. ( o ) 커널모드 동기화 과정에서는 유저모드에서 커널모드로, 다시 커널모드에서 유저모드로의 전환과정이 수반된다는 단점이 있다. ( o ) 특별한 경우가 아니면 커널모드 동기화를 사용하는 것이 원칙이다. 유저모드 동기화는 커널모드 동기화가 제공되기 이전의 동기화 기법이다. ( x ) 문 제 3. scanf 함수의 호출과 같이 일정시간 이상 대기상태에 놓일 수 있는 함수의 호출은 가급적이면 임계영역에 포함시키지 말아야 한다. 따라서 예제.. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 19장 연습문제 솔루션 문 제 1. b, c, d 문 제 2. b, d 문 제 3. 윈도우의 쓰레드는 쓰레드가 처음 호출하는 쓰레드의 main 함수를 반환하게 되면, 메모리 공간에서 자동으로 소멸된다. 하지만 리눅스의 쓰레드는 pthread_join 함수 또는 pthread_detach 함수의 호출 과정을 별도로 거쳐야 메모리 공간에서 완전히 소멸된다. 문 제 4. 운영체제는 쓰레드를 생성하면, 생성된 쓰레드의 정보를 담기 위해서 커널 오브젝트를 생성한다. 그리고 이 커널 오브젝트의 구분자에 해당하는 핸들을 반환해 준다. 정리하면, 커널 오브젝트에는 쓰레드와 관련된 정보가 저장되고, 이러한 커널 오브젝트는 정수로 표현되는 핸들 값을 통해서 구분이 된다. 문 제 5.  커널 오브젝트는 signaled 상태와 non-signal.. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 18장 연습문제 솔루션 정 답 1. CPU의 실행시간을 프로세스가 고속으로 나누기 때문에 둘 이상의 프로세스가 동시에 실행 가능하다. 그리고 컨텍스트 스위칭이란, CPU에 의한 실행의 대상을 변경하는 과정에서 발생하는 준비과정으로써, 이전에 실행되던 프로세스의 데이터를 메모리 공간에서 내리고 이어서 실행될 프로세스의 데이터를 메모리 공간에 올리는 작업을 의미한다. 정 답 2. 쓰레드 각각의 고유 데이터는 프로세스 각각의 고유 데이터보다 크기가 작다. 때문에 컨텍스트 스위칭의 과정에서 올리고 내릴 데이터의 크기가 그만큼 작으며, 이로 인해서 프로세스의 컨텍스트 스위칭보다 속도가 빠르다. 또한 모든 쓰레드는 스택을 제외한 나머지 메모리 공간을 공유하기 때문에 IPC와 같은 별도의 통신 기법을 필요로 하지 않는다. 정 답 3. 프로.. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 16장, 17장 연습문제 솔루션 정 답 1. a, b, c, e 정 답 2. 옳지 않은 것 없음. 모두 옳음 정 답 1. select 함수호출 이후에 항상 등장하는, 모든 파일 디스크립터를 대상으로 하는 반복문 select 함수를 호출할 때마다 인자로 매번 전달해야 하는 관찰대상에 대한 정보들 정 답 2. select와 epoll은 파일 디스크립터, 정확히 말하면 소켓변화의 관찰이 요구되는 방식이다. 그런데 소켓은 운영체제에 의해 관리가 된다. 즉, select 방식과 epoll 방식은 절대적으로 운영체제에 의해 완성되는 함수이다. 때문에 관찰대상의 정보를 운영체제에게 전달해야 한다. 정 답 3. epoll은 select 방식과 달리 관찰의 대상이 되는 파일 디스크립터의 정보를 한번씩만 전달하면 된다. epoll 방식은 select 방.. 2021. 5. 24.
윤성우의 열혈 tcp/ip 소켓 프로그래밍 15장 연습문제 솔루션 답 안 1. 이식성이 좋아지고 버퍼링을 통한 성능의 향상에 도움이 된다. 표준 입출력 함수는 모든 운영체제에서 동작하는 함수들이기 때문에 이식성이 좋아진다. 그리고 표준 입출력 함수를 사용하면 소켓의 입출력 버퍼의 앞 단계에서 성능의 향상을 목적으로 하는 입출력 버퍼가 하나 더 추가되기 때문에 성능의 향상에도 도움이 된다. 답 안 2. 표준 출력함수를 통해서 전송되는 데이터는 바로 소켓의 출력버퍼로 이동하지 않고, 표준 출력함수의 버퍼에 저장된다. 그 다음에야 비로소 출력버퍼로 데이터가 이동을 한다. 따라서 fputs 함수가 호출된다고 해서 바로 데이터의 전송이 진행되는 것은 아니다. 만약에 함수호출 이후에 바로 이어서 데이터의 전송을 보장받고 싶다면 fflush 함수의 호출과정을 거쳐야 한다. 2021. 5. 23.
728x90